@epic-web/workshop-app 4.5.0 → 4.6.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 (333) hide show
  1. package/bin/epicshop.js +3 -3
  2. package/build/client/assets/{_-CGn-2XfF.js → _-COWH0sBh.js} +2 -2
  3. package/build/client/assets/{_-CGn-2XfF.js.map → _-COWH0sBh.js.map} +1 -1
  4. package/build/client/assets/_exerciseNumber-rfzZiDNa.js +2 -0
  5. package/build/client/assets/_exerciseNumber-rfzZiDNa.js.map +1 -0
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-D00x64Vg.js → _exerciseNumber_._stepNumber-C37pli7_.js} +2 -2
  7. package/build/client/assets/_exerciseNumber_._stepNumber-C37pli7_.js.map +1 -0
  8. package/build/client/assets/_exerciseNumber_.finished-B7SgnqdS.js +2 -0
  9. package/build/client/assets/_exerciseNumber_.finished-B7SgnqdS.js.map +1 -0
  10. package/build/client/assets/_layout-BG1Jwh7V.js +2 -0
  11. package/build/client/assets/_layout-BG1Jwh7V.js.map +1 -0
  12. package/build/client/assets/{_layout-Caqk73Ed.js → _layout-CNgYirUN.js} +2 -2
  13. package/build/client/assets/_layout-CNgYirUN.js.map +1 -0
  14. package/build/client/assets/{_layout-MFX35ekR.js → _layout-D0zbQZjf.js} +2 -2
  15. package/build/client/assets/_layout-D0zbQZjf.js.map +1 -0
  16. package/build/client/assets/{account-Cp6A7SfU.js → account-DesvwOeg.js} +2 -2
  17. package/build/client/assets/{account-Cp6A7SfU.js.map → account-DesvwOeg.js.map} +1 -1
  18. package/build/client/assets/diff-BKsbFB6w.js +42 -0
  19. package/build/client/assets/diff-BKsbFB6w.js.map +1 -0
  20. package/build/client/assets/{diff-Ddyuc0-s.js → diff-KDzcgGYL.js} +2 -2
  21. package/build/client/assets/diff-KDzcgGYL.js.map +1 -0
  22. package/build/client/assets/{discord-DZWTKMPn.js → discord-0kv66Q6F.js} +2 -2
  23. package/build/client/assets/{discord-DZWTKMPn.js.map → discord-0kv66Q6F.js.map} +1 -1
  24. package/build/client/assets/discord-Xp0X4-Fl.js +2 -0
  25. package/build/client/assets/discord-Xp0X4-Fl.js.map +1 -0
  26. package/build/client/assets/epic-video-BwtXsHGU.js +2988 -0
  27. package/build/client/assets/epic-video-BwtXsHGU.js.map +1 -0
  28. package/build/client/assets/{error-boundary-BUV7xD2e.js → error-boundary-Bcric_4t.js} +2 -2
  29. package/build/client/assets/error-boundary-Bcric_4t.js.map +1 -0
  30. package/build/client/assets/finished-BI2-0Ykt.js +2 -0
  31. package/build/client/assets/finished-BI2-0Ykt.js.map +1 -0
  32. package/build/client/assets/{index-CVJowtf6.js → index-BQRtqn3g.js} +2 -2
  33. package/build/client/assets/index-BQRtqn3g.js.map +1 -0
  34. package/build/client/assets/index-Bg9MMnnf.js +2 -0
  35. package/build/client/assets/index-Bg9MMnnf.js.map +1 -0
  36. package/build/client/assets/{login-BCM4kJTm.js → login-D8zyjBAb.js} +2 -2
  37. package/build/client/assets/{login-BCM4kJTm.js.map → login-D8zyjBAb.js.map} +1 -1
  38. package/build/client/assets/manifest-c65c0481.js +1 -0
  39. package/build/client/assets/{mdx-BVZ4sNxQ.js → mdx-BYvGbvEr.js} +2 -2
  40. package/build/client/assets/mdx-BYvGbvEr.js.map +1 -0
  41. package/build/client/assets/{misc-DBBsMyAP.js → misc-DNgC2Frq.js} +2 -2
  42. package/build/client/assets/{misc-DBBsMyAP.js.map → misc-DNgC2Frq.js.map} +1 -1
  43. package/build/client/assets/{nav-chevrons-DnG58Hov.js → nav-chevrons-DOYtx9XE.js} +2 -2
  44. package/build/client/assets/{nav-chevrons-DnG58Hov.js.map → nav-chevrons-DOYtx9XE.js.map} +1 -1
  45. package/build/client/assets/og-l0sNRNKZ.js +2 -0
  46. package/build/client/assets/og-l0sNRNKZ.js.map +1 -0
  47. package/build/client/assets/{onboarding-oSo74A5L.js → onboarding-euWyXpCL.js} +2 -2
  48. package/build/client/assets/{onboarding-oSo74A5L.js.map → onboarding-euWyXpCL.js.map} +1 -1
  49. package/build/client/assets/presence-BJPzwbUy.js.map +1 -1
  50. package/build/client/assets/progress-CF9Xwfxf.js +2 -0
  51. package/build/client/assets/progress-CF9Xwfxf.js.map +1 -0
  52. package/build/client/assets/{progress-bar-TRgQ8YZ8.js → progress-bar-7LK87ZMh.js} +2 -2
  53. package/build/client/assets/progress-bar-7LK87ZMh.js.map +1 -0
  54. package/build/client/assets/{root-CxuwYUpK.js → root-BXq0yevS.js} +4 -4
  55. package/build/client/assets/root-BXq0yevS.js.map +1 -0
  56. package/build/client/assets/seo-CHrqghsC.js +2 -0
  57. package/build/client/assets/seo-CHrqghsC.js.map +1 -0
  58. package/build/client/assets/support-DUAHYT3r.js.map +1 -1
  59. package/build/client/assets/tooltip-Kw0lYWBI.js +2 -0
  60. package/build/client/assets/tooltip-Kw0lYWBI.js.map +1 -0
  61. package/build/client/img/epicweb-og-background.png +0 -0
  62. package/build/server/index.js +1816 -1472
  63. package/build/server/index.js.map +1 -1
  64. package/dist/server/index.js +0 -2
  65. package/node_modules/@babel/runtime/helpers/AwaitValue.js +2 -2
  66. package/node_modules/@babel/runtime/helpers/OverloadYield.js +2 -2
  67. package/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js +7 -22
  68. package/node_modules/@babel/runtime/helpers/applyDecs2311.js +9 -9
  69. package/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +4 -4
  70. package/node_modules/@babel/runtime/helpers/arrayWithHoles.js +2 -2
  71. package/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js +2 -2
  72. package/node_modules/@babel/runtime/helpers/assertThisInitialized.js +3 -5
  73. package/node_modules/@babel/runtime/helpers/asyncToGenerator.js +16 -21
  74. package/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js +2 -4
  75. package/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js +7 -15
  76. package/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js +2 -5
  77. package/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js +4 -8
  78. package/node_modules/@babel/runtime/helpers/classCallCheck.js +2 -4
  79. package/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js +2 -2
  80. package/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js +2 -4
  81. package/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js +2 -2
  82. package/node_modules/@babel/runtime/helpers/classNameTDZError.js +2 -2
  83. package/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js +3 -3
  84. package/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js +3 -3
  85. package/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js +2 -3
  86. package/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js +3 -5
  87. package/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js +2 -2
  88. package/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js +3 -4
  89. package/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js +2 -3
  90. package/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js +2 -3
  91. package/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js +2 -4
  92. package/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js +2 -4
  93. package/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js +2 -5
  94. package/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js +2 -3
  95. package/node_modules/@babel/runtime/helpers/construct.js +1 -1
  96. package/node_modules/@babel/runtime/helpers/createClass.js +8 -14
  97. package/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js +24 -27
  98. package/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js +11 -12
  99. package/node_modules/@babel/runtime/helpers/createSuper.js +10 -12
  100. package/node_modules/@babel/runtime/helpers/decorate.js +185 -278
  101. package/node_modules/@babel/runtime/helpers/defaults.js +6 -9
  102. package/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js +8 -16
  103. package/node_modules/@babel/runtime/helpers/defineProperty.js +7 -13
  104. package/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js +3 -2
  105. package/node_modules/@babel/runtime/helpers/esm/AwaitValue.js +4 -3
  106. package/node_modules/@babel/runtime/helpers/esm/OverloadYield.js +4 -3
  107. package/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js +9 -23
  108. package/node_modules/@babel/runtime/helpers/esm/applyDecs.js +3 -2
  109. package/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js +3 -2
  110. package/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js +3 -2
  111. package/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js +3 -2
  112. package/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js +3 -2
  113. package/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js +12 -11
  114. package/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +6 -5
  115. package/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +4 -3
  116. package/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +4 -3
  117. package/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js +3 -2
  118. package/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +5 -6
  119. package/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js +3 -2
  120. package/node_modules/@babel/runtime/helpers/esm/asyncIterator.js +3 -2
  121. package/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +18 -22
  122. package/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js +3 -2
  123. package/node_modules/@babel/runtime/helpers/esm/callSuper.js +3 -2
  124. package/node_modules/@babel/runtime/helpers/esm/checkInRHS.js +3 -2
  125. package/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js +4 -5
  126. package/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js +9 -16
  127. package/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js +4 -6
  128. package/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js +6 -9
  129. package/node_modules/@babel/runtime/helpers/esm/classCallCheck.js +4 -5
  130. package/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js +4 -3
  131. package/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js +4 -5
  132. package/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js +4 -3
  133. package/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js +4 -3
  134. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js +5 -4
  135. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js +5 -4
  136. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js +3 -2
  137. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js +4 -4
  138. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js +5 -6
  139. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js +4 -3
  140. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js +5 -5
  141. package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js +3 -2
  142. package/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js +3 -2
  143. package/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js +4 -4
  144. package/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js +4 -4
  145. package/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js +3 -2
  146. package/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js +3 -2
  147. package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js +4 -5
  148. package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js +4 -5
  149. package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js +4 -6
  150. package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js +4 -4
  151. package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js +3 -2
  152. package/node_modules/@babel/runtime/helpers/esm/construct.js +4 -3
  153. package/node_modules/@babel/runtime/helpers/esm/createClass.js +10 -15
  154. package/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js +26 -28
  155. package/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js +13 -13
  156. package/node_modules/@babel/runtime/helpers/esm/createSuper.js +12 -13
  157. package/node_modules/@babel/runtime/helpers/esm/decorate.js +187 -279
  158. package/node_modules/@babel/runtime/helpers/esm/defaults.js +8 -10
  159. package/node_modules/@babel/runtime/helpers/esm/defineAccessor.js +3 -2
  160. package/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js +10 -17
  161. package/node_modules/@babel/runtime/helpers/esm/defineProperty.js +9 -14
  162. package/node_modules/@babel/runtime/helpers/esm/dispose.js +3 -2
  163. package/node_modules/@babel/runtime/helpers/esm/extends.js +9 -13
  164. package/node_modules/@babel/runtime/helpers/esm/get.js +10 -16
  165. package/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js +6 -6
  166. package/node_modules/@babel/runtime/helpers/esm/identity.js +4 -3
  167. package/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js +3 -2
  168. package/node_modules/@babel/runtime/helpers/esm/inherits.js +11 -14
  169. package/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +4 -5
  170. package/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js +8 -8
  171. package/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js +4 -3
  172. package/node_modules/@babel/runtime/helpers/esm/instanceof.js +4 -7
  173. package/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js +5 -4
  174. package/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js +3 -2
  175. package/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js +6 -5
  176. package/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js +3 -2
  177. package/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +4 -3
  178. package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js +3 -2
  179. package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimitLoose.js +3 -2
  180. package/node_modules/@babel/runtime/helpers/esm/jsx.js +3 -2
  181. package/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js +7 -6
  182. package/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js +4 -5
  183. package/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +3 -2
  184. package/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +3 -2
  185. package/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js +3 -2
  186. package/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js +4 -3
  187. package/node_modules/@babel/runtime/helpers/esm/objectSpread.js +11 -13
  188. package/node_modules/@babel/runtime/helpers/esm/objectSpread2.js +3 -2
  189. package/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +10 -13
  190. package/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +9 -10
  191. package/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +6 -8
  192. package/node_modules/@babel/runtime/helpers/esm/readOnlyError.js +4 -3
  193. package/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js +3 -2
  194. package/node_modules/@babel/runtime/helpers/esm/set.js +19 -37
  195. package/node_modules/@babel/runtime/helpers/esm/setFunctionName.js +3 -2
  196. package/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +6 -7
  197. package/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js +5 -5
  198. package/node_modules/@babel/runtime/helpers/esm/slicedToArray.js +4 -3
  199. package/node_modules/@babel/runtime/helpers/esm/slicedToArrayLoose.js +4 -3
  200. package/node_modules/@babel/runtime/helpers/esm/superPropBase.js +5 -7
  201. package/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js +5 -7
  202. package/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js +4 -7
  203. package/node_modules/@babel/runtime/helpers/esm/tdz.js +4 -3
  204. package/node_modules/@babel/runtime/helpers/esm/temporalRef.js +6 -5
  205. package/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js +2 -1
  206. package/node_modules/@babel/runtime/helpers/esm/toArray.js +4 -3
  207. package/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +4 -3
  208. package/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +3 -2
  209. package/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +3 -2
  210. package/node_modules/@babel/runtime/helpers/esm/toSetter.js +3 -2
  211. package/node_modules/@babel/runtime/helpers/esm/typeof.js +3 -2
  212. package/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +8 -8
  213. package/node_modules/@babel/runtime/helpers/esm/using.js +3 -2
  214. package/node_modules/@babel/runtime/helpers/esm/usingCtx.js +3 -2
  215. package/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js +4 -3
  216. package/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js +17 -20
  217. package/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js +3 -2
  218. package/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js +4 -3
  219. package/node_modules/@babel/runtime/helpers/extends.js +6 -11
  220. package/node_modules/@babel/runtime/helpers/get.js +7 -14
  221. package/node_modules/@babel/runtime/helpers/getPrototypeOf.js +4 -5
  222. package/node_modules/@babel/runtime/helpers/identity.js +2 -2
  223. package/node_modules/@babel/runtime/helpers/inherits.js +9 -13
  224. package/node_modules/@babel/runtime/helpers/inheritsLoose.js +2 -4
  225. package/node_modules/@babel/runtime/helpers/initializerDefineProperty.js +6 -7
  226. package/node_modules/@babel/runtime/helpers/initializerWarningHelper.js +2 -2
  227. package/node_modules/@babel/runtime/helpers/instanceof.js +2 -6
  228. package/node_modules/@babel/runtime/helpers/interopRequireDefault.js +3 -3
  229. package/node_modules/@babel/runtime/helpers/isNativeFunction.js +4 -4
  230. package/node_modules/@babel/runtime/helpers/iterableToArray.js +2 -2
  231. package/node_modules/@babel/runtime/helpers/maybeArrayLike.js +5 -5
  232. package/node_modules/@babel/runtime/helpers/newArrowCheck.js +2 -4
  233. package/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js +2 -2
  234. package/node_modules/@babel/runtime/helpers/objectSpread.js +9 -12
  235. package/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +8 -12
  236. package/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +7 -9
  237. package/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js +4 -7
  238. package/node_modules/@babel/runtime/helpers/readOnlyError.js +2 -2
  239. package/node_modules/@babel/runtime/helpers/set.js +17 -36
  240. package/node_modules/@babel/runtime/helpers/setPrototypeOf.js +4 -6
  241. package/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js +3 -4
  242. package/node_modules/@babel/runtime/helpers/slicedToArray.js +2 -2
  243. package/node_modules/@babel/runtime/helpers/slicedToArrayLoose.js +2 -2
  244. package/node_modules/@babel/runtime/helpers/superPropBase.js +3 -6
  245. package/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js +3 -6
  246. package/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js +2 -6
  247. package/node_modules/@babel/runtime/helpers/tdz.js +2 -2
  248. package/node_modules/@babel/runtime/helpers/temporalRef.js +2 -2
  249. package/node_modules/@babel/runtime/helpers/toArray.js +2 -2
  250. package/node_modules/@babel/runtime/helpers/toConsumableArray.js +2 -2
  251. package/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +6 -7
  252. package/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js +2 -2
  253. package/node_modules/@babel/runtime/helpers/wrapNativeSuper.js +15 -19
  254. package/node_modules/@babel/runtime/helpers/writeOnlyError.js +2 -2
  255. package/node_modules/@babel/runtime/package.json +587 -587
  256. package/node_modules/@conform-to/dom/form.js +1 -1
  257. package/node_modules/@conform-to/dom/form.mjs +1 -1
  258. package/node_modules/@conform-to/dom/formdata.d.ts +2 -2
  259. package/node_modules/@conform-to/dom/formdata.js +12 -34
  260. package/node_modules/@conform-to/dom/formdata.mjs +12 -34
  261. package/node_modules/@conform-to/dom/intent.d.ts +82 -0
  262. package/node_modules/@conform-to/dom/intent.js +136 -0
  263. package/node_modules/@conform-to/dom/intent.mjs +126 -0
  264. package/node_modules/@conform-to/dom/package.json +58 -59
  265. package/node_modules/@conform-to/dom/parse.d.ts +30 -0
  266. package/node_modules/@conform-to/dom/parse.js +43 -0
  267. package/node_modules/@conform-to/dom/parse.mjs +37 -0
  268. package/node_modules/@conform-to/dom/submission.d.ts +2 -2
  269. package/node_modules/@conform-to/dom/submission.js +23 -21
  270. package/node_modules/@conform-to/dom/submission.mjs +23 -21
  271. package/node_modules/@conform-to/dom/types.d.ts +20 -0
  272. package/node_modules/@conform-to/react/helpers.js +1 -1
  273. package/node_modules/@conform-to/react/helpers.mjs +1 -1
  274. package/node_modules/@conform-to/react/package.json +68 -69
  275. package/node_modules/@conform-to/zod/package.json +60 -61
  276. package/node_modules/framer-motion/dist/cjs/{dom-entry-fJy-kji5.js → dom-entry-DSxBucW4.js} +115 -107
  277. package/node_modules/framer-motion/dist/cjs/dom-entry.js +1 -1
  278. package/node_modules/framer-motion/dist/cjs/index.js +43 -10
  279. package/node_modules/framer-motion/dist/dom-entry.d.ts +1 -1
  280. package/node_modules/framer-motion/dist/dom.js +1 -1
  281. package/node_modules/framer-motion/dist/es/animation/GroupPlaybackControls.mjs +2 -3
  282. package/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs +4 -1
  283. package/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs +2 -3
  284. package/node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs +7 -0
  285. package/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs +43 -9
  286. package/node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs +11 -8
  287. package/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs +1 -1
  288. package/node_modules/framer-motion/dist/es/value/index.mjs +1 -1
  289. package/node_modules/framer-motion/dist/framer-motion.dev.js +156 -116
  290. package/node_modules/framer-motion/dist/framer-motion.js +1 -1
  291. package/node_modules/framer-motion/dist/index.d.ts +2 -1
  292. package/node_modules/framer-motion/dist/projection.dev.js +163 -20
  293. package/node_modules/framer-motion/dist/three-entry.d.ts +1 -0
  294. package/node_modules/framer-motion/package.json +8 -8
  295. package/node_modules/remix-utils/node_modules/type-fest/package.json +1 -1
  296. package/node_modules/remix-utils/node_modules/type-fest/source/conditional-keys.d.ts +5 -3
  297. package/node_modules/tslib/package.json +1 -1
  298. package/node_modules/tslib/tslib.d.ts +1 -1
  299. package/node_modules/tslib/tslib.es6.js +7 -3
  300. package/node_modules/tslib/tslib.es6.mjs +10 -7
  301. package/node_modules/tslib/tslib.js +7 -4
  302. package/package.json +8 -6
  303. package/start.js +6 -4
  304. package/build/client/assets/_exerciseNumber-D6YNCQoj.js +0 -2
  305. package/build/client/assets/_exerciseNumber-D6YNCQoj.js.map +0 -1
  306. package/build/client/assets/_exerciseNumber_._stepNumber-D00x64Vg.js.map +0 -1
  307. package/build/client/assets/_exerciseNumber_.finished-DR3gQ1pK.js +0 -2
  308. package/build/client/assets/_exerciseNumber_.finished-DR3gQ1pK.js.map +0 -1
  309. package/build/client/assets/_layout-Caqk73Ed.js.map +0 -1
  310. package/build/client/assets/_layout-DXegGcTM.js +0 -2
  311. package/build/client/assets/_layout-DXegGcTM.js.map +0 -1
  312. package/build/client/assets/_layout-MFX35ekR.js.map +0 -1
  313. package/build/client/assets/diff-Ddyuc0-s.js.map +0 -1
  314. package/build/client/assets/diff-ZJmYghvh.js +0 -42
  315. package/build/client/assets/diff-ZJmYghvh.js.map +0 -1
  316. package/build/client/assets/discord-fsySDDKv.js +0 -2
  317. package/build/client/assets/discord-fsySDDKv.js.map +0 -1
  318. package/build/client/assets/epic-video-BKzHxm70.js +0 -2985
  319. package/build/client/assets/epic-video-BKzHxm70.js.map +0 -1
  320. package/build/client/assets/error-boundary-BUV7xD2e.js.map +0 -1
  321. package/build/client/assets/finished-gQ-B3k8j.js +0 -2
  322. package/build/client/assets/finished-gQ-B3k8j.js.map +0 -1
  323. package/build/client/assets/index-CVJowtf6.js.map +0 -1
  324. package/build/client/assets/index-Drecz7hr.js +0 -2
  325. package/build/client/assets/index-Drecz7hr.js.map +0 -1
  326. package/build/client/assets/manifest-0b01450d.js +0 -1
  327. package/build/client/assets/mdx-BVZ4sNxQ.js.map +0 -1
  328. package/build/client/assets/progress-HmjERaPh.js +0 -2
  329. package/build/client/assets/progress-HmjERaPh.js.map +0 -1
  330. package/build/client/assets/progress-bar-TRgQ8YZ8.js.map +0 -1
  331. package/build/client/assets/root-CxuwYUpK.js.map +0 -1
  332. package/build/client/assets/tooltip-BdTNdCYE.js +0 -2
  333. package/build/client/assets/tooltip-BdTNdCYE.js.map +0 -1
@@ -1365,6 +1365,7 @@ interface IProjectionNode<I = unknown> {
1365
1365
  setAnimationOrigin(delta: Delta): void;
1366
1366
  startAnimation(transition: Transition$1): void;
1367
1367
  finishAnimation(): void;
1368
+ hasCheckedOptimisedAppear: boolean;
1368
1369
  isLead(): boolean;
1369
1370
  promote(options?: {
1370
1371
  needsReset?: boolean;
@@ -4203,7 +4204,7 @@ declare class GroupPlaybackControls implements AnimationPlaybackControls {
4203
4204
  private runAll;
4204
4205
  play(): void;
4205
4206
  pause(): void;
4206
- stop(): void;
4207
+ stop: () => void;
4207
4208
  cancel(): void;
4208
4209
  complete(): void;
4209
4210
  }
@@ -1013,7 +1013,7 @@
1013
1013
  * This will be replaced by the build step with the latest version number.
1014
1014
  * When MotionValues are provided to motion components, warn if versions are mixed.
1015
1015
  */
1016
- this.version = "11.2.6";
1016
+ this.version = "11.2.9";
1017
1017
  /**
1018
1018
  * Tracks whether this value can output a velocity. Currently this is only true
1019
1019
  * if the value is numerical, but we might be able to widen the scope here and support
@@ -1309,6 +1309,21 @@
1309
1309
 
1310
1310
  const visualElementStore = new WeakMap();
1311
1311
 
1312
+ function observeTimeline(update, timeline) {
1313
+ let prevProgress;
1314
+ const onFrame = () => {
1315
+ const { currentTime } = timeline;
1316
+ const percentage = currentTime === null ? 0 : currentTime.value;
1317
+ const progress = percentage / 100;
1318
+ if (prevProgress !== progress) {
1319
+ update(progress);
1320
+ }
1321
+ prevProgress = progress;
1322
+ };
1323
+ frame.update(onFrame, true);
1324
+ return () => cancelFrame(onFrame);
1325
+ }
1326
+
1312
1327
  function memo(callback) {
1313
1328
  let result;
1314
1329
  return () => {
@@ -1318,6 +1333,84 @@
1318
1333
  };
1319
1334
  }
1320
1335
 
1336
+ const supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);
1337
+
1338
+ class GroupPlaybackControls {
1339
+ constructor(animations) {
1340
+ // Bound to accomodate common `return animation.stop` pattern
1341
+ this.stop = () => this.runAll("stop");
1342
+ this.animations = animations.filter(Boolean);
1343
+ }
1344
+ then(onResolve, onReject) {
1345
+ return Promise.all(this.animations).then(onResolve).catch(onReject);
1346
+ }
1347
+ /**
1348
+ * TODO: Filter out cancelled or stopped animations before returning
1349
+ */
1350
+ getAll(propName) {
1351
+ return this.animations[0][propName];
1352
+ }
1353
+ setAll(propName, newValue) {
1354
+ for (let i = 0; i < this.animations.length; i++) {
1355
+ this.animations[i][propName] = newValue;
1356
+ }
1357
+ }
1358
+ attachTimeline(timeline) {
1359
+ const cancelAll = this.animations.map((animation) => {
1360
+ if (supportsScrollTimeline() && animation.attachTimeline) {
1361
+ animation.attachTimeline(timeline);
1362
+ }
1363
+ else {
1364
+ animation.pause();
1365
+ return observeTimeline((progress) => {
1366
+ animation.time = animation.duration * progress;
1367
+ }, timeline);
1368
+ }
1369
+ });
1370
+ return () => {
1371
+ cancelAll.forEach((cancelTimeline, i) => {
1372
+ if (cancelTimeline)
1373
+ cancelTimeline();
1374
+ this.animations[i].stop();
1375
+ });
1376
+ };
1377
+ }
1378
+ get time() {
1379
+ return this.getAll("time");
1380
+ }
1381
+ set time(time) {
1382
+ this.setAll("time", time);
1383
+ }
1384
+ get speed() {
1385
+ return this.getAll("speed");
1386
+ }
1387
+ set speed(speed) {
1388
+ this.setAll("speed", speed);
1389
+ }
1390
+ get duration() {
1391
+ let max = 0;
1392
+ for (let i = 0; i < this.animations.length; i++) {
1393
+ max = Math.max(max, this.animations[i].duration);
1394
+ }
1395
+ return max;
1396
+ }
1397
+ runAll(methodName) {
1398
+ this.animations.forEach((controls) => controls[methodName]());
1399
+ }
1400
+ play() {
1401
+ this.runAll("play");
1402
+ }
1403
+ pause() {
1404
+ this.runAll("pause");
1405
+ }
1406
+ cancel() {
1407
+ this.runAll("cancel");
1408
+ }
1409
+ complete() {
1410
+ this.runAll("complete");
1411
+ }
1412
+ }
1413
+
1321
1414
  /**
1322
1415
  * Generate a list of every possible transform key.
1323
1416
  */
@@ -2110,14 +2203,17 @@
2110
2203
  * If any keyframe is a CSS variable, we need to find its value by sampling the element
2111
2204
  */
2112
2205
  for (let i = 0; i < unresolvedKeyframes.length; i++) {
2113
- const keyframe = unresolvedKeyframes[i];
2114
- if (typeof keyframe === "string" && isCSSVariableToken(keyframe)) {
2115
- const resolved = getVariableValue(keyframe, element.current);
2116
- if (resolved !== undefined) {
2117
- unresolvedKeyframes[i] = resolved;
2118
- }
2119
- if (i === unresolvedKeyframes.length - 1) {
2120
- this.finalKeyframe = keyframe;
2206
+ let keyframe = unresolvedKeyframes[i];
2207
+ if (typeof keyframe === "string") {
2208
+ keyframe = keyframe.trim();
2209
+ if (isCSSVariableToken(keyframe)) {
2210
+ const resolved = getVariableValue(keyframe, element.current);
2211
+ if (resolved !== undefined) {
2212
+ unresolvedKeyframes[i] = resolved;
2213
+ }
2214
+ if (i === unresolvedKeyframes.length - 1) {
2215
+ this.finalKeyframe = keyframe;
2216
+ }
2121
2217
  }
2122
2218
  }
2123
2219
  }
@@ -3882,7 +3978,9 @@
3882
3978
  options.onUpdate(finalKeyframe);
3883
3979
  options.onComplete();
3884
3980
  });
3885
- return;
3981
+ // We still want to return some animation controls here rather
3982
+ // than returning undefined
3983
+ return new GroupPlaybackControls([]);
3886
3984
  }
3887
3985
  }
3888
3986
  /**
@@ -3937,6 +4035,18 @@
3937
4035
  return definition;
3938
4036
  }
3939
4037
 
4038
+ /**
4039
+ * Convert camelCase to dash-case properties.
4040
+ */
4041
+ const camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, "$1-$2").toLowerCase();
4042
+
4043
+ const optimizedAppearDataId = "framerAppearId";
4044
+ const optimizedAppearDataAttribute = "data-" + camelToDash(optimizedAppearDataId);
4045
+
4046
+ function getOptimisedAppearId(visualElement) {
4047
+ return visualElement.getProps()[optimizedAppearDataAttribute];
4048
+ }
4049
+
3940
4050
  function isSVGElement(element) {
3941
4051
  return element instanceof SVGElement && element.tagName !== "svg";
3942
4052
  }
@@ -4042,7 +4152,7 @@
4042
4152
  * and warn against mismatches.
4043
4153
  */
4044
4154
  {
4045
- warnOnce(nextValue.version === "11.2.6", `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.6 may not work as expected.`);
4155
+ warnOnce(nextValue.version === "11.2.9", `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.9 may not work as expected.`);
4046
4156
  }
4047
4157
  }
4048
4158
  else if (isMotionValue(prevValue)) {
@@ -4904,6 +5014,25 @@
4904
5014
  }
4905
5015
  }
4906
5016
  }
5017
+ function isOptimisedAppearTree(projectionNode) {
5018
+ projectionNode.hasCheckedOptimisedAppear = true;
5019
+ if (projectionNode.root === projectionNode)
5020
+ return false;
5021
+ const { visualElement } = projectionNode.options;
5022
+ if (!visualElement) {
5023
+ return false;
5024
+ }
5025
+ else if (getOptimisedAppearId(visualElement)) {
5026
+ return true;
5027
+ }
5028
+ else if (projectionNode.parent &&
5029
+ !projectionNode.parent.hasCheckedOptimisedAppear) {
5030
+ return isOptimisedAppearTree(projectionNode.parent);
5031
+ }
5032
+ else {
5033
+ return false;
5034
+ }
5035
+ }
4907
5036
  function createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {
4908
5037
  return class ProjectionNode {
4909
5038
  constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {
@@ -4979,6 +5108,13 @@
4979
5108
  * Flags whether this node should have its transform reset prior to measuring.
4980
5109
  */
4981
5110
  this.shouldResetTransform = false;
5111
+ /**
5112
+ * Store whether this node has been checked for optimised appear animations. As
5113
+ * effects fire bottom-up, and we want to look up the tree for appear animations,
5114
+ * this makes sure we only check each path once, stopping at nodes that
5115
+ * have already been checked.
5116
+ */
5117
+ this.hasCheckedOptimisedAppear = false;
4982
5118
  /**
4983
5119
  * An object representing the calculated contextual/accumulated/tree scale.
4984
5120
  * This will be used to scale calculcated projection transforms, as these are
@@ -5184,15 +5320,6 @@
5184
5320
  if (this.isUpdateBlocked())
5185
5321
  return;
5186
5322
  this.isUpdating = true;
5187
- /**
5188
- * If we're running optimised appear animations then these must be
5189
- * cancelled before measuring the DOM. This is so we can measure
5190
- * the true layout of the element rather than the WAAPI animation
5191
- * which will be unaffected by the resetSkewAndRotate step.
5192
- */
5193
- if (window.HandoffCancelAllAnimations) {
5194
- window.HandoffCancelAllAnimations();
5195
- }
5196
5323
  this.nodes && this.nodes.forEach(resetSkewAndRotation);
5197
5324
  this.animationId++;
5198
5325
  }
@@ -5206,6 +5333,22 @@
5206
5333
  this.options.onExitComplete && this.options.onExitComplete();
5207
5334
  return;
5208
5335
  }
5336
+ /**
5337
+ * If we're running optimised appear animations then these must be
5338
+ * cancelled before measuring the DOM. This is so we can measure
5339
+ * the true layout of the element rather than the WAAPI animation
5340
+ * which will be unaffected by the resetSkewAndRotate step.
5341
+ *
5342
+ * Note: This is a DOM write. Worst case scenario is this is sandwiched
5343
+ * between other snapshot reads which will cause unnecessary style recalculations.
5344
+ * This has to happen here though, as we don't yet know which nodes will need
5345
+ * snapshots in startUpdate(), but we only want to cancel optimised animations
5346
+ * if a layout animation measurement is actually going to be affected by them.
5347
+ */
5348
+ if (window.HandoffCancelAllAnimations &&
5349
+ isOptimisedAppearTree(this)) {
5350
+ window.HandoffCancelAllAnimations();
5351
+ }
5209
5352
  !this.root.isUpdating && this.root.startUpdate();
5210
5353
  if (this.isLayoutDirty)
5211
5354
  return;
@@ -1081,6 +1081,7 @@ interface IProjectionNode<I = unknown> {
1081
1081
  setAnimationOrigin(delta: Delta): void;
1082
1082
  startAnimation(transition: Transition$1): void;
1083
1083
  finishAnimation(): void;
1084
+ hasCheckedOptimisedAppear: boolean;
1084
1085
  isLead(): boolean;
1085
1086
  promote(options?: {
1086
1087
  needsReset?: boolean;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "framer-motion",
3
- "version": "11.2.6",
3
+ "version": "11.2.9",
4
4
  "description": "A simple and powerful JavaScript animation library",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/es/index.mjs",
@@ -87,7 +87,7 @@
87
87
  "bundlesize": [
88
88
  {
89
89
  "path": "./dist/size-rollup-motion.js",
90
- "maxSize": "32.83 kB"
90
+ "maxSize": "33.3 kB"
91
91
  },
92
92
  {
93
93
  "path": "./dist/size-rollup-m.js",
@@ -95,15 +95,15 @@
95
95
  },
96
96
  {
97
97
  "path": "./dist/size-rollup-dom-animation.js",
98
- "maxSize": "16.6 kB"
98
+ "maxSize": "16.85 kB"
99
99
  },
100
100
  {
101
101
  "path": "./dist/size-rollup-dom-max.js",
102
- "maxSize": "28.2 kB"
102
+ "maxSize": "28.6 kB"
103
103
  },
104
104
  {
105
105
  "path": "./dist/size-rollup-animate.js",
106
- "maxSize": "17.83 kB"
106
+ "maxSize": "17.85 kB"
107
107
  },
108
108
  {
109
109
  "path": "./dist/size-webpack-m.js",
@@ -111,12 +111,12 @@
111
111
  },
112
112
  {
113
113
  "path": "./dist/size-webpack-dom-animation.js",
114
- "maxSize": "21.7 kB"
114
+ "maxSize": "21.9 kB"
115
115
  },
116
116
  {
117
117
  "path": "./dist/size-webpack-dom-max.js",
118
- "maxSize": "34.1 kB"
118
+ "maxSize": "34.6 kB"
119
119
  }
120
120
  ],
121
- "gitHead": "9f5a5da4d09fbc34889c19b0af4a04fb2b17a2e5"
121
+ "gitHead": "a58d3e7db0a52d3e1747924b1d09e895731e891e"
122
122
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "type-fest",
3
- "version": "4.18.2",
3
+ "version": "4.18.3",
4
4
  "description": "A collection of essential TypeScript types",
5
5
  "license": "(MIT OR CC0-1.0)",
6
6
  "repository": "sindresorhus/type-fest",
@@ -1,3 +1,5 @@
1
+ import type {IfNever} from './if-never';
2
+
1
3
  /**
2
4
  Extract the keys from a type where the value type of the key extends the given `Condition`.
3
5
 
@@ -36,10 +38,10 @@ export type ConditionalKeys<Base, Condition> =
36
38
  [Key in keyof Base]-?:
37
39
  // Pick only keys with types extending the given `Condition` type.
38
40
  Base[Key] extends Condition
39
- // Retain this key since the condition passes.
40
- ? Key
41
+ // Retain this key
42
+ // If the value for the key extends never, only include it if `Condition` also extends never
43
+ ? IfNever<Base[Key], IfNever<Condition, Key, never>, Key>
41
44
  // Discard this key since the condition fails.
42
45
  : never;
43
-
44
46
  // Convert the produced object into a union type of the keys which passed the conditional test.
45
47
  }[keyof Base];
@@ -2,7 +2,7 @@
2
2
  "name": "tslib",
3
3
  "author": "Microsoft Corp.",
4
4
  "homepage": "https://www.typescriptlang.org/",
5
- "version": "2.6.2",
5
+ "version": "2.6.3",
6
6
  "license": "0BSD",
7
7
  "description": "Runtime library for TypeScript helper functions",
8
8
  "keywords": [
@@ -123,7 +123,7 @@ export declare function __generator(thisArg: any, body: Function): any;
123
123
  * Creates bindings for all enumerable properties of `m` on `exports`
124
124
  *
125
125
  * @param m The source object
126
- * @param exports The `exports` object.
126
+ * @param o The `exports` object.
127
127
  */
128
128
  export declare function __exportStar(m: any, o: any): void;
129
129
 
@@ -228,8 +228,9 @@ export function __await(v) {
228
228
  export function __asyncGenerator(thisArg, _arguments, generator) {
229
229
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
230
230
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
231
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
232
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
231
+ return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
232
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
233
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
233
234
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
234
235
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
235
236
  function fulfill(value) { resume("next", value); }
@@ -295,7 +296,7 @@ export function __classPrivateFieldIn(state, receiver) {
295
296
  export function __addDisposableResource(env, value, async) {
296
297
  if (value !== null && value !== void 0) {
297
298
  if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
298
- var dispose;
299
+ var dispose, inner;
299
300
  if (async) {
300
301
  if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
301
302
  dispose = value[Symbol.asyncDispose];
@@ -303,14 +304,17 @@ export function __addDisposableResource(env, value, async) {
303
304
  if (dispose === void 0) {
304
305
  if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
305
306
  dispose = value[Symbol.dispose];
307
+ if (async) inner = dispose;
306
308
  }
307
309
  if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
310
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
308
311
  env.stack.push({ value: value, dispose: dispose, async: async });
309
312
  }
310
313
  else if (async) {
311
314
  env.stack.push({ async: true });
312
315
  }
313
316
  return value;
317
+
314
318
  }
315
319
 
316
320
  var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
@@ -228,8 +228,9 @@ export function __await(v) {
228
228
  export function __asyncGenerator(thisArg, _arguments, generator) {
229
229
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
230
230
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
231
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
232
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
231
+ return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
232
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
233
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
233
234
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
234
235
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
235
236
  function fulfill(value) { resume("next", value); }
@@ -295,16 +296,18 @@ export function __classPrivateFieldIn(state, receiver) {
295
296
  export function __addDisposableResource(env, value, async) {
296
297
  if (value !== null && value !== void 0) {
297
298
  if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
298
- var dispose;
299
+ var dispose, inner;
299
300
  if (async) {
300
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
301
- dispose = value[Symbol.asyncDispose];
301
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
302
+ dispose = value[Symbol.asyncDispose];
302
303
  }
303
304
  if (dispose === void 0) {
304
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
305
- dispose = value[Symbol.dispose];
305
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
306
+ dispose = value[Symbol.dispose];
307
+ if (async) inner = dispose;
306
308
  }
307
309
  if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
310
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
308
311
  env.stack.push({ value: value, dispose: dispose, async: async });
309
312
  }
310
313
  else if (async) {
@@ -276,10 +276,11 @@ var __disposeResources;
276
276
  __asyncGenerator = function (thisArg, _arguments, generator) {
277
277
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
278
278
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
279
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
280
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
279
+ return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
280
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
281
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
281
282
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
282
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
283
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
283
284
  function fulfill(value) { resume("next", value); }
284
285
  function reject(value) { resume("throw", value); }
285
286
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
@@ -343,7 +344,7 @@ var __disposeResources;
343
344
  __addDisposableResource = function (env, value, async) {
344
345
  if (value !== null && value !== void 0) {
345
346
  if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
346
- var dispose;
347
+ var dispose, inner;
347
348
  if (async) {
348
349
  if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
349
350
  dispose = value[Symbol.asyncDispose];
@@ -351,8 +352,10 @@ var __disposeResources;
351
352
  if (dispose === void 0) {
352
353
  if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
353
354
  dispose = value[Symbol.dispose];
355
+ if (async) inner = dispose;
354
356
  }
355
357
  if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
358
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
356
359
  env.stack.push({ value: value, dispose: dispose, async: async });
357
360
  }
358
361
  else if (async) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epic-web/workshop-app",
3
- "version": "4.5.0",
3
+ "version": "4.6.0",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -16,7 +16,9 @@
16
16
  ],
17
17
  "type": "module",
18
18
  "imports": {
19
- "#*": "./*"
19
+ "#app/*": "./app/*",
20
+ "#tests/*": "./tests/*",
21
+ "#build/*": "./build/*"
20
22
  },
21
23
  "exports": {
22
24
  "./start": {
@@ -42,8 +44,8 @@
42
44
  "@epic-web/invariant": "^1.0.0",
43
45
  "@epic-web/remember": "^1.0.2",
44
46
  "@epic-web/restore-scroll": "^1.1.1",
45
- "@epic-web/workshop-presence": "4.5.0",
46
- "@epic-web/workshop-utils": "4.5.0",
47
+ "@epic-web/workshop-presence": "4.6.0",
48
+ "@epic-web/workshop-utils": "4.6.0",
47
49
  "@mdx-js/mdx": "^3.0.1",
48
50
  "@mux/mux-player-react": "^2.6.0",
49
51
  "@paralleldrive/cuid2": "^2.2.2",
@@ -61,6 +63,7 @@
61
63
  "@sindresorhus/slugify": "^2.2.1",
62
64
  "@types/chai": "^4.3.16",
63
65
  "@types/chai-dom": "^1.11.3",
66
+ "@vercel/og": "^0.6.2",
64
67
  "address": "^2.0.2",
65
68
  "ansi-to-html": "^0.7.2",
66
69
  "chai": "^5.1.1",
@@ -127,7 +130,6 @@
127
130
  "@total-typescript/ts-reset": "^0.5.1",
128
131
  "@types/compression": "^1.7.5",
129
132
  "@types/cross-spawn": "^6.0.6",
130
- "@types/eslint": "^8.56.10",
131
133
  "@types/etag": "^1.8.3",
132
134
  "@types/express": "^4.17.21",
133
135
  "@types/fs-extra": "^11.0.4",
@@ -145,7 +147,7 @@
145
147
  "@types/wait-on": "^5.3.4",
146
148
  "@types/ws": "^8.5.10",
147
149
  "autoprefixer": "^10.4.19",
148
- "eslint": "^8.57.0",
150
+ "eslint": "^9.3.0",
149
151
  "mdast-util-mdx-jsx": "^3.1.2",
150
152
  "npm-run-all": "^4.1.5",
151
153
  "prettier": "^3.2.5",
package/start.js CHANGED
@@ -15,8 +15,10 @@ try {
15
15
  'utf8',
16
16
  ),
17
17
  )
18
- } catch (error) {
19
- throw new Error(`Could not find package.json at ${EPICSHOP_CONTEXT_CWD}`)
18
+ } catch {
19
+ throw new Error(
20
+ `Could not find and parse package.json at ${EPICSHOP_CONTEXT_CWD}`,
21
+ )
20
22
  }
21
23
 
22
24
  if (packageJson.epicshop.githubRoot) {
@@ -28,13 +30,13 @@ if (packageJson.epicshop.githubRoot) {
28
30
  }
29
31
 
30
32
  if (process.env.NODE_ENV === 'production') {
31
- await import('./dist/server/index.js').catch(err => {
33
+ await import('./dist/server/index.js').catch((err) => {
32
34
  console.error('Encountered error importing the server, exiting...')
33
35
  console.error(err)
34
36
  process.exit(1)
35
37
  })
36
38
  } else {
37
- await import('./server/index.ts').catch(err => {
39
+ await import('./server/index.ts').catch((err) => {
38
40
  console.error('Encountered error importing the server, exiting...')
39
41
  console.error(err)
40
42
  process.exit(1)
@@ -1,2 +0,0 @@
1
- import{j as r,a as n,i as c}from"./index-D6ygCrVn.js";import{E as a}from"./index-9nNr0Zqr.js";import{E as d}from"./epic-video-BKzHxm70.js";import{M as m,E as p}from"./mdx-BVZ4sNxQ.js";import{P as x}from"./progress-HmjERaPh.js";import{g as u}from"./misc-DBBsMyAP.js";import{u as f,L as h}from"./components-C5xBZAiL.js";import"./loading-C9f_vBoM.js";import"./client-hints-BKxdo5Js.js";import"./request-info-Dyls4H67.js";import"./index-Drecz7hr.js";import"./tooltip-BdTNdCYE.js";import"./clsx-B-dksMZM.js";import"./progress-bar-TRgQ8YZ8.js";const C=({data:e,matches:o})=>{var i;if(!e)return[{title:"📝 | Error"}];const s=e.exercise.exerciseNumber.toString().padStart(2,"0"),t=(i=o.find(l=>l.id==="root"))==null?void 0:i.data;return[{title:`📝 | ${s}. ${e.exercise.title} | ${t==null?void 0:t.workshopTitle}`}]},b={h1:()=>null};function M(){var t;const e=f(),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(d,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(m,{code:e.exercise.instructionsCode,components:b})})}):"No instructions yet..."})]},e.articleId),r.jsx(a,{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 T(){const e=n();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{T as ErrorBoundary,M as default,C as meta};
2
- //# sourceMappingURL=_exerciseNumber-D6YNCQoj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_exerciseNumber-D6YNCQoj.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\ttype LoaderFunctionArgs,\n\ttype HeadersFunction,\n\ttype MetaFunction,\n\tdefer,\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'\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n}) => {\n\tif (!data) {\n\t\treturn [{ title: '📝 | Error' }]\n\t}\n\tconst number = data.exercise.exerciseNumber.toString().padStart(2, '0')\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\tconst rootData = matches.find(m => m.id === 'root')?.data\n\treturn [\n\t\t{\n\t\t\ttitle: `📝 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\t},\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\te => 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","title","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","workshopTitle","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":"0hBAmCO,MAAMA,EAAiEA,CAAC,CAC9EC,KAAAA,EACAC,QAAAA,CACD,IAAM,OACL,GAAI,CAACD,EACJ,MAAO,CAAC,CAAEE,MAAO,YAAa,CAAC,EAE1B,MAAAC,EAASH,EAAKI,SAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,EAEhEC,GAAWP,EAAAA,EAAQQ,QAAUC,EAAEC,KAAO,MAAM,IAAjCV,YAAAA,EAAoCD,KAC9C,MAAA,CACN,CACCE,cAAeC,CAAM,KAAKH,EAAKI,SAASF,KAAW,MAAAM,GAAAA,YAAAA,EAAUI,aAAa,EAC3E,CAAA,CAEF,EAuEMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EACvC,SAAwBC,GAAsB,OAC7C,MAAMf,EAAOgB,IAGPC,KADkBC,SAAOlB,EAAAA,EAAKmB,YAALnB,YAAAA,EAAgBoB,aAAc,IAAI,EACxBb,SAAS,EAAG,GAAG,CAAK,IAAAP,EAAKqB,SAAS,GAE1E,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,4FACfC,SAAA,CAAAF,EAAA,KAAC,UAAA,CACAX,GAAIX,EAAKyB,UAETF,UAAU,8JAEVC,SAAA,CAACE,EAAA,IAAA,MAAA,CACAF,eAAC,KAAG,CAAAD,UAAU,4DACZC,SAAKxB,EAAAI,SAASF,MAChB,CACD,CAAA,EACCwB,EAAA,IAAA,MAAA,CACCF,SAAKxB,EAAAI,SAASuB,iBACdD,EAAAA,IAACE,EAAA,CACAC,sBAAuB7B,EAAK6B,sBAE5BL,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACI,EAAA,CACAC,KAAM/B,EAAKI,SAASuB,iBACpBK,WAAYnB,EACb,EACD,CACD,CAAA,EAEA,wBAEF,CAAA,CAAA,CAAA,EAvBKb,EAAKyB,SAwBX,EACAC,EAAAA,IAACO,EAAA,CACAC,aAAkB,IAAAlC,EAAKyB,SAAS,EAAA,EAC3B,UAAUzB,EAAKyB,SAAS,EAC9B,EACAC,EAAA,IAACS,EAAA,CACAC,KAAK,eACL/B,eAAgBL,EAAKK,eACrBkB,UAAU,oBAAA,CACX,EACAD,EAAA,KAAC,MAAI,CAAAC,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAI,CAAA,CAAA,EACLA,EAAA,IAACW,EAAA,CACAC,KAAMtC,EAAKuC,eAAeD,KAC1BE,aAAcxC,EAAKuC,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,EAAM7C,IAAA,CAAA,CACvB,EAGD0B,EAAA,IAAC,IAAG,CAAAF,SAAA2B,EAAgBN,CAAK,CAAE,CAAA,CAE7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_exerciseNumber_._stepNumber-D00x64Vg.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\ttype LoaderFunctionArgs,\n\ttype HeadersFunction,\n\tjson,\n} from '@remix-run/node'\nimport { isRouteErrorResponse, Outlet, 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\te => 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,2 +0,0 @@
1
- import{j as e,r as a}from"./index-D6ygCrVn.js";import{E as n}from"./index-9nNr0Zqr.js";import{E as c}from"./epic-video-BKzHxm70.js";import{L as d}from"./loading-C9f_vBoM.js";import{N as x}from"./nav-chevrons-DnG58Hov.js";import{M as m,E as p}from"./mdx-BVZ4sNxQ.js";import{P as f}from"./progress-HmjERaPh.js";import{c as h}from"./misc-DBBsMyAP.js";import{u,L as j}from"./components-C5xBZAiL.js";import"./index-Drecz7hr.js";import"./request-info-Dyls4H67.js";import"./tooltip-BdTNdCYE.js";import"./client-hints-BKxdo5Js.js";import"./clsx-B-dksMZM.js";import"./progress-bar-TRgQ8YZ8.js";const M=({data:r,matches:s})=>{var o;if(!r)return[{title:"🦉 | Error"}];const t=r.exercise.exerciseNumber.toString().padStart(2,"0"),i=(o=s.find(l=>l.id==="root"))==null?void 0:o.data;return[{title:`🦉 | ${t}. ${r.exercise.title} | ${i==null?void 0:i.workshopTitle}`}]},b={h1:()=>null};function R(){const r=u(),s=r.exercise.exerciseNumber.toString().padStart(2,"0");return e.jsx("div",{className:"flex flex-grow flex-col",children:e.jsxs("main",{className:"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none",children:e.jsx("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",children:[e.jsx(j,{to:`/${s}`,className:"hover:underline",children:`${s}. ${r.exercise.title}`}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.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-10 pt-8 scrollbar-thin scrollbar-thumb-scrollbar",id:r.articleId,children:r.exercise.finishedCode?e.jsx(c,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(m,{code:r.exercise.finishedCode,components:b})})}):"No finished instructions yet..."}),e.jsx(n,{elementQuery:`#${r.articleId}`}),e.jsx(f,{type:"finished",exerciseNumber:r.exercise.exerciseNumber,className:"h-14 border-t px-6"}),e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{}),r.exerciseFinished?e.jsx(p,{file:r.exerciseFinished.file,relativePath:r.exerciseFinished.relativePath}):null,e.jsx(x,{prev:r.prevStepLink,next:r.nextStepLink})]})]}),e.jsx(g,{exerciseFormEmbedUrl:r.exerciseFormEmbedUrl,exerciseTitle:r.exercise.title})]})})}function g({exerciseFormEmbedUrl:r,exerciseTitle:s}){const[t,i]=a.useState(!1);return e.jsxs("div",{className:"relative flex-shrink-0",children:[t?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(d,{children:e.jsxs("span",{children:["Loading ",s," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>i(!0),title:"Elaboration",src:r,className:h("absolute inset-0 flex h-full w-full transition-opacity duration-300",t?"opacity-100":"opacity-0")})]})}export{R as default,M as meta};
2
- //# sourceMappingURL=_exerciseNumber_.finished-DR3gQ1pK.js.map