@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
@@ -1,2 +1,2 @@
1
- import{r as N,j as e,O as K,b as Q}from"./index-D6ygCrVn.js";import{c as b}from"./clsx-B-dksMZM.js";import{b as q,s as Y,c as X,d as Z,e as M,m as h,u as ee,f as te}from"./progress-HmjERaPh.js";import{T as se}from"./index-Drecz7hr.js";import{c as u,I as v}from"./misc-DBBsMyAP.js";import{S as I,T as ne,a as $,b as D,c as V}from"./tooltip-BdTNdCYE.js";import{b as L}from"./user-73ocDYRe.js";import{a as O}from"./presence-BJPzwbUy.js";import{L as f,u as ae,N as W}from"./components-C5xBZAiL.js";import"./request-info-Dyls4H67.js";import"./client-hints-BKxdo5Js.js";function re(t){t.values.forEach(s=>s.stop())}function _(t,s){[...s].reverse().forEach(o=>{const l=t.getVariant(o);l&&Y(t,l),t.variantChildren&&t.variantChildren.forEach(r=>{_(r,s)})})}function oe(t,s){if(Array.isArray(s))return _(t,s);if(typeof s=="string")return _(t,[s]);Y(t,s)}function le(){const t=new Set,s={subscribe(n){return t.add(n),()=>void t.delete(n)},start(n,o){const l=[];return t.forEach(r=>{l.push(q(r,n,{transitionOverride:o}))}),Promise.all(l)},set(n){return t.forEach(o=>{oe(o,n)})},stop(){t.forEach(n=>{re(n)})},mount(){return()=>{s.stop()}}};return s}function S(){const t=X(le);return Z(t.mount,[]),t}const H=["opacity-70","opacity-80","opacity-90","opacity-100"],U=["shadow-[0_0_2px_0_rgba(0,0,0,0.3)]","shadow-[0_0_4px_0_rgba(0,0,0,0.3)]","shadow-[0_0_7px_0_rgba(0,0,0,0.3)]","shadow-[0_0_10px_0_rgba(0,0,0,0.3)]"];function A(t){const s=Math.round(t*H.length-1),n=Math.round(t*U.length-1);return u("shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200",H[s]??"opacity-60",U[n]??"shadow-none",t===1?"animate-pulse hover:animate-none focus:animate-none":null)}function ie({isMenuOpened:t}){const s=L(),{users:n}=O(),o=t?17:0,l=n.length-o;if(!n.length)return null;const r=t&&n.length===1?e.jsx(f,{target:"_blank",rel:"noopener noreferrer",to:"https://www.youtube.com/watch?v=w6Q3mHyzn78",children:e.jsx("img",{alt:"Tiffany Tunes",className:u("h-8 w-8 rounded-full border object-cover",A(1)),src:"/img/tiffany.png"})}):null,m=`${l}${t?" more ":" "}Epic Web Dev${l===1?"":"s"} working now`;return e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e.jsxs(ne,{children:[n.slice(0,o).map(({user:a,score:c})=>{var x,g;const p=A(c),d=ce(a.location);return e.jsxs($,{children:[e.jsx(D,{asChild:!0,children:a.avatarUrl?e.jsx("img",{tabIndex:0,alt:a.name||"Epic Web Dev",className:u("h-8 w-8 rounded-full border object-cover",p),src:a.avatarUrl}):e.jsx("div",{tabIndex:0,"aria-label":a.name||"Epic Web Dev",className:u("flex h-8 w-8 items-center justify-center rounded-full border",p),children:e.jsx(v,{name:"User"})})}),e.jsx(V,{children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1",children:[e.jsxs("span",{children:[a.name||"An EPIC Web Dev"," ",d?` is ${(g=(x=a.location)==null?void 0:x.origin)!=null&&g.includes("epicweb.dev")?"learning":"working"} ${c===1&&(s==null?void 0:s.id)!==a.id?"with you":""} on`:null]}),d!=null&&d.line1?e.jsx("span",{children:d.line1}):null,d!=null&&d.line2?e.jsx("span",{children:d.line2}):null]})})]},a.id)}),r,l>0?e.jsxs($,{children:[e.jsx(D,{asChild:!0,children:e.jsx("div",{tabIndex:0,"aria-label":m,className:u("flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground",t?"h-8 w-8":"h-6 w-6"),children:e.jsx("span",{className:u("pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center",t?"w-8":"w-6"),children:t?`+${l}`:l})})}),e.jsx(V,{children:m})]}):null]})})}function Ce(){const t=L(),[s,n]=N.useState(!1);return e.jsxs("div",{className:"flex flex-col",children:[t?null:e.jsx(de,{}),e.jsxs("div",{className:u("flex flex-grow",{"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":!t,"h-[calc(100vh-112px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":ENV.EPICSHOP_DEPLOYED,"h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":t}),children:[e.jsx(ue,{isMenuOpened:s,onMenuOpenChange:n}),e.jsx("div",{className:u("h-full w-full max-w-[calc(100%-56px)]",s?"hidden md:block":""),children:e.jsx(K,{})})]})]})}function ce(t){if(!t)return null;const{exercise:s}=t,n=[s?[s.exerciseNumber,s.stepNumber].filter(Boolean).map(o=>o.toString().padStart(2,"0")).join("/"):null,s==null?void 0:s.type].filter(Boolean).join(" - ");return{line1:t.workshopTitle,line2:n}}function de(){return e.jsxs("div",{className:u("z-10 flex items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white",ENV.EPICSHOP_DEPLOYED?"h-[112px] md:h-[64px]":"h-16"),children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-center gap-4",children:[e.jsx(v,{name:"EpicWeb",size:"lg"}),e.jsxs("div",{className:"flex flex-1 flex-wrap items-center",children:[e.jsxs("p",{className:"mr-2",children:["Welcome to the"," ",e.jsx(f,{to:"https://www.epicweb.dev",className:"underline",target:"_blank",children:"EpicWeb.dev"})," ","Workshop app!"]}),ENV.EPICSHOP_DEPLOYED?e.jsxs("small",{className:"text-sm",children:["This is the deployed version."," ",ENV.EPICSHOP_GITHUB_ROOT?e.jsx(f,{className:"underline",target:"_blank",rel:"noopener noreferrer",to:ENV.EPICSHOP_GITHUB_ROOT,children:"Run locally"}):null," ","for full experience."]}):null]})]}),e.jsxs("div",{className:"flex h-full flex-col items-center md:flex-row",children:[e.jsxs(f,{to:"https://www.epicweb.dev",target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsx("span",{className:"drop-shadow-sm",children:"Join Epic Web 🆓"}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(f,{to:ENV.EPICSHOP_DEPLOYED?"https://www.epicweb.dev/login":"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(v,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]})}const B={hidden:{opacity:0,x:-20},visible:{opacity:1,x:0}};function fe({exerciseNumber:t,children:s}){const n=ee(t);return e.jsx(h.li,{variants:B,className:u("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"ml-2",children:s})})}function k({children:t,...s}){const n=te(s);return e.jsx(h.li,{variants:B,className:u("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"ml-2",children:t})})}const P=400;function ue({isMenuOpened:t,onMenuOpenChange:s}){const n=ae(),o=L(),l=M(),r=Q(),{users:m}=O(),a=n.exercises.find(i=>i.exerciseNumber===Number(r.exerciseNumber)),c=r.type==="solution"?a==null?void 0:a.solutions.find(i=>i.stepNumber===Number(r.stepNumber)):r.type==="problem"?a==null?void 0:a.problems.find(i=>i.stepNumber===Number(r.stepNumber)):null,p=S(),d={close:{width:56},open:{width:P}},x={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}},g=Number(r.exerciseNumber).toString().padStart(2,"0");return e.jsx("nav",{className:"flex border-r",children:e.jsx(h.div,{initial:t?"open":"close",variants:d,animate:p,children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(he,{title:n.workshopTitle,menuControls:p,isMenuOpened:t,setMenuOpened:s}),t&&e.jsxs(h.div,{style:{width:P},className:"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsx(h.ul,{variants:x,initial:"hidden",animate:"visible",className:"flex flex-col",children:n.exercises.map(({exerciseNumber:i,title:R,steps:z})=>{const y=Number(r.exerciseNumber)===i,F=!y&&n.playground.exerciseNumber===i,w=i.toString().padStart(2,"0");return e.jsxs(fe,{exerciseNumber:i,children:[e.jsxs(f,{prefetch:"intent",to:`/${w}`,className:b("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":y}),children:[R,F?" 🛝":null]}),y?e.jsxs(h.ul,{variants:x,initial:"hidden",animate:"visible",className:"ml-4 mt-4 flex flex-col",children:[e.jsx(k,{type:"instructions",exerciseNumber:i,children:e.jsx(f,{to:`/${w}`,prefetch:"intent",className:b('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!r.stepNumber}),children:"Intro"})},i),z.filter(Boolean).map(({name:E,stepNumber:j,title:T})=>{const G=Number(r.stepNumber)===j,C=j.toString().padStart(2,"0"),J=E===n.playground.appName;return e.jsx(k,{type:"step",stepNumber:j,exerciseNumber:i,children:e.jsx(f,{to:`/${w}/${C}`,prefetch:"intent",className:b('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":G}),children:J?`${C}. ${T} 🛝`:`${C}. ${T}`})},j)}),e.jsx(k,{type:"finished",exerciseNumber:i,children:e.jsx(W,{to:`/${w}/finished`,prefetch:"intent",className:({isActive:E})=>b('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":E}),children:"📝 Elaboration"})})]}):null]},i)})}),e.jsx("div",{className:"mt-6",children:e.jsx(W,{to:"/finished",className:({isActive:i})=>b("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':i}),children:"📝 Workshop Feedback"})})]}),!t&&e.jsx("div",{className:"flex flex-grow flex-col justify-center",children:e.jsxs("div",{className:"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none",children:[a!=null&&a.title?e.jsx(f,{to:`/${g}`,children:a.title}):null,a!=null&&a.title&&(c!=null&&c.title)?" — ":null,c!=null&&c.title?e.jsx(f,{to:`/${g}/${c.stepNumber.toString().padStart(2,"0")}`,children:c.title}):null]})}),e.jsx("div",{className:u("flex w-full items-center justify-start border-t p-4 transition-[height]",t&&m.length>4?"h-28":"h-14"),style:t?{width:P}:{},children:e.jsx(ie,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:o?e.jsx(I,{content:t?null:"Your account",children:e.jsxs(f,{className:"flex h-14 w-full items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",to:"/account",children:[o.avatarUrl?e.jsx("img",{alt:o.name??o.email,src:o.avatarUrl,className:"h-full rounded-full"}):e.jsx(v,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(h.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:o&&l?e.jsx(I,{content:t?null:"Continue to next lesson",children:e.jsxs(f,{to:l,prefetch:"intent",className:b("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(v,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(h.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:"mb-4 w-full self-start border-t pl-3 pt-[15px]",children:e.jsx(se,{})})]})})})}function he({title:t,isMenuOpened:s,setMenuOpened:n,menuControls:o}){const l={open:{d:"M3.06061 2.99999L21.0606 21"},closed:{d:"M0 9.5L24 9.5"}},r={open:{d:"M3.00006 21.0607L21 3.06064"},moving:{d:"M0 14.5L24 14.5"},closed:{d:"M0 14.5L15 14.5"}},m=S(),a=S();async function c(){o.start(s?"close":"open"),n(!s),s?(m.start(l.closed),await a.start(r.moving),a.start(r.closed)):(await a.start(r.moving),m.start(l.open),a.start(r.open))}const p=N.useRef(c);return N.useEffect(()=>{p.current=c}),N.useEffect(()=>{if(!s)return;function d(x){x.key==="Escape"&&p.current()}return document.addEventListener("keyup",d),()=>document.removeEventListener("keyup",d)},[s]),e.jsxs("div",{className:"relative inline-flex h-14 w-full items-center justify-between overflow-hidden border-b",children:[e.jsx("button",{className:"flex h-14 w-14 items-center justify-center","aria-label":"Open Navigation menu",onClick:c,children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[e.jsx(h.path,{...l.closed,animate:m,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5}),e.jsx(h.path,{...r.closed,animate:a,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5})]})}),s&&e.jsx(h.p,{transition:{delay:.2},initial:{opacity:0,y:5},animate:{opacity:1,y:0},className:"absolute right-5 whitespace-nowrap font-mono text-sm uppercase",children:e.jsx(f,{to:"/",children:t})})]})}export{Ce as default};
2
- //# sourceMappingURL=_layout-Caqk73Ed.js.map
1
+ import{r as N,j as e,O as K,b as Q}from"./index-D6ygCrVn.js";import{c as b}from"./clsx-B-dksMZM.js";import{c as u,I as v}from"./misc-DNgC2Frq.js";import{S as I,T as q,a as $,b as D,c as V}from"./tooltip-Kw0lYWBI.js";import{b as L}from"./user-73ocDYRe.js";import{a as Y}from"./presence-BJPzwbUy.js";import{b as X,s as O,c as Z,d as M,e as ee,m as h,u as te,f as se}from"./progress-CF9Xwfxf.js";import{T as ne}from"./index-Bg9MMnnf.js";import{L as f,u as ae,N as W}from"./components-C5xBZAiL.js";import"./request-info-Dyls4H67.js";import"./client-hints-BKxdo5Js.js";function re(t){t.values.forEach(s=>s.stop())}function _(t,s){[...s].reverse().forEach(o=>{const l=t.getVariant(o);l&&O(t,l),t.variantChildren&&t.variantChildren.forEach(r=>{_(r,s)})})}function oe(t,s){if(Array.isArray(s))return _(t,s);if(typeof s=="string")return _(t,[s]);O(t,s)}function le(){const t=new Set,s={subscribe(n){return t.add(n),()=>void t.delete(n)},start(n,o){const l=[];return t.forEach(r=>{l.push(X(r,n,{transitionOverride:o}))}),Promise.all(l)},set(n){return t.forEach(o=>{oe(o,n)})},stop(){t.forEach(n=>{re(n)})},mount(){return()=>{s.stop()}}};return s}function S(){const t=Z(le);return M(t.mount,[]),t}const H=["opacity-70","opacity-80","opacity-90","opacity-100"],U=["shadow-[0_0_2px_0_rgba(0,0,0,0.3)]","shadow-[0_0_4px_0_rgba(0,0,0,0.3)]","shadow-[0_0_7px_0_rgba(0,0,0,0.3)]","shadow-[0_0_10px_0_rgba(0,0,0,0.3)]"];function A(t){const s=Math.round(t*H.length-1),n=Math.round(t*U.length-1);return u("shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200",H[s]??"opacity-60",U[n]??"shadow-none",t===1?"animate-pulse hover:animate-none focus:animate-none":null)}function ie({isMenuOpened:t}){const s=L(),{users:n}=Y(),o=t?17:0,l=n.length-o;if(!n.length)return null;const r=t&&n.length===1?e.jsx(f,{target:"_blank",rel:"noopener noreferrer",to:"https://www.youtube.com/watch?v=w6Q3mHyzn78",children:e.jsx("img",{alt:"Tiffany Tunes",className:u("h-8 w-8 rounded-full border object-cover",A(1)),src:"/img/tiffany.png"})}):null,m=`${l}${t?" more ":" "}Epic Web Dev${l===1?"":"s"} working now`;return e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e.jsxs(q,{children:[n.slice(0,o).map(({user:a,score:c})=>{var x,g;const p=A(c),d=ce(a.location);return e.jsxs($,{children:[e.jsx(D,{asChild:!0,children:a.avatarUrl?e.jsx("img",{tabIndex:0,alt:a.name||"Epic Web Dev",className:u("h-8 w-8 rounded-full border object-cover",p),src:a.avatarUrl}):e.jsx("div",{tabIndex:0,"aria-label":a.name||"Epic Web Dev",className:u("flex h-8 w-8 items-center justify-center rounded-full border",p),children:e.jsx(v,{name:"User"})})}),e.jsx(V,{children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1",children:[e.jsxs("span",{children:[a.name||"An EPIC Web Dev"," ",d?` is ${(g=(x=a.location)==null?void 0:x.origin)!=null&&g.includes("epicweb.dev")?"learning":"working"} ${c===1&&(s==null?void 0:s.id)!==a.id?"with you":""} on`:null]}),d!=null&&d.line1?e.jsx("span",{children:d.line1}):null,d!=null&&d.line2?e.jsx("span",{children:d.line2}):null]})})]},a.id)}),r,l>0?e.jsxs($,{children:[e.jsx(D,{asChild:!0,children:e.jsx("div",{tabIndex:0,"aria-label":m,className:u("flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground",t?"h-8 w-8":"h-6 w-6"),children:e.jsx("span",{className:u("pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center",t?"w-8":"w-6"),children:t?`+${l}`:l})})}),e.jsx(V,{children:m})]}):null]})})}function Ce(){const t=L(),[s,n]=N.useState(!1);return e.jsxs("div",{className:"flex flex-col",children:[t?null:e.jsx(de,{}),e.jsxs("div",{className:u("flex flex-grow",{"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":!t,"h-[calc(100vh-112px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":ENV.EPICSHOP_DEPLOYED,"h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":t}),children:[e.jsx(ue,{isMenuOpened:s,onMenuOpenChange:n}),e.jsx("div",{className:u("h-full w-full max-w-[calc(100%-56px)]",s?"hidden md:block":""),children:e.jsx(K,{})})]})]})}function ce(t){if(!t)return null;const{exercise:s}=t,n=[s?[s.exerciseNumber,s.stepNumber].filter(Boolean).map(o=>o.toString().padStart(2,"0")).join("/"):null,s==null?void 0:s.type].filter(Boolean).join(" - ");return{line1:t.workshopTitle,line2:n}}function de(){return e.jsxs("div",{className:u("z-10 flex items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white",ENV.EPICSHOP_DEPLOYED?"h-[112px] md:h-[64px]":"h-16"),children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-center gap-4",children:[e.jsx(v,{name:"EpicWeb",size:"lg"}),e.jsxs("div",{className:"flex flex-1 flex-wrap items-center",children:[e.jsxs("p",{className:"mr-2",children:["Welcome to the"," ",e.jsx(f,{to:"https://www.epicweb.dev",className:"underline",target:"_blank",children:"EpicWeb.dev"})," ","Workshop app!"]}),ENV.EPICSHOP_DEPLOYED?e.jsxs("small",{className:"text-sm",children:["This is the deployed version."," ",ENV.EPICSHOP_GITHUB_ROOT?e.jsx(f,{className:"underline",target:"_blank",rel:"noopener noreferrer",to:ENV.EPICSHOP_GITHUB_ROOT,children:"Run locally"}):null," ","for full experience."]}):null]})]}),e.jsxs("div",{className:"flex h-full flex-col items-center md:flex-row",children:[e.jsxs(f,{to:"https://www.epicweb.dev",target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsx("span",{className:"drop-shadow-sm",children:"Join Epic Web 🆓"}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(f,{to:ENV.EPICSHOP_DEPLOYED?"https://www.epicweb.dev/login":"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(v,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]})}const B={hidden:{opacity:0,x:-20},visible:{opacity:1,x:0}};function fe({exerciseNumber:t,children:s}){const n=te(t);return e.jsx(h.li,{variants:B,className:u("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"ml-2",children:s})})}function k({children:t,...s}){const n=se(s);return e.jsx(h.li,{variants:B,className:u("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"ml-2",children:t})})}const P=400;function ue({isMenuOpened:t,onMenuOpenChange:s}){const n=ae(),o=L(),l=ee(),r=Q(),{users:m}=Y(),a=n.exercises.find(i=>i.exerciseNumber===Number(r.exerciseNumber)),c=r.type==="solution"?a==null?void 0:a.solutions.find(i=>i.stepNumber===Number(r.stepNumber)):r.type==="problem"?a==null?void 0:a.problems.find(i=>i.stepNumber===Number(r.stepNumber)):null,p=S(),d={close:{width:56},open:{width:P}},x={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}},g=Number(r.exerciseNumber).toString().padStart(2,"0");return e.jsx("nav",{className:"flex border-r",children:e.jsx(h.div,{initial:t?"open":"close",variants:d,animate:p,children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(he,{title:n.workshopTitle,menuControls:p,isMenuOpened:t,setMenuOpened:s}),t&&e.jsxs(h.div,{style:{width:P},className:"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsx(h.ul,{variants:x,initial:"hidden",animate:"visible",className:"flex flex-col",children:n.exercises.map(({exerciseNumber:i,title:R,steps:z})=>{const y=Number(r.exerciseNumber)===i,F=!y&&n.playground.exerciseNumber===i,w=i.toString().padStart(2,"0");return e.jsxs(fe,{exerciseNumber:i,children:[e.jsxs(f,{prefetch:"intent",to:`/${w}`,className:b("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":y}),children:[R,F?" 🛝":null]}),y?e.jsxs(h.ul,{variants:x,initial:"hidden",animate:"visible",className:"ml-4 mt-4 flex flex-col",children:[e.jsx(k,{type:"instructions",exerciseNumber:i,children:e.jsx(f,{to:`/${w}`,prefetch:"intent",className:b('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!r.stepNumber}),children:"Intro"})},i),z.filter(Boolean).map(({name:E,stepNumber:j,title:T})=>{const G=Number(r.stepNumber)===j,C=j.toString().padStart(2,"0"),J=E===n.playground.appName;return e.jsx(k,{type:"step",stepNumber:j,exerciseNumber:i,children:e.jsx(f,{to:`/${w}/${C}`,prefetch:"intent",className:b('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":G}),children:J?`${C}. ${T} 🛝`:`${C}. ${T}`})},j)}),e.jsx(k,{type:"finished",exerciseNumber:i,children:e.jsx(W,{to:`/${w}/finished`,prefetch:"intent",className:({isActive:E})=>b('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":E}),children:"📝 Elaboration"})})]}):null]},i)})}),e.jsx("div",{className:"mt-6",children:e.jsx(W,{to:"/finished",className:({isActive:i})=>b("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':i}),children:"📝 Workshop Feedback"})})]}),!t&&e.jsx("div",{className:"flex flex-grow flex-col justify-center",children:e.jsxs("div",{className:"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none",children:[a!=null&&a.title?e.jsx(f,{to:`/${g}`,children:a.title}):null,a!=null&&a.title&&(c!=null&&c.title)?" — ":null,c!=null&&c.title?e.jsx(f,{to:`/${g}/${c.stepNumber.toString().padStart(2,"0")}`,children:c.title}):null]})}),e.jsx("div",{className:u("flex w-full items-center justify-start border-t p-4 transition-[height]",t&&m.length>4?"h-28":"h-14"),style:t?{width:P}:{},children:e.jsx(ie,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:o?e.jsx(I,{content:t?null:"Your account",children:e.jsxs(f,{className:"flex h-14 w-full items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",to:"/account",children:[o.avatarUrl?e.jsx("img",{alt:o.name??o.email,src:o.avatarUrl,className:"h-full rounded-full"}):e.jsx(v,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(h.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:o&&l?e.jsx(I,{content:t?null:"Continue to next lesson",children:e.jsxs(f,{to:l,prefetch:"intent",className:b("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(v,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(h.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:"mb-4 w-full self-start border-t pl-3 pt-[15px]",children:e.jsx(ne,{})})]})})})}function he({title:t,isMenuOpened:s,setMenuOpened:n,menuControls:o}){const l={open:{d:"M3.06061 2.99999L21.0606 21"},closed:{d:"M0 9.5L24 9.5"}},r={open:{d:"M3.00006 21.0607L21 3.06064"},moving:{d:"M0 14.5L24 14.5"},closed:{d:"M0 14.5L15 14.5"}},m=S(),a=S();async function c(){o.start(s?"close":"open"),n(!s),s?(m.start(l.closed),await a.start(r.moving),a.start(r.closed)):(await a.start(r.moving),m.start(l.open),a.start(r.open))}const p=N.useRef(c);return N.useEffect(()=>{p.current=c}),N.useEffect(()=>{if(!s)return;function d(x){x.key==="Escape"&&p.current()}return document.addEventListener("keyup",d),()=>document.removeEventListener("keyup",d)},[s]),e.jsxs("div",{className:"relative inline-flex h-14 w-full items-center justify-between overflow-hidden border-b",children:[e.jsx("button",{className:"flex h-14 w-14 items-center justify-center","aria-label":"Open Navigation menu",onClick:c,children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[e.jsx(h.path,{...l.closed,animate:m,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5}),e.jsx(h.path,{...r.closed,animate:a,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5})]})}),s&&e.jsx(h.p,{transition:{delay:.2},initial:{opacity:0,y:5},animate:{opacity:1,y:0},className:"absolute right-5 whitespace-nowrap font-mono text-sm uppercase",children:e.jsx(f,{to:"/",children:t})})]})}export{Ce as default};
2
+ //# sourceMappingURL=_layout-CNgYirUN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_layout-CNgYirUN.js","sources":["../../../../../node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs","../../../../../node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs","../../../app/routes/_app+/_layout.tsx"],"sourcesContent":["import { invariant } from '../../utils/errors.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { animateVisualElement } from '../interfaces/visual-element.mjs';\n\nfunction stopAnimation(visualElement) {\n visualElement.values.forEach((value) => value.stop());\n}\nfunction setVariants(visualElement, variantLabels) {\n const reversedLabels = [...variantLabels].reverse();\n reversedLabels.forEach((key) => {\n const variant = visualElement.getVariant(key);\n variant && setTarget(visualElement, variant);\n if (visualElement.variantChildren) {\n visualElement.variantChildren.forEach((child) => {\n setVariants(child, variantLabels);\n });\n }\n });\n}\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n }\n else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n }\n else {\n setTarget(visualElement, definition);\n }\n}\n/**\n * @public\n */\nfunction animationControls() {\n /**\n * Track whether the host component has mounted.\n */\n let hasMounted = false;\n /**\n * A collection of linked component animation controls.\n */\n const subscribers = new Set();\n const controls = {\n subscribe(visualElement) {\n subscribers.add(visualElement);\n return () => void subscribers.delete(visualElement);\n },\n start(definition, transitionOverride) {\n invariant(hasMounted, \"controls.start() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n const animations = [];\n subscribers.forEach((visualElement) => {\n animations.push(animateVisualElement(visualElement, definition, {\n transitionOverride,\n }));\n });\n return Promise.all(animations);\n },\n set(definition) {\n invariant(hasMounted, \"controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n return subscribers.forEach((visualElement) => {\n setValues(visualElement, definition);\n });\n },\n stop() {\n subscribers.forEach((visualElement) => {\n stopAnimation(visualElement);\n });\n },\n mount() {\n hasMounted = true;\n return () => {\n hasMounted = false;\n controls.stop();\n };\n },\n };\n return controls;\n}\n\nexport { animationControls, setValues };\n","import { animationControls } from './animation-controls.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\n/**\n * Creates `AnimationControls`, which can be used to manually start, stop\n * and sequence animations on one or more components.\n *\n * The returned `AnimationControls` should be passed to the `animate` property\n * of the components you want to animate.\n *\n * These components can then be animated with the `start` method.\n *\n * ```jsx\n * import * as React from 'react'\n * import { motion, useAnimation } from 'framer-motion'\n *\n * export function MyComponent(props) {\n * const controls = useAnimation()\n *\n * controls.start({\n * x: 100,\n * transition: { duration: 0.5 },\n * })\n *\n * return <motion.div animate={controls} />\n * }\n * ```\n *\n * @returns Animation controller with `start` and `stop` methods\n *\n * @public\n */\nfunction useAnimationControls() {\n const controls = useConstant(animationControls);\n useIsomorphicLayoutEffect(controls.mount, []);\n return controls;\n}\nconst useAnimation = useAnimationControls;\n\nexport { useAnimation, useAnimationControls };\n","import {\n\textractNumbersAndTypeFromAppNameOrPath,\n\tgetExercises,\n\tgetPlaygroundAppName,\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 {\n\tLink,\n\tNavLink,\n\tOutlet,\n\tuseLoaderData,\n\tuseParams,\n} from '@remix-run/react'\nimport { clsx } from 'clsx'\nimport {\n\tmotion,\n\tuseAnimationControls,\n\ttype AnimationControls,\n} from 'framer-motion'\nimport * as React from 'react'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tSimpleTooltip,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from '#app/components/ui/tooltip.tsx'\nimport { useOptionalUser } from '#app/components/user.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { usePresence, type User } from '#app/utils/presence.tsx'\nimport {\n\tuseExerciseProgressClassName,\n\tuseNextExerciseRoute,\n\tuseProgressItemClassName,\n\ttype ProgressItemSearch,\n} from '../progress.tsx'\nimport { ThemeSwitch } from '../theme/index.tsx'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('stepLoader')\n\tconst [exercises, workshopTitle, playgroundAppName] = await Promise.all([\n\t\tgetExercises({ request, timings }),\n\t\tgetWorkshopTitle(),\n\t\tgetPlaygroundAppName(),\n\t])\n\n\tconst playground = {\n\t\tappName: playgroundAppName,\n\t\texerciseNumber: Number(\n\t\t\textractNumbersAndTypeFromAppNameOrPath(playgroundAppName ?? '')\n\t\t\t\t?.exerciseNumber,\n\t\t),\n\t}\n\n\tconst result = json(\n\t\t{\n\t\t\tworkshopTitle,\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\tsolutions: e.solutions.map(({ stepNumber, title, name }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle,\n\t\t\t\t\tname,\n\t\t\t\t})),\n\t\t\t\tproblems: e.problems.map(({ stepNumber, title, name }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle,\n\t\t\t\t\tname,\n\t\t\t\t})),\n\t\t\t\tsteps: e.steps.map(({ stepNumber, problem, solution }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle: problem?.title ?? solution?.title ?? 'Unknown',\n\t\t\t\t\tname: problem?.name ?? solution?.name ?? 'Unknown',\n\t\t\t\t})),\n\t\t\t})),\n\t\t\tplayground,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tVary: 'Cookie',\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\tVary: 'Cookie',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst opacities = ['opacity-70', 'opacity-80', 'opacity-90', 'opacity-100']\nconst shadows = [\n\t'shadow-[0_0_2px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_4px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_7px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_10px_0_rgba(0,0,0,0.3)]',\n]\nfunction getScoreClassNames(score: number) {\n\tconst opacityNumber = Math.round(score * opacities.length - 1)\n\tconst shadowNumber = Math.round(score * shadows.length - 1)\n\treturn cn(\n\t\t'shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200',\n\t\topacities[opacityNumber] ?? 'opacity-60',\n\t\tshadows[shadowNumber] ?? 'shadow-none',\n\t\tscore === 1 ? 'animate-pulse hover:animate-none focus:animate-none' : null,\n\t)\n}\n\nfunction FacePile({ isMenuOpened }: { isMenuOpened: boolean }) {\n\tconst loggedInUser = useOptionalUser()\n\tconst { users } = usePresence()\n\tconst limit = isMenuOpened ? 17 : 0\n\tconst numberOverLimit = users.length - limit\n\tif (!users.length) return null\n\tconst tiffany =\n\t\tisMenuOpened && users.length === 1 ? (\n\t\t\t<Link\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tto=\"https://www.youtube.com/watch?v=w6Q3mHyzn78\"\n\t\t\t>\n\t\t\t\t<img\n\t\t\t\t\talt=\"Tiffany Tunes\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-8 w-8 rounded-full border object-cover',\n\t\t\t\t\t\tgetScoreClassNames(1),\n\t\t\t\t\t)}\n\t\t\t\t\tsrc=\"/img/tiffany.png\"\n\t\t\t\t/>\n\t\t\t</Link>\n\t\t) : null\n\tconst overLimitLabel = `${numberOverLimit}${\n\t\tisMenuOpened ? ' more ' : ' '\n\t}Epic Web Dev${numberOverLimit === 1 ? '' : 's'} working now`\n\treturn (\n\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t<TooltipProvider>\n\t\t\t\t{users.slice(0, limit).map(({ user, score }) => {\n\t\t\t\t\tconst scoreClassNames = getScoreClassNames(score)\n\t\t\t\t\tconst locationLabel = getLocationLabel(user.location)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tooltip key={user.id}>\n\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t{user.avatarUrl ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\talt={user.name || 'Epic Web Dev'}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'h-8 w-8 rounded-full border object-cover',\n\t\t\t\t\t\t\t\t\t\t\tscoreClassNames,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tsrc={user.avatarUrl}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\taria-label={user.name || 'Epic Web Dev'}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'flex h-8 w-8 items-center justify-center rounded-full border',\n\t\t\t\t\t\t\t\t\t\t\tscoreClassNames,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon name=\"User\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t\t<span className=\"flex flex-col items-center justify-center gap-1\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{user.name || 'An EPIC Web Dev'}{' '}\n\t\t\t\t\t\t\t\t\t\t{locationLabel\n\t\t\t\t\t\t\t\t\t\t\t? ` is ${user.location?.origin?.includes('epicweb.dev') ? 'learning' : 'working'} ${\n\t\t\t\t\t\t\t\t\t\t\t\t\tscore === 1 && loggedInUser?.id !== user.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'with you'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t\t} on`\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{locationLabel?.line1 ? (\n\t\t\t\t\t\t\t\t\t\t<span>{locationLabel.line1}</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t{locationLabel?.line2 ? (\n\t\t\t\t\t\t\t\t\t\t<span>{locationLabel.line2}</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t\t{tiffany}\n\t\t\t\t{numberOverLimit > 0 ? (\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\taria-label={overLimitLabel}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground',\n\t\t\t\t\t\t\t\t\tisMenuOpened ? 'h-8 w-8' : 'h-6 w-6',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center',\n\t\t\t\t\t\t\t\t\t\tisMenuOpened ? 'w-8' : 'w-6',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isMenuOpened ? `+${numberOverLimit}` : numberOverLimit}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>{overLimitLabel}</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : null}\n\t\t\t</TooltipProvider>\n\t\t</div>\n\t)\n}\n\nexport default function App() {\n\tconst user = useOptionalUser()\n\n\tconst [isMenuOpened, setMenuOpened] = React.useState(false)\n\n\treturn (\n\t\t<div className=\"flex flex-col\">\n\t\t\t{user ? null : <EpicWebBanner />}\n\t\t\t<div\n\t\t\t\tclassName={cn('flex flex-grow', {\n\t\t\t\t\t'h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\t!user,\n\t\t\t\t\t'h-[calc(100vh-112px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED,\n\t\t\t\t\t'h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\tuser,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<Navigation\n\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\tonMenuOpenChange={setMenuOpened}\n\t\t\t\t/>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-full w-full max-w-[calc(100%-56px)]',\n\t\t\t\t\t\tisMenuOpened ? 'hidden md:block' : '',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Outlet />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction getLocationLabel(location: User['location']) {\n\tif (!location) return null\n\n\tconst { exercise } = location\n\n\tconst exercisePortion = [\n\t\texercise\n\t\t\t? [exercise.exerciseNumber, exercise.stepNumber]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.map((s) => s.toString().padStart(2, '0'))\n\t\t\t\t\t.join('/')\n\t\t\t: null,\n\t\texercise?.type,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' - ')\n\treturn { line1: location.workshopTitle, line2: exercisePortion }\n}\n\nfunction EpicWebBanner() {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'z-10 flex items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white',\n\t\t\t\tENV.EPICSHOP_DEPLOYED ? 'h-[112px] md:h-[64px]' : 'h-16',\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex flex-1 flex-wrap items-center gap-4\">\n\t\t\t\t<Icon name=\"EpicWeb\" size=\"lg\" />\n\t\t\t\t<div className=\"flex flex-1 flex-wrap items-center\">\n\t\t\t\t\t<p className=\"mr-2\">\n\t\t\t\t\t\tWelcome to the{' '}\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"https://www.epicweb.dev\"\n\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tEpicWeb.dev\n\t\t\t\t\t\t</Link>{' '}\n\t\t\t\t\t\tWorkshop app!\n\t\t\t\t\t</p>\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? (\n\t\t\t\t\t\t<small className=\"text-sm\">\n\t\t\t\t\t\t\tThis is the deployed version.{' '}\n\t\t\t\t\t\t\t{ENV.EPICSHOP_GITHUB_ROOT ? (\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\tto={ENV.EPICSHOP_GITHUB_ROOT}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tRun locally\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t) : null}{' '}\n\t\t\t\t\t\t\tfor full experience.\n\t\t\t\t\t\t</small>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex h-full flex-col items-center md:flex-row\">\n\t\t\t\t<Link\n\t\t\t\t\tto=\"https://www.epicweb.dev\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"drop-shadow-sm\">Join Epic Web 🆓</span>\n\t\t\t\t\t<span>↗︎</span>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\tto={\n\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED ? 'https://www.epicweb.dev/login' : '/login'\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"User\" size=\"lg\" />\n\t\t\t\t\t<span className=\"drop-shadow-sm\">Login</span>\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nconst itemVariants = {\n\thidden: { opacity: 0, x: -20 },\n\tvisible: { opacity: 1, x: 0 },\n}\nfunction NavigationExerciseListItem({\n\texerciseNumber,\n\tchildren,\n}: {\n\texerciseNumber: number\n\tchildren: React.ReactNode\n}) {\n\tconst progressClassName = useExerciseProgressClassName(exerciseNumber)\n\treturn (\n\t\t<motion.li\n\t\t\tvariants={itemVariants}\n\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\tclassName={cn(\n\t\t\t\t// add gap of 3 to children, but using padding so the progress extends through the whole height\n\t\t\t\t'py-[6px] first:pt-3 last:pb-3',\n\t\t\t\tprogressClassName ? `${progressClassName} before:border-t` : null,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"ml-2\">{children}</span>\n\t\t</motion.li>\n\t)\n}\n\nfunction NavigationExerciseStepListItem({\n\tchildren,\n\t...progressItemSearch\n}: {\n\tchildren: React.ReactNode\n} & ProgressItemSearch) {\n\tconst progressClassName = useProgressItemClassName(progressItemSearch)\n\treturn (\n\t\t<motion.li\n\t\t\tvariants={itemVariants}\n\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\tclassName={cn(\n\t\t\t\t// add gap of 3 to children, but using padding so the progress extends through the whole height\n\t\t\t\t'py-[6px] first:pt-3 last:pb-3',\n\t\t\t\tprogressClassName ? `${progressClassName} before:border-t` : null,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"ml-2\">{children}</span>\n\t\t</motion.li>\n\t)\n}\n\nconst OPENED_MENU_WIDTH = 400\n\nfunction Navigation({\n\tisMenuOpened,\n\tonMenuOpenChange: setMenuOpened,\n}: {\n\tisMenuOpened: boolean\n\tonMenuOpenChange: (change: boolean) => void\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tconst user = useOptionalUser()\n\tconst nextExerciseRoute = useNextExerciseRoute()\n\tconst params = useParams()\n\tconst { users } = usePresence()\n\n\tconst exercise = data.exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tconst app =\n\t\tparams.type === 'solution'\n\t\t\t? exercise?.solutions.find(\n\t\t\t\t\t(s) => s.stepNumber === Number(params.stepNumber),\n\t\t\t\t)\n\t\t\t: params.type === 'problem'\n\t\t\t\t? exercise?.problems.find(\n\t\t\t\t\t\t(p) => p.stepNumber === Number(params.stepNumber),\n\t\t\t\t\t)\n\t\t\t\t: null\n\n\t// container\n\tconst menuControls = useAnimationControls()\n\tconst menuVariants = {\n\t\tclose: { width: 56 },\n\t\topen: { width: OPENED_MENU_WIDTH },\n\t}\n\n\t// items\n\tconst listVariants = {\n\t\tvisible: {\n\t\t\topacity: 1,\n\t\t\ttransition: {\n\t\t\t\tduration: 0.05,\n\t\t\t\twhen: 'beforeChildren',\n\t\t\t\tstaggerChildren: 0.03,\n\t\t\t},\n\t\t},\n\t\thidden: {\n\t\t\topacity: 0,\n\t\t},\n\t}\n\tconst exNum = Number(params.exerciseNumber).toString().padStart(2, '0')\n\n\treturn (\n\t\t<nav className=\"flex border-r\">\n\t\t\t<motion.div\n\t\t\t\tinitial={isMenuOpened ? 'open' : 'close'}\n\t\t\t\tvariants={menuVariants}\n\t\t\t\tanimate={menuControls}\n\t\t\t>\n\t\t\t\t<div className=\"flex h-full flex-col items-center justify-between\">\n\t\t\t\t\t<NavToggle\n\t\t\t\t\t\ttitle={data.workshopTitle}\n\t\t\t\t\t\tmenuControls={menuControls}\n\t\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\t\tsetMenuOpened={setMenuOpened}\n\t\t\t\t\t/>\n\t\t\t\t\t{isMenuOpened && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tstyle={{ width: OPENED_MENU_WIDTH }}\n\t\t\t\t\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\t\t\t\t\tclassName=\"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\t\t\t\t\t\tclassName=\"flex flex-col\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{data.exercises.map(({ exerciseNumber, title, steps }) => {\n\t\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\t\tNumber(params.exerciseNumber) === exerciseNumber\n\t\t\t\t\t\t\t\t\tconst showPlayground =\n\t\t\t\t\t\t\t\t\t\t!isActive &&\n\t\t\t\t\t\t\t\t\t\tdata.playground.exerciseNumber === exerciseNumber\n\t\t\t\t\t\t\t\t\tconst exerciseNum = exerciseNumber.toString().padStart(2, '0')\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<NavigationExerciseListItem\n\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ 'bg-foreground text-background': isActive },\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t\t{showPlayground ? ' 🛝' : null}\n\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t{isActive ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ml-4 mt-4 flex flex-col\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"instructions\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!params.stepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tIntro\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{steps\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(({ name, stepNumber, title }) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tNumber(params.stepNumber) === stepNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst step = stepNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.padStart(2, '0')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isPlayground =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname === data.playground.appName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"step\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}/${step}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isPlayground\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? `${step}. ${title} 🛝`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `${step}. ${title}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}/finished`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-foreground text-background': isActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t📝 Elaboration\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t</motion.ul>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</NavigationExerciseListItem>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</motion.ul>\n\t\t\t\t\t\t\t<div className=\"mt-6\">\n\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\tto=\"/finished\"\n\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"]':\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t📝 Workshop Feedback\n\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t{!isMenuOpened && (\n\t\t\t\t\t\t<div className=\"flex flex-grow flex-col justify-center\">\n\t\t\t\t\t\t\t<div className=\"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none\">\n\t\t\t\t\t\t\t\t{exercise?.title ? (\n\t\t\t\t\t\t\t\t\t<Link to={`/${exNum}`}>{exercise.title}</Link>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t{exercise?.title && app?.title ? ' — ' : null}\n\t\t\t\t\t\t\t\t{app?.title ? (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tto={`/${exNum}/${app.stepNumber\n\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t.padStart(2, '0')}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{app.title}\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'flex w-full items-center justify-start border-t p-4 transition-[height]',\n\t\t\t\t\t\t\tisMenuOpened && users.length > 4 ? 'h-28' : 'h-14',\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={isMenuOpened ? { width: OPENED_MENU_WIDTH } : {}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FacePile isMenuOpened={isMenuOpened} />\n\t\t\t\t\t</div>\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user ? (\n\t\t\t\t\t\t<SimpleTooltip content={isMenuOpened ? null : 'Your account'}>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tclassName=\"flex h-14 w-full items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline\"\n\t\t\t\t\t\t\t\tto=\"/account\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{user.avatarUrl ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\talt={user.name ?? user.email}\n\t\t\t\t\t\t\t\t\t\tsrc={user.avatarUrl}\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-full rounded-full\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Icon name=\"User\" className=\"flex-shrink-0\" size=\"lg\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tYour Account\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Your account</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user && nextExerciseRoute ? (\n\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\tcontent={isMenuOpened ? null : 'Continue to next lesson'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={nextExerciseRoute}\n\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t'flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstate={{ from: 'continue next lesson button' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"FastForward\" className=\"flex-shrink-0\" size=\"md\" />\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tContinue to next lesson\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Continue to next lesson</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<div className=\"mb-4 w-full self-start border-t pl-3 pt-[15px]\">\n\t\t\t\t\t\t<ThemeSwitch />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</motion.div>\n\t\t</nav>\n\t)\n}\n\nfunction NavToggle({\n\ttitle,\n\tisMenuOpened,\n\tsetMenuOpened,\n\tmenuControls,\n}: {\n\ttitle: string\n\tisMenuOpened: boolean\n\tsetMenuOpened: (value: boolean) => void\n\tmenuControls: AnimationControls\n}) {\n\tconst path01Variants = {\n\t\topen: { d: 'M3.06061 2.99999L21.0606 21' },\n\t\tclosed: { d: 'M0 9.5L24 9.5' },\n\t}\n\tconst path02Variants = {\n\t\topen: { d: 'M3.00006 21.0607L21 3.06064' },\n\t\tmoving: { d: 'M0 14.5L24 14.5' },\n\t\tclosed: { d: 'M0 14.5L15 14.5' },\n\t}\n\tconst path01Controls = useAnimationControls()\n\tconst path02Controls = useAnimationControls()\n\n\tasync function toggleMenu() {\n\t\tvoid menuControls.start(isMenuOpened ? 'close' : 'open')\n\t\tsetMenuOpened(!isMenuOpened)\n\t\tif (isMenuOpened) {\n\t\t\tvoid path01Controls.start(path01Variants.closed)\n\t\t\tawait path02Controls.start(path02Variants.moving)\n\t\t\tvoid path02Controls.start(path02Variants.closed)\n\t\t} else {\n\t\t\tawait path02Controls.start(path02Variants.moving)\n\t\t\tvoid path01Controls.start(path01Variants.open)\n\t\t\tvoid path02Controls.start(path02Variants.open)\n\t\t}\n\t}\n\n\tconst latestToggleMenu = React.useRef(toggleMenu)\n\tReact.useEffect(() => {\n\t\tlatestToggleMenu.current = toggleMenu\n\t})\n\n\tReact.useEffect(() => {\n\t\tif (!isMenuOpened) return\n\n\t\tfunction handleKeyUp(event: KeyboardEvent) {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tvoid latestToggleMenu.current()\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener('keyup', handleKeyUp)\n\t\treturn () => document.removeEventListener('keyup', handleKeyUp)\n\t}, [isMenuOpened])\n\n\treturn (\n\t\t<div className=\"relative inline-flex h-14 w-full items-center justify-between overflow-hidden border-b\">\n\t\t\t<button\n\t\t\t\tclassName=\"flex h-14 w-14 items-center justify-center\"\n\t\t\t\taria-label=\"Open Navigation menu\"\n\t\t\t\tonClick={toggleMenu}\n\t\t\t>\n\t\t\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\t{...path01Variants.closed}\n\t\t\t\t\t\tanimate={path01Controls}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t/>\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\t{...path02Variants.closed}\n\t\t\t\t\t\tanimate={path02Controls}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\t\t\t{isMenuOpened && (\n\t\t\t\t<motion.p\n\t\t\t\t\ttransition={{ delay: 0.2 }}\n\t\t\t\t\tinitial={{ opacity: 0, y: 5 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t// @ts-expect-error framer-motion + latest typescript types has issues\n\t\t\t\t\tclassName=\"absolute right-5 whitespace-nowrap font-mono text-sm uppercase\"\n\t\t\t\t>\n\t\t\t\t\t<Link to=\"/\">{title}</Link>\n\t\t\t\t</motion.p>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["stopAnimation","visualElement","value","setVariants","variantLabels","key","variant","setTarget","child","setValues","definition","animationControls","subscribers","controls","transitionOverride","animations","animateVisualElement","useAnimationControls","useConstant","useIsomorphicLayoutEffect","opacities","shadows","getScoreClassNames","score","opacityNumber","Math","round","length","shadowNumber","cn","FacePile","isMenuOpened","loggedInUser","useOptionalUser","users","usePresence","limit","numberOverLimit","tiffany","jsx","Link","target","rel","to","children","alt","className","src","overLimitLabel","TooltipProvider","slice","map","user","scoreClassNames","locationLabel","getLocationLabel","location","Tooltip","TooltipTrigger","asChild","avatarUrl","tabIndex","name","Icon","TooltipContent","jsxs","origin","includes","id","line1","line2","App","setMenuOpened","React","EpicWebBanner","ENV","EPICSHOP_DEPLOYED","Navigation","onMenuOpenChange","Outlet","exercise","exercisePortion","exerciseNumber","stepNumber","filter","Boolean","s","toString","padStart","join","type","workshopTitle","size","EPICSHOP_GITHUB_ROOT","itemVariants","hidden","opacity","x","visible","NavigationExerciseListItem","progressClassName","useExerciseProgressClassName","motion","li","variants","NavigationExerciseStepListItem","progressItemSearch","useProgressItemClassName","OPENED_MENU_WIDTH","data","useLoaderData","nextExerciseRoute","useNextExerciseRoute","params","useParams","exercises","find","e","Number","app","solutions","problems","p","menuControls","menuVariants","close","width","open","listVariants","transition","duration","when","staggerChildren","exNum","div","initial","animate","NavToggle","title","style","ul","steps","isActive","showPlayground","playground","exerciseNum","prefetch","clsx","step","isPlayground","appName","NavLink","SimpleTooltip","content","email","state","from","ThemeSwitch","path01Variants","d","closed","path02Variants","moving","path01Controls","path02Controls","toggleMenu","start","latestToggleMenu","current","handleKeyUp","event","document","addEventListener","removeEventListener","onClick","height","viewBox","path","stroke","strokeWidth","delay","y"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,2 +1,2 @@
1
- import{c as b,j as e}from"./index-D6ygCrVn.js";import{I as m}from"./misc-DBBsMyAP.js";import{S as f}from"./tooltip-BdTNdCYE.js";import{a as g}from"./progress-HmjERaPh.js";import{u as N,L as i,F as c}from"./components-C5xBZAiL.js";import"./clsx-B-dksMZM.js";const L=({matches:n})=>{var r;const l=(r=n.find(o=>o.id==="root"))==null?void 0:r.data;return[{title:`👷 | ${l==null?void 0:l.workshopTitle}`}]};function S(n,l){return n.type==="unknown"&&l.type==="unknown"?0:n.type==="unknown"?-1:l.type==="unknown"?1:0}function w(n){switch(n.type){case"workshop-instructions":return"/";case"workshop-finished":return"/finished";case"instructions":return`/${n.exerciseNumber.toString().padStart(2,"0")}`;case"step":return`/${n.exerciseNumber.toString().padStart(2,"0")}/${n.stepNumber.toString().padStart(2,"0")}`;case"finished":return`/${n.exerciseNumber.toString().padStart(2,"0")}/finished`;default:return""}}function T(){var a,d;const n=N(),l=b(),r=g(),o=((a=l.formData)==null?void 0:a.get("intent"))==="inspect",u=((d=l.formData)==null?void 0:d.get("intent"))==="stop-inspect",j={completed:"bg-blue-500",incomplete:"bg-yellow-500"};return e.jsxs("main",{className:"container mx-auto mt-8",children:[e.jsx("h1",{className:"text-4xl font-bold",children:"Admin"}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("nav",{children:e.jsxs("ul",{className:"flex gap-3",children:[e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/",children:"Home"})}),e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/diff",children:"Diff Viewer"})})]})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Progress"}),r?e.jsx("ul",{className:"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:r.sort(S).map(s=>{const t=`https://www.epicweb.dev/workshops/${n.workshopSlug}/${s.epicSectionSlug}/${s.epicLessonSlug}`,p=s.epicCompletedAt?"completed":"incomplete",h=[`${s.epicSectionSlug}/${s.epicLessonSlug}`,s.epicCompletedAt?`(${s.epicCompletedAt})`:null].filter(Boolean).join(" ");return e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-3 w-3 rounded-full ${j[p]}`,title:p}),s.type==="unknown"?e.jsxs("span",{className:"flex items-center gap-1",children:[h,e.jsx("span",{className:"text-red-500",children:e.jsx(f,{content:"This video is in the workshop on EpicWeb.dev, but not in the local workshop.",children:e.jsx(m,{name:"Close"})})})]}):e.jsx(i,{to:w(s),children:h}),e.jsx(i,{to:t,children:e.jsx(m,{name:"ExternalLink"})})]},s.epicLessonSlug)})}):e.jsx("p",{children:"No progress data"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Commands"}),e.jsxs("ul",{className:"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsx("li",{children:e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-caches",children:"Clear local caches"})})}),e.jsx("li",{children:e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-data",children:"Clear all local data (including auth data)"})})}),e.jsx("li",{children:n.inspectorRunning?e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"stop-inspect",children:o?"Stopping inspector...":"Stop inspector"})}):e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"inspect",children:u?"Starting inspector...":"Start inspector"})})})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Apps"}),e.jsx("ul",{className:"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:n.apps.map(s=>e.jsxs("li",{className:"flex items-center gap-2 py-1",children:[n.processes[s.name]?e.jsx(x,{status:"running"}):e.jsx(x,{status:"stopped"}),s.name]},s.name))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.processes).map(([s,t])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - Port: ",t.port," - PID ",t.pid," -"," ",t.color]})},s))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Test Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.testProcesses).map(([s,t])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - PID ",t.pid," - Exit code: ",t.exitCode]})},s))})]})]})]})}function x({status:n}){const l={running:{pinger:"bg-green-400",circle:"bg-green-500"},starting:{pinger:"bg-sky-400",circle:"bg-sky-500"},stopped:{circle:"bg-gray-500"},taken:{pinger:"bg-red-400",circle:"bg-red-500"}}[n];return e.jsxs("span",{className:"relative flex h-3 w-3",children:[l.pinger?e.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${l.pinger} opacity-75`}):null,e.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${l.circle}`})]})}export{T as default,L as meta};
2
- //# sourceMappingURL=_layout-MFX35ekR.js.map
1
+ import{c as b,j as e}from"./index-D6ygCrVn.js";import{I as m}from"./misc-DNgC2Frq.js";import{S as f}from"./tooltip-Kw0lYWBI.js";import{a as g}from"./progress-CF9Xwfxf.js";import{u as N,L as i,F as c}from"./components-C5xBZAiL.js";import"./clsx-B-dksMZM.js";const L=({matches:n})=>{var r;const l=(r=n.find(o=>o.id==="root"))==null?void 0:r.data;return[{title:`👷 | ${l==null?void 0:l.workshopTitle}`}]};function S(n,l){return n.type==="unknown"&&l.type==="unknown"?0:n.type==="unknown"?-1:l.type==="unknown"?1:0}function w(n){switch(n.type){case"workshop-instructions":return"/";case"workshop-finished":return"/finished";case"instructions":return`/${n.exerciseNumber.toString().padStart(2,"0")}`;case"step":return`/${n.exerciseNumber.toString().padStart(2,"0")}/${n.stepNumber.toString().padStart(2,"0")}`;case"finished":return`/${n.exerciseNumber.toString().padStart(2,"0")}/finished`;default:return""}}function T(){var a,d;const n=N(),l=b(),r=g(),o=((a=l.formData)==null?void 0:a.get("intent"))==="inspect",u=((d=l.formData)==null?void 0:d.get("intent"))==="stop-inspect",j={completed:"bg-blue-500",incomplete:"bg-yellow-500"};return e.jsxs("main",{className:"container mx-auto mt-8",children:[e.jsx("h1",{className:"text-4xl font-bold",children:"Admin"}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("nav",{children:e.jsxs("ul",{className:"flex gap-3",children:[e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/",children:"Home"})}),e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/diff",children:"Diff Viewer"})})]})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Progress"}),r?e.jsx("ul",{className:"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:r.sort(S).map(s=>{const t=`https://www.epicweb.dev/workshops/${n.workshopSlug}/${s.epicSectionSlug}/${s.epicLessonSlug}`,p=s.epicCompletedAt?"completed":"incomplete",h=[`${s.epicSectionSlug}/${s.epicLessonSlug}`,s.epicCompletedAt?`(${s.epicCompletedAt})`:null].filter(Boolean).join(" ");return e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-3 w-3 rounded-full ${j[p]}`,title:p}),s.type==="unknown"?e.jsxs("span",{className:"flex items-center gap-1",children:[h,e.jsx("span",{className:"text-red-500",children:e.jsx(f,{content:"This video is in the workshop on EpicWeb.dev, but not in the local workshop.",children:e.jsx(m,{name:"Close"})})})]}):e.jsx(i,{to:w(s),children:h}),e.jsx(i,{to:t,children:e.jsx(m,{name:"ExternalLink"})})]},s.epicLessonSlug)})}):e.jsx("p",{children:"No progress data"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Commands"}),e.jsxs("ul",{className:"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsx("li",{children:e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-caches",children:"Clear local caches"})})}),e.jsx("li",{children:e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-data",children:"Clear all local data (including auth data)"})})}),e.jsx("li",{children:n.inspectorRunning?e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"stop-inspect",children:o?"Stopping inspector...":"Stop inspector"})}):e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"inspect",children:u?"Starting inspector...":"Start inspector"})})})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Apps"}),e.jsx("ul",{className:"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:n.apps.map(s=>e.jsxs("li",{className:"flex items-center gap-2 py-1",children:[n.processes[s.name]?e.jsx(x,{status:"running"}):e.jsx(x,{status:"stopped"}),s.name]},s.name))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.processes).map(([s,t])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - Port: ",t.port," - PID ",t.pid," -"," ",t.color]})},s))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Test Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.testProcesses).map(([s,t])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - PID ",t.pid," - Exit code: ",t.exitCode]})},s))})]})]})]})}function x({status:n}){const l={running:{pinger:"bg-green-400",circle:"bg-green-500"},starting:{pinger:"bg-sky-400",circle:"bg-sky-500"},stopped:{circle:"bg-gray-500"},taken:{pinger:"bg-red-400",circle:"bg-red-500"}}[n];return e.jsxs("span",{className:"relative flex h-3 w-3",children:[l.pinger?e.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${l.pinger} opacity-75`}):null,e.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${l.circle}`})]})}export{T as default,L as meta};
2
+ //# sourceMappingURL=_layout-D0zbQZjf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_layout-D0zbQZjf.js","sources":["../../../app/routes/admin+/_layout.tsx"],"sourcesContent":["import {\n\tgetApps,\n\tgetEpicWorkshopSlug,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getProcesses } from '@epic-web/workshop-utils/process-manager.server'\nimport {\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tjson,\n\ttype ActionFunctionArgs,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport { Form, Link, useLoaderData, useNavigation } from '@remix-run/react'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport {\n\tuseEpicProgress,\n\ttype SerializedProgress,\n} from '#app/routes/progress.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport {\n\tclearCaches,\n\tclearData,\n\tstartInspector,\n\tstopInspector,\n} from './admin-utils.server.tsx'\n\ndeclare global {\n\tvar __inspector_open__: boolean | undefined\n}\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tmatches,\n}) => {\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\treturn [{ title: `👷 | ${rootData?.workshopTitle}` }]\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tconst timings = makeTimings('adminLoader')\n\tconst workshopSlug = (await getEpicWorkshopSlug()) ?? 'Unkown'\n\tconst apps = (await getApps({ request, timings })).filter(\n\t\t(a, i, ar) => ar.findIndex((b) => a.name === b.name) === i,\n\t)\n\tconst processes: Record<\n\t\tstring,\n\t\t{ port: number; pid?: number; color: string }\n\t> = {}\n\tconst testProcesses: Record<\n\t\tstring,\n\t\t{ pid?: number; exitCode?: number | null }\n\t> = {}\n\tfor (const [\n\t\tname,\n\t\t{ port, process, color },\n\t] of getProcesses().devProcesses.entries()) {\n\t\tprocesses[name] = { port, pid: process.pid, color }\n\t}\n\n\tfor (const [\n\t\tname,\n\t\t{ process, exitCode },\n\t] of getProcesses().testProcesses.entries()) {\n\t\ttestProcesses[name] = { pid: process?.pid, exitCode }\n\t}\n\treturn json(\n\t\t{\n\t\t\tapps,\n\t\t\tprocesses,\n\t\t\tworkshopSlug,\n\t\t\ttestProcesses,\n\t\t\tinspectorRunning: global.__inspector_open__,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tswitch (intent) {\n\t\tcase 'clear-data': {\n\t\t\tawait clearData()\n\t\t\treturn json({ success: true })\n\t\t}\n\t\tcase 'clear-caches': {\n\t\t\tawait clearCaches()\n\t\t\treturn json({ success: true })\n\t\t}\n\t\tcase 'inspect': {\n\t\t\tawait startInspector()\n\t\t\treturn json({ success: true })\n\t\t}\n\t\tcase 'stop-inspect': {\n\t\t\tawait stopInspector()\n\t\t\treturn json({ success: true })\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown intent: ${intent}`)\n\t\t}\n\t}\n}\n\nfunction sortProgress(a: SerializedProgress, b: SerializedProgress) {\n\treturn a.type === 'unknown' && b.type === 'unknown'\n\t\t? 0\n\t\t: a.type === 'unknown'\n\t\t\t? -1\n\t\t\t: b.type === 'unknown'\n\t\t\t\t? 1\n\t\t\t\t: 0\n}\n\nfunction linkProgress(progress: SerializedProgress) {\n\tswitch (progress.type) {\n\t\tcase 'workshop-instructions':\n\t\t\treturn '/'\n\t\tcase 'workshop-finished':\n\t\t\treturn '/finished'\n\t\tcase 'instructions':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}`\n\t\tcase 'step':\n\t\t\treturn `/${progress.exerciseNumber\n\t\t\t\t.toString()\n\t\t\t\t.padStart(2, '0')}/${progress.stepNumber.toString().padStart(2, '0')}`\n\t\tcase 'finished':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}/finished`\n\t\tdefault:\n\t\t\treturn ''\n\t}\n}\n\nexport default function AdminLayout() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst navigation = useNavigation()\n\tconst epicProgress = useEpicProgress()\n\n\tconst isStartingInspector = navigation.formData?.get('intent') === 'inspect'\n\tconst isStoppingInspector =\n\t\tnavigation.formData?.get('intent') === 'stop-inspect'\n\n\tconst progressStatus = {\n\t\tcompleted: 'bg-blue-500',\n\t\tincomplete: 'bg-yellow-500',\n\t}\n\n\treturn (\n\t\t<main className=\"container mx-auto mt-8\">\n\t\t\t<h1 className=\"text-4xl font-bold\">Admin</h1>\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<nav>\n\t\t\t\t\t<ul className=\"flex gap-3\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/\">\n\t\t\t\t\t\t\t\tHome\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/diff\">\n\t\t\t\t\t\t\t\tDiff Viewer\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</nav>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Progress</h2>\n\t\t\t\t\t{epicProgress ? (\n\t\t\t\t\t\t<ul className=\"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t\t{epicProgress.sort(sortProgress).map((progress) => {\n\t\t\t\t\t\t\t\tconst epicUrl = `https://www.epicweb.dev/workshops/${data.workshopSlug}/${progress.epicSectionSlug}/${progress.epicLessonSlug}`\n\t\t\t\t\t\t\t\tconst status = progress.epicCompletedAt\n\t\t\t\t\t\t\t\t\t? 'completed'\n\t\t\t\t\t\t\t\t\t: 'incomplete'\n\t\t\t\t\t\t\t\tconst label = [\n\t\t\t\t\t\t\t\t\t`${progress.epicSectionSlug}/${progress.epicLessonSlug}`,\n\t\t\t\t\t\t\t\t\tprogress.epicCompletedAt\n\t\t\t\t\t\t\t\t\t\t? `(${progress.epicCompletedAt})`\n\t\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\tkey={progress.epicLessonSlug}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-2\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={`h-3 w-3 rounded-full ${progressStatus[status]}`}\n\t\t\t\t\t\t\t\t\t\t\ttitle={status}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{progress.type === 'unknown' ? (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-red-500\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SimpleTooltip content=\"This video is in the workshop on EpicWeb.dev, but not in the local workshop.\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Close\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Link to={linkProgress(progress)}>{label}</Link>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Link to={epicUrl}>\n\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"ExternalLink\"></Icon>\n\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<p>No progress data</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Commands</h2>\n\t\t\t\t\t<ul className=\"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-caches\">\n\t\t\t\t\t\t\t\t\tClear local caches\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-data\">\n\t\t\t\t\t\t\t\t\tClear all local data (including auth data)\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t{data.inspectorRunning ? (\n\t\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"stop-inspect\">\n\t\t\t\t\t\t\t\t\t\t{isStartingInspector\n\t\t\t\t\t\t\t\t\t\t\t? 'Stopping inspector...'\n\t\t\t\t\t\t\t\t\t\t\t: 'Stop inspector'}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"inspect\">\n\t\t\t\t\t\t\t\t\t\t{isStoppingInspector\n\t\t\t\t\t\t\t\t\t\t\t? 'Starting inspector...'\n\t\t\t\t\t\t\t\t\t\t\t: 'Start inspector'}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Apps</h2>\n\t\t\t\t\t<ul className=\"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{data.apps.map((app) => (\n\t\t\t\t\t\t\t<li key={app.name} className=\"flex items-center gap-2 py-1\">\n\t\t\t\t\t\t\t\t{data.processes[app.name] ? (\n\t\t\t\t\t\t\t\t\t<Pinger status=\"running\" />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Pinger status=\"stopped\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{app.name}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Processes</h2>\n\t\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{Object.entries(data.processes).map(([key, process]) => (\n\t\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{key} - Port: {process.port} - PID {process.pid} -{' '}\n\t\t\t\t\t\t\t\t\t{process.color}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Test Processes</h2>\n\t\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{Object.entries(data.testProcesses).map(([key, process]) => (\n\t\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{key} - PID {process.pid} - Exit code: {process.exitCode}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nfunction Pinger({\n\tstatus,\n}: {\n\tstatus: 'running' | 'starting' | 'stopped' | 'taken'\n}) {\n\tconst colors = {\n\t\trunning: {\n\t\t\tpinger: 'bg-green-400',\n\t\t\tcircle: 'bg-green-500',\n\t\t},\n\t\tstarting: {\n\t\t\tpinger: 'bg-sky-400',\n\t\t\tcircle: 'bg-sky-500',\n\t\t},\n\t\tstopped: {\n\t\t\tcircle: 'bg-gray-500',\n\t\t},\n\t\ttaken: {\n\t\t\tpinger: 'bg-red-400',\n\t\t\tcircle: 'bg-red-500',\n\t\t},\n\t}[status]\n\treturn (\n\t\t<span className=\"relative flex h-3 w-3\">\n\t\t\t{colors.pinger ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<span\n\t\t\t\tclassName={`relative inline-flex h-3 w-3 rounded-full ${colors.circle}`}\n\t\t\t/>\n\t\t</span>\n\t)\n}\n"],"names":["meta","matches","rootData","find","m","id","data","title","workshopTitle","sortProgress","a","b","type","linkProgress","progress","exerciseNumber","toString","padStart","stepNumber","AdminLayout","useLoaderData","navigation","useNavigation","epicProgress","useEpicProgress","isStartingInspector","formData","get","isStoppingInspector","progressStatus","completed","incomplete","jsxs","className","children","jsx","Link","to","sort","map","epicUrl","workshopSlug","epicSectionSlug","epicLessonSlug","status","epicCompletedAt","label","filter","Boolean","join","SimpleTooltip","content","Icon","name","Form","method","value","inspectorRunning","apps","app","processes","Pinger","Object","entries","key","process","port","pid","color","testProcesses","exitCode","colors","running","pinger","circle","starting","stopped","taken"],"mappings":"iQAmCO,MAAMA,EAAiEA,CAAC,CAC9EC,QAAAA,CACD,IAAM,OACC,MAAAC,GAAWD,EAAAA,EAAQE,KAAMC,GAAMA,EAAEC,KAAO,MAAM,IAAnCJ,YAAAA,EAAsCK,KACvD,MAAO,CAAC,CAAEC,MAAO,QAAQL,GAAAA,YAAAA,EAAUM,aAAa,EAAG,CAAC,CACrD,EAyEA,SAASC,EAAaC,EAAuBC,EAAuB,CACnE,OAAOD,EAAEE,OAAS,WAAaD,EAAEC,OAAS,UACvC,EACAF,EAAEE,OAAS,UACV,GACAD,EAAEC,OAAS,UACV,EACA,CACN,CAEA,SAASC,EAAaC,EAA8B,CACnD,OAAQA,EAASF,KAAM,CACtB,IAAK,wBACG,MAAA,IACR,IAAK,oBACG,MAAA,YACR,IAAK,eACG,MAAA,IAAIE,EAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,CAAC,GAC/D,IAAK,OACJ,MAAO,IAAIH,EAASC,eAClBC,WACAC,SAAS,EAAG,GAAG,CAAC,IAAIH,EAASI,WAAWF,WAAWC,SAAS,EAAG,GAAG,CAAC,GACtE,IAAK,WACG,MAAA,IAAIH,EAASC,eAAeC,SAAA,EAAWC,SAAS,EAAG,GAAG,CAAC,YAC/D,QACQ,MAAA,EACT,CACD,CAEA,SAAwBE,GAAc,SACrC,MAAMb,EAAOc,IACPC,EAAaC,IACbC,EAAeC,IAEfC,IAAsBJ,EAAAA,EAAWK,WAAXL,YAAAA,EAAqBM,IAAI,aAAc,UAC7DC,IACLP,EAAAA,EAAWK,WAAXL,YAAAA,EAAqBM,IAAI,aAAc,eAElCE,EAAiB,CACtBC,UAAW,cACXC,WAAY,iBAIZ,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,yBACfC,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,qBAAqBC,SAAK,OAAA,CAAA,EACxCF,EAAA,KAAC,MAAI,CAAAC,UAAU,sBACdC,SAAA,CAAAC,EAAA,IAAC,MACA,CAAAD,SAAAF,EAAA,KAAC,KAAG,CAAAC,UAAU,aACbC,SAAA,CAACC,EAAA,IAAA,KAAA,CACAD,eAACE,EAAK,CAAAH,UAAU,YAAYI,GAAG,IAAIH,gBAEnC,CACD,CAAA,EACAC,EAAA,IAAC,MACAD,SAACC,EAAA,IAAAC,EAAA,CAAKH,UAAU,YAAYI,GAAG,QAAQH,SAAA,cAEvC,CACD,CAAA,CAAA,EACD,CACD,CAAA,SACC,MACA,CAAAA,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAQ,WAAA,EACzCX,EACCY,EAAA,IAAA,KAAA,CAAGF,UAAU,uGACZC,SAAaX,EAAAe,KAAK7B,CAAY,EAAE8B,IAAKzB,GAAa,CAC5C,MAAA0B,EAAU,qCAAqClC,EAAKmC,YAAY,IAAI3B,EAAS4B,eAAe,IAAI5B,EAAS6B,cAAc,GACvHC,EAAS9B,EAAS+B,gBACrB,YACA,aACGC,EAAQ,CACb,GAAGhC,EAAS4B,eAAe,IAAI5B,EAAS6B,cAAc,GACtD7B,EAAS+B,gBACN,IAAI/B,EAAS+B,eAAe,IAC5B,IAAA,EAEFE,OAAOC,OAAO,EACdC,KAAK,GAAG,EAET,OAAAjB,EAAAA,KAAC,KAAA,CAEAC,UAAU,0BAEVC,SAAA,CAAAC,EAAA,IAAC,OAAA,CACAF,UAAW,wBAAwBJ,EAAee,CAAM,CAAC,GACzDrC,MAAOqC,CACR,CAAA,EACC9B,EAASF,OAAS,UACjBoB,EAAAA,KAAA,OAAA,CAAKC,UAAU,0BACdC,SAAA,CAAAY,EACAX,EAAA,IAAA,OAAA,CAAKF,UAAU,eACfC,SAACC,EAAA,IAAAe,EAAA,CAAcC,QAAQ,+EACtBjB,SAACC,EAAA,IAAAiB,EAAA,CAAKC,KAAK,QAAQ,EACpB,CACD,CAAA,CAAA,CAAA,CACD,EAEClB,EAAA,IAAAC,EAAA,CAAKC,GAAIxB,EAAaC,CAAQ,EAAIoB,SAAMY,CAAA,CAAA,EAE1CX,EAAA,IAACC,GAAKC,GAAIG,EACTN,eAACkB,EAAK,CAAAC,KAAK,eAAe,CAC3B,CAAA,CAAA,CAAA,EArBKvC,EAAS6B,cAsBf,EAED,CAAA,CACF,EAEAR,EAAA,IAAC,KAAED,SAAgB,kBAAA,CAAA,CAAA,CAErB,CAAA,SACC,MACA,CAAAA,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAQ,UAAA,CAAA,EAC1CF,EAAA,KAAC,KAAG,CAAAC,UAAU,mFACbC,SAAA,CAAAC,EAAA,IAAC,KACA,CAAAD,SAAAC,EAAA,IAACmB,EAAK,CAAAC,OAAO,OACZrB,SAAAC,EAAA,IAAC,SAAO,CAAAkB,KAAK,SAASG,MAAM,eAAetB,SAAA,qBAE3C,EACD,CACD,CAAA,EACCC,EAAA,IAAA,KAAA,CACAD,SAACC,EAAA,IAAAmB,EAAA,CAAKC,OAAO,OACZrB,SAAAC,EAAA,IAAC,SAAO,CAAAkB,KAAK,SAASG,MAAM,aAAatB,SAAA,6CAEzC,EACD,CACD,CAAA,EACCC,EAAA,IAAA,KAAA,CACCD,SAAK5B,EAAAmD,uBACJH,EAAK,CAAAC,OAAO,OACZrB,SAAAC,EAAA,IAAC,SAAO,CAAAkB,KAAK,SAASG,MAAM,eAC1BtB,SACET,EAAA,wBACA,iBACJ,CAAA,CACD,EAEAU,EAAA,IAACmB,EAAK,CAAAC,OAAO,OACZrB,SAACC,EAAA,IAAA,SAAA,CAAOkB,KAAK,SAASG,MAAM,UAC1BtB,SAAAN,EACE,wBACA,kBACJ,EACD,CAEF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,SACC,MACA,CAAAM,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAI,MAAA,CAAA,EACrCC,EAAA,IAAA,KAAA,CAAGF,UAAU,6FACZC,SAAK5B,EAAAoD,KAAKnB,IAAKoB,GACf3B,EAAA,KAAC,KAAkB,CAAAC,UAAU,+BAC3BC,SAAA,CAAA5B,EAAKsD,UAAUD,EAAIN,IAAI,EACtBlB,EAAA,IAAA0B,EAAA,CAAOjB,OAAO,SAAA,CAAU,EAEzBT,EAAA,IAAC0B,EAAO,CAAAjB,OAAO,SAAU,CAAA,EAEzBe,EAAIN,IAAA,CANG,EAAAM,EAAIN,IAOb,CACA,CACF,CAAA,CAAA,CACD,CAAA,SACC,MACA,CAAAnB,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAS,WAAA,CAAA,QAC1C,KAAG,CAAAD,UAAU,0EACZC,SAAO4B,OAAAC,QAAQzD,EAAKsD,SAAS,EAAErB,IAAI,CAAC,CAACyB,EAAKC,CAAO,IAChD9B,EAAAA,IAAA,KAAA,CACAD,gBAAC,OACC,CAAAA,SAAA,CAAA8B,EAAI,YAAUC,EAAQC,KAAK,UAAQD,EAAQE,IAAI,KAAG,IAClDF,EAAQG,KAAA,EACV,CAAA,EAJQJ,CAKT,CACA,CACF,CAAA,CAAA,CACD,CAAA,SACC,MACA,CAAA9B,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAc,gBAAA,CAAA,QAC/C,KAAG,CAAAD,UAAU,0EACZC,SAAO4B,OAAAC,QAAQzD,EAAK+D,aAAa,EAAE9B,IAAI,CAAC,CAACyB,EAAKC,CAAO,IACpD9B,EAAAA,IAAA,KAAA,CACAD,gBAAC,OACC,CAAAA,SAAA,CAAA8B,EAAI,UAAQC,EAAQE,IAAI,iBAAeF,EAAQK,QAAA,EACjD,CAAA,EAHQN,CAIT,CACA,CACF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF,CAEA,SAASH,EAAO,CACfjB,OAAAA,CACD,EAEG,CACF,MAAM2B,EAAS,CACdC,QAAS,CACRC,OAAQ,eACRC,OAAQ,cACT,EACAC,SAAU,CACTF,OAAQ,aACRC,OAAQ,YACT,EACAE,QAAS,CACRF,OAAQ,aACT,EACAG,MAAO,CACNJ,OAAQ,aACRC,OAAQ,YACT,GACC9B,CAAM,EAEP,OAAAZ,EAAAA,KAAC,OAAK,CAAAC,UAAU,wBACdC,SAAA,CAAAqC,EAAOE,OACPtC,EAAAA,IAAC,OAAA,CACAF,UAAW,gEAAgEsC,EAAOE,MAAM,cACzF,EACG,KACJtC,EAAA,IAAC,OAAA,CACAF,UAAW,6CAA6CsC,EAAOG,MAAM,EAAA,CACtE,CAAA,CACD,CAAA,CAEF"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./index-D6ygCrVn.js";import{B as i}from"./button-BfWwrI9B.js";import{I as c}from"./misc-DBBsMyAP.js";import{u as d,a as m}from"./user-73ocDYRe.js";import{u}from"./presence-BJPzwbUy.js";import{u as x,a as h,L as o,F as a}from"./components-C5xBZAiL.js";import"./clsx-B-dksMZM.js";import"./request-info-Dyls4H67.js";function O(){const r=x(),l=h(),s=d(),t=m(),n=u();return e.jsxs("main",{className:"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4",children:[e.jsx("img",{className:"h-36 w-36 rounded-full",alt:(t==null?void 0:t.displayName)??s.name??s.email,src:s.avatarUrl}),e.jsx("h1",{className:"mb-1 text-2xl",children:"Your Account"}),e.jsx("p",{className:"text-center text-gray-700 dark:text-gray-300",children:s.name?`Hi ${(t==null?void 0:t.displayName)??s.name}, your device is logged in with ${s.email}.`:`Your device is logged in with ${s.email}.`}),t?e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-center text-gray-700 dark:text-gray-300",children:["And you are connected to discord as ",t.displayName," (",t.id,")."]}),e.jsx(l.Form,{method:"post",className:"mt-2",children:e.jsx(i,{varient:"mono",name:"intent",value:"disconnect-discord",children:"Disconnect Discord"})})]}):e.jsxs(o,{to:r.discordAuthUrl,className:"inline-flex items-center gap-2 underline",children:[e.jsx(c,{name:"Discord",size:"lg"}),"Connect Discord"]}),e.jsxs(a,{method:"POST",children:[e.jsx("input",{name:"optOut",type:"hidden",value:n!=null&&n.optOut?"false":"true"}),e.jsxs(i,{varient:"mono",name:"intent",value:"presence-opt-out",children:[n!=null&&n.optOut?"Opt in to":"Opt out of"," presence"]})]}),e.jsx("p",{children:e.jsxs("small",{children:["Note: it is your ",e.jsx("i",{className:"italic",children:"device"})," that's logged in, not your browser. So all browsers on this device will be logged in with the same account on this device."]})}),e.jsx(a,{method:"post",className:"mt-2",children:e.jsx(i,{varient:"primary",name:"intent",value:"logout",children:"Log out"})}),e.jsxs("p",{children:["Check"," ",e.jsx(o,{to:"/onboarding",className:"underline",children:"/onboarding"})," ","if you'd like to review onboarding again."]}),e.jsxs("p",{children:["Check"," ",e.jsx(o,{to:"/support",className:"underline",children:"/support"})," ","if you need support."]})]})}export{O as default};
2
- //# sourceMappingURL=account-Cp6A7SfU.js.map
1
+ import{j as e}from"./index-D6ygCrVn.js";import{B as i}from"./button-BfWwrI9B.js";import{I as c}from"./misc-DNgC2Frq.js";import{u as d,a as m}from"./user-73ocDYRe.js";import{u}from"./presence-BJPzwbUy.js";import{u as x,a as h,L as o,F as a}from"./components-C5xBZAiL.js";import"./clsx-B-dksMZM.js";import"./request-info-Dyls4H67.js";function O(){const r=x(),l=h(),s=d(),t=m(),n=u();return e.jsxs("main",{className:"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4",children:[e.jsx("img",{className:"h-36 w-36 rounded-full",alt:(t==null?void 0:t.displayName)??s.name??s.email,src:s.avatarUrl}),e.jsx("h1",{className:"mb-1 text-2xl",children:"Your Account"}),e.jsx("p",{className:"text-center text-gray-700 dark:text-gray-300",children:s.name?`Hi ${(t==null?void 0:t.displayName)??s.name}, your device is logged in with ${s.email}.`:`Your device is logged in with ${s.email}.`}),t?e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-center text-gray-700 dark:text-gray-300",children:["And you are connected to discord as ",t.displayName," (",t.id,")."]}),e.jsx(l.Form,{method:"post",className:"mt-2",children:e.jsx(i,{varient:"mono",name:"intent",value:"disconnect-discord",children:"Disconnect Discord"})})]}):e.jsxs(o,{to:r.discordAuthUrl,className:"inline-flex items-center gap-2 underline",children:[e.jsx(c,{name:"Discord",size:"lg"}),"Connect Discord"]}),e.jsxs(a,{method:"POST",children:[e.jsx("input",{name:"optOut",type:"hidden",value:n!=null&&n.optOut?"false":"true"}),e.jsxs(i,{varient:"mono",name:"intent",value:"presence-opt-out",children:[n!=null&&n.optOut?"Opt in to":"Opt out of"," presence"]})]}),e.jsx("p",{children:e.jsxs("small",{children:["Note: it is your ",e.jsx("i",{className:"italic",children:"device"})," that's logged in, not your browser. So all browsers on this device will be logged in with the same account on this device."]})}),e.jsx(a,{method:"post",className:"mt-2",children:e.jsx(i,{varient:"primary",name:"intent",value:"logout",children:"Log out"})}),e.jsxs("p",{children:["Check"," ",e.jsx(o,{to:"/onboarding",className:"underline",children:"/onboarding"})," ","if you'd like to review onboarding again."]}),e.jsxs("p",{children:["Check"," ",e.jsx(o,{to:"/support",className:"underline",children:"/support"})," ","if you need support."]})]})}export{O as default};
2
+ //# sourceMappingURL=account-DesvwOeg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-Cp6A7SfU.js","sources":["../../../app/routes/_app+/account.tsx"],"sourcesContent":["import { deleteCache } from '@epic-web/workshop-utils/cache.server'\nimport {\n\tdeleteDb,\n\tdeleteDiscordInfo,\n\trequireAuthInfo,\n\tsetPresencePreferences,\n} from '@epic-web/workshop-utils/db.server'\nimport { json, redirect, type LoaderFunctionArgs } from '@remix-run/node'\nimport { Form, Link, useFetcher, useLoaderData } from '@remix-run/react'\nimport { getDiscordAuthURL } from '../discord.callback.ts'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { useOptionalDiscordMember, useUser } from '#app/components/user.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { usePresencePreferences } from '#app/utils/presence.tsx'\nimport { redirectWithToast } from '#app/utils/toast.server.ts'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tawait requireAuthInfo({ request })\n\treturn json({ discordAuthUrl: getDiscordAuthURL() })\n}\n\nexport async function action({ request }: { request: Request }) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tif (intent === 'disconnect-discord') {\n\t\tawait deleteDiscordInfo()\n\t\treturn redirectWithToast('/account', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Disconnected',\n\t\t\tdescription: 'Local discord data has been deleted.',\n\t\t})\n\t} else if (intent === 'logout') {\n\t\tawait deleteDb()\n\t\tawait deleteCache()\n\t\treturn redirectWithToast('/login', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Logged out',\n\t\t\tdescription: 'Goodbye! Come back soon!',\n\t\t})\n\t} else if (intent === 'presence-opt-out') {\n\t\tconst optOut = formData.get('optOut') === 'true'\n\t\tawait setPresencePreferences({ optOut })\n\t\treturn redirectWithToast('/account', {\n\t\t\ttitle: optOut ? 'Opted out' : 'Opted in',\n\t\t\tdescription: `You are now ${optOut ? 'invisible' : 'visible'}.`,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\treturn redirect('/account')\n}\n\nexport default function Account() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst disconnectFetcher = useFetcher()\n\tconst user = useUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst presencePreferences = usePresencePreferences()\n\treturn (\n\t\t<main className=\"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4\">\n\t\t\t<img\n\t\t\t\tclassName=\"h-36 w-36 rounded-full\"\n\t\t\t\talt={discordMember?.displayName ?? user.name ?? user.email}\n\t\t\t\tsrc={user.avatarUrl}\n\t\t\t/>\n\t\t\t<h1 className=\"mb-1 text-2xl\">Your Account</h1>\n\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t{user.name\n\t\t\t\t\t? `Hi ${\n\t\t\t\t\t\t\tdiscordMember?.displayName ?? user.name\n\t\t\t\t\t\t}, your device is logged in with ${user.email}.`\n\t\t\t\t\t: `Your device is logged in with ${user.email}.`}\n\t\t\t</p>\n\t\t\t{discordMember ? (\n\t\t\t\t<>\n\t\t\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t\t\tAnd you are connected to discord as {discordMember.displayName} (\n\t\t\t\t\t\t{discordMember.id}).\n\t\t\t\t\t</p>\n\t\t\t\t\t<disconnectFetcher.Form method=\"post\" className=\"mt-2\">\n\t\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"disconnect-discord\">\n\t\t\t\t\t\t\tDisconnect Discord\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</disconnectFetcher.Form>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Link\n\t\t\t\t\tto={data.discordAuthUrl}\n\t\t\t\t\tclassName=\"inline-flex items-center gap-2 underline\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Discord\" size=\"lg\" />\n\t\t\t\t\tConnect Discord\n\t\t\t\t</Link>\n\t\t\t)}\n\t\t\t<Form method=\"POST\">\n\t\t\t\t<input\n\t\t\t\t\tname=\"optOut\"\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\tvalue={presencePreferences?.optOut ? 'false' : 'true'}\n\t\t\t\t/>\n\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"presence-opt-out\">\n\t\t\t\t\t{presencePreferences?.optOut ? 'Opt in to' : 'Opt out of'} presence\n\t\t\t\t</Button>\n\t\t\t</Form>\n\t\t\t<p>\n\t\t\t\t<small>\n\t\t\t\t\tNote: it is your <i className=\"italic\">device</i> that's logged in,\n\t\t\t\t\tnot your browser. So all browsers on this device will be logged in\n\t\t\t\t\twith the same account on this device.\n\t\t\t\t</small>\n\t\t\t</p>\n\t\t\t<Form method=\"post\" className=\"mt-2\">\n\t\t\t\t<Button varient=\"primary\" name=\"intent\" value=\"logout\">\n\t\t\t\t\tLog out\n\t\t\t\t</Button>\n\t\t\t</Form>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/onboarding\" className=\"underline\">\n\t\t\t\t\t/onboarding\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you'd like to review onboarding again.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/support\" className=\"underline\">\n\t\t\t\t\t/support\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you need support.\n\t\t\t</p>\n\t\t</main>\n\t)\n}\n"],"names":["Account","data","useLoaderData","disconnectFetcher","useFetcher","user","useUser","discordMember","useOptionalDiscordMember","presencePreferences","usePresencePreferences","jsxs","className","children","jsx","alt","displayName","name","email","src","avatarUrl","Fragment","id","Form","method","Button","varient","value","Link","to","discordAuthUrl","Icon","size","type","optOut"],"mappings":"4UAuDA,SAAwBA,GAAU,CACjC,MAAMC,EAAOC,IACPC,EAAoBC,IACpBC,EAAOC,IACPC,EAAgBC,IAChBC,EAAsBC,IAE3B,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,8FACfC,SAAA,CAAAC,EAAA,IAAC,MAAA,CACAF,UAAU,yBACVG,KAAKR,GAAAA,YAAAA,EAAeS,cAAeX,EAAKY,MAAQZ,EAAKa,MACrDC,IAAKd,EAAKe,SAAA,CACX,EACCN,EAAA,IAAA,KAAA,CAAGF,UAAU,gBAAgBC,SAAY,cAAA,CAAA,QACzC,IAAE,CAAAD,UAAU,+CACXC,SAAKR,EAAAY,YAEHV,GAAAA,YAAAA,EAAeS,cAAeX,EAAKY,uCACDZ,EAAKa,SACN,iCAAAb,EAAKa,KAC1C,IAAA,EACCX,EAECI,EAAA,KAAAU,WAAA,CAAAR,SAAA,CAACF,EAAA,KAAA,IAAA,CAAEC,UAAU,+CAA+CC,SAAA,CAAA,uCACtBN,EAAcS,YAAY,KAC9DT,EAAce,GAAG,IAAA,EACnB,QACCnB,EAAkBoB,KAAlB,CAAuBC,OAAO,OAAOZ,UAAU,OAC/CC,SAACC,EAAA,IAAAW,EAAA,CAAOC,QAAQ,OAAOT,KAAK,SAASU,MAAM,qBAAqBd,8BAEhE,CACD,CAAA,CAAA,CAAA,CACD,EAEAF,EAAA,KAACiB,EAAA,CACAC,GAAI5B,EAAK6B,eACTlB,UAAU,2CAEVC,SAAA,CAAAC,EAAA,IAACiB,EAAK,CAAAd,KAAK,UAAUe,KAAK,IAAK,CAAA,EAAE,iBAAA,CAAA,CAElC,EAEDrB,EAAA,KAACY,EAAK,CAAAC,OAAO,OACZX,SAAA,CAAAC,EAAA,IAAC,QAAA,CACAG,KAAK,SACLgB,KAAK,SACLN,MAAOlB,GAAAA,MAAAA,EAAqByB,OAAS,QAAU,MAAA,CAChD,SACCT,EAAO,CAAAC,QAAQ,OAAOT,KAAK,SAASU,MAAM,mBACzCd,SAAA,CAAAJ,GAAAA,MAAAA,EAAqByB,OAAS,YAAc,aAAa,WAAA,CAC3D,CAAA,CAAA,CACD,CAAA,EACApB,EAAA,IAAC,IACA,CAAAD,SAAAF,EAAA,KAAC,QAAM,CAAAE,SAAA,CAAA,oBACYC,EAAA,IAAA,IAAA,CAAEF,UAAU,SAASC,SAAM,QAAA,CAAA,EAAI,6HAAA,EAGlD,CACD,CAAA,EACCC,EAAA,IAAAS,EAAA,CAAKC,OAAO,OAAOZ,UAAU,OAC7BC,SAAAC,EAAA,IAACW,EAAO,CAAAC,QAAQ,UAAUT,KAAK,SAASU,MAAM,SAASd,mBAEvD,CACD,CAAA,SACC,IAAE,CAAAA,SAAA,CAAA,QACI,UACLe,EAAK,CAAAC,GAAG,cAAcjB,UAAU,YAAYC,SAE7C,aAAA,CAAA,EAAQ,IAAI,2CAAA,CAEb,CAAA,SACC,IAAE,CAAAA,SAAA,CAAA,QACI,UACLe,EAAK,CAAAC,GAAG,WAAWjB,UAAU,YAAYC,SAE1C,UAAA,CAAA,EAAQ,IAAI,sBAAA,CAEb,CAAA,CAAA,CACD,CAAA,CAEF"}
1
+ {"version":3,"file":"account-DesvwOeg.js","sources":["../../../app/routes/_app+/account.tsx"],"sourcesContent":["import { deleteCache } from '@epic-web/workshop-utils/cache.server'\nimport {\n\tdeleteDb,\n\tdeleteDiscordInfo,\n\trequireAuthInfo,\n\tsetPresencePreferences,\n} from '@epic-web/workshop-utils/db.server'\nimport { json, redirect, type LoaderFunctionArgs } from '@remix-run/node'\nimport { Form, Link, useFetcher, useLoaderData } from '@remix-run/react'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { useOptionalDiscordMember, useUser } from '#app/components/user.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { usePresencePreferences } from '#app/utils/presence.tsx'\nimport { redirectWithToast } from '#app/utils/toast.server.ts'\nimport { getDiscordAuthURL } from '../discord.callback.ts'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tawait requireAuthInfo({ request })\n\treturn json({ discordAuthUrl: getDiscordAuthURL() })\n}\n\nexport async function action({ request }: { request: Request }) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tif (intent === 'disconnect-discord') {\n\t\tawait deleteDiscordInfo()\n\t\treturn redirectWithToast('/account', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Disconnected',\n\t\t\tdescription: 'Local discord data has been deleted.',\n\t\t})\n\t} else if (intent === 'logout') {\n\t\tawait deleteDb()\n\t\tawait deleteCache()\n\t\treturn redirectWithToast('/login', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Logged out',\n\t\t\tdescription: 'Goodbye! Come back soon!',\n\t\t})\n\t} else if (intent === 'presence-opt-out') {\n\t\tconst optOut = formData.get('optOut') === 'true'\n\t\tawait setPresencePreferences({ optOut })\n\t\treturn redirectWithToast('/account', {\n\t\t\ttitle: optOut ? 'Opted out' : 'Opted in',\n\t\t\tdescription: `You are now ${optOut ? 'invisible' : 'visible'}.`,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\treturn redirect('/account')\n}\n\nexport default function Account() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst disconnectFetcher = useFetcher()\n\tconst user = useUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst presencePreferences = usePresencePreferences()\n\treturn (\n\t\t<main className=\"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4\">\n\t\t\t<img\n\t\t\t\tclassName=\"h-36 w-36 rounded-full\"\n\t\t\t\talt={discordMember?.displayName ?? user.name ?? user.email}\n\t\t\t\tsrc={user.avatarUrl}\n\t\t\t/>\n\t\t\t<h1 className=\"mb-1 text-2xl\">Your Account</h1>\n\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t{user.name\n\t\t\t\t\t? `Hi ${\n\t\t\t\t\t\t\tdiscordMember?.displayName ?? user.name\n\t\t\t\t\t\t}, your device is logged in with ${user.email}.`\n\t\t\t\t\t: `Your device is logged in with ${user.email}.`}\n\t\t\t</p>\n\t\t\t{discordMember ? (\n\t\t\t\t<>\n\t\t\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t\t\tAnd you are connected to discord as {discordMember.displayName} (\n\t\t\t\t\t\t{discordMember.id}).\n\t\t\t\t\t</p>\n\t\t\t\t\t<disconnectFetcher.Form method=\"post\" className=\"mt-2\">\n\t\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"disconnect-discord\">\n\t\t\t\t\t\t\tDisconnect Discord\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</disconnectFetcher.Form>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Link\n\t\t\t\t\tto={data.discordAuthUrl}\n\t\t\t\t\tclassName=\"inline-flex items-center gap-2 underline\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Discord\" size=\"lg\" />\n\t\t\t\t\tConnect Discord\n\t\t\t\t</Link>\n\t\t\t)}\n\t\t\t<Form method=\"POST\">\n\t\t\t\t<input\n\t\t\t\t\tname=\"optOut\"\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\tvalue={presencePreferences?.optOut ? 'false' : 'true'}\n\t\t\t\t/>\n\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"presence-opt-out\">\n\t\t\t\t\t{presencePreferences?.optOut ? 'Opt in to' : 'Opt out of'} presence\n\t\t\t\t</Button>\n\t\t\t</Form>\n\t\t\t<p>\n\t\t\t\t<small>\n\t\t\t\t\tNote: it is your <i className=\"italic\">device</i> that's logged in,\n\t\t\t\t\tnot your browser. So all browsers on this device will be logged in\n\t\t\t\t\twith the same account on this device.\n\t\t\t\t</small>\n\t\t\t</p>\n\t\t\t<Form method=\"post\" className=\"mt-2\">\n\t\t\t\t<Button varient=\"primary\" name=\"intent\" value=\"logout\">\n\t\t\t\t\tLog out\n\t\t\t\t</Button>\n\t\t\t</Form>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/onboarding\" className=\"underline\">\n\t\t\t\t\t/onboarding\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you'd like to review onboarding again.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/support\" className=\"underline\">\n\t\t\t\t\t/support\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you need support.\n\t\t\t</p>\n\t\t</main>\n\t)\n}\n"],"names":["Account","data","useLoaderData","disconnectFetcher","useFetcher","user","useUser","discordMember","useOptionalDiscordMember","presencePreferences","usePresencePreferences","jsxs","className","children","jsx","alt","displayName","name","email","src","avatarUrl","Fragment","id","Form","method","Button","varient","value","Link","to","discordAuthUrl","Icon","size","type","optOut"],"mappings":"4UAuDA,SAAwBA,GAAU,CACjC,MAAMC,EAAOC,IACPC,EAAoBC,IACpBC,EAAOC,IACPC,EAAgBC,IAChBC,EAAsBC,IAE3B,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,8FACfC,SAAA,CAAAC,EAAA,IAAC,MAAA,CACAF,UAAU,yBACVG,KAAKR,GAAAA,YAAAA,EAAeS,cAAeX,EAAKY,MAAQZ,EAAKa,MACrDC,IAAKd,EAAKe,SAAA,CACX,EACCN,EAAA,IAAA,KAAA,CAAGF,UAAU,gBAAgBC,SAAY,cAAA,CAAA,QACzC,IAAE,CAAAD,UAAU,+CACXC,SAAKR,EAAAY,KACH,OACAV,GAAAA,YAAAA,EAAeS,cAAeX,EAAKY,IACpC,mCAAmCZ,EAAKa,KAAK,IAC5C,iCAAiCb,EAAKa,KAAK,IAC/C,EACCX,EAECI,EAAA,KAAAU,WAAA,CAAAR,SAAA,CAACF,EAAA,KAAA,IAAA,CAAEC,UAAU,+CAA+CC,SAAA,CAAA,uCACtBN,EAAcS,YAAY,KAC9DT,EAAce,GAAG,IAAA,EACnB,QACCnB,EAAkBoB,KAAlB,CAAuBC,OAAO,OAAOZ,UAAU,OAC/CC,SAACC,EAAA,IAAAW,EAAA,CAAOC,QAAQ,OAAOT,KAAK,SAASU,MAAM,qBAAqBd,8BAEhE,CACD,CAAA,CAAA,CAAA,CACD,EAEAF,EAAA,KAACiB,EAAA,CACAC,GAAI5B,EAAK6B,eACTlB,UAAU,2CAEVC,SAAA,CAAAC,EAAA,IAACiB,EAAK,CAAAd,KAAK,UAAUe,KAAK,IAAK,CAAA,EAAE,iBAAA,CAAA,CAElC,EAEDrB,EAAA,KAACY,EAAK,CAAAC,OAAO,OACZX,SAAA,CAAAC,EAAA,IAAC,QAAA,CACAG,KAAK,SACLgB,KAAK,SACLN,MAAOlB,GAAAA,MAAAA,EAAqByB,OAAS,QAAU,MAAA,CAChD,SACCT,EAAO,CAAAC,QAAQ,OAAOT,KAAK,SAASU,MAAM,mBACzCd,SAAA,CAAAJ,GAAAA,MAAAA,EAAqByB,OAAS,YAAc,aAAa,WAAA,CAC3D,CAAA,CAAA,CACD,CAAA,EACApB,EAAA,IAAC,IACA,CAAAD,SAAAF,EAAA,KAAC,QAAM,CAAAE,SAAA,CAAA,oBACYC,EAAA,IAAA,IAAA,CAAEF,UAAU,SAASC,SAAM,QAAA,CAAA,EAAI,6HAAA,EAGlD,CACD,CAAA,EACCC,EAAA,IAAAS,EAAA,CAAKC,OAAO,OAAOZ,UAAU,OAC7BC,SAAAC,EAAA,IAACW,EAAO,CAAAC,QAAQ,UAAUT,KAAK,SAASU,MAAM,SAASd,mBAEvD,CACD,CAAA,SACC,IAAE,CAAAA,SAAA,CAAA,QACI,UACLe,EAAK,CAAAC,GAAG,cAAcjB,UAAU,YAAYC,SAE7C,aAAA,CAAA,EAAQ,IAAI,2CAAA,CAEb,CAAA,SACC,IAAE,CAAAA,SAAA,CAAA,QACI,UACLe,EAAK,CAAAC,GAAG,WAAWjB,UAAU,YAAYC,SAE1C,UAAA,CAAA,EAAQ,IAAI,sBAAA,CAEb,CAAA,CAAA,CACD,CAAA,CAEF"}
@@ -0,0 +1,42 @@
1
+ import{r,R as S,j as g,c as Xt}from"./index-D6ygCrVn.js";import{g as M,_ as I,$ as ye,d as D,n as Ue,e as pe,i as me,h as O,j as Zt,q,f as Ge,k as wt,l as Qt,m as Jt,o as en,r as tn,p as nn,S as ot}from"./tooltip-Kw0lYWBI.js";import{$ as on,r as St,w as rn,c as cn,A as an,L as sn,F as ln}from"./components-C5xBZAiL.js";import{c as ve}from"./clsx-B-dksMZM.js";import{I as F,d as dn,c as un}from"./misc-DNgC2Frq.js";import{M as fn}from"./mdx-BYvGbvEr.js";const pn=r.forwardRef((e,n)=>{var t;const{container:o=globalThis==null||(t=globalThis.document)===null||t===void 0?void 0:t.body,...c}=e;return o?on.createPortal(r.createElement(M.div,I({},c,{ref:n})),o):null});function Ct(e){const n=e+"CollectionProvider",[t,o]=ye(n),[c,s]=t(n,{collectionRef:{current:null},itemMap:new Map}),l=x=>{const{scope:h,children:i}=x,m=S.useRef(null),p=S.useRef(new Map).current;return S.createElement(c,{scope:h,itemMap:p,collectionRef:m},i)},a=e+"CollectionSlot",d=S.forwardRef((x,h)=>{const{scope:i,children:m}=x,p=s(a,i),f=D(h,p.collectionRef);return S.createElement(Ue,{ref:f},m)}),u=e+"CollectionItemSlot",v="data-radix-collection-item",$=S.forwardRef((x,h)=>{const{scope:i,children:m,...p}=x,f=S.useRef(null),b=D(h,f),E=s(u,i);return S.useEffect(()=>(E.itemMap.set(f,{ref:f,...p}),()=>void E.itemMap.delete(f))),S.createElement(Ue,{[v]:"",ref:b},m)});function w(x){const h=s(e+"CollectionConsumer",x);return S.useCallback(()=>{const m=h.collectionRef.current;if(!m)return[];const p=Array.from(m.querySelectorAll(`[${v}]`));return Array.from(h.itemMap.values()).sort((E,y)=>p.indexOf(E.ref.current)-p.indexOf(y.ref.current))},[h.collectionRef,h.itemMap])}return[{Provider:l,Slot:d,ItemSlot:$},w,o]}const mn=r.createContext(void 0);function Et(e){const n=r.useContext(mn);return e||n||"ltr"}const yt="Collapsible",[vn,It]=ye(yt),[hn,Xe]=vn(yt),bn=r.forwardRef((e,n)=>{const{__scopeCollapsible:t,open:o,defaultOpen:c,disabled:s,onOpenChange:l,...a}=e,[d=!1,u]=pe({prop:o,defaultProp:c,onChange:l});return r.createElement(hn,{scope:t,disabled:s,contentId:me(),open:d,onOpenToggle:r.useCallback(()=>u(v=>!v),[u])},r.createElement(M.div,I({"data-state":Ze(d),"data-disabled":s?"":void 0},a,{ref:n})))}),$n="CollapsibleTrigger",gn=r.forwardRef((e,n)=>{const{__scopeCollapsible:t,...o}=e,c=Xe($n,t);return r.createElement(M.button,I({type:"button","aria-controls":c.contentId,"aria-expanded":c.open||!1,"data-state":Ze(c.open),"data-disabled":c.disabled?"":void 0,disabled:c.disabled},o,{ref:n,onClick:O(e.onClick,c.onOpenToggle)}))}),Rt="CollapsibleContent",xn=r.forwardRef((e,n)=>{const{forceMount:t,...o}=e,c=Xe(Rt,e.__scopeCollapsible);return r.createElement(Zt,{present:t||c.open},({present:s})=>r.createElement(wn,I({},o,{ref:n,present:s})))}),wn=r.forwardRef((e,n)=>{const{__scopeCollapsible:t,present:o,children:c,...s}=e,l=Xe(Rt,t),[a,d]=r.useState(o),u=r.useRef(null),v=D(n,u),$=r.useRef(0),w=$.current,x=r.useRef(0),h=x.current,i=l.open||a,m=r.useRef(i),p=r.useRef();return r.useEffect(()=>{const f=requestAnimationFrame(()=>m.current=!1);return()=>cancelAnimationFrame(f)},[]),q(()=>{const f=u.current;if(f){p.current=p.current||{transitionDuration:f.style.transitionDuration,animationName:f.style.animationName},f.style.transitionDuration="0s",f.style.animationName="none";const b=f.getBoundingClientRect();$.current=b.height,x.current=b.width,m.current||(f.style.transitionDuration=p.current.transitionDuration,f.style.animationName=p.current.animationName),d(o)}},[l.open,o]),r.createElement(M.div,I({"data-state":Ze(l.open),"data-disabled":l.disabled?"":void 0,id:l.contentId,hidden:!i},s,{ref:v,style:{"--radix-collapsible-content-height":w?`${w}px`:void 0,"--radix-collapsible-content-width":h?`${h}px`:void 0,...e.style}}),i&&c)});function Ze(e){return e?"open":"closed"}const Sn=bn,Cn=gn,En=xn,ee="Accordion",yn=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[Qe,In,Rn]=Ct(ee),[Ie,Ur]=ye(ee,[Rn,It]),Je=It(),_t=S.forwardRef((e,n)=>{const{type:t,...o}=e,c=o,s=o;return S.createElement(Qe.Provider,{scope:e.__scopeAccordion},t==="multiple"?S.createElement(An,I({},s,{ref:n})):S.createElement(Pn,I({},c,{ref:n})))});_t.propTypes={type(e){const n=e.value||e.defaultValue;return e.type&&!["single","multiple"].includes(e.type)?new Error("Invalid prop `type` supplied to `Accordion`. Expected one of `single | multiple`."):e.type==="multiple"&&typeof n=="string"?new Error("Invalid prop `type` supplied to `Accordion`. Expected `single` when `defaultValue` or `value` is type `string`."):e.type==="single"&&Array.isArray(n)?new Error("Invalid prop `type` supplied to `Accordion`. Expected `multiple` when `defaultValue` or `value` is type `string[]`."):null}};const[Tt,_n]=Ie(ee),[Pt,Tn]=Ie(ee,{collapsible:!1}),Pn=S.forwardRef((e,n)=>{const{value:t,defaultValue:o,onValueChange:c=()=>{},collapsible:s=!1,...l}=e,[a,d]=pe({prop:t,defaultProp:o,onChange:c});return S.createElement(Tt,{scope:e.__scopeAccordion,value:a?[a]:[],onItemOpen:d,onItemClose:S.useCallback(()=>s&&d(""),[s,d])},S.createElement(Pt,{scope:e.__scopeAccordion,collapsible:s},S.createElement(At,I({},l,{ref:n}))))}),An=S.forwardRef((e,n)=>{const{value:t,defaultValue:o,onValueChange:c=()=>{},...s}=e,[l=[],a]=pe({prop:t,defaultProp:o,onChange:c}),d=S.useCallback(v=>a(($=[])=>[...$,v]),[a]),u=S.useCallback(v=>a(($=[])=>$.filter(w=>w!==v)),[a]);return S.createElement(Tt,{scope:e.__scopeAccordion,value:l,onItemOpen:d,onItemClose:u},S.createElement(Pt,{scope:e.__scopeAccordion,collapsible:!0},S.createElement(At,I({},s,{ref:n}))))}),[Nn,Re]=Ie(ee),At=S.forwardRef((e,n)=>{const{__scopeAccordion:t,disabled:o,dir:c,orientation:s="vertical",...l}=e,a=S.useRef(null),d=D(a,n),u=In(t),$=Et(c)==="ltr",w=O(e.onKeyDown,x=>{var h;if(!yn.includes(x.key))return;const i=x.target,m=u().filter(L=>{var W;return!((W=L.ref.current)!==null&&W!==void 0&&W.disabled)}),p=m.findIndex(L=>L.ref.current===i),f=m.length;if(p===-1)return;x.preventDefault();let b=p;const E=0,y=f-1,j=()=>{b=p+1,b>y&&(b=E)},T=()=>{b=p-1,b<E&&(b=y)};switch(x.key){case"Home":b=E;break;case"End":b=y;break;case"ArrowRight":s==="horizontal"&&($?j():T());break;case"ArrowDown":s==="vertical"&&j();break;case"ArrowLeft":s==="horizontal"&&($?T():j());break;case"ArrowUp":s==="vertical"&&T();break}const N=b%f;(h=m[N].ref.current)===null||h===void 0||h.focus()});return S.createElement(Nn,{scope:t,disabled:o,direction:c,orientation:s},S.createElement(Qe.Slot,{scope:t},S.createElement(M.div,I({},l,{"data-orientation":s,ref:d,onKeyDown:o?void 0:w}))))}),Ye="AccordionItem",[Mn,et]=Ie(Ye),On=S.forwardRef((e,n)=>{const{__scopeAccordion:t,value:o,...c}=e,s=Re(Ye,t),l=_n(Ye,t),a=Je(t),d=me(),u=o&&l.value.includes(o)||!1,v=s.disabled||e.disabled;return S.createElement(Mn,{scope:t,open:u,disabled:v,triggerId:d},S.createElement(Sn,I({"data-orientation":s.orientation,"data-state":Nt(u)},a,c,{ref:n,disabled:v,open:u,onOpenChange:$=>{$?l.onItemOpen(o):l.onItemClose(o)}})))}),kn="AccordionHeader",Dn=S.forwardRef((e,n)=>{const{__scopeAccordion:t,...o}=e,c=Re(ee,t),s=et(kn,t);return S.createElement(M.h3,I({"data-orientation":c.orientation,"data-state":Nt(s.open),"data-disabled":s.disabled?"":void 0},o,{ref:n}))}),rt="AccordionTrigger",Ln=S.forwardRef((e,n)=>{const{__scopeAccordion:t,...o}=e,c=Re(ee,t),s=et(rt,t),l=Tn(rt,t),a=Je(t);return S.createElement(Qe.ItemSlot,{scope:t},S.createElement(Cn,I({"aria-disabled":s.open&&!l.collapsible||void 0,"data-orientation":c.orientation,id:s.triggerId},a,o,{ref:n})))}),jn="AccordionContent",Vn=S.forwardRef((e,n)=>{const{__scopeAccordion:t,...o}=e,c=Re(ee,t),s=et(jn,t),l=Je(t);return S.createElement(En,I({role:"region","aria-labelledby":s.triggerId,"data-orientation":c.orientation},l,o,{ref:n,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}}))});function Nt(e){return e?"open":"closed"}const Fn=_t,Bn=On,Hn=Dn,Wn=Ln,Kn=Vn;function ct(e,[n,t]){return Math.min(t,Math.max(n,e))}let je=0;function Un(){r.useEffect(()=>{var e,n;const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",(e=t[0])!==null&&e!==void 0?e:at()),document.body.insertAdjacentElement("beforeend",(n=t[1])!==null&&n!==void 0?n:at()),je++,()=>{je===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(o=>o.remove()),je--}},[])}function at(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.cssText="outline: none; opacity: 0; position: fixed; pointer-events: none",e}const Ve="focusScope.autoFocusOnMount",Fe="focusScope.autoFocusOnUnmount",st={bubbles:!1,cancelable:!0},Gn=r.forwardRef((e,n)=>{const{loop:t=!1,trapped:o=!1,onMountAutoFocus:c,onUnmountAutoFocus:s,...l}=e,[a,d]=r.useState(null),u=Ge(c),v=Ge(s),$=r.useRef(null),w=D(n,i=>d(i)),x=r.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;r.useEffect(()=>{if(o){let i=function(b){if(x.paused||!a)return;const E=b.target;a.contains(E)?$.current=E:J($.current,{select:!0})},m=function(b){if(x.paused||!a)return;const E=b.relatedTarget;E!==null&&(a.contains(E)||J($.current,{select:!0}))},p=function(b){if(document.activeElement===document.body)for(const y of b)y.removedNodes.length>0&&J(a)};document.addEventListener("focusin",i),document.addEventListener("focusout",m);const f=new MutationObserver(p);return a&&f.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",i),document.removeEventListener("focusout",m),f.disconnect()}}},[o,a,x.paused]),r.useEffect(()=>{if(a){it.add(x);const i=document.activeElement;if(!a.contains(i)){const p=new CustomEvent(Ve,st);a.addEventListener(Ve,u),a.dispatchEvent(p),p.defaultPrevented||(Yn(Qn(Mt(a)),{select:!0}),document.activeElement===i&&J(a))}return()=>{a.removeEventListener(Ve,u),setTimeout(()=>{const p=new CustomEvent(Fe,st);a.addEventListener(Fe,v),a.dispatchEvent(p),p.defaultPrevented||J(i??document.body,{select:!0}),a.removeEventListener(Fe,v),it.remove(x)},0)}}},[a,u,v,x]);const h=r.useCallback(i=>{if(!t&&!o||x.paused)return;const m=i.key==="Tab"&&!i.altKey&&!i.ctrlKey&&!i.metaKey,p=document.activeElement;if(m&&p){const f=i.currentTarget,[b,E]=zn(f);b&&E?!i.shiftKey&&p===E?(i.preventDefault(),t&&J(b,{select:!0})):i.shiftKey&&p===b&&(i.preventDefault(),t&&J(E,{select:!0})):p===f&&i.preventDefault()}},[t,o,x.paused]);return r.createElement(M.div,I({tabIndex:-1},l,{ref:w,onKeyDown:h}))});function Yn(e,{select:n=!1}={}){const t=document.activeElement;for(const o of e)if(J(o,{select:n}),document.activeElement!==t)return}function zn(e){const n=Mt(e),t=lt(n,e),o=lt(n.reverse(),e);return[t,o]}function Mt(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const c=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||c?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function lt(e,n){for(const t of e)if(!qn(t,{upTo:n}))return t}function qn(e,{upTo:n}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(n!==void 0&&e===n)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function Xn(e){return e instanceof HTMLInputElement&&"select"in e}function J(e,{select:n=!1}={}){if(e&&e.focus){const t=document.activeElement;e.focus({preventScroll:!0}),e!==t&&Xn(e)&&n&&e.select()}}const it=Zn();function Zn(){let e=[];return{add(n){const t=e[0];n!==t&&(t==null||t.pause()),e=dt(e,n),e.unshift(n)},remove(n){var t;e=dt(e,n),(t=e[0])===null||t===void 0||t.resume()}}}function dt(e,n){const t=[...e],o=t.indexOf(n);return o!==-1&&t.splice(o,1),t}function Qn(e){return e.filter(n=>n.tagName!=="A")}function Jn(e){const n=r.useRef({value:e,previous:e});return r.useMemo(()=>(n.current.value!==e&&(n.current.previous=n.current.value,n.current.value=e),n.current.previous),[e])}var eo=function(e){if(typeof document>"u")return null;var n=Array.isArray(e)?e[0]:e;return n.ownerDocument.body},ae=new WeakMap,$e=new WeakMap,ge={},Be=0,Ot=function(e){return e&&(e.host||Ot(e.parentNode))},to=function(e,n){return n.map(function(t){if(e.contains(t))return t;var o=Ot(t);return o&&e.contains(o)?o:(console.error("aria-hidden",t,"in not contained inside",e,". Doing nothing"),null)}).filter(function(t){return!!t})},no=function(e,n,t,o){var c=to(n,Array.isArray(e)?e:[e]);ge[t]||(ge[t]=new WeakMap);var s=ge[t],l=[],a=new Set,d=new Set(c),u=function($){!$||a.has($)||(a.add($),u($.parentNode))};c.forEach(u);var v=function($){!$||d.has($)||Array.prototype.forEach.call($.children,function(w){if(a.has(w))v(w);else try{var x=w.getAttribute(o),h=x!==null&&x!=="false",i=(ae.get(w)||0)+1,m=(s.get(w)||0)+1;ae.set(w,i),s.set(w,m),l.push(w),i===1&&h&&$e.set(w,!0),m===1&&w.setAttribute(t,"true"),h||w.setAttribute(o,"true")}catch(p){console.error("aria-hidden: cannot operate on ",w,p)}})};return v(n),a.clear(),Be++,function(){l.forEach(function($){var w=ae.get($)-1,x=s.get($)-1;ae.set($,w),s.set($,x),w||($e.has($)||$.removeAttribute(o),$e.delete($)),x||$.removeAttribute(t)}),Be--,Be||(ae=new WeakMap,ae=new WeakMap,$e=new WeakMap,ge={})}},oo=function(e,n,t){t===void 0&&(t="data-aria-hidden");var o=Array.from(Array.isArray(e)?e:[e]),c=eo(e);return c?(o.push.apply(o,Array.from(c.querySelectorAll("[aria-live]"))),no(o,c,t,"aria-hidden")):function(){return null}},G=function(){return G=Object.assign||function(n){for(var t,o=1,c=arguments.length;o<c;o++){t=arguments[o];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s])}return n},G.apply(this,arguments)};function kt(e,n){var t={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&n.indexOf(o)<0&&(t[o]=e[o]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var c=0,o=Object.getOwnPropertySymbols(e);c<o.length;c++)n.indexOf(o[c])<0&&Object.prototype.propertyIsEnumerable.call(e,o[c])&&(t[o[c]]=e[o[c]]);return t}function ro(e,n,t){if(t||arguments.length===2)for(var o=0,c=n.length,s;o<c;o++)(s||!(o in n))&&(s||(s=Array.prototype.slice.call(n,0,o)),s[o]=n[o]);return e.concat(s||Array.prototype.slice.call(n))}var Ce="right-scroll-bar-position",Ee="width-before-scroll-bar",co="with-scroll-bars-hidden",ao="--removed-body-scroll-bar-size";function He(e,n){return typeof e=="function"?e(n):e&&(e.current=n),e}function so(e,n){var t=r.useState(function(){return{value:e,callback:n,facade:{get current(){return t.value},set current(o){var c=t.value;c!==o&&(t.value=o,t.callback(o,c))}}}})[0];return t.callback=n,t.facade}var lo=typeof window<"u"?r.useLayoutEffect:r.useEffect,ut=new WeakMap;function io(e,n){var t=so(null,function(o){return e.forEach(function(c){return He(c,o)})});return lo(function(){var o=ut.get(t);if(o){var c=new Set(o),s=new Set(e),l=t.current;c.forEach(function(a){s.has(a)||He(a,null)}),s.forEach(function(a){c.has(a)||He(a,l)})}ut.set(t,e)},[e]),t}function uo(e){return e}function fo(e,n){n===void 0&&(n=uo);var t=[],o=!1,c={read:function(){if(o)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return t.length?t[t.length-1]:e},useMedium:function(s){var l=n(s,o);return t.push(l),function(){t=t.filter(function(a){return a!==l})}},assignSyncMedium:function(s){for(o=!0;t.length;){var l=t;t=[],l.forEach(s)}t={push:function(a){return s(a)},filter:function(){return t}}},assignMedium:function(s){o=!0;var l=[];if(t.length){var a=t;t=[],a.forEach(s),l=t}var d=function(){var v=l;l=[],v.forEach(s)},u=function(){return Promise.resolve().then(d)};u(),t={push:function(v){l.push(v),u()},filter:function(v){return l=l.filter(v),t}}}};return c}function po(e){e===void 0&&(e={});var n=fo(null);return n.options=G({async:!0,ssr:!1},e),n}var Dt=function(e){var n=e.sideCar,t=kt(e,["sideCar"]);if(!n)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var o=n.read();if(!o)throw new Error("Sidecar medium not found");return r.createElement(o,G({},t))};Dt.isSideCarExport=!0;function mo(e,n){return e.useMedium(n),Dt}var Lt=po(),We=function(){},_e=r.forwardRef(function(e,n){var t=r.useRef(null),o=r.useState({onScrollCapture:We,onWheelCapture:We,onTouchMoveCapture:We}),c=o[0],s=o[1],l=e.forwardProps,a=e.children,d=e.className,u=e.removeScrollBar,v=e.enabled,$=e.shards,w=e.sideCar,x=e.noIsolation,h=e.inert,i=e.allowPinchZoom,m=e.as,p=m===void 0?"div":m,f=kt(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as"]),b=w,E=io([t,n]),y=G(G({},f),c);return r.createElement(r.Fragment,null,v&&r.createElement(b,{sideCar:Lt,removeScrollBar:u,shards:$,noIsolation:x,inert:h,setCallbacks:s,allowPinchZoom:!!i,lockRef:t}),l?r.cloneElement(r.Children.only(a),G(G({},y),{ref:E})):r.createElement(p,G({},y,{className:d,ref:E}),a))});_e.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};_e.classNames={fullWidth:Ee,zeroRight:Ce};var vo=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function ho(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var n=vo();return n&&e.setAttribute("nonce",n),e}function bo(e,n){e.styleSheet?e.styleSheet.cssText=n:e.appendChild(document.createTextNode(n))}function $o(e){var n=document.head||document.getElementsByTagName("head")[0];n.appendChild(e)}var go=function(){var e=0,n=null;return{add:function(t){e==0&&(n=ho())&&(bo(n,t),$o(n)),e++},remove:function(){e--,!e&&n&&(n.parentNode&&n.parentNode.removeChild(n),n=null)}}},xo=function(){var e=go();return function(n,t){r.useEffect(function(){return e.add(n),function(){e.remove()}},[n&&t])}},jt=function(){var e=xo(),n=function(t){var o=t.styles,c=t.dynamic;return e(o,c),null};return n},wo={left:0,top:0,right:0,gap:0},Ke=function(e){return parseInt(e||"",10)||0},So=function(e){var n=window.getComputedStyle(document.body),t=n[e==="padding"?"paddingLeft":"marginLeft"],o=n[e==="padding"?"paddingTop":"marginTop"],c=n[e==="padding"?"paddingRight":"marginRight"];return[Ke(t),Ke(o),Ke(c)]},Co=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return wo;var n=So(e),t=document.documentElement.clientWidth,o=window.innerWidth;return{left:n[0],top:n[1],right:n[2],gap:Math.max(0,o-t+n[2]-n[0])}},Eo=jt(),ie="data-scroll-locked",yo=function(e,n,t,o){var c=e.left,s=e.top,l=e.right,a=e.gap;return t===void 0&&(t="margin"),`
2
+ .`.concat(co,` {
3
+ overflow: hidden `).concat(o,`;
4
+ padding-right: `).concat(a,"px ").concat(o,`;
5
+ }
6
+ body[`).concat(ie,`] {
7
+ overflow: hidden `).concat(o,`;
8
+ overscroll-behavior: contain;
9
+ `).concat([n&&"position: relative ".concat(o,";"),t==="margin"&&`
10
+ padding-left: `.concat(c,`px;
11
+ padding-top: `).concat(s,`px;
12
+ padding-right: `).concat(l,`px;
13
+ margin-left:0;
14
+ margin-top:0;
15
+ margin-right: `).concat(a,"px ").concat(o,`;
16
+ `),t==="padding"&&"padding-right: ".concat(a,"px ").concat(o,";")].filter(Boolean).join(""),`
17
+ }
18
+
19
+ .`).concat(Ce,` {
20
+ right: `).concat(a,"px ").concat(o,`;
21
+ }
22
+
23
+ .`).concat(Ee,` {
24
+ margin-right: `).concat(a,"px ").concat(o,`;
25
+ }
26
+
27
+ .`).concat(Ce," .").concat(Ce,` {
28
+ right: 0 `).concat(o,`;
29
+ }
30
+
31
+ .`).concat(Ee," .").concat(Ee,` {
32
+ margin-right: 0 `).concat(o,`;
33
+ }
34
+
35
+ body[`).concat(ie,`] {
36
+ `).concat(ao,": ").concat(a,`px;
37
+ }
38
+ `)},ft=function(){var e=parseInt(document.body.getAttribute(ie)||"0",10);return isFinite(e)?e:0},Io=function(){r.useEffect(function(){return document.body.setAttribute(ie,(ft()+1).toString()),function(){var e=ft()-1;e<=0?document.body.removeAttribute(ie):document.body.setAttribute(ie,e.toString())}},[])},Ro=function(e){var n=e.noRelative,t=e.noImportant,o=e.gapMode,c=o===void 0?"margin":o;Io();var s=r.useMemo(function(){return Co(c)},[c]);return r.createElement(Eo,{styles:yo(s,!n,c,t?"":"!important")})},ze=!1;if(typeof window<"u")try{var xe=Object.defineProperty({},"passive",{get:function(){return ze=!0,!0}});window.addEventListener("test",xe,xe),window.removeEventListener("test",xe,xe)}catch{ze=!1}var se=ze?{passive:!1}:!1,_o=function(e){return e.tagName==="TEXTAREA"},Vt=function(e,n){var t=window.getComputedStyle(e);return t[n]!=="hidden"&&!(t.overflowY===t.overflowX&&!_o(e)&&t[n]==="visible")},To=function(e){return Vt(e,"overflowY")},Po=function(e){return Vt(e,"overflowX")},pt=function(e,n){var t=n;do{typeof ShadowRoot<"u"&&t instanceof ShadowRoot&&(t=t.host);var o=Ft(e,t);if(o){var c=Bt(e,t),s=c[1],l=c[2];if(s>l)return!0}t=t.parentNode}while(t&&t!==document.body);return!1},Ao=function(e){var n=e.scrollTop,t=e.scrollHeight,o=e.clientHeight;return[n,t,o]},No=function(e){var n=e.scrollLeft,t=e.scrollWidth,o=e.clientWidth;return[n,t,o]},Ft=function(e,n){return e==="v"?To(n):Po(n)},Bt=function(e,n){return e==="v"?Ao(n):No(n)},Mo=function(e,n){return e==="h"&&n==="rtl"?-1:1},Oo=function(e,n,t,o,c){var s=Mo(e,window.getComputedStyle(n).direction),l=s*o,a=t.target,d=n.contains(a),u=!1,v=l>0,$=0,w=0;do{var x=Bt(e,a),h=x[0],i=x[1],m=x[2],p=i-m-s*h;(h||p)&&Ft(e,a)&&($+=p,w+=h),a=a.parentNode}while(!d&&a!==document.body||d&&(n.contains(a)||n===a));return(v&&($===0||!c)||!v&&(w===0||!c))&&(u=!0),u},we=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},mt=function(e){return[e.deltaX,e.deltaY]},vt=function(e){return e&&"current"in e?e.current:e},ko=function(e,n){return e[0]===n[0]&&e[1]===n[1]},Do=function(e){return`
39
+ .block-interactivity-`.concat(e,` {pointer-events: none;}
40
+ .allow-interactivity-`).concat(e,` {pointer-events: all;}
41
+ `)},Lo=0,le=[];function jo(e){var n=r.useRef([]),t=r.useRef([0,0]),o=r.useRef(),c=r.useState(Lo++)[0],s=r.useState(function(){return jt()})[0],l=r.useRef(e);r.useEffect(function(){l.current=e},[e]),r.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(c));var i=ro([e.lockRef.current],(e.shards||[]).map(vt),!0).filter(Boolean);return i.forEach(function(m){return m.classList.add("allow-interactivity-".concat(c))}),function(){document.body.classList.remove("block-interactivity-".concat(c)),i.forEach(function(m){return m.classList.remove("allow-interactivity-".concat(c))})}}},[e.inert,e.lockRef.current,e.shards]);var a=r.useCallback(function(i,m){if("touches"in i&&i.touches.length===2)return!l.current.allowPinchZoom;var p=we(i),f=t.current,b="deltaX"in i?i.deltaX:f[0]-p[0],E="deltaY"in i?i.deltaY:f[1]-p[1],y,j=i.target,T=Math.abs(b)>Math.abs(E)?"h":"v";if("touches"in i&&T==="h"&&j.type==="range")return!1;var N=pt(T,j);if(!N)return!0;if(N?y=T:(y=T==="v"?"h":"v",N=pt(T,j)),!N)return!1;if(!o.current&&"changedTouches"in i&&(b||E)&&(o.current=y),!y)return!0;var L=o.current||y;return Oo(L,m,i,L==="h"?b:E,!0)},[]),d=r.useCallback(function(i){var m=i;if(!(!le.length||le[le.length-1]!==s)){var p="deltaY"in m?mt(m):we(m),f=n.current.filter(function(y){return y.name===m.type&&y.target===m.target&&ko(y.delta,p)})[0];if(f&&f.should){m.cancelable&&m.preventDefault();return}if(!f){var b=(l.current.shards||[]).map(vt).filter(Boolean).filter(function(y){return y.contains(m.target)}),E=b.length>0?a(m,b[0]):!l.current.noIsolation;E&&m.cancelable&&m.preventDefault()}}},[]),u=r.useCallback(function(i,m,p,f){var b={name:i,delta:m,target:p,should:f};n.current.push(b),setTimeout(function(){n.current=n.current.filter(function(E){return E!==b})},1)},[]),v=r.useCallback(function(i){t.current=we(i),o.current=void 0},[]),$=r.useCallback(function(i){u(i.type,mt(i),i.target,a(i,e.lockRef.current))},[]),w=r.useCallback(function(i){u(i.type,we(i),i.target,a(i,e.lockRef.current))},[]);r.useEffect(function(){return le.push(s),e.setCallbacks({onScrollCapture:$,onWheelCapture:$,onTouchMoveCapture:w}),document.addEventListener("wheel",d,se),document.addEventListener("touchmove",d,se),document.addEventListener("touchstart",v,se),function(){le=le.filter(function(i){return i!==s}),document.removeEventListener("wheel",d,se),document.removeEventListener("touchmove",d,se),document.removeEventListener("touchstart",v,se)}},[]);var x=e.removeScrollBar,h=e.inert;return r.createElement(r.Fragment,null,h?r.createElement(s,{styles:Do(c)}):null,x?r.createElement(Ro,{gapMode:"margin"}):null)}const Vo=mo(Lt,jo);var Ht=r.forwardRef(function(e,n){return r.createElement(_e,G({},e,{ref:n,sideCar:Vo}))});Ht.classNames=_e.classNames;const Fo=[" ","Enter","ArrowUp","ArrowDown"],Bo=[" ","Enter"],Te="Select",[Pe,Ae,Ho]=Ct(Te),[ue,Gr]=ye(Te,[Ho,wt]),tt=wt(),[Wo,ne]=ue(Te),[Ko,Uo]=ue(Te),Go=e=>{const{__scopeSelect:n,children:t,open:o,defaultOpen:c,onOpenChange:s,value:l,defaultValue:a,onValueChange:d,dir:u,name:v,autoComplete:$,disabled:w,required:x}=e,h=tt(n),[i,m]=r.useState(null),[p,f]=r.useState(null),[b,E]=r.useState(!1),y=Et(u),[j=!1,T]=pe({prop:o,defaultProp:c,onChange:s}),[N,L]=pe({prop:l,defaultProp:a,onChange:d}),W=r.useRef(null),te=i?!!i.closest("form"):!0,[K,X]=r.useState(new Set),Z=Array.from(K).map(k=>k.props.value).join(";");return r.createElement(Qt,h,r.createElement(Wo,{required:x,scope:n,trigger:i,onTriggerChange:m,valueNode:p,onValueNodeChange:f,valueNodeHasChildren:b,onValueNodeHasChildrenChange:E,contentId:me(),value:N,onValueChange:L,open:j,onOpenChange:T,dir:y,triggerPointerDownPosRef:W,disabled:w},r.createElement(Pe.Provider,{scope:n},r.createElement(Ko,{scope:e.__scopeSelect,onNativeOptionAdd:r.useCallback(k=>{X(U=>new Set(U).add(k))},[]),onNativeOptionRemove:r.useCallback(k=>{X(U=>{const Y=new Set(U);return Y.delete(k),Y})},[])},t)),te?r.createElement(Yt,{key:Z,"aria-hidden":!0,required:x,tabIndex:-1,name:v,autoComplete:$,value:N,onChange:k=>L(k.target.value),disabled:w},N===void 0?r.createElement("option",{value:""}):null,Array.from(K)):null))},Yo="SelectTrigger",zo=r.forwardRef((e,n)=>{const{__scopeSelect:t,disabled:o=!1,...c}=e,s=tt(t),l=ne(Yo,t),a=l.disabled||o,d=D(n,l.onTriggerChange),u=Ae(t),[v,$,w]=zt(h=>{const i=u().filter(f=>!f.disabled),m=i.find(f=>f.value===l.value),p=qt(i,h,m);p!==void 0&&l.onValueChange(p.value)}),x=()=>{a||(l.onOpenChange(!0),w())};return r.createElement(Jt,I({asChild:!0},s),r.createElement(M.button,I({type:"button",role:"combobox","aria-controls":l.contentId,"aria-expanded":l.open,"aria-required":l.required,"aria-autocomplete":"none",dir:l.dir,"data-state":l.open?"open":"closed",disabled:a,"data-disabled":a?"":void 0,"data-placeholder":Gt(l.value)?"":void 0},c,{ref:d,onClick:O(c.onClick,h=>{h.currentTarget.focus()}),onPointerDown:O(c.onPointerDown,h=>{const i=h.target;i.hasPointerCapture(h.pointerId)&&i.releasePointerCapture(h.pointerId),h.button===0&&h.ctrlKey===!1&&(x(),l.triggerPointerDownPosRef.current={x:Math.round(h.pageX),y:Math.round(h.pageY)},h.preventDefault())}),onKeyDown:O(c.onKeyDown,h=>{const i=v.current!=="";!(h.ctrlKey||h.altKey||h.metaKey)&&h.key.length===1&&$(h.key),!(i&&h.key===" ")&&Fo.includes(h.key)&&(x(),h.preventDefault())})})))}),qo="SelectValue",Xo=r.forwardRef((e,n)=>{const{__scopeSelect:t,className:o,style:c,children:s,placeholder:l="",...a}=e,d=ne(qo,t),{onValueNodeHasChildrenChange:u}=d,v=s!==void 0,$=D(n,d.onValueNodeChange);return q(()=>{u(v)},[u,v]),r.createElement(M.span,I({},a,{ref:$,style:{pointerEvents:"none"}}),Gt(d.value)?r.createElement(r.Fragment,null,l):s)}),Zo=r.forwardRef((e,n)=>{const{__scopeSelect:t,children:o,...c}=e;return r.createElement(M.span,I({"aria-hidden":!0},c,{ref:n}),o||"▼")}),Qo=e=>r.createElement(pn,I({asChild:!0},e)),de="SelectContent",Jo=r.forwardRef((e,n)=>{const t=ne(de,e.__scopeSelect),[o,c]=r.useState();if(q(()=>{c(new DocumentFragment)},[]),!t.open){const s=o;return s?St.createPortal(r.createElement(Wt,{scope:e.__scopeSelect},r.createElement(Pe.Slot,{scope:e.__scopeSelect},r.createElement("div",null,e.children))),s):null}return r.createElement(er,I({},e,{ref:n}))}),z=10,[Wt,oe]=ue(de),er=r.forwardRef((e,n)=>{const{__scopeSelect:t,position:o="item-aligned",onCloseAutoFocus:c,onEscapeKeyDown:s,onPointerDownOutside:l,side:a,sideOffset:d,align:u,alignOffset:v,arrowPadding:$,collisionBoundary:w,collisionPadding:x,sticky:h,hideWhenDetached:i,avoidCollisions:m,...p}=e,f=ne(de,t),[b,E]=r.useState(null),[y,j]=r.useState(null),T=D(n,C=>E(C)),[N,L]=r.useState(null),[W,te]=r.useState(null),K=Ae(t),[X,Z]=r.useState(!1),k=r.useRef(!1);r.useEffect(()=>{if(b)return oo(b)},[b]),Un();const U=r.useCallback(C=>{const[P,...V]=K().map(_=>_.ref.current),[A]=V.slice(-1),R=document.activeElement;for(const _ of C)if(_===R||(_==null||_.scrollIntoView({block:"nearest"}),_===P&&y&&(y.scrollTop=0),_===A&&y&&(y.scrollTop=y.scrollHeight),_==null||_.focus(),document.activeElement!==R))return},[K,y]),Y=r.useCallback(()=>U([N,b]),[U,N,b]);r.useEffect(()=>{X&&Y()},[X,Y]);const{onOpenChange:re,triggerPointerDownPosRef:Q}=f;r.useEffect(()=>{if(b){let C={x:0,y:0};const P=A=>{var R,_,B,H;C={x:Math.abs(Math.round(A.pageX)-((R=(_=Q.current)===null||_===void 0?void 0:_.x)!==null&&R!==void 0?R:0)),y:Math.abs(Math.round(A.pageY)-((B=(H=Q.current)===null||H===void 0?void 0:H.y)!==null&&B!==void 0?B:0))}},V=A=>{C.x<=10&&C.y<=10?A.preventDefault():b.contains(A.target)||re(!1),document.removeEventListener("pointermove",P),Q.current=null};return Q.current!==null&&(document.addEventListener("pointermove",P),document.addEventListener("pointerup",V,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",P),document.removeEventListener("pointerup",V,{capture:!0})}}},[b,re,Q]),r.useEffect(()=>{const C=()=>re(!1);return window.addEventListener("blur",C),window.addEventListener("resize",C),()=>{window.removeEventListener("blur",C),window.removeEventListener("resize",C)}},[re]);const[Ne,he]=zt(C=>{const P=K().filter(R=>!R.disabled),V=P.find(R=>R.ref.current===document.activeElement),A=qt(P,C,V);A&&setTimeout(()=>A.ref.current.focus())}),Me=r.useCallback((C,P,V)=>{const A=!k.current&&!V;(f.value!==void 0&&f.value===P||A)&&(L(C),A&&(k.current=!0))},[f.value]),Oe=r.useCallback(()=>b==null?void 0:b.focus(),[b]),ce=r.useCallback((C,P,V)=>{const A=!k.current&&!V;(f.value!==void 0&&f.value===P||A)&&te(C)},[f.value]),be=o==="popper"?ht:tr,fe=be===ht?{side:a,sideOffset:d,align:u,alignOffset:v,arrowPadding:$,collisionBoundary:w,collisionPadding:x,sticky:h,hideWhenDetached:i,avoidCollisions:m}:{};return r.createElement(Wt,{scope:t,content:b,viewport:y,onViewportChange:j,itemRefCallback:Me,selectedItem:N,onItemLeave:Oe,itemTextRefCallback:ce,focusSelectedItem:Y,selectedItemText:W,position:o,isPositioned:X,searchRef:Ne},r.createElement(Ht,{as:Ue,allowPinchZoom:!0},r.createElement(Gn,{asChild:!0,trapped:f.open,onMountAutoFocus:C=>{C.preventDefault()},onUnmountAutoFocus:O(c,C=>{var P;(P=f.trigger)===null||P===void 0||P.focus({preventScroll:!0}),C.preventDefault()})},r.createElement(en,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:s,onPointerDownOutside:l,onFocusOutside:C=>C.preventDefault(),onDismiss:()=>f.onOpenChange(!1)},r.createElement(be,I({role:"listbox",id:f.contentId,"data-state":f.open?"open":"closed",dir:f.dir,onContextMenu:C=>C.preventDefault()},p,fe,{onPlaced:()=>Z(!0),ref:T,style:{display:"flex",flexDirection:"column",outline:"none",...p.style},onKeyDown:O(p.onKeyDown,C=>{const P=C.ctrlKey||C.altKey||C.metaKey;if(C.key==="Tab"&&C.preventDefault(),!P&&C.key.length===1&&he(C.key),["ArrowUp","ArrowDown","Home","End"].includes(C.key)){let A=K().filter(R=>!R.disabled).map(R=>R.ref.current);if(["ArrowUp","End"].includes(C.key)&&(A=A.slice().reverse()),["ArrowUp","ArrowDown"].includes(C.key)){const R=C.target,_=A.indexOf(R);A=A.slice(_+1)}setTimeout(()=>U(A)),C.preventDefault()}})}))))))}),tr=r.forwardRef((e,n)=>{const{__scopeSelect:t,onPlaced:o,...c}=e,s=ne(de,t),l=oe(de,t),[a,d]=r.useState(null),[u,v]=r.useState(null),$=D(n,T=>v(T)),w=Ae(t),x=r.useRef(!1),h=r.useRef(!0),{viewport:i,selectedItem:m,selectedItemText:p,focusSelectedItem:f}=l,b=r.useCallback(()=>{if(s.trigger&&s.valueNode&&a&&u&&i&&m&&p){const T=s.trigger.getBoundingClientRect(),N=u.getBoundingClientRect(),L=s.valueNode.getBoundingClientRect(),W=p.getBoundingClientRect();if(s.dir!=="rtl"){const R=W.left-N.left,_=L.left-R,B=T.left-_,H=T.width+B,ke=Math.max(H,N.width),De=window.innerWidth-z,Le=ct(_,[z,De-ke]);a.style.minWidth=H+"px",a.style.left=Le+"px"}else{const R=N.right-W.right,_=window.innerWidth-L.right-R,B=window.innerWidth-T.right-_,H=T.width+B,ke=Math.max(H,N.width),De=window.innerWidth-z,Le=ct(_,[z,De-ke]);a.style.minWidth=H+"px",a.style.right=Le+"px"}const te=w(),K=window.innerHeight-z*2,X=i.scrollHeight,Z=window.getComputedStyle(u),k=parseInt(Z.borderTopWidth,10),U=parseInt(Z.paddingTop,10),Y=parseInt(Z.borderBottomWidth,10),re=parseInt(Z.paddingBottom,10),Q=k+U+X+re+Y,Ne=Math.min(m.offsetHeight*5,Q),he=window.getComputedStyle(i),Me=parseInt(he.paddingTop,10),Oe=parseInt(he.paddingBottom,10),ce=T.top+T.height/2-z,be=K-ce,fe=m.offsetHeight/2,C=m.offsetTop+fe,P=k+U+C,V=Q-P;if(P<=ce){const R=m===te[te.length-1].ref.current;a.style.bottom="0px";const _=u.clientHeight-i.offsetTop-i.offsetHeight,B=Math.max(be,fe+(R?Oe:0)+_+Y),H=P+B;a.style.height=H+"px"}else{const R=m===te[0].ref.current;a.style.top="0px";const B=Math.max(ce,k+i.offsetTop+(R?Me:0)+fe)+V;a.style.height=B+"px",i.scrollTop=P-ce+i.offsetTop}a.style.margin=`${z}px 0`,a.style.minHeight=Ne+"px",a.style.maxHeight=K+"px",o==null||o(),requestAnimationFrame(()=>x.current=!0)}},[w,s.trigger,s.valueNode,a,u,i,m,p,s.dir,o]);q(()=>b(),[b]);const[E,y]=r.useState();q(()=>{u&&y(window.getComputedStyle(u).zIndex)},[u]);const j=r.useCallback(T=>{T&&h.current===!0&&(b(),f==null||f(),h.current=!1)},[b,f]);return r.createElement(nr,{scope:t,contentWrapper:a,shouldExpandOnScrollRef:x,onScrollButtonChange:j},r.createElement("div",{ref:d,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:E}},r.createElement(M.div,I({},c,{ref:$,style:{boxSizing:"border-box",maxHeight:"100%",...c.style}}))))}),ht=r.forwardRef((e,n)=>{const{__scopeSelect:t,align:o="start",collisionPadding:c=z,...s}=e,l=tt(t);return r.createElement(nn,I({},l,s,{ref:n,align:o,collisionPadding:c,style:{boxSizing:"border-box",...s.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}}))}),[nr,nt]=ue(de,{}),bt="SelectViewport",or=r.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,c=oe(bt,t),s=nt(bt,t),l=D(n,c.onViewportChange),a=r.useRef(0);return r.createElement(r.Fragment,null,r.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"}}),r.createElement(Pe.Slot,{scope:t},r.createElement(M.div,I({"data-radix-select-viewport":"",role:"presentation"},o,{ref:l,style:{position:"relative",flex:1,overflow:"auto",...o.style},onScroll:O(o.onScroll,d=>{const u=d.currentTarget,{contentWrapper:v,shouldExpandOnScrollRef:$}=s;if($!=null&&$.current&&v){const w=Math.abs(a.current-u.scrollTop);if(w>0){const x=window.innerHeight-z*2,h=parseFloat(v.style.minHeight),i=parseFloat(v.style.height),m=Math.max(h,i);if(m<x){const p=m+w,f=Math.min(x,p),b=p-f;v.style.height=f+"px",v.style.bottom==="0px"&&(u.scrollTop=b>0?b:0,v.style.justifyContent="flex-end")}}}a.current=u.scrollTop})}))))}),rr="SelectGroup",[cr,ar]=ue(rr),sr=r.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,c=me();return r.createElement(cr,{scope:t,id:c},r.createElement(M.div,I({role:"group","aria-labelledby":c},o,{ref:n})))}),lr="SelectLabel",ir=r.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e,c=ar(lr,t);return r.createElement(M.div,I({id:c.id},o,{ref:n}))}),qe="SelectItem",[dr,Kt]=ue(qe),ur=r.forwardRef((e,n)=>{const{__scopeSelect:t,value:o,disabled:c=!1,textValue:s,...l}=e,a=ne(qe,t),d=oe(qe,t),u=a.value===o,[v,$]=r.useState(s??""),[w,x]=r.useState(!1),h=D(n,p=>{var f;return(f=d.itemRefCallback)===null||f===void 0?void 0:f.call(d,p,o,c)}),i=me(),m=()=>{c||(a.onValueChange(o),a.onOpenChange(!1))};if(o==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return r.createElement(dr,{scope:t,value:o,disabled:c,textId:i,isSelected:u,onItemTextChange:r.useCallback(p=>{$(f=>{var b;return f||((b=p==null?void 0:p.textContent)!==null&&b!==void 0?b:"").trim()})},[])},r.createElement(Pe.ItemSlot,{scope:t,value:o,disabled:c,textValue:v},r.createElement(M.div,I({role:"option","aria-labelledby":i,"data-highlighted":w?"":void 0,"aria-selected":u&&w,"data-state":u?"checked":"unchecked","aria-disabled":c||void 0,"data-disabled":c?"":void 0,tabIndex:c?void 0:-1},l,{ref:h,onFocus:O(l.onFocus,()=>x(!0)),onBlur:O(l.onBlur,()=>x(!1)),onPointerUp:O(l.onPointerUp,m),onPointerMove:O(l.onPointerMove,p=>{if(c){var f;(f=d.onItemLeave)===null||f===void 0||f.call(d)}else p.currentTarget.focus({preventScroll:!0})}),onPointerLeave:O(l.onPointerLeave,p=>{if(p.currentTarget===document.activeElement){var f;(f=d.onItemLeave)===null||f===void 0||f.call(d)}}),onKeyDown:O(l.onKeyDown,p=>{var f;((f=d.searchRef)===null||f===void 0?void 0:f.current)!==""&&p.key===" "||(Bo.includes(p.key)&&m(),p.key===" "&&p.preventDefault())})}))))}),Se="SelectItemText",fr=r.forwardRef((e,n)=>{const{__scopeSelect:t,className:o,style:c,...s}=e,l=ne(Se,t),a=oe(Se,t),d=Kt(Se,t),u=Uo(Se,t),[v,$]=r.useState(null),w=D(n,p=>$(p),d.onItemTextChange,p=>{var f;return(f=a.itemTextRefCallback)===null||f===void 0?void 0:f.call(a,p,d.value,d.disabled)}),x=v==null?void 0:v.textContent,h=r.useMemo(()=>r.createElement("option",{key:d.value,value:d.value,disabled:d.disabled},x),[d.disabled,d.value,x]),{onNativeOptionAdd:i,onNativeOptionRemove:m}=u;return q(()=>(i(h),()=>m(h)),[i,m,h]),r.createElement(r.Fragment,null,r.createElement(M.span,I({id:d.textId},s,{ref:w})),d.isSelected&&l.valueNode&&!l.valueNodeHasChildren?St.createPortal(s.children,l.valueNode):null)}),pr="SelectItemIndicator",mr=r.forwardRef((e,n)=>{const{__scopeSelect:t,...o}=e;return Kt(pr,t).isSelected?r.createElement(M.span,I({"aria-hidden":!0},o,{ref:n})):null}),$t="SelectScrollUpButton",vr=r.forwardRef((e,n)=>{const t=oe($t,e.__scopeSelect),o=nt($t,e.__scopeSelect),[c,s]=r.useState(!1),l=D(n,o.onScrollButtonChange);return q(()=>{if(t.viewport&&t.isPositioned){let d=function(){const u=a.scrollTop>0;s(u)};const a=t.viewport;return d(),a.addEventListener("scroll",d),()=>a.removeEventListener("scroll",d)}},[t.viewport,t.isPositioned]),c?r.createElement(Ut,I({},e,{ref:l,onAutoScroll:()=>{const{viewport:a,selectedItem:d}=t;a&&d&&(a.scrollTop=a.scrollTop-d.offsetHeight)}})):null}),gt="SelectScrollDownButton",hr=r.forwardRef((e,n)=>{const t=oe(gt,e.__scopeSelect),o=nt(gt,e.__scopeSelect),[c,s]=r.useState(!1),l=D(n,o.onScrollButtonChange);return q(()=>{if(t.viewport&&t.isPositioned){let d=function(){const u=a.scrollHeight-a.clientHeight,v=Math.ceil(a.scrollTop)<u;s(v)};const a=t.viewport;return d(),a.addEventListener("scroll",d),()=>a.removeEventListener("scroll",d)}},[t.viewport,t.isPositioned]),c?r.createElement(Ut,I({},e,{ref:l,onAutoScroll:()=>{const{viewport:a,selectedItem:d}=t;a&&d&&(a.scrollTop=a.scrollTop+d.offsetHeight)}})):null}),Ut=r.forwardRef((e,n)=>{const{__scopeSelect:t,onAutoScroll:o,...c}=e,s=oe("SelectScrollButton",t),l=r.useRef(null),a=Ae(t),d=r.useCallback(()=>{l.current!==null&&(window.clearInterval(l.current),l.current=null)},[]);return r.useEffect(()=>()=>d(),[d]),q(()=>{var u;const v=a().find($=>$.ref.current===document.activeElement);v==null||(u=v.ref.current)===null||u===void 0||u.scrollIntoView({block:"nearest"})},[a]),r.createElement(M.div,I({"aria-hidden":!0},c,{ref:n,style:{flexShrink:0,...c.style},onPointerDown:O(c.onPointerDown,()=>{l.current===null&&(l.current=window.setInterval(o,50))}),onPointerMove:O(c.onPointerMove,()=>{var u;(u=s.onItemLeave)===null||u===void 0||u.call(s),l.current===null&&(l.current=window.setInterval(o,50))}),onPointerLeave:O(c.onPointerLeave,()=>{d()})}))});function Gt(e){return e===""||e===void 0}const Yt=r.forwardRef((e,n)=>{const{value:t,...o}=e,c=r.useRef(null),s=D(n,c),l=Jn(t);return r.useEffect(()=>{const a=c.current,d=window.HTMLSelectElement.prototype,v=Object.getOwnPropertyDescriptor(d,"value").set;if(l!==t&&v){const $=new Event("change",{bubbles:!0});v.call(a,t),a.dispatchEvent($)}},[l,t]),r.createElement(tn,{asChild:!0},r.createElement("select",I({},o,{ref:s,defaultValue:t})))});Yt.displayName="BubbleSelect";function zt(e){const n=Ge(e),t=r.useRef(""),o=r.useRef(0),c=r.useCallback(l=>{const a=t.current+l;n(a),function d(u){t.current=u,window.clearTimeout(o.current),u!==""&&(o.current=window.setTimeout(()=>d(""),1e3))}(a)},[n]),s=r.useCallback(()=>{t.current="",window.clearTimeout(o.current)},[]);return r.useEffect(()=>()=>window.clearTimeout(o.current),[]),[t,c,s]}function qt(e,n,t){const c=n.length>1&&Array.from(n).every(u=>u===n[0])?n[0]:n,s=t?e.indexOf(t):-1;let l=br(e,Math.max(s,0));c.length===1&&(l=l.filter(u=>u!==t));const d=l.find(u=>u.textValue.toLowerCase().startsWith(c.toLowerCase()));return d!==t?d:void 0}function br(e,n){return e.map((t,o)=>e[(n+o)%e.length])}const $r=Go,gr=zo,xr=Xo,wr=Zo,Sr=Qo,Cr=Jo,Er=or,yr=sr,Ir=ir,Rr=ur,_r=fr,Tr=mr,Pr=vr,Ar=hr,Nr=({title:e,children:n,variant:t,icon:o,forceMount:c=!1})=>{const s=()=>{switch(t){case"changed":return g.jsx(F,{name:"Modified","aria-label":"Modified",className:"text-[#fb923c]"});case"renamed":return g.jsx(F,{name:"Renamed","aria-label":"Renamed",className:"text-[#fb923c]"});case"added":return g.jsx(F,{name:"Added","aria-label":"Added",className:"text-[#10b981]"});case"deleted":return g.jsx(F,{name:"Deleted","aria-label":"Deleted",className:"text-[#ef4444]"});default:return g.jsx(F,{name:"Modified","aria-label":"Modified",className:"text-[#fb923c]"})}},l=()=>{switch(t){case"changed":return"modified";default:return t}},a=e.replace(/\\\\/g,"\\");return g.jsxs(Bn,{value:e,children:[g.jsxs(Mr,{variant:l(),children:[o||s()," ",a]}),g.jsx(Or,{forceMount:c,className:ve("prose max-w-none whitespace-pre-wrap dark:prose-invert prose-pre:m-0 prose-pre:mb-1 prose-pre:rounded-none",{"radix-state-closed:hidden":c}),children:n})]})},Mr=r.forwardRef(({children:e,className:n,variant:t,...o},c)=>g.jsx(Hn,{className:"flex",asChild:!0,children:g.jsxs(Wn,{className:ve("group flex w-full items-center justify-between border-b p-4 pr-3 font-mono text-sm font-medium leading-none hover:bg-foreground/20",n),...o,ref:c,children:[g.jsx("div",{className:"flex items-center gap-1.5",children:e}),g.jsxs("div",{className:"flex items-center gap-2",children:[g.jsx("span",{className:"font-mono text-xs font-normal uppercase text-muted-foreground",children:t}),g.jsx(F,{name:"TriangleDownSmall",className:"transition group-radix-state-open:rotate-180","aria-hidden":!0})]})]})})),Or=r.forwardRef(({children:e,className:n,...t},o)=>g.jsx(Kn,{className:ve("",n),...t,ref:o,children:g.jsx("div",{children:e})})),kr=e=>g.jsx("pre",{...e}),Dr={Accordion:Nr,pre:kr};function Yr({diff:e,allApps:n}){const t=rn(),[o]=cn(),c=new URLSearchParams(o);c.set("forceFresh","diff");const s=Xt(),l=dn.useSpinDelay(s.state!=="idle",{delay:0,minDuration:1e3}),a=[];for(const[d,u]of o.entries())d==="app1"||d==="app2"||a.push(g.jsx("input",{type:"hidden",name:d,value:u},d));return g.jsx(r.Suspense,{fallback:g.jsx("div",{className:"flex items-center justify-center p-8",children:g.jsx(ot,{content:"Loading diff",children:g.jsx(F,{name:"Refresh",className:"animate-spin"})})}),children:g.jsx(an,{resolve:e,errorElement:g.jsx("p",{className:"p-6 text-foreground-danger",children:"There was an error calculating the diff. Sorry."}),children:d=>g.jsxs("div",{className:"flex h-full w-full flex-col",children:[g.jsxs("div",{className:"flex h-14 min-h-14 w-full overflow-x-hidden border-b",children:[g.jsx("div",{className:"border-r",children:g.jsx(ot,{content:"Reload diff",children:g.jsx(sn,{to:`.?${c}`,className:"flex h-full w-14 items-center justify-center",children:g.jsx(F,{name:"Refresh",className:un({"animate-spin":l})})})})}),g.jsxs(ln,{onChange:u=>t(u.currentTarget),className:"flex h-full flex-1 items-center overflow-x-auto scrollbar-thin scrollbar-thumb-scrollbar",children:[a,g.jsx(xt,{name:"app1",label:"App 1",className:"border-r",allApps:n,defaultValue:d.app1}),g.jsx(xt,{name:"app2",label:"App 2",allApps:n,defaultValue:d.app2})]},`${d.app1}${d.app2}`)]}),g.jsx("div",{className:"flex-grow overflow-y-scroll scrollbar-thin scrollbar-thumb-scrollbar",children:d.diffCode?g.jsx("div",{children:g.jsx(Fn,{className:"w-full",type:"multiple",children:g.jsx(fn,{code:d.diffCode,components:Dr})})}):d.app1&&d.app2?g.jsx("p",{className:"m-5 inline-flex items-center justify-center bg-foreground px-1 py-0.5 font-mono text-sm uppercase text-background",children:"There was a problem generating the diff"}):g.jsx("p",{className:"m-5 inline-flex items-center justify-center bg-foreground px-1 py-0.5 font-mono text-sm uppercase text-background",children:"Select two apps to compare"})})]})})})}function xt({name:e,label:n,className:t,allApps:o,defaultValue:c}){return g.jsxs($r,{name:e,defaultValue:c,children:[g.jsxs(gr,{className:ve("flex h-full w-full max-w-[50%] items-center justify-between px-3 text-left radix-placeholder:text-gray-500 focus-visible:outline-none",t),"aria-label":`Select ${n} for git Diff`,children:[g.jsxs("span",{className:"overflow-hidden text-ellipsis whitespace-nowrap",children:[n,":"," ",g.jsx(jr,{placeholder:`Select ${n}`,className:"inline-block w-40 text-ellipsis"})]}),g.jsx(wr,{className:"",children:g.jsx(F,{name:"TriangleDownSmall"})})]}),g.jsx(Sr,{children:g.jsxs(Cr,{position:"popper",align:"start",className:"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",children:[g.jsx(Pr,{className:"flex h-5 cursor-default items-center justify-center ",children:g.jsx(F,{name:"ChevronUp"})}),g.jsx(Er,{className:"p-3",children:g.jsxs(yr,{children:[g.jsx(Ir,{className:"px-5 pb-3 font-mono uppercase",children:n}),o.map(s=>g.jsx(Lr,{value:s.name,children:s.displayName},s.name))]})}),g.jsx(Ar,{className:"flex h-5 cursor-default items-center justify-center ",children:g.jsx(F,{name:"ChevronDown"})})]})})]})}const Lr=S.forwardRef(({children:e,className:n,...t},o)=>g.jsxs(Rr,{className:ve("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",n),...t,ref:o,children:[g.jsx(_r,{children:e}),g.jsx(Tr,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:g.jsx(F,{name:"CheckSmall"})})]})),jr=S.forwardRef(({children:e,className:n,...t},o)=>g.jsx(xr,{...t,ref:o,children:t.value}));export{Ct as $,Nr as A,Yr as D,Ht as R,Et as a,$r as b,gr as c,xr as d,wr as e,Sr as f,Cr as g,Pr as h,Er as i,yr as j,Ir as k,Ar as l,Rr as m,_r as n,Tr as o,Fn as p,pn as q,oo as r,Un as s,Gn as t};
42
+ //# sourceMappingURL=diff-BKsbFB6w.js.map