@epic-web/workshop-app 5.1.1 → 5.1.2

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 (145) hide show
  1. package/build/client/assets/{_-ZHCWB__B.js → _-CWSCXcBv.js} +2 -2
  2. package/build/client/assets/{_-ZHCWB__B.js.map → _-CWSCXcBv.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-BFTlBdr4.js → _exerciseNumber-DarnXgbX.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-BFTlBdr4.js.map → _exerciseNumber-DarnXgbX.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-_687iGFh.js → _exerciseNumber_._stepNumber-BA2Xhzqs.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-_687iGFh.js.map → _exerciseNumber_._stepNumber-BA2Xhzqs.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber_.finished-BEfn-nJi.js → _exerciseNumber_.finished-DEzaS_Ji.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber_.finished-BEfn-nJi.js.map → _exerciseNumber_.finished-DEzaS_Ji.js.map} +1 -1
  9. package/build/client/assets/{_layout-Cfbi6StB.js → _layout-88n0To1b.js} +2 -2
  10. package/build/client/assets/{_layout-Cfbi6StB.js.map → _layout-88n0To1b.js.map} +1 -1
  11. package/build/client/assets/{_layout-BriOqd2R.js → _layout-BTrPWpBz.js} +2 -2
  12. package/build/client/assets/{_layout-BriOqd2R.js.map → _layout-BTrPWpBz.js.map} +1 -1
  13. package/build/client/assets/{_layout-frPHZWgR.js → _layout-T2hZtl0D.js} +2 -2
  14. package/build/client/assets/{_layout-frPHZWgR.js.map → _layout-T2hZtl0D.js.map} +1 -1
  15. package/build/client/assets/{_layout-BLJr2x2F.js → _layout-gyrNluke.js} +2 -2
  16. package/build/client/assets/{_layout-BLJr2x2F.js.map → _layout-gyrNluke.js.map} +1 -1
  17. package/build/client/assets/{accordion-DuE9VejZ.js → accordion-DC885Li1.js} +2 -2
  18. package/build/client/assets/{accordion-DuE9VejZ.js.map → accordion-DC885Li1.js.map} +1 -1
  19. package/build/client/assets/{account-DDuV9rZX.js → account-CPFwPYf1.js} +2 -2
  20. package/build/client/assets/{account-DDuV9rZX.js.map → account-CPFwPYf1.js.map} +1 -1
  21. package/build/client/assets/app-CM8yuYni.js +2 -0
  22. package/build/client/assets/{app-wbMCZEiv.js.map → app-CM8yuYni.js.map} +1 -1
  23. package/build/client/assets/{button-CMkJ8p0a.js → button-DQ001ob0.js} +2 -2
  24. package/build/client/assets/{button-CMkJ8p0a.js.map → button-DQ001ob0.js.map} +1 -1
  25. package/build/client/assets/components-9EGYHTc_.js +158 -0
  26. package/build/client/assets/components-9EGYHTc_.js.map +1 -0
  27. package/build/client/assets/{diff-B6thd_Sf.js → diff-assn_bSK.js} +2 -2
  28. package/build/client/assets/{diff-B6thd_Sf.js.map → diff-assn_bSK.js.map} +1 -1
  29. package/build/client/assets/diff-jlCv3hv0.js +2 -0
  30. package/build/client/assets/{diff-BEk79KPK.js.map → diff-jlCv3hv0.js.map} +1 -1
  31. package/build/client/assets/{discord-C9bVfiZ6.js → discord-CHsbqaqM.js} +2 -2
  32. package/build/client/assets/{discord-C9bVfiZ6.js.map → discord-CHsbqaqM.js.map} +1 -1
  33. package/build/client/assets/discord-DoeazikD.js +2 -0
  34. package/build/client/assets/discord-DoeazikD.js.map +1 -0
  35. package/build/client/assets/entry.client-BTYTUpFV.js +44 -0
  36. package/build/client/assets/entry.client-BTYTUpFV.js.map +1 -0
  37. package/build/client/assets/epic-video-GDpD7_Qt.js +3053 -0
  38. package/build/client/assets/epic-video-GDpD7_Qt.js.map +1 -0
  39. package/build/client/assets/{error-boundary-BcGxKpte.js → error-boundary-1-dmC941.js} +2 -2
  40. package/build/client/assets/{error-boundary-BcGxKpte.js.map → error-boundary-1-dmC941.js.map} +1 -1
  41. package/build/client/assets/{finished-C2dgX1d-.js → finished-DVV0zwmP.js} +2 -2
  42. package/build/client/assets/{finished-C2dgX1d-.js.map → finished-DVV0zwmP.js.map} +1 -1
  43. package/build/client/assets/{index-DBrRQJxF.js → index-BCxBKsqT.js} +2 -2
  44. package/build/client/assets/{index-DBrRQJxF.js.map → index-BCxBKsqT.js.map} +1 -1
  45. package/build/client/assets/index-BFGhCX_U.js +38 -0
  46. package/build/client/assets/index-BFGhCX_U.js.map +1 -0
  47. package/build/client/assets/index-BuA_RWlU.js +2 -0
  48. package/build/client/assets/index-BuA_RWlU.js.map +1 -0
  49. package/build/client/assets/index-BuoaxPEj.js +42 -0
  50. package/build/client/assets/index-BuoaxPEj.js.map +1 -0
  51. package/build/client/assets/index-DJF1fiZI.js +2 -0
  52. package/build/client/assets/index-DJF1fiZI.js.map +1 -0
  53. package/build/client/assets/{index-YtpQLUzj.js → index-DRH72MzK.js} +2 -2
  54. package/build/client/assets/{index-YtpQLUzj.js.map → index-DRH72MzK.js.map} +1 -1
  55. package/build/client/assets/{index-CuV1bRbu.js → index-KgMLc41c.js} +2 -2
  56. package/build/client/assets/{index-CuV1bRbu.js.map → index-KgMLc41c.js.map} +1 -1
  57. package/build/client/assets/index-_J-F_Dnc.js +36 -0
  58. package/build/client/assets/index-_J-F_Dnc.js.map +1 -0
  59. package/build/client/assets/{loading-Br41_Pbf.js → loading-Dk0n07O3.js} +2 -2
  60. package/build/client/assets/{loading-Br41_Pbf.js.map → loading-Dk0n07O3.js.map} +1 -1
  61. package/build/client/assets/{login-kjV7hrVt.js → login-pZYDEC_l.js} +2 -2
  62. package/build/client/assets/{login-kjV7hrVt.js.map → login-pZYDEC_l.js.map} +1 -1
  63. package/build/client/assets/{manifest-b22910a7.js → manifest-3338a6ab.js} +1 -1
  64. package/build/client/assets/mdx-hW1uYjc1.js +2 -0
  65. package/build/client/assets/mdx-hW1uYjc1.js.map +1 -0
  66. package/build/client/assets/misc-BJtHv_Jh.js +2 -0
  67. package/build/client/assets/misc-BJtHv_Jh.js.map +1 -0
  68. package/build/client/assets/{nav-chevrons-DYiI8EMU.js → nav-chevrons-CgbSMLeb.js} +2 -2
  69. package/build/client/assets/{nav-chevrons-DYiI8EMU.js.map → nav-chevrons-CgbSMLeb.js.map} +1 -1
  70. package/build/client/assets/{onboarding-B4Z_yevk.js → onboarding-DCuSqnkZ.js} +2 -2
  71. package/build/client/assets/{onboarding-B4Z_yevk.js.map → onboarding-DCuSqnkZ.js.map} +1 -1
  72. package/build/client/assets/{pe-CvPIToj6.js → pe-ChIwTk8v.js} +2 -2
  73. package/build/client/assets/pe-ChIwTk8v.js.map +1 -0
  74. package/build/client/assets/presence-CdyMdOKk.js +28 -0
  75. package/build/client/assets/presence-CdyMdOKk.js.map +1 -0
  76. package/build/client/assets/{preview-DZcdG4kw.js → preview-CW_12I0i.js} +2 -2
  77. package/build/client/assets/{preview-DZcdG4kw.js.map → preview-CW_12I0i.js.map} +1 -1
  78. package/build/client/assets/{product-mjsTrqXs.js → product-C1ynnrN_.js} +2 -2
  79. package/build/client/assets/{product-mjsTrqXs.js.map → product-C1ynnrN_.js.map} +1 -1
  80. package/build/client/assets/progress-DAB3nDa2.js +2 -0
  81. package/build/client/assets/progress-DAB3nDa2.js.map +1 -0
  82. package/build/client/assets/{progress-bar-F8_2mvYp.js → progress-bar-Cj5R4Zk7.js} +2 -2
  83. package/build/client/assets/{progress-bar-F8_2mvYp.js.map → progress-bar-Cj5R4Zk7.js.map} +1 -1
  84. package/build/client/assets/{request-info-DGnmXtfj.js → request-info-DCIQLE6H.js} +2 -2
  85. package/build/client/assets/{request-info-DGnmXtfj.js.map → request-info-DCIQLE6H.js.map} +1 -1
  86. package/build/client/assets/{revalidation-ws-DcvYvzyj.js → revalidation-ws-DU-PzW-_.js} +2 -2
  87. package/build/client/assets/{revalidation-ws-DcvYvzyj.js.map → revalidation-ws-DU-PzW-_.js.map} +1 -1
  88. package/build/client/assets/{root-Cl86OUog.js → root-DojjHZlY.js} +4 -4
  89. package/build/client/assets/root-DojjHZlY.js.map +1 -0
  90. package/build/client/assets/{set-playground-pMKmtPtz.js → set-playground-DgnOJqFN.js} +2 -2
  91. package/build/client/assets/{set-playground-pMKmtPtz.js.map → set-playground-DgnOJqFN.js.map} +1 -1
  92. package/build/client/assets/{support-B0E_F4Zh.js → support-BNS-kEhc.js} +2 -2
  93. package/build/client/assets/{support-B0E_F4Zh.js.map → support-BNS-kEhc.js.map} +1 -1
  94. package/build/client/assets/tailwind-B5AAMtGC.css +1 -0
  95. package/build/client/assets/test-DJ7oeeeg.js +2 -0
  96. package/build/client/assets/{test-B6zIK2V6.js.map → test-DJ7oeeeg.js.map} +1 -1
  97. package/build/client/assets/{tests-BeAEgPAw.js → tests-Bw1rCopV.js} +2 -2
  98. package/build/client/assets/{tests-BeAEgPAw.js.map → tests-Bw1rCopV.js.map} +1 -1
  99. package/build/client/assets/tooltip-BgynKV2c.js +2 -0
  100. package/build/client/assets/tooltip-BgynKV2c.js.map +1 -0
  101. package/build/client/assets/use-event-source-x59d4R2Z.js +2 -0
  102. package/build/client/assets/use-event-source-x59d4R2Z.js.map +1 -0
  103. package/build/client/assets/{user-Boua6jiU.js → user-BBryXlM_.js} +2 -2
  104. package/build/client/assets/{user-Boua6jiU.js.map → user-BBryXlM_.js.map} +1 -1
  105. package/build/client/assets/{workshop-config-Ce9sSc3I.js → workshop-config-DJY2cXU_.js} +2 -2
  106. package/build/client/assets/{workshop-config-Ce9sSc3I.js.map → workshop-config-DJY2cXU_.js.map} +1 -1
  107. package/build/server/index.js +3 -3
  108. package/dist/server/index.js +7 -12
  109. package/package.json +68 -73
  110. package/build/client/assets/app-wbMCZEiv.js +0 -2
  111. package/build/client/assets/components-DZ8XIeZ3.js +0 -166
  112. package/build/client/assets/components-DZ8XIeZ3.js.map +0 -1
  113. package/build/client/assets/diff-BEk79KPK.js +0 -2
  114. package/build/client/assets/discord-DYeU0QX6.js +0 -2
  115. package/build/client/assets/discord-DYeU0QX6.js.map +0 -1
  116. package/build/client/assets/entry.client-CW5CUf_W.js +0 -43
  117. package/build/client/assets/entry.client-CW5CUf_W.js.map +0 -1
  118. package/build/client/assets/epic-video-bs7WmhbC.js +0 -2988
  119. package/build/client/assets/epic-video-bs7WmhbC.js.map +0 -1
  120. package/build/client/assets/index-BczhSZ3e.js +0 -2
  121. package/build/client/assets/index-BczhSZ3e.js.map +0 -1
  122. package/build/client/assets/index-BjNhezSK.js +0 -42
  123. package/build/client/assets/index-BjNhezSK.js.map +0 -1
  124. package/build/client/assets/index-BvihEwfB.js +0 -36
  125. package/build/client/assets/index-BvihEwfB.js.map +0 -1
  126. package/build/client/assets/index-C2yr7Uiu.js +0 -2
  127. package/build/client/assets/index-C2yr7Uiu.js.map +0 -1
  128. package/build/client/assets/index-DF_XBInP.js +0 -37
  129. package/build/client/assets/index-DF_XBInP.js.map +0 -1
  130. package/build/client/assets/mdx-CRxPouxB.js +0 -2
  131. package/build/client/assets/mdx-CRxPouxB.js.map +0 -1
  132. package/build/client/assets/misc-BE75ioh8.js +0 -2
  133. package/build/client/assets/misc-BE75ioh8.js.map +0 -1
  134. package/build/client/assets/pe-CvPIToj6.js.map +0 -1
  135. package/build/client/assets/presence-Dd98AJ_5.js +0 -28
  136. package/build/client/assets/presence-Dd98AJ_5.js.map +0 -1
  137. package/build/client/assets/progress-Co-59mG2.js +0 -2
  138. package/build/client/assets/progress-Co-59mG2.js.map +0 -1
  139. package/build/client/assets/root-Cl86OUog.js.map +0 -1
  140. package/build/client/assets/tailwind-B9pSujyx.css +0 -1
  141. package/build/client/assets/test-B6zIK2V6.js +0 -2
  142. package/build/client/assets/tooltip-6-WS-Xux.js +0 -2
  143. package/build/client/assets/tooltip-6-WS-Xux.js.map +0 -1
  144. package/build/client/assets/use-event-source-CCGBLG92.js +0 -2
  145. package/build/client/assets/use-event-source-CCGBLG92.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{d as v,r as c}from"./index-DF_XBInP.js";import{z as o,u as P}from"./request-info-DGnmXtfj.js";const R=o.object({type:o.literal("epicshop:file-change"),data:o.object({filePaths:o.array(o.string())})});function g({watchPaths:d}){const s=P(),a=v(),n=c.useRef(a);c.useEffect(()=>{n.current=a},[a]);const i=new URLSearchParams;for(const e of d)i.append("watch",e);const r=i.toString(),h=s.protocol==="https:"?"wss:":"ws:",m=s.hostname,S=s.port,l=`${h}//${m}:${S}/__ws?${r}`;c.useEffect(()=>{if(!r)return;let e=null;function f(){e&&e.close(),e=new WebSocket(l),e.onmessage=t=>{const u=R.safeParse(JSON.parse(t.data));if(!u.success)return;const{data:p}=u;p.type==="epicshop:file-change"&&(console.log("🐨 Revalidating due to file changes:",p.data.filePaths),n.current.revalidate())},e.onclose=t=>{t.code===1006&&setTimeout(()=>{f()},1e3)},e.onerror=t=>{console.error("🐨 EpicShop WebSocket error:",t)}}return f(),()=>{e==null||e.close()}},[r,l])}const b=ENV.EPICSHOP_DEPLOYED?()=>null:g;export{b as u};
2
- //# sourceMappingURL=revalidation-ws-DcvYvzyj.js.map
1
+ import{d as v,r as c}from"./index-BFGhCX_U.js";import{z as o,u as P}from"./request-info-DCIQLE6H.js";const R=o.object({type:o.literal("epicshop:file-change"),data:o.object({filePaths:o.array(o.string())})});function g({watchPaths:d}){const s=P(),a=v(),n=c.useRef(a);c.useEffect(()=>{n.current=a},[a]);const i=new URLSearchParams;for(const e of d)i.append("watch",e);const r=i.toString(),h=s.protocol==="https:"?"wss:":"ws:",m=s.hostname,S=s.port,l=`${h}//${m}:${S}/__ws?${r}`;c.useEffect(()=>{if(!r)return;let e=null;function f(){e&&e.close(),e=new WebSocket(l),e.onmessage=t=>{const u=R.safeParse(JSON.parse(t.data));if(!u.success)return;const{data:p}=u;p.type==="epicshop:file-change"&&(console.log("🐨 Revalidating due to file changes:",p.data.filePaths),n.current.revalidate())},e.onclose=t=>{t.code===1006&&setTimeout(()=>{f()},1e3)},e.onerror=t=>{console.error("🐨 EpicShop WebSocket error:",t)}}return f(),()=>{e==null||e.close()}},[r,l])}const b=ENV.EPICSHOP_DEPLOYED?()=>null:g;export{b as u};
2
+ //# sourceMappingURL=revalidation-ws-DU-PzW-_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"revalidation-ws-DcvYvzyj.js","sources":["../../../app/components/revalidation-ws.tsx"],"sourcesContent":["import { useRevalidator } from '@remix-run/react'\nimport { useEffect, useRef } from 'react'\nimport { z } from 'zod'\nimport { useRequestInfo } from '#app/utils/request-info.js'\n\nconst eventSchema = z.object({\n\ttype: z.literal('epicshop:file-change'),\n\tdata: z.object({\n\t\tfilePaths: z.array(z.string()),\n\t}),\n})\n\nfunction useRevalidationWSImpl({ watchPaths }: { watchPaths: Array<string> }) {\n\tconst requestInfo = useRequestInfo()\n\n\tconst revalidator = useRevalidator()\n\tconst latestRevalidatorRef = useRef(revalidator)\n\tuseEffect(() => {\n\t\tlatestRevalidatorRef.current = revalidator\n\t}, [revalidator])\n\n\tconst socketParams = new URLSearchParams()\n\tfor (const path of watchPaths) {\n\t\tsocketParams.append('watch', path)\n\t}\n\tconst socketQuery = socketParams.toString()\n\tconst protocol = requestInfo.protocol === 'https:' ? 'wss:' : 'ws:'\n\tconst host = requestInfo.hostname\n\tconst port = requestInfo.port\n\tconst socketPath = `${protocol}//${host}:${port}/__ws?${socketQuery}`\n\n\tuseEffect(() => {\n\t\tif (!socketQuery) return\n\t\tlet ws: WebSocket | null = null\n\t\tfunction createWebSocket() {\n\t\t\tif (ws) ws.close()\n\n\t\t\tws = new WebSocket(socketPath)\n\n\t\t\tws.onmessage = (message) => {\n\t\t\t\tconst eventParsed = eventSchema.safeParse(JSON.parse(message.data))\n\t\t\t\tif (!eventParsed.success) return\n\t\t\t\tconst { data: event } = eventParsed\n\t\t\t\tif (event.type !== 'epicshop:file-change') return\n\t\t\t\tconsole.log(\n\t\t\t\t\t'🐨 Revalidating due to file changes:',\n\t\t\t\t\tevent.data.filePaths,\n\t\t\t\t)\n\t\t\t\tlatestRevalidatorRef.current.revalidate()\n\t\t\t}\n\n\t\t\tws.onclose = (event) => {\n\t\t\t\tif (event.code === 1006) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tcreateWebSocket()\n\t\t\t\t\t}, 1000)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.onerror = (error) => {\n\t\t\t\tconsole.error('🐨 EpicShop WebSocket error:', error)\n\t\t\t}\n\t\t}\n\n\t\tcreateWebSocket()\n\n\t\t// Cleanup function to close the WebSocket when the component unmounts\n\t\treturn () => {\n\t\t\tws?.close()\n\t\t}\n\t}, [socketQuery, socketPath])\n}\n\nexport const useRevalidationWS = ENV.EPICSHOP_DEPLOYED\n\t? () => null\n\t: useRevalidationWSImpl\n"],"names":["eventSchema","z","useRevalidationWSImpl","watchPaths","requestInfo","useRequestInfo","revalidator","useRevalidator","latestRevalidatorRef","useRef","useEffect","socketParams","path","socketQuery","protocol","host","port","socketPath","ws","createWebSocket","message","eventParsed","event","error","useRevalidationWS"],"mappings":"qGAKA,MAAMA,EAAcC,EAAE,OAAO,CAC5B,KAAMA,EAAE,QAAQ,sBAAsB,EACtC,KAAMA,EAAE,OAAO,CACd,UAAWA,EAAE,MAAMA,EAAE,QAAQ,CAAA,CAC7B,CACF,CAAC,EAED,SAASC,EAAsB,CAAE,WAAAC,GAA6C,CAC7E,MAAMC,EAAcC,IAEdC,EAAcC,IACdC,EAAuBC,SAAOH,CAAW,EAC/CI,EAAAA,UAAU,IAAM,CACfF,EAAqB,QAAUF,CAAA,EAC7B,CAACA,CAAW,CAAC,EAEV,MAAAK,EAAe,IAAI,gBACzB,UAAWC,KAAQT,EACLQ,EAAA,OAAO,QAASC,CAAI,EAE5B,MAAAC,EAAcF,EAAa,WAC3BG,EAAWV,EAAY,WAAa,SAAW,OAAS,MACxDW,EAAOX,EAAY,SACnBY,EAAOZ,EAAY,KACnBa,EAAa,GAAGH,CAAQ,KAAKC,CAAI,IAAIC,CAAI,SAASH,CAAW,GAEnEH,EAAAA,UAAU,IAAM,CACf,GAAI,CAACG,EAAa,OAClB,IAAIK,EAAuB,KAC3B,SAASC,GAAkB,CACtBD,KAAO,QAENA,EAAA,IAAI,UAAUD,CAAU,EAE1BC,EAAA,UAAaE,GAAY,CAC3B,MAAMC,EAAcrB,EAAY,UAAU,KAAK,MAAMoB,EAAQ,IAAI,CAAC,EAC9D,GAAA,CAACC,EAAY,QAAS,OACpB,KAAA,CAAE,KAAMC,CAAU,EAAAD,EACpBC,EAAM,OAAS,yBACX,QAAA,IACP,uCACAA,EAAM,KAAK,SAAA,EAEZd,EAAqB,QAAQ,aAAW,EAGtCU,EAAA,QAAWI,GAAU,CACnBA,EAAM,OAAS,MAClB,WAAW,IAAM,CACAH,KACd,GAAI,CACR,EAGED,EAAA,QAAWK,GAAU,CACf,QAAA,MAAM,+BAAgCA,CAAK,CAAA,CAErD,CAEgB,OAAAJ,IAGT,IAAM,CACZD,GAAA,MAAAA,EAAI,OAAM,CACX,EACE,CAACL,EAAaI,CAAU,CAAC,CAC7B,CAEO,MAAMO,EAAoB,IAAI,kBAClC,IAAM,KACNtB"}
1
+ {"version":3,"file":"revalidation-ws-DU-PzW-_.js","sources":["../../../app/components/revalidation-ws.tsx"],"sourcesContent":["import { useRevalidator } from '@remix-run/react'\nimport { useEffect, useRef } from 'react'\nimport { z } from 'zod'\nimport { useRequestInfo } from '#app/utils/request-info.js'\n\nconst eventSchema = z.object({\n\ttype: z.literal('epicshop:file-change'),\n\tdata: z.object({\n\t\tfilePaths: z.array(z.string()),\n\t}),\n})\n\nfunction useRevalidationWSImpl({ watchPaths }: { watchPaths: Array<string> }) {\n\tconst requestInfo = useRequestInfo()\n\n\tconst revalidator = useRevalidator()\n\tconst latestRevalidatorRef = useRef(revalidator)\n\tuseEffect(() => {\n\t\tlatestRevalidatorRef.current = revalidator\n\t}, [revalidator])\n\n\tconst socketParams = new URLSearchParams()\n\tfor (const path of watchPaths) {\n\t\tsocketParams.append('watch', path)\n\t}\n\tconst socketQuery = socketParams.toString()\n\tconst protocol = requestInfo.protocol === 'https:' ? 'wss:' : 'ws:'\n\tconst host = requestInfo.hostname\n\tconst port = requestInfo.port\n\tconst socketPath = `${protocol}//${host}:${port}/__ws?${socketQuery}`\n\n\tuseEffect(() => {\n\t\tif (!socketQuery) return\n\t\tlet ws: WebSocket | null = null\n\t\tfunction createWebSocket() {\n\t\t\tif (ws) ws.close()\n\n\t\t\tws = new WebSocket(socketPath)\n\n\t\t\tws.onmessage = (message) => {\n\t\t\t\tconst eventParsed = eventSchema.safeParse(JSON.parse(message.data))\n\t\t\t\tif (!eventParsed.success) return\n\t\t\t\tconst { data: event } = eventParsed\n\t\t\t\tif (event.type !== 'epicshop:file-change') return\n\t\t\t\tconsole.log(\n\t\t\t\t\t'🐨 Revalidating due to file changes:',\n\t\t\t\t\tevent.data.filePaths,\n\t\t\t\t)\n\t\t\t\tlatestRevalidatorRef.current.revalidate()\n\t\t\t}\n\n\t\t\tws.onclose = (event) => {\n\t\t\t\tif (event.code === 1006) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tcreateWebSocket()\n\t\t\t\t\t}, 1000)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.onerror = (error) => {\n\t\t\t\tconsole.error('🐨 EpicShop WebSocket error:', error)\n\t\t\t}\n\t\t}\n\n\t\tcreateWebSocket()\n\n\t\t// Cleanup function to close the WebSocket when the component unmounts\n\t\treturn () => {\n\t\t\tws?.close()\n\t\t}\n\t}, [socketQuery, socketPath])\n}\n\nexport const useRevalidationWS = ENV.EPICSHOP_DEPLOYED\n\t? () => null\n\t: useRevalidationWSImpl\n"],"names":["eventSchema","z","useRevalidationWSImpl","watchPaths","requestInfo","useRequestInfo","revalidator","useRevalidator","latestRevalidatorRef","useRef","useEffect","socketParams","path","socketQuery","protocol","host","port","socketPath","ws","createWebSocket","message","eventParsed","event","error","useRevalidationWS"],"mappings":"qGAKA,MAAMA,EAAcC,EAAE,OAAO,CAC5B,KAAMA,EAAE,QAAQ,sBAAsB,EACtC,KAAMA,EAAE,OAAO,CACd,UAAWA,EAAE,MAAMA,EAAE,QAAQ,CAAA,CAC7B,CACF,CAAC,EAED,SAASC,EAAsB,CAAE,WAAAC,GAA6C,CAC7E,MAAMC,EAAcC,IAEdC,EAAcC,IACdC,EAAuBC,SAAOH,CAAW,EAC/CI,EAAAA,UAAU,IAAM,CACfF,EAAqB,QAAUF,CAAA,EAC7B,CAACA,CAAW,CAAC,EAEV,MAAAK,EAAe,IAAI,gBACzB,UAAWC,KAAQT,EACLQ,EAAA,OAAO,QAASC,CAAI,EAE5B,MAAAC,EAAcF,EAAa,WAC3BG,EAAWV,EAAY,WAAa,SAAW,OAAS,MACxDW,EAAOX,EAAY,SACnBY,EAAOZ,EAAY,KACnBa,EAAa,GAAGH,CAAQ,KAAKC,CAAI,IAAIC,CAAI,SAASH,CAAW,GAEnEH,EAAAA,UAAU,IAAM,CACf,GAAI,CAACG,EAAa,OAClB,IAAIK,EAAuB,KAC3B,SAASC,GAAkB,CACtBD,KAAO,QAENA,EAAA,IAAI,UAAUD,CAAU,EAE1BC,EAAA,UAAaE,GAAY,CAC3B,MAAMC,EAAcrB,EAAY,UAAU,KAAK,MAAMoB,EAAQ,IAAI,CAAC,EAC9D,GAAA,CAACC,EAAY,QAAS,OACpB,KAAA,CAAE,KAAMC,CAAU,EAAAD,EACpBC,EAAM,OAAS,yBACX,QAAA,IACP,uCACAA,EAAM,KAAK,SAAA,EAEZd,EAAqB,QAAQ,aAAW,EAGtCU,EAAA,QAAWI,GAAU,CACnBA,EAAM,OAAS,MAClB,WAAW,IAAM,CACAH,KACd,GAAI,CACR,EAGED,EAAA,QAAWK,GAAU,CACf,QAAA,MAAM,+BAAgCA,CAAK,CAAA,CAErD,CAEgB,OAAAJ,IAGT,IAAM,CACZD,GAAA,MAAAA,EAAI,OAAM,CACX,EACE,CAACL,EAAaI,CAAU,CAAC,CAC7B,CAEO,MAAMO,EAAoB,IAAI,kBAClC,IAAM,KACNtB"}
@@ -1,5 +1,5 @@
1
- import{u as $,k as W,r as p,l as H,R as w,j as c,c as V,O as U}from"./index-DF_XBInP.js";import{d as J,u as L,a as X}from"./misc-BE75ioh8.js";import{a as b}from"./pe-CvPIToj6.js";import{G as z}from"./error-boundary-BcGxKpte.js";import{E as K}from"./progress-bar-F8_2mvYp.js";import{T as Z,J as tt}from"./index-YtpQLUzj.js";import{T as et}from"./tooltip-6-WS-Xux.js";import{u as nt,C as it}from"./index-BvihEwfB.js";import{P as rt}from"./presence-Dd98AJ_5.js";import{g as st}from"./seo-pBpFCWsy.js";import{p as at,q as ot,_ as ct,u as B,M as ut,t as lt,S as ht}from"./components-DZ8XIeZ3.js";import"./request-info-DGnmXtfj.js";/**
2
- * @remix-run/react v2.10.0
1
+ import{u as $,k as W,r as p,l as H,R as w,j as c,c as V,O as U}from"./index-BFGhCX_U.js";import{d as J,u as L,a as X}from"./misc-BJtHv_Jh.js";import{a as b}from"./pe-ChIwTk8v.js";import{G as z}from"./error-boundary-1-dmC941.js";import{E as K}from"./progress-bar-Cj5R4Zk7.js";import{T as Z,J as tt}from"./index-DRH72MzK.js";import{T as et}from"./tooltip-BgynKV2c.js";import{u as nt,C as it}from"./index-_J-F_Dnc.js";import{P as rt}from"./presence-CdyMdOKk.js";import{g as st}from"./seo-pBpFCWsy.js";import{p as at,q as ot,_ as ct,u as B,M as ut,t as lt,S as ht}from"./components-9EGYHTc_.js";import"./request-info-DCIQLE6H.js";/**
2
+ * @remix-run/react v2.12.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -7,5 +7,5 @@ import{u as $,k as W,r as p,l as H,R as w,j as c,c as V,O as U}from"./index-DF_X
7
7
  * LICENSE.md file in the root directory of this source tree.
8
8
  *
9
9
  * @license MIT
10
- */let R="positions";function ft({getKey:t,...n}){let{isSpaMode:r}=at(),e=$(),i=W();ot({getKey:t,storageKey:R});let s=p.useMemo(()=>{if(!t)return null;let o=t(e,i);return o!==e.key?o:null},[]);if(r)return null;let a=((o,l)=>{if(!window.history.state||!window.history.state.key){let u=Math.random().toString(32).slice(2);window.history.replaceState({key:u},"")}try{let y=JSON.parse(sessionStorage.getItem(o)||"{}")[l||window.history.state.key];typeof y=="number"&&window.scrollTo(0,y)}catch(u){console.error(u),sessionStorage.removeItem(o)}}).toString();return p.createElement("script",ct({},n,{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${a})(${JSON.stringify(R)}, ${JSON.stringify(s)})`}}))}var O={linear:function(t,n,r,e){var i=r-n;return i*t/e+n},easeInQuad:function(t,n,r,e){var i=r-n;return i*(t/=e)*t+n},easeOutQuad:function(t,n,r,e){var i=r-n;return-i*(t/=e)*(t-2)+n},easeInOutQuad:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t+n:-i/2*(--t*(t-2)-1)+n},easeInCubic:function(t,n,r,e){var i=r-n;return i*(t/=e)*t*t+n},easeOutCubic:function(t,n,r,e){var i=r-n;return i*((t=t/e-1)*t*t+1)+n},easeInOutCubic:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t*t+n:i/2*((t-=2)*t*t+2)+n},easeInQuart:function(t,n,r,e){var i=r-n;return i*(t/=e)*t*t*t+n},easeOutQuart:function(t,n,r,e){var i=r-n;return-i*((t=t/e-1)*t*t*t-1)+n},easeInOutQuart:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t*t*t+n:-i/2*((t-=2)*t*t*t-2)+n},easeInQuint:function(t,n,r,e){var i=r-n;return i*(t/=e)*t*t*t*t+n},easeOutQuint:function(t,n,r,e){var i=r-n;return i*((t=t/e-1)*t*t*t*t+1)+n},easeInOutQuint:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t*t*t*t+n:i/2*((t-=2)*t*t*t*t+2)+n},easeInSine:function(t,n,r,e){var i=r-n;return-i*Math.cos(t/e*(Math.PI/2))+i+n},easeOutSine:function(t,n,r,e){var i=r-n;return i*Math.sin(t/e*(Math.PI/2))+n},easeInOutSine:function(t,n,r,e){var i=r-n;return-i/2*(Math.cos(Math.PI*t/e)-1)+n},easeInExpo:function(t,n,r,e){var i=r-n;return t==0?n:i*Math.pow(2,10*(t/e-1))+n},easeOutExpo:function(t,n,r,e){var i=r-n;return t==e?n+i:i*(-Math.pow(2,-10*t/e)+1)+n},easeInOutExpo:function(t,n,r,e){var i=r-n;return t===0?n:t===e?n+i:(t/=e/2)<1?i/2*Math.pow(2,10*(t-1))+n:i/2*(-Math.pow(2,-10*--t)+2)+n},easeInCirc:function(t,n,r,e){var i=r-n;return-i*(Math.sqrt(1-(t/=e)*t)-1)+n},easeOutCirc:function(t,n,r,e){var i=r-n;return i*Math.sqrt(1-(t=t/e-1)*t)+n},easeInOutCirc:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?-i/2*(Math.sqrt(1-t*t)-1)+n:i/2*(Math.sqrt(1-(t-=2)*t)+1)+n},easeInElastic:function(t,n,r,e){var i=r-n,s,a,o;return o=1.70158,a=0,s=i,t===0?n:(t/=e)===1?n+i:(a||(a=e*.3),s<Math.abs(i)?(s=i,o=a/4):o=a/(2*Math.PI)*Math.asin(i/s),-(s*Math.pow(2,10*(t-=1))*Math.sin((t*e-o)*(2*Math.PI)/a))+n)},easeOutElastic:function(t,n,r,e){var i=r-n,s,a,o;return o=1.70158,a=0,s=i,t===0?n:(t/=e)===1?n+i:(a||(a=e*.3),s<Math.abs(i)?(s=i,o=a/4):o=a/(2*Math.PI)*Math.asin(i/s),s*Math.pow(2,-10*t)*Math.sin((t*e-o)*(2*Math.PI)/a)+i+n)},easeInOutElastic:function(t,n,r,e){var i=r-n,s,a,o;return o=1.70158,a=0,s=i,t===0?n:(t/=e/2)===2?n+i:(a||(a=e*(.3*1.5)),s<Math.abs(i)?(s=i,o=a/4):o=a/(2*Math.PI)*Math.asin(i/s),t<1?-.5*(s*Math.pow(2,10*(t-=1))*Math.sin((t*e-o)*(2*Math.PI)/a))+n:s*Math.pow(2,-10*(t-=1))*Math.sin((t*e-o)*(2*Math.PI)/a)*.5+i+n)},easeInBack:function(t,n,r,e,i){var s=r-n;return i===void 0&&(i=1.70158),s*(t/=e)*t*((i+1)*t-i)+n},easeOutBack:function(t,n,r,e,i){var s=r-n;return i===void 0&&(i=1.70158),s*((t=t/e-1)*t*((i+1)*t+i)+1)+n},easeInOutBack:function(t,n,r,e,i){var s=r-n;return i===void 0&&(i=1.70158),(t/=e/2)<1?s/2*(t*t*(((i*=1.525)+1)*t-i))+n:s/2*((t-=2)*t*(((i*=1.525)+1)*t+i)+2)+n},easeInBounce:function(t,n,r,e){var i=r-n,s;return s=O.easeOutBounce(e-t,0,i,e),i-s+n},easeOutBounce:function(t,n,r,e){var i=r-n;return(t/=e)<1/2.75?i*(7.5625*t*t)+n:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+n:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+n:i*(7.5625*(t-=2.625/2.75)*t+.984375)+n},easeInOutBounce:function(t,n,r,e){var i=r-n,s;return t<e/2?(s=O.easeInBounce(t*2,0,i,e),s*.5+n):(s=O.easeOutBounce(t*2-e,0,i,e),s*.5+i*.5+n)}},pt=O;const vt=H(pt);function dt(t,n){for(var r=0;r<n.length;r++){var e=n[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,e.key,e)}}function gt(t,n,r){return n&&dt(t.prototype,n),t}function x(){return x=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},x.apply(this,arguments)}function mt(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,j(t,n)}function j(t,n){return j=Object.setPrototypeOf||function(e,i){return e.__proto__=i,e},j(t,n)}function wt(t){return t*Math.PI/180}function h(t,n){return t+Math.random()*(n-t)}function xt(t,n){return Math.floor(t+Math.random()*(n-t+1))}var m;(function(t){t[t.Circle=0]="Circle",t[t.Square=1]="Square",t[t.Strip=2]="Strip"})(m||(m={}));var f;(function(t){t[t.Positive=1]="Positive",t[t.Negative=-1]="Negative"})(f||(f={}));var yt=function(){function t(r,e,i,s){this.getOptions=e;var a=this.getOptions(),o=a.colors,l=a.initialVelocityX,u=a.initialVelocityY;this.context=r,this.x=i,this.y=s,this.w=h(5,20),this.h=h(5,20),this.radius=h(5,10),this.vx=h(-l,l),this.vy=h(-u,0),this.shape=xt(0,2),this.angle=wt(h(0,360)),this.angularSpin=h(-.2,.2),this.color=o[Math.floor(Math.random()*o.length)],this.rotateY=h(0,1),this.rotationDirection=h(0,1)?f.Positive:f.Negative}var n=t.prototype;return n.update=function(){var e=this.getOptions(),i=e.gravity,s=e.wind,a=e.friction,o=e.opacity,l=e.drawShape;this.x+=this.vx,this.y+=this.vy,this.vy+=i,this.vx+=s,this.vx*=a,this.vy*=a,this.rotateY>=1&&this.rotationDirection===f.Positive?this.rotationDirection=f.Negative:this.rotateY<=-1&&this.rotationDirection===f.Negative&&(this.rotationDirection=f.Positive);var u=.1*this.rotationDirection;if(this.rotateY+=u,this.angle+=this.angularSpin,this.context.save(),this.context.translate(this.x,this.y),this.context.rotate(this.angle),this.context.scale(1,this.rotateY),this.context.rotate(this.angle),this.context.beginPath(),this.context.fillStyle=this.color,this.context.strokeStyle=this.color,this.context.globalAlpha=o,this.context.lineCap="round",this.context.lineWidth=2,l&&typeof l=="function")l.call(this,this.context);else switch(this.shape){case m.Circle:{this.context.beginPath(),this.context.arc(0,0,this.radius,0,2*Math.PI),this.context.fill();break}case m.Square:{this.context.fillRect(-this.w/2,-this.h/2,this.w,this.h);break}case m.Strip:{this.context.fillRect(-this.w/6,-this.h/2,this.w/3,this.h);break}default:throw new Error("Unknown type in Particle.ts")}this.context.closePath(),this.context.restore()},t}(),Ot=function(n,r){var e=this;this.x=0,this.y=0,this.w=0,this.h=0,this.lastNumberOfPieces=0,this.tweenInitTime=Date.now(),this.particles=[],this.particlesGenerated=0,this.removeParticleAt=function(s){e.particles.splice(s,1)},this.getParticle=function(){var s=h(e.x,e.w+e.x),a=h(e.y,e.h+e.y);return new yt(e.context,e.getOptions,s,a)},this.animate=function(){var s=e.canvas,a=e.context,o=e.particlesGenerated,l=e.lastNumberOfPieces,u=e.getOptions(),y=u.run,_=u.recycle,v=u.numberOfPieces,A=u.debug,G=u.tweenFunction,M=u.tweenDuration;if(!y)return!1;var P=e.particles.length,d=_?P:o,I=Date.now();if(d<v){l!==v&&(e.tweenInitTime=I,e.lastNumberOfPieces=v);for(var D=e.tweenInitTime,Q=I-D>M?M:Math.max(0,I-D),Y=G(Q,d,v,M),N=Math.round(Y-d),F=0;F<N;F+=1)e.particles.push(e.getParticle());e.particlesGenerated+=N}return A&&(a.font="12px sans-serif",a.fillStyle="#333",a.textAlign="right",a.fillText("Particles: "+P,s.width-10,s.height-20)),e.particles.forEach(function(g,k){g.update(),(g.y>s.height||g.y<-100||g.x>s.width+100||g.x<-100)&&(_&&d<=v?e.particles[k]=e.getParticle():e.removeParticleAt(k))}),P>0||d<v},this.canvas=n;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.getOptions=r},C={width:typeof window<"u"?window.innerWidth:300,height:typeof window<"u"?window.innerHeight:200,numberOfPieces:200,friction:.99,wind:0,gravity:.1,initialVelocityX:4,initialVelocityY:10,colors:["#f44336","#e91e63","#9c27b0","#673ab7","#3f51b5","#2196f3","#03a9f4","#00bcd4","#009688","#4CAF50","#8BC34A","#CDDC39","#FFEB3B","#FFC107","#FF9800","#FF5722","#795548"],opacity:1,debug:!1,tweenFunction:vt.easeInOutQuad,tweenDuration:5e3,recycle:!0,run:!0},Mt=function(){function t(n,r){var e=this;this.setOptionsWithDefaults=function(s){var a={confettiSource:{x:0,y:0,w:e.canvas.width,h:0}};e._options=x({},a,C,s),Object.assign(e,s.confettiSource)},this.update=function(){var s=e.options,a=s.run,o=s.onConfettiComplete,l=e.canvas,u=e.context;a&&(u.fillStyle="white",u.clearRect(0,0,l.width,l.height)),e.generator.animate()?e.rafId=requestAnimationFrame(e.update):(o&&typeof o=="function"&&e.generator.particlesGenerated>0&&o.call(e,e),e._options.run=!1)},this.reset=function(){e.generator&&e.generator.particlesGenerated>0&&(e.generator.particlesGenerated=0,e.generator.particles=[],e.generator.lastNumberOfPieces=0)},this.stop=function(){e.options={run:!1},e.rafId&&(cancelAnimationFrame(e.rafId),e.rafId=void 0)},this.canvas=n;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.generator=new Ot(this.canvas,function(){return e.options}),this.options=r,this.update()}return gt(t,[{key:"options",get:function(){return this._options},set:function(r){var e=this._options&&this._options.run,i=this._options&&this._options.recycle;this.setOptionsWithDefaults(r),this.generator&&(Object.assign(this.generator,this.options.confettiSource),typeof r.recycle=="boolean"&&r.recycle&&i===!1&&(this.generator.lastNumberOfPieces=this.generator.particles.length)),typeof r.run=="boolean"&&r.run&&e===!1&&this.update()}}]),t}(),T=w.createRef();function S(t){var n={},r={},e={},i=[].concat(Object.keys(C),["confettiSource","drawShape","onConfettiComplete"]),s=["canvasRef"];return Object.keys(t).forEach(function(a){var o=t[a];i.includes(a)?n[a]=o:s.includes(a)?s[a]=o:e[a]=o}),[n,e,r]}var E=function(t){mt(n,t);function n(e){for(var i,s=arguments.length,a=new Array(s>1?s-1:0),o=1;o<s;o++)a[o-1]=arguments[o];return i=t.call.apply(t,[this,e].concat(a))||this,i.canvas=w.createRef(),i.canvas=e.canvasRef||T,i}var r=n.prototype;return r.componentDidMount=function(){if(this.canvas.current){var i=S(this.props)[0];this.confetti=new Mt(this.canvas.current,i)}},r.componentDidUpdate=function(){var i=S(this.props)[0];this.confetti&&(this.confetti.options=i)},r.componentWillUnmount=function(){this.confetti&&this.confetti.stop(),this.confetti=void 0},r.render=function(){var i=S(this.props),s=i[0],a=i[1],o=x({zIndex:2,position:"absolute",pointerEvents:"none",top:0,left:0,bottom:0,right:0},a.style);return w.createElement("canvas",Object.assign({width:s.width,height:s.height,ref:this.canvas},a,{style:o}))},n}(p.Component);E.defaultProps=x({},C);E.displayName="ConfettiReact";var Pt=w.forwardRef(function(t,n){return w.createElement(E,Object.assign({canvasRef:T},t))});function It({children:t,fallback:n=null}){return b()?p.createElement(p.Fragment,null,t()):p.createElement(p.Fragment,null,n)}function St({id:t}){return t?c.jsx(It,{children:()=>c.jsx(Pt,{run:!!t,recycle:!1,numberOfPieces:800,width:window.innerWidth,height:window.innerHeight},t)}):null}function jt({toast:t}){return c.jsxs(c.Fragment,{children:[c.jsx(Z,{closeButton:!0,position:"top-center"}),t?c.jsx(Ct,{toast:t}):null]})}function Ct({toast:t}){const{id:n,type:r,title:e,description:i}=t;return p.useEffect(()=>{setTimeout(()=>{tt[r](e,{id:n,description:i})},0)},[i,n,e,r]),null}const Et="/assets/app-b7uXHF5m.css",_t="/assets/tailwind-B9pSujyx.css",Wt=()=>[{rel:"stylesheet",href:"/neogrotesk-font.css"},{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap"},{rel:"stylesheet",href:_t},{rel:"stylesheet",href:Et},{rel:"icon",href:"/favicon.ico",sizes:"48x48"},{rel:"icon",type:"image/svg+xml",href:"/favicon.svg"}],Ht=({data:t})=>t?st({instructor:t.instructor,title:t.workshopTitle,description:t.workshopSubtitle,requestInfo:t.requestInfo}):[];function q({children:t,env:n={},className:r}){return c.jsxs("html",{lang:"en",className:r,children:[c.jsxs("head",{children:[c.jsx(it,{}),c.jsx(ut,{}),c.jsx("meta",{charSet:"utf-8"}),c.jsx("meta",{name:"viewport",content:"width=device-width,initial-scale=1"}),c.jsx(lt,{}),c.jsx("script",{dangerouslySetInnerHTML:{__html:`window.ENV = ${JSON.stringify(n)}`}})]}),c.jsxs("body",{className:"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe",children:[t,c.jsx(ft,{}),c.jsx(ht,{})]})]})}function Dt(){const t=B(),n=V(),r=J.useSpinDelay(n.state!=="idle",{delay:400,minDuration:200}),e=L(),i=nt();return c.jsxs(q,{className:X("antialiased h-screen-safe",i,{"cursor-progress":r},e?"alt-down":null),env:t.ENV,children:[c.jsx(U,{}),c.jsx(St,{id:t.confettiId}),c.jsx(jt,{toast:t.toast}),c.jsx(K,{})]})}function Vt(){const{user:t}=B();return c.jsx(rt,{user:t,children:c.jsx(et,{children:c.jsx(Dt,{})})})}function Ut(){return c.jsx(q,{className:"h-screen-safe",children:c.jsx(z,{})})}export{Ut as ErrorBoundary,Vt as default,Wt as links,Ht as meta};
11
- //# sourceMappingURL=root-Cl86OUog.js.map
10
+ */let R="positions";function ft({getKey:t,...n}){let{isSpaMode:r}=at(),e=$(),i=W();ot({getKey:t,storageKey:R});let s=p.useMemo(()=>{if(!t)return null;let o=t(e,i);return o!==e.key?o:null},[]);if(r)return null;let a=((o,l)=>{if(!window.history.state||!window.history.state.key){let u=Math.random().toString(32).slice(2);window.history.replaceState({key:u},"")}try{let x=JSON.parse(sessionStorage.getItem(o)||"{}")[l||window.history.state.key];typeof x=="number"&&window.scrollTo(0,x)}catch(u){console.error(u),sessionStorage.removeItem(o)}}).toString();return p.createElement("script",ct({},n,{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${a})(${JSON.stringify(R)}, ${JSON.stringify(s)})`}}))}var O={linear:function(t,n,r,e){var i=r-n;return i*t/e+n},easeInQuad:function(t,n,r,e){var i=r-n;return i*(t/=e)*t+n},easeOutQuad:function(t,n,r,e){var i=r-n;return-i*(t/=e)*(t-2)+n},easeInOutQuad:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t+n:-i/2*(--t*(t-2)-1)+n},easeInCubic:function(t,n,r,e){var i=r-n;return i*(t/=e)*t*t+n},easeOutCubic:function(t,n,r,e){var i=r-n;return i*((t=t/e-1)*t*t+1)+n},easeInOutCubic:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t*t+n:i/2*((t-=2)*t*t+2)+n},easeInQuart:function(t,n,r,e){var i=r-n;return i*(t/=e)*t*t*t+n},easeOutQuart:function(t,n,r,e){var i=r-n;return-i*((t=t/e-1)*t*t*t-1)+n},easeInOutQuart:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t*t*t+n:-i/2*((t-=2)*t*t*t-2)+n},easeInQuint:function(t,n,r,e){var i=r-n;return i*(t/=e)*t*t*t*t+n},easeOutQuint:function(t,n,r,e){var i=r-n;return i*((t=t/e-1)*t*t*t*t+1)+n},easeInOutQuint:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?i/2*t*t*t*t*t+n:i/2*((t-=2)*t*t*t*t+2)+n},easeInSine:function(t,n,r,e){var i=r-n;return-i*Math.cos(t/e*(Math.PI/2))+i+n},easeOutSine:function(t,n,r,e){var i=r-n;return i*Math.sin(t/e*(Math.PI/2))+n},easeInOutSine:function(t,n,r,e){var i=r-n;return-i/2*(Math.cos(Math.PI*t/e)-1)+n},easeInExpo:function(t,n,r,e){var i=r-n;return t==0?n:i*Math.pow(2,10*(t/e-1))+n},easeOutExpo:function(t,n,r,e){var i=r-n;return t==e?n+i:i*(-Math.pow(2,-10*t/e)+1)+n},easeInOutExpo:function(t,n,r,e){var i=r-n;return t===0?n:t===e?n+i:(t/=e/2)<1?i/2*Math.pow(2,10*(t-1))+n:i/2*(-Math.pow(2,-10*--t)+2)+n},easeInCirc:function(t,n,r,e){var i=r-n;return-i*(Math.sqrt(1-(t/=e)*t)-1)+n},easeOutCirc:function(t,n,r,e){var i=r-n;return i*Math.sqrt(1-(t=t/e-1)*t)+n},easeInOutCirc:function(t,n,r,e){var i=r-n;return(t/=e/2)<1?-i/2*(Math.sqrt(1-t*t)-1)+n:i/2*(Math.sqrt(1-(t-=2)*t)+1)+n},easeInElastic:function(t,n,r,e){var i=r-n,s,a,o;return o=1.70158,a=0,s=i,t===0?n:(t/=e)===1?n+i:(a||(a=e*.3),s<Math.abs(i)?(s=i,o=a/4):o=a/(2*Math.PI)*Math.asin(i/s),-(s*Math.pow(2,10*(t-=1))*Math.sin((t*e-o)*(2*Math.PI)/a))+n)},easeOutElastic:function(t,n,r,e){var i=r-n,s,a,o;return o=1.70158,a=0,s=i,t===0?n:(t/=e)===1?n+i:(a||(a=e*.3),s<Math.abs(i)?(s=i,o=a/4):o=a/(2*Math.PI)*Math.asin(i/s),s*Math.pow(2,-10*t)*Math.sin((t*e-o)*(2*Math.PI)/a)+i+n)},easeInOutElastic:function(t,n,r,e){var i=r-n,s,a,o;return o=1.70158,a=0,s=i,t===0?n:(t/=e/2)===2?n+i:(a||(a=e*(.3*1.5)),s<Math.abs(i)?(s=i,o=a/4):o=a/(2*Math.PI)*Math.asin(i/s),t<1?-.5*(s*Math.pow(2,10*(t-=1))*Math.sin((t*e-o)*(2*Math.PI)/a))+n:s*Math.pow(2,-10*(t-=1))*Math.sin((t*e-o)*(2*Math.PI)/a)*.5+i+n)},easeInBack:function(t,n,r,e,i){var s=r-n;return i===void 0&&(i=1.70158),s*(t/=e)*t*((i+1)*t-i)+n},easeOutBack:function(t,n,r,e,i){var s=r-n;return i===void 0&&(i=1.70158),s*((t=t/e-1)*t*((i+1)*t+i)+1)+n},easeInOutBack:function(t,n,r,e,i){var s=r-n;return i===void 0&&(i=1.70158),(t/=e/2)<1?s/2*(t*t*(((i*=1.525)+1)*t-i))+n:s/2*((t-=2)*t*(((i*=1.525)+1)*t+i)+2)+n},easeInBounce:function(t,n,r,e){var i=r-n,s;return s=O.easeOutBounce(e-t,0,i,e),i-s+n},easeOutBounce:function(t,n,r,e){var i=r-n;return(t/=e)<1/2.75?i*(7.5625*t*t)+n:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+n:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+n:i*(7.5625*(t-=2.625/2.75)*t+.984375)+n},easeInOutBounce:function(t,n,r,e){var i=r-n,s;return t<e/2?(s=O.easeInBounce(t*2,0,i,e),s*.5+n):(s=O.easeOutBounce(t*2-e,0,i,e),s*.5+i*.5+n)}},pt=O;const vt=H(pt);function dt(t,n){for(var r=0;r<n.length;r++){var e=n[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,e.key,e)}}function gt(t,n,r){return n&&dt(t.prototype,n),t}function y(){return y=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},y.apply(this,arguments)}function mt(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,j(t,n)}function j(t,n){return j=Object.setPrototypeOf||function(e,i){return e.__proto__=i,e},j(t,n)}function wt(t){return t*Math.PI/180}function h(t,n){return t+Math.random()*(n-t)}function yt(t,n){return Math.floor(t+Math.random()*(n-t+1))}var m;(function(t){t[t.Circle=0]="Circle",t[t.Square=1]="Square",t[t.Strip=2]="Strip"})(m||(m={}));var f;(function(t){t[t.Positive=1]="Positive",t[t.Negative=-1]="Negative"})(f||(f={}));var xt=function(){function t(r,e,i,s){this.getOptions=e;var a=this.getOptions(),o=a.colors,l=a.initialVelocityX,u=a.initialVelocityY;this.context=r,this.x=i,this.y=s,this.w=h(5,20),this.h=h(5,20),this.radius=h(5,10),this.vx=h(-l,l),this.vy=h(-u,0),this.shape=yt(0,2),this.angle=wt(h(0,360)),this.angularSpin=h(-.2,.2),this.color=o[Math.floor(Math.random()*o.length)],this.rotateY=h(0,1),this.rotationDirection=h(0,1)?f.Positive:f.Negative}var n=t.prototype;return n.update=function(){var e=this.getOptions(),i=e.gravity,s=e.wind,a=e.friction,o=e.opacity,l=e.drawShape;this.x+=this.vx,this.y+=this.vy,this.vy+=i,this.vx+=s,this.vx*=a,this.vy*=a,this.rotateY>=1&&this.rotationDirection===f.Positive?this.rotationDirection=f.Negative:this.rotateY<=-1&&this.rotationDirection===f.Negative&&(this.rotationDirection=f.Positive);var u=.1*this.rotationDirection;if(this.rotateY+=u,this.angle+=this.angularSpin,this.context.save(),this.context.translate(this.x,this.y),this.context.rotate(this.angle),this.context.scale(1,this.rotateY),this.context.rotate(this.angle),this.context.beginPath(),this.context.fillStyle=this.color,this.context.strokeStyle=this.color,this.context.globalAlpha=o,this.context.lineCap="round",this.context.lineWidth=2,l&&typeof l=="function")l.call(this,this.context);else switch(this.shape){case m.Circle:{this.context.beginPath(),this.context.arc(0,0,this.radius,0,2*Math.PI),this.context.fill();break}case m.Square:{this.context.fillRect(-this.w/2,-this.h/2,this.w,this.h);break}case m.Strip:{this.context.fillRect(-this.w/6,-this.h/2,this.w/3,this.h);break}default:throw new Error("Unknown type in Particle.ts")}this.context.closePath(),this.context.restore()},t}(),Ot=function(n,r){var e=this;this.x=0,this.y=0,this.w=0,this.h=0,this.lastNumberOfPieces=0,this.tweenInitTime=Date.now(),this.particles=[],this.particlesGenerated=0,this.removeParticleAt=function(s){e.particles.splice(s,1)},this.getParticle=function(){var s=h(e.x,e.w+e.x),a=h(e.y,e.h+e.y);return new xt(e.context,e.getOptions,s,a)},this.animate=function(){var s=e.canvas,a=e.context,o=e.particlesGenerated,l=e.lastNumberOfPieces,u=e.getOptions(),x=u.run,E=u.recycle,v=u.numberOfPieces,G=u.debug,q=u.tweenFunction,M=u.tweenDuration;if(!x)return!1;var P=e.particles.length,d=E?P:o,I=Date.now();if(d<v){l!==v&&(e.tweenInitTime=I,e.lastNumberOfPieces=v);for(var D=e.tweenInitTime,Q=I-D>M?M:Math.max(0,I-D),Y=q(Q,d,v,M),k=Math.round(Y-d),N=0;N<k;N+=1)e.particles.push(e.getParticle());e.particlesGenerated+=k}return G&&(a.font="12px sans-serif",a.fillStyle="#333",a.textAlign="right",a.fillText("Particles: "+P,s.width-10,s.height-20)),e.particles.forEach(function(g,F){g.update(),(g.y>s.height||g.y<-100||g.x>s.width+100||g.x<-100)&&(E&&d<=v?e.particles[F]=e.getParticle():e.removeParticleAt(F))}),P>0||d<v},this.canvas=n;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.getOptions=r},C={width:typeof window<"u"?window.innerWidth:300,height:typeof window<"u"?window.innerHeight:200,numberOfPieces:200,friction:.99,wind:0,gravity:.1,initialVelocityX:4,initialVelocityY:10,colors:["#f44336","#e91e63","#9c27b0","#673ab7","#3f51b5","#2196f3","#03a9f4","#00bcd4","#009688","#4CAF50","#8BC34A","#CDDC39","#FFEB3B","#FFC107","#FF9800","#FF5722","#795548"],opacity:1,debug:!1,tweenFunction:vt.easeInOutQuad,tweenDuration:5e3,recycle:!0,run:!0},Mt=function(){function t(n,r){var e=this;this.setOptionsWithDefaults=function(s){var a={confettiSource:{x:0,y:0,w:e.canvas.width,h:0}};e._options=y({},a,C,s),Object.assign(e,s.confettiSource)},this.update=function(){var s=e.options,a=s.run,o=s.onConfettiComplete,l=e.canvas,u=e.context;a&&(u.fillStyle="white",u.clearRect(0,0,l.width,l.height)),e.generator.animate()?e.rafId=requestAnimationFrame(e.update):(o&&typeof o=="function"&&e.generator.particlesGenerated>0&&o.call(e,e),e._options.run=!1)},this.reset=function(){e.generator&&e.generator.particlesGenerated>0&&(e.generator.particlesGenerated=0,e.generator.particles=[],e.generator.lastNumberOfPieces=0)},this.stop=function(){e.options={run:!1},e.rafId&&(cancelAnimationFrame(e.rafId),e.rafId=void 0)},this.canvas=n;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.generator=new Ot(this.canvas,function(){return e.options}),this.options=r,this.update()}return gt(t,[{key:"options",get:function(){return this._options},set:function(r){var e=this._options&&this._options.run,i=this._options&&this._options.recycle;this.setOptionsWithDefaults(r),this.generator&&(Object.assign(this.generator,this.options.confettiSource),typeof r.recycle=="boolean"&&r.recycle&&i===!1&&(this.generator.lastNumberOfPieces=this.generator.particles.length)),typeof r.run=="boolean"&&r.run&&e===!1&&this.update()}}]),t}(),T=w.createRef();function S(t){var n={},r={},e={},i=[].concat(Object.keys(C),["confettiSource","drawShape","onConfettiComplete"]),s=["canvasRef"];return Object.keys(t).forEach(function(a){var o=t[a];i.includes(a)?n[a]=o:s.includes(a)?s[a]=o:e[a]=o}),[n,e,r]}var _=function(t){mt(n,t);function n(e){var i;return i=t.call(this,e)||this,i.canvas=w.createRef(),i.canvas=e.canvasRef||T,i}var r=n.prototype;return r.componentDidMount=function(){if(this.canvas.current){var i=S(this.props)[0];this.confetti=new Mt(this.canvas.current,i)}},r.componentDidUpdate=function(){var i=S(this.props)[0];this.confetti&&(this.confetti.options=i)},r.componentWillUnmount=function(){this.confetti&&this.confetti.stop(),this.confetti=void 0},r.render=function(){var i=S(this.props),s=i[0],a=i[1],o=y({zIndex:2,position:"absolute",pointerEvents:"none",top:0,left:0,bottom:0,right:0},a.style);return w.createElement("canvas",Object.assign({width:s.width,height:s.height,ref:this.canvas},a,{style:o}))},n}(p.Component);_.defaultProps=y({},C);_.displayName="ConfettiReact";var Pt=w.forwardRef(function(t,n){return w.createElement(_,Object.assign({canvasRef:T},t))});function It({children:t,fallback:n=null}){return b()?p.createElement(p.Fragment,null,t()):p.createElement(p.Fragment,null,n)}function St({id:t}){return t?c.jsx(It,{children:()=>c.jsx(Pt,{run:!!t,recycle:!1,numberOfPieces:800,width:window.innerWidth,height:window.innerHeight},t)}):null}function jt({toast:t}){return c.jsxs(c.Fragment,{children:[c.jsx(Z,{closeButton:!0,position:"top-center"}),t?c.jsx(Ct,{toast:t}):null]})}function Ct({toast:t}){const{id:n,type:r,title:e,description:i}=t;return p.useEffect(()=>{setTimeout(()=>{tt[r](e,{id:n,description:i})},0)},[i,n,e,r]),null}const _t="/assets/app-b7uXHF5m.css",Et="/assets/tailwind-B5AAMtGC.css",Wt=()=>[{rel:"stylesheet",href:"/neogrotesk-font.css"},{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap"},{rel:"stylesheet",href:Et},{rel:"stylesheet",href:_t},{rel:"icon",href:"/favicon.ico",sizes:"48x48"},{rel:"icon",type:"image/svg+xml",href:"/favicon.svg"}],Ht=({data:t})=>t?st({instructor:t.instructor,title:t.workshopTitle,description:t.workshopSubtitle,requestInfo:t.requestInfo}):[];function A({children:t,env:n={},className:r}){return c.jsxs("html",{lang:"en",className:r,children:[c.jsxs("head",{children:[c.jsx(it,{}),c.jsx(ut,{}),c.jsx("meta",{charSet:"utf-8"}),c.jsx("meta",{name:"viewport",content:"width=device-width,initial-scale=1"}),c.jsx(lt,{}),c.jsx("script",{dangerouslySetInnerHTML:{__html:`window.ENV = ${JSON.stringify(n)}`}})]}),c.jsxs("body",{className:"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe",children:[t,c.jsx(ft,{}),c.jsx(ht,{})]})]})}function Dt(){const t=B(),n=V(),r=J.useSpinDelay(n.state!=="idle",{delay:400,minDuration:200}),e=L(),i=nt();return c.jsxs(A,{className:X("antialiased h-screen-safe",i,{"cursor-progress":r},e?"alt-down":null),env:t.ENV,children:[c.jsx(U,{}),c.jsx(St,{id:t.confettiId}),c.jsx(jt,{toast:t.toast}),c.jsx(K,{})]})}function Vt(){const{user:t}=B();return c.jsx(rt,{user:t,children:c.jsx(et,{children:c.jsx(Dt,{})})})}function Ut(){return c.jsx(A,{className:"h-screen-safe",children:c.jsx(z,{})})}export{Ut as ErrorBoundary,Vt as default,Wt as links,Ht as meta};
11
+ //# sourceMappingURL=root-DojjHZlY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-DojjHZlY.js","sources":["../../../../../node_modules/@remix-run/react/dist/esm/scroll-restoration.js","../../../../../node_modules/tween-functions/index.js","../../../../../node_modules/confetti-react/dist/confetti-react.esm.js","../../../../../node_modules/remix-utils/build/react/client-only.js","../../../app/components/confetti.tsx","../../../app/components/toaster.tsx","../../../app/styles/app.css?url","../../../app/styles/tailwind.css?url","../../../app/root.tsx"],"sourcesContent":["/**\n * @remix-run/react v2.12.1\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.js';\nimport * as React from 'react';\nimport { useLocation, useMatches, UNSAFE_useScrollRestoration } from 'react-router-dom';\nimport { useRemixContext } from './components.js';\n\nlet STORAGE_KEY = \"positions\";\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n *\n * @see https://remix.run/components/scroll-restoration\n */\nfunction ScrollRestoration({\n getKey,\n ...props\n}) {\n let {\n isSpaMode\n } = useRemixContext();\n let location = useLocation();\n let matches = useMatches();\n UNSAFE_useScrollRestoration({\n getKey,\n storageKey: STORAGE_KEY\n });\n\n // In order to support `getKey`, we need to compute a \"key\" here so we can\n // hydrate that up so that SSR scroll restoration isn't waiting on React to\n // hydrate. *However*, our key on the server is not the same as our key on\n // the client! So if the user's getKey implementation returns the SSR\n // location key, then let's ignore it and let our inline <script> below pick\n // up the client side history state key\n let key = React.useMemo(() => {\n if (!getKey) return null;\n let userKey = getKey(location, matches);\n return userKey !== location.key ? userKey : null;\n },\n // Nah, we only need this the first time for the SSR render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n\n // In SPA Mode, there's nothing to restore on initial render since we didn't\n // render anything on the server\n if (isSpaMode) {\n return null;\n }\n let restoreScroll = ((STORAGE_KEY, restoreKey) => {\n if (!window.history.state || !window.history.state.key) {\n let key = Math.random().toString(32).slice(2);\n window.history.replaceState({\n key\n }, \"\");\n }\n try {\n let positions = JSON.parse(sessionStorage.getItem(STORAGE_KEY) || \"{}\");\n let storedY = positions[restoreKey || window.history.state.key];\n if (typeof storedY === \"number\") {\n window.scrollTo(0, storedY);\n }\n } catch (error) {\n console.error(error);\n sessionStorage.removeItem(STORAGE_KEY);\n }\n }).toString();\n return /*#__PURE__*/React.createElement(\"script\", _extends({}, props, {\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: {\n __html: `(${restoreScroll})(${JSON.stringify(STORAGE_KEY)}, ${JSON.stringify(key)})`\n }\n }));\n}\n\nexport { ScrollRestoration };\n","'use strict';\n\n// t: current time, b: beginning value, _c: final value, d: total duration\nvar tweenFunctions = {\n linear: function(t, b, _c, d) {\n var c = _c - b;\n return c * t / d + b;\n },\n easeInQuad: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n },\n easeOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n },\n easeInOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d / 2) === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;\n }\n },\n easeInBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n v = tweenFunctions.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n },\n easeInOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n if (t < d / 2) {\n v = tweenFunctions.easeInBounce(t * 2, 0, c, d);\n return v * 0.5 + b;\n } else {\n v = tweenFunctions.easeOutBounce(t * 2 - d, 0, c, d);\n return v * 0.5 + c * 0.5 + b;\n }\n }\n};\n\nmodule.exports = tweenFunctions;\n","import React, { Component } from 'react';\nimport tweens from 'tween-functions';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction degreesToRads(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction randomRange(min, max) {\n return min + Math.random() * (max - min);\n}\nfunction randomInt(min, max) {\n return Math.floor(min + Math.random() * (max - min + 1));\n}\n\nvar ParticleShape;\n\n(function (ParticleShape) {\n ParticleShape[ParticleShape[\"Circle\"] = 0] = \"Circle\";\n ParticleShape[ParticleShape[\"Square\"] = 1] = \"Square\";\n ParticleShape[ParticleShape[\"Strip\"] = 2] = \"Strip\";\n})(ParticleShape || (ParticleShape = {}));\n\nvar RotationDirection;\n\n(function (RotationDirection) {\n RotationDirection[RotationDirection[\"Positive\"] = 1] = \"Positive\";\n RotationDirection[RotationDirection[\"Negative\"] = -1] = \"Negative\";\n})(RotationDirection || (RotationDirection = {}));\n\nvar Particle = /*#__PURE__*/function () {\n function Particle(context, getOptions, x, y) {\n this.getOptions = getOptions;\n\n var _this$getOptions = this.getOptions(),\n colors = _this$getOptions.colors,\n initialVelocityX = _this$getOptions.initialVelocityX,\n initialVelocityY = _this$getOptions.initialVelocityY;\n\n this.context = context;\n this.x = x;\n this.y = y;\n this.w = randomRange(5, 20);\n this.h = randomRange(5, 20);\n this.radius = randomRange(5, 10);\n this.vx = randomRange(-initialVelocityX, initialVelocityX);\n this.vy = randomRange(-initialVelocityY, 0);\n this.shape = randomInt(0, 2);\n this.angle = degreesToRads(randomRange(0, 360));\n this.angularSpin = randomRange(-0.2, 0.2);\n this.color = colors[Math.floor(Math.random() * colors.length)];\n this.rotateY = randomRange(0, 1);\n this.rotationDirection = randomRange(0, 1) ? RotationDirection.Positive : RotationDirection.Negative;\n }\n\n var _proto = Particle.prototype;\n\n _proto.update = function update() {\n var _this$getOptions2 = this.getOptions(),\n gravity = _this$getOptions2.gravity,\n wind = _this$getOptions2.wind,\n friction = _this$getOptions2.friction,\n opacity = _this$getOptions2.opacity,\n drawShape = _this$getOptions2.drawShape;\n\n this.x += this.vx;\n this.y += this.vy;\n this.vy += gravity;\n this.vx += wind;\n this.vx *= friction;\n this.vy *= friction;\n\n if (this.rotateY >= 1 && this.rotationDirection === RotationDirection.Positive) {\n this.rotationDirection = RotationDirection.Negative;\n } else if (this.rotateY <= -1 && this.rotationDirection === RotationDirection.Negative) {\n this.rotationDirection = RotationDirection.Positive;\n }\n\n var rotateDelta = 0.1 * this.rotationDirection;\n this.rotateY += rotateDelta;\n this.angle += this.angularSpin;\n this.context.save();\n this.context.translate(this.x, this.y);\n this.context.rotate(this.angle);\n this.context.scale(1, this.rotateY);\n this.context.rotate(this.angle);\n this.context.beginPath();\n this.context.fillStyle = this.color;\n this.context.strokeStyle = this.color;\n this.context.globalAlpha = opacity;\n this.context.lineCap = 'round';\n this.context.lineWidth = 2;\n\n if (drawShape && typeof drawShape === 'function') {\n drawShape.call(this, this.context);\n } else {\n switch (this.shape) {\n case ParticleShape.Circle:\n {\n this.context.beginPath();\n this.context.arc(0, 0, this.radius, 0, 2 * Math.PI);\n this.context.fill();\n break;\n }\n\n case ParticleShape.Square:\n {\n this.context.fillRect(-this.w / 2, -this.h / 2, this.w, this.h);\n break;\n }\n\n case ParticleShape.Strip:\n {\n this.context.fillRect(-this.w / 6, -this.h / 2, this.w / 3, this.h);\n break;\n }\n\n default:\n {\n throw new Error('Unknown type in Particle.ts');\n }\n }\n }\n\n this.context.closePath();\n this.context.restore();\n };\n\n return Particle;\n}();\n\nvar ParticleGeneratorClass = function ParticleGeneratorClass(canvas, getOptions) {\n var _this = this;\n\n this.x = 0;\n this.y = 0;\n this.w = 0;\n this.h = 0;\n this.lastNumberOfPieces = 0;\n this.tweenInitTime = Date.now();\n this.particles = [];\n this.particlesGenerated = 0;\n\n this.removeParticleAt = function (i) {\n _this.particles.splice(i, 1);\n };\n\n this.getParticle = function () {\n var newParticleX = randomRange(_this.x, _this.w + _this.x);\n var newParticleY = randomRange(_this.y, _this.h + _this.y);\n return new Particle(_this.context, _this.getOptions, newParticleX, newParticleY);\n };\n\n this.animate = function () {\n var canvas = _this.canvas,\n context = _this.context,\n particlesGenerated = _this.particlesGenerated,\n lastNumberOfPieces = _this.lastNumberOfPieces;\n\n var _this$getOptions = _this.getOptions(),\n run = _this$getOptions.run,\n recycle = _this$getOptions.recycle,\n numberOfPieces = _this$getOptions.numberOfPieces,\n debug = _this$getOptions.debug,\n tweenFunction = _this$getOptions.tweenFunction,\n tweenDuration = _this$getOptions.tweenDuration;\n\n if (!run) {\n return false;\n }\n\n var nP = _this.particles.length;\n var activeCount = recycle ? nP : particlesGenerated;\n var now = Date.now(); // Initial population\n\n if (activeCount < numberOfPieces) {\n // Use the numberOfPieces prop as a key to reset the easing timing\n if (lastNumberOfPieces !== numberOfPieces) {\n _this.tweenInitTime = now;\n _this.lastNumberOfPieces = numberOfPieces;\n }\n\n var tweenInitTime = _this.tweenInitTime; // Add more than one piece per loop, otherwise the number of pieces would\n // be limitted by the RAF framerate\n\n var progressTime = now - tweenInitTime > tweenDuration ? tweenDuration : Math.max(0, now - tweenInitTime);\n var tweenedVal = tweenFunction(progressTime, activeCount, numberOfPieces, tweenDuration);\n var numToAdd = Math.round(tweenedVal - activeCount);\n\n for (var i = 0; i < numToAdd; i += 1) {\n _this.particles.push(_this.getParticle());\n }\n\n _this.particlesGenerated += numToAdd;\n }\n\n if (debug) {\n // Draw debug text\n context.font = '12px sans-serif';\n context.fillStyle = '#333';\n context.textAlign = 'right';\n context.fillText(\"Particles: \" + nP, canvas.width - 10, canvas.height - 20);\n } // Maintain the population\n\n\n _this.particles.forEach(function (p, i) {\n // Update each particle's position\n p.update(); // Prune the off-canvas particles\n\n if (p.y > canvas.height || p.y < -100 || p.x > canvas.width + 100 || p.x < -100) {\n if (recycle && activeCount <= numberOfPieces) {\n // Replace the particle with a brand new one\n _this.particles[i] = _this.getParticle();\n } else {\n _this.removeParticleAt(i);\n }\n }\n });\n\n return nP > 0 || activeCount < numberOfPieces;\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.getOptions = getOptions;\n};\n\nvar confettiDefaults = {\n width: typeof window !== 'undefined' ? window.innerWidth : 300,\n height: typeof window !== 'undefined' ? window.innerHeight : 200,\n numberOfPieces: 200,\n friction: 0.99,\n wind: 0,\n gravity: 0.1,\n initialVelocityX: 4,\n initialVelocityY: 10,\n colors: ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548'],\n opacity: 1.0,\n debug: false,\n tweenFunction: tweens.easeInOutQuad,\n tweenDuration: 5000,\n recycle: true,\n run: true\n};\nvar Confetti = /*#__PURE__*/function () {\n function Confetti(canvas, opts) {\n var _this = this;\n\n this.setOptionsWithDefaults = function (opts) {\n var computedConfettiDefaults = {\n confettiSource: {\n x: 0,\n y: 0,\n w: _this.canvas.width,\n h: 0\n }\n };\n _this._options = _extends({}, computedConfettiDefaults, confettiDefaults, opts);\n Object.assign(_this, opts.confettiSource);\n };\n\n this.update = function () {\n var _this$options = _this.options,\n run = _this$options.run,\n onConfettiComplete = _this$options.onConfettiComplete,\n canvas = _this.canvas,\n context = _this.context;\n\n if (run) {\n context.fillStyle = 'white';\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n if (_this.generator.animate()) {\n _this.rafId = requestAnimationFrame(_this.update);\n } else {\n if (onConfettiComplete && typeof onConfettiComplete === 'function' && _this.generator.particlesGenerated > 0) {\n onConfettiComplete.call(_this, _this);\n }\n\n _this._options.run = false;\n }\n };\n\n this.reset = function () {\n if (_this.generator && _this.generator.particlesGenerated > 0) {\n _this.generator.particlesGenerated = 0;\n _this.generator.particles = [];\n _this.generator.lastNumberOfPieces = 0;\n }\n };\n\n this.stop = function () {\n _this.options = {\n run: false\n };\n\n if (_this.rafId) {\n cancelAnimationFrame(_this.rafId);\n _this.rafId = undefined;\n }\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.generator = new ParticleGeneratorClass(this.canvas, function () {\n return _this.options;\n });\n this.options = opts;\n this.update();\n }\n\n _createClass(Confetti, [{\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(opts) {\n var lastRunState = this._options && this._options.run;\n var lastRecycleState = this._options && this._options.recycle;\n this.setOptionsWithDefaults(opts);\n\n if (this.generator) {\n Object.assign(this.generator, this.options.confettiSource);\n\n if (typeof opts.recycle === 'boolean' && opts.recycle && lastRecycleState === false) {\n this.generator.lastNumberOfPieces = this.generator.particles.length;\n }\n }\n\n if (typeof opts.run === 'boolean' && opts.run && lastRunState === false) {\n this.update();\n }\n }\n }]);\n\n return Confetti;\n}();\n\nvar ref = /*#__PURE__*/React.createRef();\n\nfunction extractCanvasProps(props) {\n var confettiOptions = {};\n var refs = {};\n var rest = {};\n var confettiOptionKeys = [].concat(Object.keys(confettiDefaults), ['confettiSource', 'drawShape', 'onConfettiComplete']);\n var refProps = ['canvasRef'];\n Object.keys(props).forEach(function (prop) {\n var val = props[prop];\n\n if (confettiOptionKeys.includes(prop)) {\n confettiOptions[prop] = val;\n } else if (refProps.includes(prop)) {\n refProps[prop] = val;\n } else {\n rest[prop] = val;\n }\n });\n return [confettiOptions, rest, refs];\n}\n\nvar ConfettiReactInternal = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ConfettiReactInternal, _Component);\n\n function ConfettiReactInternal(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.canvas = React.createRef();\n _this.canvas = props.canvasRef || ref;\n return _this;\n }\n\n var _proto = ConfettiReactInternal.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.canvas.current) {\n var opts = extractCanvasProps(this.props)[0];\n this.confetti = new Confetti(this.canvas.current, opts);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var confettiOptions = extractCanvasProps(this.props)[0];\n\n if (this.confetti) {\n this.confetti.options = confettiOptions;\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.confetti) {\n this.confetti.stop();\n }\n\n this.confetti = undefined;\n };\n\n _proto.render = function render() {\n var _extractCanvasProps = extractCanvasProps(this.props),\n confettiOptions = _extractCanvasProps[0],\n passedProps = _extractCanvasProps[1];\n\n var canvasStyles = _extends({\n zIndex: 2,\n position: 'absolute',\n pointerEvents: 'none',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }, passedProps.style);\n\n return React.createElement(\"canvas\", Object.assign({\n width: confettiOptions.width,\n height: confettiOptions.height,\n ref: this.canvas\n }, passedProps, {\n style: canvasStyles\n }));\n };\n\n return ConfettiReactInternal;\n}(Component);\n\nConfettiReactInternal.defaultProps = /*#__PURE__*/_extends({}, confettiDefaults);\nConfettiReactInternal.displayName = 'ConfettiReact'; // eslint-disable-next-line react/display-name\n\nvar Index = /*#__PURE__*/React.forwardRef(function (props, _ref) {\n return React.createElement(ConfettiReactInternal, Object.assign({\n canvasRef: ref\n }, props));\n});\n\nexport default Index;\nexport { Index };\n//# sourceMappingURL=confetti-react.esm.js.map\n","import * as React from \"react\";\nimport { useHydrated } from \"./use-hydrated.js\";\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * Example: Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * {() => <Chart />}\n * </ClientOnly>\n * );\n * ```\n */\nexport function ClientOnly({ children, fallback = null }) {\n return useHydrated() ? React.createElement(React.Fragment, null, children()) : React.createElement(React.Fragment, null, fallback);\n}\n","import { Index as ConfettiShower } from 'confetti-react'\nimport { ClientOnly } from 'remix-utils/client-only'\n\nexport function Confetti({ id }: { id?: string | null }) {\n\tif (!id) return null\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => (\n\t\t\t\t<ConfettiShower\n\t\t\t\t\tkey={id}\n\t\t\t\t\trun={Boolean(id)}\n\t\t\t\t\trecycle={false}\n\t\t\t\t\tnumberOfPieces={800}\n\t\t\t\t\twidth={window.innerWidth}\n\t\t\t\t\theight={window.innerHeight}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ClientOnly>\n\t)\n}\n","import { useEffect } from 'react'\nimport { Toaster, toast as showToast } from 'sonner'\nimport { type Toast } from '#app/utils/toast.server.ts'\n\nexport function EpicToaster({ toast }: { toast?: Toast | null }) {\n\treturn (\n\t\t<>\n\t\t\t<Toaster closeButton position=\"top-center\" />\n\t\t\t{toast ? <ShowToast toast={toast} /> : null}\n\t\t</>\n\t)\n}\n\nfunction ShowToast({ toast }: { toast: Toast }) {\n\tconst { id, type, title, description } = toast\n\tuseEffect(() => {\n\t\tsetTimeout(() => {\n\t\t\tshowToast[type](title, { id, description })\n\t\t}, 0)\n\t}, [description, id, title, type])\n\treturn null\n}\n","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/app.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f6170702e6373733f7472616e73666f726d2d6f6e6c79__\"","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/tailwind.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f7461696c77696e642e6373733f7472616e73666f726d2d6f6e6c79__\"","import path from 'node:path'\nimport { getPresentUsers } from '@epic-web/workshop-presence/presence.server'\nimport { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tgetDiscordMember,\n\tgetPreferences,\n\tgetUserInfo,\n\treadOnboardingData,\n} from '@epic-web/workshop-utils/db.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport { cssBundleHref } from '@remix-run/css-bundle'\nimport {\n\tjson,\n\tredirect,\n\ttype HeadersFunction,\n\ttype LinksFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport {\n\tLinks,\n\tMeta,\n\tOutlet,\n\tScripts,\n\tScrollRestoration,\n\tuseLoaderData,\n\tuseNavigation,\n} from '@remix-run/react'\nimport { promiseHash } from 'remix-utils/promise'\nimport { useSpinDelay } from 'spin-delay'\nimport { Confetti } from './components/confetti.tsx'\nimport { GeneralErrorBoundary } from './components/error-boundary.tsx'\nimport { EpicProgress } from './components/progress-bar.tsx'\nimport { EpicToaster } from './components/toaster.tsx'\nimport { TooltipProvider } from './components/ui/tooltip.tsx'\nimport { useTheme } from './routes/theme/index.tsx'\nimport { getTheme } from './routes/theme/theme-session.server.ts'\nimport appStylesheetUrl from './styles/app.css?url'\nimport tailwindStylesheetUrl from './styles/tailwind.css?url'\nimport { ClientHintCheck, getHints } from './utils/client-hints.tsx'\nimport { getConfetti } from './utils/confetti.server.ts'\nimport { getProgress, userHasAccessToWorkshop } from './utils/epic-api.ts'\nimport { cn, combineHeaders, getDomainUrl, useAltDown } from './utils/misc.tsx'\nimport { Presence } from './utils/presence.tsx'\nimport { getSeoMetaTags } from './utils/seo.ts'\nimport { getToast } from './utils/toast.server.ts'\n\nexport const links: LinksFunction = () => {\n\treturn [\n\t\t{ rel: 'stylesheet', href: '/neogrotesk-font.css' },\n\t\t{\n\t\t\trel: 'stylesheet',\n\t\t\thref: 'https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap',\n\t\t},\n\t\t{ rel: 'stylesheet', href: tailwindStylesheetUrl },\n\t\t{ rel: 'stylesheet', href: appStylesheetUrl },\n\t\t...(cssBundleHref ? [{ rel: 'stylesheet', href: cssBundleHref }] : []),\n\t\t{\n\t\t\trel: 'icon',\n\t\t\thref: '/favicon.ico',\n\t\t\tsizes: '48x48',\n\t\t},\n\t\t{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },\n\t]\n}\n\nexport const meta: MetaFunction<typeof loader> = ({ data }) => {\n\tif (!data) return []\n\n\treturn getSeoMetaTags({\n\t\tinstructor: data.instructor,\n\t\ttitle: data.workshopTitle,\n\t\tdescription: data.workshopSubtitle,\n\t\trequestInfo: data.requestInfo,\n\t})\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('rootLoader')\n\tconst workshopConfig = getWorkshopConfig()\n\tconst {\n\t\ttitle: workshopTitle,\n\t\tsubtitle: workshopSubtitle,\n\t\tinstructor,\n\t\tonboardingVideo,\n\t} = workshopConfig\n\n\tconst onboarding = await readOnboardingData()\n\tif (\n\t\t!ENV.EPICSHOP_DEPLOYED &&\n\t\t!onboarding?.tourVideosWatched.includes(onboardingVideo)\n\t) {\n\t\tif (new URL(request.url).pathname !== '/onboarding') {\n\t\t\tthrow redirect('/onboarding')\n\t\t}\n\t}\n\tconst theme = getTheme(request)\n\tconst { confettiId, headers: confettiHeaders } = getConfetti(request)\n\tconst { toast, headers: toastHeaders } = await getToast(request)\n\n\tconst asyncStuff = await promiseHash({\n\t\tpreferences: getPreferences(),\n\t\tprogress: getProgress({ timings }).catch((e) => {\n\t\t\tconsole.error('Failed to get progress', e)\n\t\t\tconst emptyProgress: Awaited<ReturnType<typeof getProgress>> = []\n\t\t\treturn emptyProgress\n\t\t}),\n\t\tdiscordMember: getDiscordMember(),\n\t\tuser: getUserInfo(),\n\t\tuserHasAccess: userHasAccessToWorkshop({ request, timings }),\n\t\tapps: getApps({ request, timings }),\n\t})\n\n\tconst presentUsers = await getPresentUsers(asyncStuff.user, {\n\t\trequest,\n\t\ttimings,\n\t})\n\n\treturn json(\n\t\t{\n\t\t\t...asyncStuff,\n\t\t\tworkshopConfig,\n\t\t\tworkshopTitle,\n\t\t\tworkshopSubtitle,\n\t\t\tinstructor,\n\t\t\tapps: asyncStuff.apps.map(({ name, fullPath, relativePath }) => ({\n\t\t\t\tname,\n\t\t\t\tfullPath,\n\t\t\t\trelativePath,\n\t\t\t})),\n\t\t\tENV: getEnv(),\n\t\t\trequestInfo: {\n\t\t\t\tprotocol: new URL(request.url).protocol,\n\t\t\t\thostname: new URL(request.url).hostname,\n\t\t\t\tport: new URL(request.url).port,\n\t\t\t\torigin: new URL(request.url).origin,\n\t\t\t\tdomain: getDomainUrl(request),\n\t\t\t\thints: getHints(request),\n\t\t\t\tpath: new URL(request.url).pathname,\n\t\t\t\tsession: { theme },\n\t\t\t\tseparator: path.sep,\n\t\t\t},\n\t\t\ttoast,\n\t\t\tconfettiId,\n\t\t\tpresence: {\n\t\t\t\tusers: presentUsers,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: combineHeaders(toastHeaders, confettiHeaders, {\n\t\t\t\t'Server-Timing': timings.toString(),\n\t\t\t}),\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': loaderHeaders.get('Server-Timing') ?? '',\n\t}\n\treturn headers\n}\n\nfunction Document({\n\tchildren,\n\tenv = {},\n\tclassName,\n}: {\n\tchildren: React.ReactNode\n\tenv?: Record<string, unknown>\n\tclassName: string\n}) {\n\treturn (\n\t\t<html lang=\"en\" className={className}>\n\t\t\t<head>\n\t\t\t\t<ClientHintCheck />\n\t\t\t\t<Meta />\n\t\t\t\t<meta charSet=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n\t\t\t\t<Links />\n\t\t\t\t<script\n\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t__html: `window.ENV = ${JSON.stringify(env)}`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</head>\n\t\t\t<body className=\"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe\">\n\t\t\t\t{children}\n\t\t\t\t<ScrollRestoration />\n\t\t\t\t<Scripts />\n\t\t\t</body>\n\t\t</html>\n\t)\n}\n\nfunction App() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst navigation = useNavigation()\n\tconst showSpinner = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 400,\n\t\tminDuration: 200,\n\t})\n\tconst altDown = useAltDown()\n\n\tconst theme = useTheme()\n\treturn (\n\t\t<Document\n\t\t\tclassName={cn(\n\t\t\t\t'antialiased h-screen-safe',\n\t\t\t\ttheme,\n\t\t\t\t{ 'cursor-progress': showSpinner },\n\t\t\t\taltDown ? 'alt-down' : null,\n\t\t\t)}\n\t\t\tenv={data.ENV}\n\t\t>\n\t\t\t<Outlet />\n\t\t\t<Confetti id={data.confettiId} />\n\t\t\t<EpicToaster toast={data.toast} />\n\t\t\t<EpicProgress />\n\t\t</Document>\n\t)\n}\n\nexport default function AppWithProviders() {\n\tconst { user } = useLoaderData<typeof loader>()\n\treturn (\n\t\t<Presence user={user}>\n\t\t\t<TooltipProvider>\n\t\t\t\t<App />\n\t\t\t</TooltipProvider>\n\t\t</Presence>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<Document className=\"h-screen-safe\">\n\t\t\t<GeneralErrorBoundary />\n\t\t</Document>\n\t)\n}\n"],"names":["STORAGE_KEY","ScrollRestoration","getKey","props","isSpaMode","useRemixContext","location","useLocation","matches","useMatches","UNSAFE_useScrollRestoration","key","React.useMemo","userKey","restoreScroll","restoreKey","storedY","error","React.createElement","_extends","tweenFunctions","b","_c","d","c","a","p","s","v","tweenFunctions_1","_defineProperties","target","i","descriptor","_createClass","Constructor","protoProps","staticProps","source","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","degreesToRads","degrees","randomRange","min","max","randomInt","ParticleShape","RotationDirection","Particle","context","getOptions","x","y","_this$getOptions","colors","initialVelocityX","initialVelocityY","_proto","_this$getOptions2","gravity","wind","friction","opacity","drawShape","rotateDelta","ParticleGeneratorClass","canvas","_this","newParticleX","newParticleY","particlesGenerated","lastNumberOfPieces","run","recycle","numberOfPieces","debug","tweenFunction","tweenDuration","nP","activeCount","now","tweenInitTime","progressTime","tweenedVal","numToAdd","ctx","confettiDefaults","tweens","Confetti","opts","computedConfettiDefaults","_this$options","onConfettiComplete","lastRunState","lastRecycleState","ref","React","extractCanvasProps","confettiOptions","refs","rest","confettiOptionKeys","refProps","prop","val","ConfettiReactInternal","_Component","_extractCanvasProps","passedProps","canvasStyles","Component","Index","_ref","ClientOnly","children","fallback","useHydrated","React.Fragment","id","jsx","ConfettiShower","EpicToaster","toast","jsxs","Fragment","Toaster","ShowToast","type","title","description","useEffect","showToast","appStylesheetUrl","tailwindStylesheetUrl","links","rel","href","sizes","meta","data","getSeoMetaTags","instructor","workshopTitle","workshopSubtitle","requestInfo","Document","env","className","lang","ClientHintCheck","Meta","charSet","name","content","Links","dangerouslySetInnerHTML","__html","JSON","stringify","Scripts","App","useLoaderData","navigation","useNavigation","showSpinner","useSpinDelay","state","delay","minDuration","altDown","useAltDown","theme","useTheme","cn","ENV","Outlet","confettiId","EpicProgress","AppWithProviders","user","Presence","TooltipProvider","ErrorBoundary","GeneralErrorBoundary"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./index-DF_XBInP.js";import{R as m,T as p,V as x,I as h,P as f,C as j,S as g,a as y,G as N,L as b,b as S,c as w,d as P,e as v}from"./index-BczhSZ3e.js";import{I as l,c}from"./misc-BE75ioh8.js";import{s as I}from"./progress-bar-F8_2mvYp.js";import{S as C}from"./tooltip-6-WS-Xux.js";import{u as T}from"./pe-CvPIToj6.js";import{a as u}from"./components-DZ8XIeZ3.js";function k({appName:t,reset:r=!1,tooltipText:a,...n}){var i;const s=u(),d=T(),o=e.jsx("button",{type:"submit",...n,className:c(n.className,s.state!=="idle"?"cursor-progress":null,((i=s.data)==null?void 0:i.status)==="error"?"cursor-not-allowed":null)});return e.jsxs(s.Form,{action:"/set-playground",method:"POST",className:"inline-flex items-center justify-center",children:[d,e.jsx("input",{type:"hidden",name:"appName",value:t}),r?e.jsx("input",{type:"hidden",name:"reset",value:"true"}):null,I,a?e.jsx(C,{content:a,children:o}):o]})}function U({playgroundAppName:t,allApps:r}){var n;const a=u();return e.jsxs(m,{name:"appName",value:t,onValueChange:s=>{a.submit({appName:s},{method:"POST",action:"/set-playground"})},children:[e.jsxs(p,{"aria-label":"Select app for playground",className:c("flex h-full w-full items-center justify-between text-left radix-placeholder:text-gray-500 focus-visible:outline-none",a.state!=="idle"?"cursor-progress":null,((n=a.data)==null?void 0:n.status)==="error"?"cursor-not-allowed":null),children:[e.jsx("span",{className:"w-80 flex-1 overflow-hidden text-ellipsis whitespace-nowrap scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(x,{placeholder:"Select current app",className:"inline-block w-40 text-ellipsis"})}),e.jsx(h,{children:e.jsx(l,{name:"TriangleDownSmall"})})]}),e.jsx(f,{children:e.jsxs(j,{position:"popper",align:"start",className:"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",children:[e.jsx(g,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(l,{name:"ChevronUp"})}),e.jsx(y,{className:"p-3",children:e.jsxs(N,{children:[e.jsx(b,{className:"px-5 pb-3 font-mono uppercase",children:"App"}),r.filter(s=>s.name!=="playground").map(s=>e.jsx(E,{value:s.name,children:s.displayName},s.name))]})}),e.jsx(S,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(l,{name:"ChevronDown"})})]})})]})}function E({value:t,children:r}){return e.jsxs(w,{value:t,className:"relative flex cursor-pointer select-none items-center rounded px-10 py-2 leading-none opacity-80 radix-disabled:text-red-500 radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100",children:[e.jsx(P,{children:r}),e.jsx(v,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(l,{name:"CheckSmall"})})]})}function A({appName:t}){return ENV.EPICSHOP_DEPLOYED?null:e.jsx(k,{appName:t,tooltipText:"Playground is not set to the right app. Click to set Playground.",children:e.jsxs("span",{className:"flex items-center justify-center gap-1 text-foreground-danger hover:underline",children:[e.jsx(l,{name:"Unlinked",className:"animate-ping"})," ",e.jsx("span",{className:"uppercase",children:"Set to Playground"})]})})}export{U as P,A as S,k as a};
2
- //# sourceMappingURL=set-playground-pMKmtPtz.js.map
1
+ import{j as e}from"./index-BFGhCX_U.js";import{R as m,T as p,V as x,I as h,P as f,C as j,S as g,a as y,G as N,L as b,b as S,c as w,d as P,e as v}from"./index-BuA_RWlU.js";import{I as l,c}from"./misc-BJtHv_Jh.js";import{s as I}from"./progress-bar-Cj5R4Zk7.js";import{S as C}from"./tooltip-BgynKV2c.js";import{u as T}from"./pe-ChIwTk8v.js";import{a as u}from"./components-9EGYHTc_.js";function k({appName:t,reset:r=!1,tooltipText:a,...n}){var i;const s=u(),d=T(),o=e.jsx("button",{type:"submit",...n,className:c(n.className,s.state!=="idle"?"cursor-progress":null,((i=s.data)==null?void 0:i.status)==="error"?"cursor-not-allowed":null)});return e.jsxs(s.Form,{action:"/set-playground",method:"POST",className:"inline-flex items-center justify-center",children:[d,e.jsx("input",{type:"hidden",name:"appName",value:t}),r?e.jsx("input",{type:"hidden",name:"reset",value:"true"}):null,I,a?e.jsx(C,{content:a,children:o}):o]})}function U({playgroundAppName:t,allApps:r}){var n;const a=u();return e.jsxs(m,{name:"appName",value:t,onValueChange:s=>{a.submit({appName:s},{method:"POST",action:"/set-playground"})},children:[e.jsxs(p,{"aria-label":"Select app for playground",className:c("flex h-full w-full items-center justify-between text-left radix-placeholder:text-gray-500 focus-visible:outline-none",a.state!=="idle"?"cursor-progress":null,((n=a.data)==null?void 0:n.status)==="error"?"cursor-not-allowed":null),children:[e.jsx("span",{className:"w-80 flex-1 overflow-hidden text-ellipsis whitespace-nowrap scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(x,{placeholder:"Select current app",className:"inline-block w-40 text-ellipsis"})}),e.jsx(h,{children:e.jsx(l,{name:"TriangleDownSmall"})})]}),e.jsx(f,{children:e.jsxs(j,{position:"popper",align:"start",className:"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",children:[e.jsx(g,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(l,{name:"ChevronUp"})}),e.jsx(y,{className:"p-3",children:e.jsxs(N,{children:[e.jsx(b,{className:"px-5 pb-3 font-mono uppercase",children:"App"}),r.filter(s=>s.name!=="playground").map(s=>e.jsx(E,{value:s.name,children:s.displayName},s.name))]})}),e.jsx(S,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(l,{name:"ChevronDown"})})]})})]})}function E({value:t,children:r}){return e.jsxs(w,{value:t,className:"relative flex cursor-pointer select-none items-center rounded px-10 py-2 leading-none opacity-80 radix-disabled:text-red-500 radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100",children:[e.jsx(P,{children:r}),e.jsx(v,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(l,{name:"CheckSmall"})})]})}function A({appName:t}){return ENV.EPICSHOP_DEPLOYED?null:e.jsx(k,{appName:t,tooltipText:"Playground is not set to the right app. Click to set Playground.",children:e.jsxs("span",{className:"flex items-center justify-center gap-1 text-foreground-danger hover:underline",children:[e.jsx(l,{name:"Unlinked",className:"animate-ping"})," ",e.jsx("span",{className:"uppercase",children:"Set to Playground"})]})})}export{U as P,A as S,k as a};
2
+ //# sourceMappingURL=set-playground-DgnOJqFN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-playground-pMKmtPtz.js","sources":["../../../app/routes/set-playground.tsx"],"sourcesContent":["import {\n\tgetAppByName,\n\tgetApps,\n\tisPlaygroundApp,\n\tisProblemApp,\n\tisSolutionApp,\n\tsetPlayground,\n} from '@epic-web/workshop-utils/apps.server'\nimport * as Select from '@radix-ui/react-select'\nimport { json, type ActionFunctionArgs } from '@remix-run/node'\nimport { useFetcher } from '@remix-run/react'\nimport { clsx } from 'clsx'\nimport { z } from 'zod'\nimport { Icon } from '#app/components/icons.tsx'\nimport { showProgressBarField } from '#app/components/progress-bar.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { getDiffCode } from '#app/utils/diff.server.ts'\nimport { ensureUndeployed, getErrorMessage } from '#app/utils/misc.tsx'\nimport { jsonWithPE, usePERedirectInput } from '#app/utils/pe.js'\nimport { createToastHeaders } from '#app/utils/toast.server.ts'\n\nconst SetPlaygroundSchema = z.object({\n\tappName: z.string(),\n\treset: z\n\t\t.string()\n\t\t.nullable()\n\t\t.optional()\n\t\t.transform((v) => v === 'true'),\n})\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst rawData = {\n\t\tappName: formData.get('appName'),\n\t\tredirectTo: formData.get('redirectTo'),\n\t}\n\tconst result = SetPlaygroundSchema.safeParse(rawData)\n\tif (!result.success) {\n\t\treturn jsonWithPE(\n\t\t\tformData,\n\t\t\t{ status: 'error', error: result.error.message } as const,\n\t\t\t{ status: 400 },\n\t\t)\n\t}\n\tconst form = result.data\n\tconst app = await getAppByName(form.appName)\n\tif (!app) {\n\t\treturn jsonWithPE(\n\t\t\tformData,\n\t\t\t{ status: 'error', error: `App ${form.appName} not found` } as const,\n\t\t\t{ status: 404 },\n\t\t)\n\t}\n\tconst converseApp =\n\t\tisProblemApp(app) && app.solutionName\n\t\t\t? await getAppByName(app.solutionName)\n\t\t\t: isSolutionApp(app) && app.problemName\n\t\t\t\t? await getAppByName(app.problemName)\n\t\t\t\t: undefined\n\ttry {\n\t\tawait setPlayground(app.fullPath, { reset: form.reset })\n\t} catch (error: unknown) {\n\t\tconst message = getErrorMessage(error)\n\t\tconsole.error('Error setting playground', message)\n\t\treturn json({ status: 'error', error: message } as const, {\n\t\t\tstatus: 500,\n\t\t\theaders: await createToastHeaders({\n\t\t\t\ttype: 'error',\n\t\t\t\ttitle: 'Error',\n\t\t\t\tdescription:\n\t\t\t\t\t'There was an error setting the playground. Check the terminal for details.',\n\t\t\t}),\n\t\t})\n\t}\n\tconst apps = await getApps({ forceFresh: true })\n\tconst playground = apps.find(isPlaygroundApp)\n\tif (playground && converseApp) {\n\t\tvoid getDiffCode(playground, converseApp, { forceFresh: true })\n\t}\n\treturn jsonWithPE(formData, { status: 'success' } as const)\n}\n\nexport function SetPlayground({\n\tappName,\n\treset = false,\n\ttooltipText,\n\t...buttonProps\n}: {\n\tappName: string\n\ttooltipText?: string\n\treset?: boolean\n} & React.ComponentProps<'button'>) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\n\tconst submitButton = (\n\t\t<button\n\t\t\ttype=\"submit\"\n\t\t\t{...buttonProps}\n\t\t\tclassName={clsx(\n\t\t\t\tbuttonProps.className,\n\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t)}\n\t\t/>\n\t)\n\treturn (\n\t\t<fetcher.Form\n\t\t\taction=\"/set-playground\"\n\t\t\tmethod=\"POST\"\n\t\t\tclassName=\"inline-flex items-center justify-center\"\n\t\t>\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"appName\" value={appName} />\n\t\t\t{reset ? <input type=\"hidden\" name=\"reset\" value=\"true\" /> : null}\n\t\t\t{showProgressBarField}\n\t\t\t{tooltipText ? (\n\t\t\t\t<SimpleTooltip content={tooltipText}>{submitButton}</SimpleTooltip>\n\t\t\t) : (\n\t\t\t\tsubmitButton\n\t\t\t)}\n\t\t</fetcher.Form>\n\t)\n}\n\nexport function PlaygroundChooser({\n\tplaygroundAppName,\n\tallApps,\n}: {\n\tplaygroundAppName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\treturn (\n\t\t<Select.Root\n\t\t\tname=\"appName\"\n\t\t\tvalue={playgroundAppName}\n\t\t\tonValueChange={(appName) => {\n\t\t\t\tfetcher.submit(\n\t\t\t\t\t{ appName },\n\t\t\t\t\t{ method: 'POST', action: '/set-playground' },\n\t\t\t\t)\n\t\t\t}}\n\t\t>\n\t\t\t<Select.Trigger\n\t\t\t\taria-label=\"Select app for playground\"\n\t\t\t\tclassName={clsx(\n\t\t\t\t\t'flex h-full w-full items-center justify-between text-left radix-placeholder:text-gray-500 focus-visible:outline-none',\n\t\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"w-80 flex-1 overflow-hidden text-ellipsis whitespace-nowrap scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t<Select.Value\n\t\t\t\t\t\tplaceholder=\"Select current app\"\n\t\t\t\t\t\tclassName=\"inline-block w-40 text-ellipsis\"\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t\t<Select.Icon>\n\t\t\t\t\t<Icon name=\"TriangleDownSmall\" />\n\t\t\t\t</Select.Icon>\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Portal>\n\t\t\t\t<Select.Content\n\t\t\t\t\tposition=\"popper\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tclassName=\"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Select.ScrollUpButton className=\"flex h-5 cursor-default items-center justify-center \">\n\t\t\t\t\t\t<Icon name=\"ChevronUp\" />\n\t\t\t\t\t</Select.ScrollUpButton>\n\t\t\t\t\t<Select.Viewport className=\"p-3\">\n\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t<Select.Label className=\"px-5 pb-3 font-mono uppercase\">\n\t\t\t\t\t\t\t\tApp\n\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t{allApps\n\t\t\t\t\t\t\t\t.filter((app) => app.name !== 'playground')\n\t\t\t\t\t\t\t\t.map((app) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<SelectItem key={app.name} value={app.name}>\n\t\t\t\t\t\t\t\t\t\t\t{app.displayName}\n\t\t\t\t\t\t\t\t\t\t</SelectItem>\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</Select.Group>\n\t\t\t\t\t</Select.Viewport>\n\t\t\t\t\t<Select.ScrollDownButton className=\"flex h-5 cursor-default items-center justify-center \">\n\t\t\t\t\t\t<Icon name=\"ChevronDown\" />\n\t\t\t\t\t</Select.ScrollDownButton>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Portal>\n\t\t</Select.Root>\n\t)\n}\n\nfunction SelectItem({\n\tvalue,\n\tchildren,\n}: {\n\tvalue: string\n\tchildren: React.ReactNode\n}) {\n\treturn (\n\t\t<Select.Item\n\t\t\tvalue={value}\n\t\t\tclassName=\"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\t>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className=\"absolute left-0 inline-flex w-[25px] items-center justify-center\">\n\t\t\t\t<Icon name=\"CheckSmall\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t)\n}\n\nexport function SetAppToPlayground({ appName }: { appName: string }) {\n\tif (ENV.EPICSHOP_DEPLOYED) return null\n\treturn (\n\t\t<SetPlayground\n\t\t\tappName={appName}\n\t\t\ttooltipText=\"Playground is not set to the right app. Click to set Playground.\"\n\t\t>\n\t\t\t<span className=\"flex items-center justify-center gap-1 text-foreground-danger hover:underline\">\n\t\t\t\t<Icon name=\"Unlinked\" className=\"animate-ping\" />{' '}\n\t\t\t\t<span className=\"uppercase\">Set to Playground</span>\n\t\t\t</span>\n\t\t</SetPlayground>\n\t)\n}\n"],"names":["SetPlayground","appName","reset","tooltipText","buttonProps","fetcher","useFetcher","peRedirectInput","usePERedirectInput","submitButton","jsx","type","className","clsx","state","data","status","jsxs","Form","action","method","children","name","value","showProgressBarField","SimpleTooltip","content","PlaygroundChooser","playgroundAppName","allApps","Select","onValueChange","submit","placeholder","Icon","position","align","filter","app","map","SelectItem","displayName","SetAppToPlayground","ENV","EPICSHOP_DEPLOYED"],"mappings":"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"}
1
+ {"version":3,"file":"set-playground-DgnOJqFN.js","sources":["../../../app/routes/set-playground.tsx"],"sourcesContent":["import {\n\tgetAppByName,\n\tgetApps,\n\tisPlaygroundApp,\n\tisProblemApp,\n\tisSolutionApp,\n\tsetPlayground,\n} from '@epic-web/workshop-utils/apps.server'\nimport * as Select from '@radix-ui/react-select'\nimport { json, type ActionFunctionArgs } from '@remix-run/node'\nimport { useFetcher } from '@remix-run/react'\nimport { clsx } from 'clsx'\nimport { z } from 'zod'\nimport { Icon } from '#app/components/icons.tsx'\nimport { showProgressBarField } from '#app/components/progress-bar.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { getDiffCode } from '#app/utils/diff.server.ts'\nimport { ensureUndeployed, getErrorMessage } from '#app/utils/misc.tsx'\nimport { jsonWithPE, usePERedirectInput } from '#app/utils/pe.js'\nimport { createToastHeaders } from '#app/utils/toast.server.ts'\n\nconst SetPlaygroundSchema = z.object({\n\tappName: z.string(),\n\treset: z\n\t\t.string()\n\t\t.nullable()\n\t\t.optional()\n\t\t.transform((v) => v === 'true'),\n})\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst rawData = {\n\t\tappName: formData.get('appName'),\n\t\tredirectTo: formData.get('redirectTo'),\n\t}\n\tconst result = SetPlaygroundSchema.safeParse(rawData)\n\tif (!result.success) {\n\t\treturn jsonWithPE(\n\t\t\tformData,\n\t\t\t{ status: 'error', error: result.error.message } as const,\n\t\t\t{ status: 400 },\n\t\t)\n\t}\n\tconst form = result.data\n\tconst app = await getAppByName(form.appName)\n\tif (!app) {\n\t\treturn jsonWithPE(\n\t\t\tformData,\n\t\t\t{ status: 'error', error: `App ${form.appName} not found` } as const,\n\t\t\t{ status: 404 },\n\t\t)\n\t}\n\tconst converseApp =\n\t\tisProblemApp(app) && app.solutionName\n\t\t\t? await getAppByName(app.solutionName)\n\t\t\t: isSolutionApp(app) && app.problemName\n\t\t\t\t? await getAppByName(app.problemName)\n\t\t\t\t: undefined\n\ttry {\n\t\tawait setPlayground(app.fullPath, { reset: form.reset })\n\t} catch (error: unknown) {\n\t\tconst message = getErrorMessage(error)\n\t\tconsole.error('Error setting playground', message)\n\t\treturn json({ status: 'error', error: message } as const, {\n\t\t\tstatus: 500,\n\t\t\theaders: await createToastHeaders({\n\t\t\t\ttype: 'error',\n\t\t\t\ttitle: 'Error',\n\t\t\t\tdescription:\n\t\t\t\t\t'There was an error setting the playground. Check the terminal for details.',\n\t\t\t}),\n\t\t})\n\t}\n\tconst apps = await getApps({ forceFresh: true })\n\tconst playground = apps.find(isPlaygroundApp)\n\tif (playground && converseApp) {\n\t\tvoid getDiffCode(playground, converseApp, { forceFresh: true })\n\t}\n\treturn jsonWithPE(formData, { status: 'success' } as const)\n}\n\nexport function SetPlayground({\n\tappName,\n\treset = false,\n\ttooltipText,\n\t...buttonProps\n}: {\n\tappName: string\n\ttooltipText?: string\n\treset?: boolean\n} & React.ComponentProps<'button'>) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\n\tconst submitButton = (\n\t\t<button\n\t\t\ttype=\"submit\"\n\t\t\t{...buttonProps}\n\t\t\tclassName={clsx(\n\t\t\t\tbuttonProps.className,\n\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t)}\n\t\t/>\n\t)\n\treturn (\n\t\t<fetcher.Form\n\t\t\taction=\"/set-playground\"\n\t\t\tmethod=\"POST\"\n\t\t\tclassName=\"inline-flex items-center justify-center\"\n\t\t>\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"appName\" value={appName} />\n\t\t\t{reset ? <input type=\"hidden\" name=\"reset\" value=\"true\" /> : null}\n\t\t\t{showProgressBarField}\n\t\t\t{tooltipText ? (\n\t\t\t\t<SimpleTooltip content={tooltipText}>{submitButton}</SimpleTooltip>\n\t\t\t) : (\n\t\t\t\tsubmitButton\n\t\t\t)}\n\t\t</fetcher.Form>\n\t)\n}\n\nexport function PlaygroundChooser({\n\tplaygroundAppName,\n\tallApps,\n}: {\n\tplaygroundAppName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\treturn (\n\t\t<Select.Root\n\t\t\tname=\"appName\"\n\t\t\tvalue={playgroundAppName}\n\t\t\tonValueChange={(appName) => {\n\t\t\t\tfetcher.submit(\n\t\t\t\t\t{ appName },\n\t\t\t\t\t{ method: 'POST', action: '/set-playground' },\n\t\t\t\t)\n\t\t\t}}\n\t\t>\n\t\t\t<Select.Trigger\n\t\t\t\taria-label=\"Select app for playground\"\n\t\t\t\tclassName={clsx(\n\t\t\t\t\t'flex h-full w-full items-center justify-between text-left radix-placeholder:text-gray-500 focus-visible:outline-none',\n\t\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"w-80 flex-1 overflow-hidden text-ellipsis whitespace-nowrap scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t<Select.Value\n\t\t\t\t\t\tplaceholder=\"Select current app\"\n\t\t\t\t\t\tclassName=\"inline-block w-40 text-ellipsis\"\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t\t<Select.Icon>\n\t\t\t\t\t<Icon name=\"TriangleDownSmall\" />\n\t\t\t\t</Select.Icon>\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Portal>\n\t\t\t\t<Select.Content\n\t\t\t\t\tposition=\"popper\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tclassName=\"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Select.ScrollUpButton className=\"flex h-5 cursor-default items-center justify-center \">\n\t\t\t\t\t\t<Icon name=\"ChevronUp\" />\n\t\t\t\t\t</Select.ScrollUpButton>\n\t\t\t\t\t<Select.Viewport className=\"p-3\">\n\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t<Select.Label className=\"px-5 pb-3 font-mono uppercase\">\n\t\t\t\t\t\t\t\tApp\n\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t{allApps\n\t\t\t\t\t\t\t\t.filter((app) => app.name !== 'playground')\n\t\t\t\t\t\t\t\t.map((app) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<SelectItem key={app.name} value={app.name}>\n\t\t\t\t\t\t\t\t\t\t\t{app.displayName}\n\t\t\t\t\t\t\t\t\t\t</SelectItem>\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</Select.Group>\n\t\t\t\t\t</Select.Viewport>\n\t\t\t\t\t<Select.ScrollDownButton className=\"flex h-5 cursor-default items-center justify-center \">\n\t\t\t\t\t\t<Icon name=\"ChevronDown\" />\n\t\t\t\t\t</Select.ScrollDownButton>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Portal>\n\t\t</Select.Root>\n\t)\n}\n\nfunction SelectItem({\n\tvalue,\n\tchildren,\n}: {\n\tvalue: string\n\tchildren: React.ReactNode\n}) {\n\treturn (\n\t\t<Select.Item\n\t\t\tvalue={value}\n\t\t\tclassName=\"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\t>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className=\"absolute left-0 inline-flex w-[25px] items-center justify-center\">\n\t\t\t\t<Icon name=\"CheckSmall\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t)\n}\n\nexport function SetAppToPlayground({ appName }: { appName: string }) {\n\tif (ENV.EPICSHOP_DEPLOYED) return null\n\treturn (\n\t\t<SetPlayground\n\t\t\tappName={appName}\n\t\t\ttooltipText=\"Playground is not set to the right app. Click to set Playground.\"\n\t\t>\n\t\t\t<span className=\"flex items-center justify-center gap-1 text-foreground-danger hover:underline\">\n\t\t\t\t<Icon name=\"Unlinked\" className=\"animate-ping\" />{' '}\n\t\t\t\t<span className=\"uppercase\">Set to Playground</span>\n\t\t\t</span>\n\t\t</SetPlayground>\n\t)\n}\n"],"names":["SetPlayground","appName","reset","tooltipText","buttonProps","fetcher","useFetcher","peRedirectInput","usePERedirectInput","submitButton","jsx","type","className","clsx","state","data","status","jsxs","Form","action","method","children","name","value","showProgressBarField","SimpleTooltip","content","PlaygroundChooser","playgroundAppName","allApps","Select","onValueChange","submit","placeholder","Icon","position","align","filter","app","map","SelectItem","displayName","SetAppToPlayground","ENV","EPICSHOP_DEPLOYED"],"mappings":"+XAmFO,SAASA,EAAc,CAC7BC,QAAAA,EACAC,MAAAA,EAAQ,GACRC,YAAAA,EACA,GAAGC,CACJ,EAIoC,OACnC,MAAMC,EAAUC,IACVC,EAAkBC,IAElBC,EACLC,EAAA,IAAC,SAAA,CACAC,KAAK,SACJ,GAAGP,EACJQ,UAAWC,EACVT,EAAYQ,UACZP,EAAQS,QAAU,OAAS,kBAAoB,OAC/CT,EAAAA,EAAQU,OAARV,YAAAA,EAAcW,UAAW,QAAU,qBAAuB,IAC3D,CAAA,CACD,EAGA,OAAAC,EAAA,KAACZ,EAAQa,KAAR,CACAC,OAAO,kBACPC,OAAO,OACPR,UAAU,0CAETS,SAAA,CAAAd,QACA,QAAM,CAAAI,KAAK,SAASW,KAAK,UAAUC,MAAOtB,EAAS,EACnDC,QAAS,QAAM,CAAAS,KAAK,SAASW,KAAK,QAAQC,MAAM,MAAO,CAAA,EAAK,KAC5DC,EACArB,EACCO,EAAAA,IAAAe,EAAA,CAAcC,QAASvB,EAAckB,UAAa,CAAA,EAEnDZ,CAAA,CAAA,CAEF,CAEF,CAEO,SAASkB,EAAkB,CACjCC,kBAAAA,EACAC,QAAAA,CACD,EAGG,OACF,MAAMxB,EAAUC,IAEf,OAAAW,EAAAA,KAACa,EAAA,CACAR,KAAK,UACLC,MAAOK,EACPG,cAAgB9B,GAAY,CACnBI,EAAA2B,OACP,CAAE/B,QAAAA,CAAQ,EACV,CAAEmB,OAAQ,OAAQD,OAAQ,iBAAkB,CAC7C,CACD,EAEAE,SAAA,CAAAJ,EAAA,KAACa,EAAA,CACA,aAAW,4BACXlB,UAAWC,EACV,uHACAR,EAAQS,QAAU,OAAS,kBAAoB,OAC/CT,EAAAA,EAAQU,OAARV,YAAAA,EAAcW,UAAW,QAAU,qBAAuB,IAC3D,EAEAK,SAAA,CAACX,EAAA,IAAA,OAAA,CAAKE,UAAU,uGACfS,SAAAX,EAAA,IAACoB,EAAA,CACAG,YAAY,qBACZrB,UAAU,kCACX,EACD,EACAF,EAAA,IAACoB,EAAA,CACAT,eAACa,EAAK,CAAAZ,KAAK,oBAAoB,CAChC,CAAA,CAAA,EACD,EACAZ,EAAA,IAACoB,EAAA,CACAT,SAAAJ,EAAA,KAACa,EAAA,CACAK,SAAS,SACTC,MAAM,QACNxB,UAAU,wDAEVS,SAAA,CAACX,EAAA,IAAAoB,EAAA,CAAsBlB,UAAU,uDAChCS,SAACX,EAAA,IAAAwB,EAAA,CAAKZ,KAAK,YAAY,EACxB,EACAZ,EAAA,IAACoB,EAAA,CAAgBlB,UAAU,MAC1BS,SAAAJ,EAAA,KAACa,EAAA,CACAT,SAAA,CAAAX,EAAA,IAACoB,EAAA,CAAalB,UAAU,gCAAgCS,SAExD,KAAA,CAAA,EACCQ,EACCQ,OAAQC,GAAQA,EAAIhB,OAAS,YAAY,EACzCiB,IAAKD,GAEJ5B,EAAAA,IAAC8B,GAA0BjB,MAAOe,EAAIhB,KACpCD,SAAIiB,EAAAG,WAAA,EADWH,EAAIhB,IAErB,CAED,CAAA,EACH,EACD,EACAZ,EAAA,IAACoB,EAAA,CAAwBlB,UAAU,uDAClCS,SAACX,EAAA,IAAAwB,EAAA,CAAKZ,KAAK,cAAc,CAC1B,CAAA,CAAA,EACD,CACD,CAAA,CAAA,CAAA,CACD,CAEF,CAEA,SAASkB,EAAW,CACnBjB,MAAAA,EACAF,SAAAA,CACD,EAGG,CAED,OAAAJ,EAAAA,KAACa,EAAA,CACAP,MAAAA,EACAX,UAAU,4NAEVS,SAAA,CAACX,EAAA,IAAAoB,EAAA,CAAiBT,SAAAA,EAAS,EAC3BX,EAAA,IAACoB,EAAA,CAAqBlB,UAAU,mEAC/BS,SAACX,EAAA,IAAAwB,EAAA,CAAKZ,KAAK,aAAa,CACzB,CAAA,CAAA,CAAA,CACD,CAEF,CAEgB,SAAAoB,EAAmB,CAAEzC,QAAAA,CAAQ,EAAwB,CAChE,OAAA0C,IAAIC,kBAA0B,KAEjClC,EAAAA,IAACV,EAAA,CACAC,QAAAA,EACAE,YAAY,mEAEZkB,SAAAJ,EAAA,KAAC,OAAK,CAAAL,UAAU,gFACfS,SAAA,CAAAX,EAAA,IAACwB,EAAK,CAAAZ,KAAK,WAAWV,UAAU,eAAe,EAAG,IACjDF,EAAA,IAAA,OAAA,CAAKE,UAAU,YAAYS,SAAiB,mBAAA,CAAA,CAAA,EAC9C,CAAA,CACD,CAEF"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./index-DF_XBInP.js";import{L as i}from"./components-DZ8XIeZ3.js";const l={getSitemapEntries:()=>null};function a(){var r;const s=(r=ENV.EPICSHOP_GITHUB_REPO.match(/github\.com\/(?<org>[^/?]+)\/(?<repo>[^/?]+)/))==null?void 0:r.groups;let o=ENV.EPICSHOP_GITHUB_REPO,t=o;return s!=null&&s.org&&s.repo&&(o=`https://github.com/${s.org}/${s.repo}`,t=`${o}/issues`),e.jsxs("div",{className:"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12",children:[e.jsx("h1",{className:"text-5xl font-bold",children:"Support"}),e.jsx("p",{children:"We're here to support you! Depending on the kind of support you need, you will want to reach out in different places:"}),e.jsxs("ul",{className:"list-disc",children:[e.jsxs("li",{children:["Technical issues:"," ",e.jsx("a",{href:"mailto:team@epicweb.dev",className:"underline",children:"team@epicweb.dev"})," ","– Helpful if you're having trouble with or have feedback for your EpicWeb.dev account or access to course content."]}),e.jsxs("li",{children:["Workshop App:"," ",e.jsx("a",{href:"https://github.com/epicweb-dev/epicshop/issues",className:"underline",children:"github.com/epicweb-dev/epicshop"})," ","– Helpful if you're having trouble with or feedback for the local workshop app."]}),e.jsxs("li",{children:["Workshop content:"," ",e.jsx("a",{href:t,className:"underline",children:o.replace("https://","")})," ","– Open an issue or pull request here to report an issue with the content of this workshop."]}),e.jsxs("li",{children:["Discord:"," ",e.jsx(i,{to:"/discord",className:"underline",children:"/discord"})," ","– Connect your account with discord to get access to the private forum and ask questions of other students and the workshop instructor."]})]})]})}export{a as default,l as handle};
2
- //# sourceMappingURL=support-B0E_F4Zh.js.map
1
+ import{j as e}from"./index-BFGhCX_U.js";import{L as i}from"./components-9EGYHTc_.js";const l={getSitemapEntries:()=>null};function a(){var r;const s=(r=ENV.EPICSHOP_GITHUB_REPO.match(/github\.com\/(?<org>[^/?]+)\/(?<repo>[^/?]+)/))==null?void 0:r.groups;let o=ENV.EPICSHOP_GITHUB_REPO,t=o;return s!=null&&s.org&&s.repo&&(o=`https://github.com/${s.org}/${s.repo}`,t=`${o}/issues`),e.jsxs("div",{className:"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12",children:[e.jsx("h1",{className:"text-5xl font-bold",children:"Support"}),e.jsx("p",{children:"We're here to support you! Depending on the kind of support you need, you will want to reach out in different places:"}),e.jsxs("ul",{className:"list-disc",children:[e.jsxs("li",{children:["Technical issues:"," ",e.jsx("a",{href:"mailto:team@epicweb.dev",className:"underline",children:"team@epicweb.dev"})," ","– Helpful if you're having trouble with or have feedback for your EpicWeb.dev account or access to course content."]}),e.jsxs("li",{children:["Workshop App:"," ",e.jsx("a",{href:"https://github.com/epicweb-dev/epicshop/issues",className:"underline",children:"github.com/epicweb-dev/epicshop"})," ","– Helpful if you're having trouble with or feedback for the local workshop app."]}),e.jsxs("li",{children:["Workshop content:"," ",e.jsx("a",{href:t,className:"underline",children:o.replace("https://","")})," ","– Open an issue or pull request here to report an issue with the content of this workshop."]}),e.jsxs("li",{children:["Discord:"," ",e.jsx(i,{to:"/discord",className:"underline",children:"/discord"})," ","– Connect your account with discord to get access to the private forum and ask questions of other students and the workshop instructor."]})]})]})}export{a as default,l as handle};
2
+ //# sourceMappingURL=support-BNS-kEhc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"support-B0E_F4Zh.js","sources":["../../../app/routes/_app+/support.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link } from '@remix-run/react'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport default function Support() {\n\tconst repoGroups = ENV.EPICSHOP_GITHUB_REPO.match(\n\t\t/github\\.com\\/(?<org>[^/?]+)\\/(?<repo>[^/?]+)/,\n\t)?.groups\n\n\tlet repoUrl = ENV.EPICSHOP_GITHUB_REPO\n\tlet repoIssuesUrl = repoUrl\n\tif (repoGroups?.org && repoGroups.repo) {\n\t\trepoUrl = `https://github.com/${repoGroups.org}/${repoGroups.repo}`\n\t\trepoIssuesUrl = `${repoUrl}/issues`\n\t}\n\treturn (\n\t\t<div className=\"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12\">\n\t\t\t<h1 className=\"text-5xl font-bold\">Support</h1>\n\t\t\t<p>\n\t\t\t\tWe're here to support you! Depending on the kind of support you need,\n\t\t\t\tyou will want to reach out in different places:\n\t\t\t</p>\n\t\t\t<ul className=\"list-disc\">\n\t\t\t\t<li>\n\t\t\t\t\tTechnical issues:{' '}\n\t\t\t\t\t<a href=\"mailto:team@epicweb.dev\" className=\"underline\">\n\t\t\t\t\t\tteam@epicweb.dev\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\t– Helpful if you're having trouble with or have feedback for your\n\t\t\t\t\tEpicWeb.dev account or access to course content.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\tWorkshop App:{' '}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://github.com/epicweb-dev/epicshop/issues\"\n\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tgithub.com/epicweb-dev/epicshop\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\t– Helpful if you're having trouble with or feedback for the local\n\t\t\t\t\tworkshop app.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\tWorkshop content:{' '}\n\t\t\t\t\t<a href={repoIssuesUrl} className=\"underline\">\n\t\t\t\t\t\t{repoUrl.replace('https://', '')}\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\t– Open an issue or pull request here to report an issue with the\n\t\t\t\t\tcontent of this workshop.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\tDiscord:{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\t/discord\n\t\t\t\t\t</Link>{' '}\n\t\t\t\t\t– Connect your account with discord to get access to the private forum\n\t\t\t\t\tand ask questions of other students and the workshop instructor.\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","Support","repoGroups","ENV","EPICSHOP_GITHUB_REPO","match","groups","repoUrl","repoIssuesUrl","org","repo","jsxs","className","children","jsx","href","replace","Link","to"],"mappings":"qFAGO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEA,SAAwBC,GAAU,OAC3B,MAAAC,GAAaC,EAAAA,IAAIC,qBAAqBC,MAC3C,8CACD,IAFmBF,YAAAA,EAEhBG,OAEH,IAAIC,EAAUJ,IAAIC,qBACdI,EAAgBD,EAChB,OAAAL,GAAAA,MAAAA,EAAYO,KAAOP,EAAWQ,OACjCH,EAAU,sBAAsBL,EAAWO,GAAG,IAAIP,EAAWQ,IAAI,GACjEF,EAAgB,GAAGD,CAAO,WAG1BI,EAAAA,KAAC,MAAI,CAAAC,UAAU,kFACdC,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,qBAAqBC,SAAO,SAAA,CAAA,EAC1CC,EAAA,IAAC,KAAED,SAGH,uHAAA,CAAA,EACAF,EAAA,KAAC,KAAG,CAAAC,UAAU,YACbC,SAAA,CAAAF,EAAA,KAAC,KAAG,CAAAE,SAAA,CAAA,oBACe,UACjB,IAAE,CAAAE,KAAK,0BAA0BH,UAAU,YAAYC,SAExD,kBAAA,CAAA,EAAK,IAAI,oHAAA,CAGV,CAAA,SACC,KAAG,CAAAA,SAAA,CAAA,gBACW,IACdC,EAAAA,IAAC,IAAA,CACAC,KAAK,iDACLH,UAAU,YACVC,SAAA,iCAAA,CAED,EAAK,IAAI,iFAAA,CAGV,CAAA,SACC,KAAG,CAAAA,SAAA,CAAA,oBACe,IAClBC,EAAAA,IAAC,IAAE,CAAAC,KAAMP,EAAeI,UAAU,YAChCC,SAAQN,EAAAS,QAAQ,WAAY,EAAE,CAChC,CAAA,EAAK,IAAI,4FAAA,CAGV,CAAA,SACC,KAAG,CAAAH,SAAA,CAAA,WACM,UACRI,EAAK,CAAAC,GAAG,WAAWN,UAAU,YAAYC,SAE1C,UAAA,CAAA,EAAQ,IAAI,yIAAA,CAGb,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF"}
1
+ {"version":3,"file":"support-BNS-kEhc.js","sources":["../../../app/routes/_app+/support.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link } from '@remix-run/react'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport default function Support() {\n\tconst repoGroups = ENV.EPICSHOP_GITHUB_REPO.match(\n\t\t/github\\.com\\/(?<org>[^/?]+)\\/(?<repo>[^/?]+)/,\n\t)?.groups\n\n\tlet repoUrl = ENV.EPICSHOP_GITHUB_REPO\n\tlet repoIssuesUrl = repoUrl\n\tif (repoGroups?.org && repoGroups.repo) {\n\t\trepoUrl = `https://github.com/${repoGroups.org}/${repoGroups.repo}`\n\t\trepoIssuesUrl = `${repoUrl}/issues`\n\t}\n\treturn (\n\t\t<div className=\"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12\">\n\t\t\t<h1 className=\"text-5xl font-bold\">Support</h1>\n\t\t\t<p>\n\t\t\t\tWe're here to support you! Depending on the kind of support you need,\n\t\t\t\tyou will want to reach out in different places:\n\t\t\t</p>\n\t\t\t<ul className=\"list-disc\">\n\t\t\t\t<li>\n\t\t\t\t\tTechnical issues:{' '}\n\t\t\t\t\t<a href=\"mailto:team@epicweb.dev\" className=\"underline\">\n\t\t\t\t\t\tteam@epicweb.dev\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\t– Helpful if you're having trouble with or have feedback for your\n\t\t\t\t\tEpicWeb.dev account or access to course content.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\tWorkshop App:{' '}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://github.com/epicweb-dev/epicshop/issues\"\n\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tgithub.com/epicweb-dev/epicshop\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\t– Helpful if you're having trouble with or feedback for the local\n\t\t\t\t\tworkshop app.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\tWorkshop content:{' '}\n\t\t\t\t\t<a href={repoIssuesUrl} className=\"underline\">\n\t\t\t\t\t\t{repoUrl.replace('https://', '')}\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\t– Open an issue or pull request here to report an issue with the\n\t\t\t\t\tcontent of this workshop.\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\tDiscord:{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\t/discord\n\t\t\t\t\t</Link>{' '}\n\t\t\t\t\t– Connect your account with discord to get access to the private forum\n\t\t\t\t\tand ask questions of other students and the workshop instructor.\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","Support","repoGroups","ENV","EPICSHOP_GITHUB_REPO","match","groups","repoUrl","repoIssuesUrl","org","repo","jsxs","className","children","jsx","href","replace","Link","to"],"mappings":"qFAGO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEA,SAAwBC,GAAU,OAC3B,MAAAC,GAAaC,EAAAA,IAAIC,qBAAqBC,MAC3C,8CACD,IAFmBF,YAAAA,EAEhBG,OAEH,IAAIC,EAAUJ,IAAIC,qBACdI,EAAgBD,EAChB,OAAAL,GAAAA,MAAAA,EAAYO,KAAOP,EAAWQ,OACjCH,EAAU,sBAAsBL,EAAWO,GAAG,IAAIP,EAAWQ,IAAI,GACjEF,EAAgB,GAAGD,CAAO,WAG1BI,EAAAA,KAAC,MAAI,CAAAC,UAAU,kFACdC,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,qBAAqBC,SAAO,SAAA,CAAA,EAC1CC,EAAA,IAAC,KAAED,SAGH,uHAAA,CAAA,EACAF,EAAA,KAAC,KAAG,CAAAC,UAAU,YACbC,SAAA,CAAAF,EAAA,KAAC,KAAG,CAAAE,SAAA,CAAA,oBACe,UACjB,IAAE,CAAAE,KAAK,0BAA0BH,UAAU,YAAYC,SAExD,kBAAA,CAAA,EAAK,IAAI,oHAAA,CAGV,CAAA,SACC,KAAG,CAAAA,SAAA,CAAA,gBACW,IACdC,EAAAA,IAAC,IAAA,CACAC,KAAK,iDACLH,UAAU,YACVC,SAAA,iCAAA,CAED,EAAK,IAAI,iFAAA,CAGV,CAAA,SACC,KAAG,CAAAA,SAAA,CAAA,oBACe,IAClBC,EAAAA,IAAC,IAAE,CAAAC,KAAMP,EAAeI,UAAU,YAChCC,SAAQN,EAAAS,QAAQ,WAAY,EAAE,CAChC,CAAA,EAAK,IAAI,4FAAA,CAGV,CAAA,SACC,KAAG,CAAAH,SAAA,CAAA,WACM,UACRI,EAAK,CAAAC,GAAG,WAAWN,UAAU,YAAYC,SAE1C,UAAA,CAAA,EAAQ,IAAI,yIAAA,CAGb,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF"}
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e5e5}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a3a3a3}input::placeholder,textarea::placeholder{opacity:1;color:#a3a3a3}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*{scrollbar-color:initial;scrollbar-width:initial}:root,.dark .invert-theme,.dark .invert-theme .invert-theme .invert-theme{--font-sans: Neogrotesk;--font-mono: IBM Plex Mono;--background: 0 0% 100%;--foreground: 0 0% 0%;--foreground-danger: 345 82.7% 40.8%;--highlight: 220 85% 60%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--scrollbar: #e5e5e5;--popover: 0 0% 100%;--popover-foreground: 222.2 47.4% 11.2%;--card: 0 0% 100%;--card-foreground: 222.2 47.4% 11.2%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--primary: 224 71% 4%;--primary-foreground: 213 31% 91%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 100% 50%;--destructive-foreground: 210 40% 98%;--ring: 215 20.2% 65.1%;--radius: .5rem}.dark,.light .invert-theme,.light .invert-theme .invert-theme .invert-theme{--background: 230 16% 14%;--foreground: 230 20% 96%;--foreground-danger: -4 68% 52%;--highlight: 220 90% 75%;--muted: 223 47% 11%;--muted-foreground: 215.4 16.3% 56.9%;--scrollbar: #3a3a3a;--popover: 224 71% 4%;--popover-foreground: 215 20.2% 65.1%;--card: 224 71% 4%;--card-foreground: 213 31% 91%;--border: 230 6% 30%;--input: 216 34% 17%;--primary: 0 0% 100%;--primary-foreground: 222.2 47.4% 11.2%;--secondary: 222.2 47.4% 11.2%;--secondary-foreground: 210 40% 98%;--accent: 216 34% 17%;--accent-foreground: 210 40% 98%;--destructive: 0 63% 31%;--destructive-foreground: 210 40% 98%;--ring: 216 34% 17%;--radius: .5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1}html,body{height:-webkit-fill-available}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(.prose>ul>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:unset}.prose :where(.prose>ul>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:unset}.prose :where(.prose>ol>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:unset}.prose :where(.prose>ol>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:unset}.prose :where(*):not(:where([class~=not-prose],[class~=not-prose] *)){color:hsl(var(--foreground))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.bottom-5{bottom:1.25rem}.left-0{left:0}.left-\[50\%\]{left:50%}.right-0{right:0}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1 / span 1}.row-span-1{grid-row:span 1 / span 1}.m-0{margin:0}.m-2{margin:.5rem}.m-5{margin:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.box-content{box-sizing:content-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-20{height:5rem}.h-28{height:7rem}.h-3{height:.75rem}.h-36{height:9rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[0\.20rem\]{height:.2rem}.h-\[1em\]{height:1em}.h-\[32px\]{height:32px}.h-\[calc\(100vh-128px-env\(safe-area-inset-top\)-env\(safe-area-inset-bottom\)\)\]{height:calc(100vh - 128px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.h-\[calc\(100vh-64px-env\(safe-area-inset-top\)-env\(safe-area-inset-bottom\)\)\]{height:calc(100vh - 64px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.h-\[unset\]{height:unset}.h-full{height:100%}.max-h-48{max-height:12rem}.max-h-72{max-height:18rem}.max-h-\[50vh\]{max-height:50vh}.min-h-14{min-height:3.5rem}.min-h-96{min-height:24rem}.min-h-\[420px\]{min-height:420px}.min-h-full{min-height:100%}.w-0{width:0px}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-20{width:5rem}.w-28{width:7rem}.w-3{width:.75rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-5\/12{width:41.666667%}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-8\/12{width:66.666667%}.w-80{width:20rem}.w-\[1em\]{width:1em}.w-\[25px\]{width:25px}.w-\[780px\]{width:780px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-full{min-width:100%}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-\[50\%\]{max-width:50%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-10{--tw-translate-y: -2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.scroll-pt-6{scroll-padding-top:1.5rem}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-\[1fr\,auto\]{grid-template-rows:1fr auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.375rem * var(--tw-space-x-reverse));margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.self-start{align-self:flex-start}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-600{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.border-border{border-color:hsl(var(--border))}.border-foreground{border-color:hsl(var(--foreground))}.border-b-gray-50{--tw-border-opacity: 1;border-bottom-color:rgb(250 250 250 / var(--tw-border-opacity))}.border-opacity-50{--tw-border-opacity: .5}.bg-\[var\(--shiki-background\)\]{background-color:var(--shiki-background)}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-500\/20{background-color:#3b82f633}.bg-foreground{background-color:hsl(var(--foreground))}.bg-foreground\/20{background-color:hsl(var(--foreground) / .2)}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(115 115 115 / var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-highlight{background-color:hsl(var(--highlight))}.bg-popover{background-color:hsl(var(--popover))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-white\/20{background-color:#fff3}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-indigo-500{--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-20{padding:5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.px-\[5px\]{padding-left:5px;padding-right:5px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[0\.5px\]{padding-top:.5px;padding-bottom:.5px}.py-\[21px\]{padding-top:21px;padding-bottom:21px}.py-\[6px\]{padding-top:6px;padding-bottom:6px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-1\.5{padding-left:.375rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-\[18px\]{padding-left:18px}.pr-3{padding-right:.75rem}.pr-3\.5{padding-right:.875rem}.pr-5{padding-right:1.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[15px\]{padding-top:15px}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.font-sans{font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[clamp\(3rem\,6vw\,7\.5rem\)\]{font-size:clamp(3rem,6vw,7.5rem)}.text-base{font-size:1rem;line-height:1.5rem}.text-body-lg{font-size:1.5rem;line-height:2rem}.text-body-md{font-size:1.25rem;line-height:1.75rem}.text-h2{font-size:2.5rem;line-height:3rem;font-weight:700}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-3{line-height:.75rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.\!text-foreground-danger{color:hsl(var(--foreground-danger))!important}.text-\[\#10b981\]{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity))}.text-\[\#ef4444\]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-\[\#fb923c\]{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity))}.text-foreground{color:hsl(var(--foreground))}.text-foreground-danger{color:hsl(var(--foreground-danger))}.text-gray-700{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.\!no-underline{text-decoration-line:none!important}.no-underline{text-decoration-line:none}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-\[0_0_10px_0_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow: 0 0 10px 0 rgba(0,0,0,.3);--tw-shadow-colored: 0 0 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_2px_0_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow: 0 0 2px 0 rgba(0,0,0,.3);--tw-shadow-colored: 0 0 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_4px_0_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow: 0 0 4px 0 rgba(0,0,0,.3);--tw-shadow-colored: 0 0 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_7px_0_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow: 0 0 7px 0 rgba(0,0,0,.3);--tw-shadow-colored: 0 0 7px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-purple-700{--tw-shadow-color: #7e22ce;--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow: drop-shadow(0 1px 1px rgb(0 0 0 / .05));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[height\]{transition-property:height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.scrollbar::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover, var(--scrollbar-track))}.scrollbar::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active, var(--scrollbar-track-hover, var(--scrollbar-track)))}.scrollbar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover, var(--scrollbar-thumb))}.scrollbar::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active, var(--scrollbar-thumb-hover, var(--scrollbar-thumb)))}.scrollbar::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover, var(--scrollbar-corner))}.scrollbar::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active, var(--scrollbar-corner-hover, var(--scrollbar-corner)))}.scrollbar{scrollbar-width:auto;scrollbar-color:var(--scrollbar-thumb, initial) var(--scrollbar-track, initial)}.scrollbar::-webkit-scrollbar{display:block;width:var(--scrollbar-width, 16px);height:var(--scrollbar-height, 16px)}.scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover, var(--scrollbar-track))}.scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active, var(--scrollbar-track-hover, var(--scrollbar-track)))}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover, var(--scrollbar-thumb))}.scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active, var(--scrollbar-thumb-hover, var(--scrollbar-thumb)))}.scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover, var(--scrollbar-corner))}.scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active, var(--scrollbar-corner-hover, var(--scrollbar-corner)))}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb, initial) var(--scrollbar-track, initial)}.scrollbar-thin::-webkit-scrollbar{display:block;width:8px;height:8px}.scrollbar-thumb-scrollbar{--scrollbar-thumb: var(--scrollbar) !important}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.paused{animation-play-state:paused}.h-screen-safe{height:calc(100vh - (env(safe-area-inset-top) + env(safe-area-inset-bottom)));height:-webkit-fill-available}.slideRightContent{transform-origin:var(--radix-popover-content-transform-origin);animation:slideRight .25s ease-out}@keyframes slideRight{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}.dark\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}@media (min-width: 640px){.sm\:prose-lg{font-size:1.125rem;line-height:1.7777778}.sm\:prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.sm\:prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-top:1.0909091em;margin-bottom:1.0909091em}.sm\:prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6666667em;margin-bottom:1.6666667em;padding-inline-start:1em}.sm\:prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;margin-top:0;margin-bottom:.8333333em;line-height:1}.sm\:prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;margin-top:1.8666667em;margin-bottom:1.0666667em;line-height:1.3333333}.sm\:prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;margin-top:1.6666667em;margin-bottom:.6666667em;line-height:1.5}.sm\:prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:.4444444em;line-height:1.5555556}.sm\:prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.sm\:prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.sm\:prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.sm\:prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.sm\:prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;border-radius:.3125rem;padding-top:.2222222em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-inline-start:.4444444em}.sm\:prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.sm\:prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.sm\:prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.sm\:prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.75;margin-top:2em;margin-bottom:2em;border-radius:.375rem;padding-top:1em;padding-inline-end:1.5em;padding-bottom:1em;padding-inline-start:1.5em}.sm\:prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.5555556em}.sm\:prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.5555556em}.sm\:prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;margin-bottom:.6666667em}.sm\:prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.sm\:prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.sm\:prose-lg :where(.sm\:prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8888889em;margin-bottom:.8888889em}.sm\:prose-lg :where(.sm\:prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.sm\:prose-lg :where(.sm\:prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.sm\:prose-lg :where(.sm\:prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.sm\:prose-lg :where(.sm\:prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.sm\:prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8888889em;margin-bottom:.8888889em}.sm\:prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.sm\:prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.sm\:prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.sm\:prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:3.1111111em;margin-bottom:3.1111111em}.sm\:prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.sm\:prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.sm\:prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.sm\:prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.sm\:prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.sm\:prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.sm\:prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.sm\:prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.sm\:prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.75em;padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.sm\:prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.sm\:prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.sm\:prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.sm\:prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.sm\:prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.sm\:prose-lg :where(.sm\:prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.sm\:prose-lg :where(.sm\:prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sm\:prose-lg :where(.sm\:prose-lg>ul>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:unset}.sm\:prose-lg :where(.sm\:prose-lg>ul>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:unset}.sm\:prose-lg :where(.sm\:prose-lg>ol>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:unset}.sm\:prose-lg :where(.sm\:prose-lg>ol>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:unset}.sm\:prose-lg :where(*):not(:where([class~=not-prose],[class~=not-prose] *)){color:hsl(var(--foreground))}.sm\:prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.sm\:prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:left-0:before{content:var(--tw-content);left:0}.before\:top-0:before{content:var(--tw-content);top:0}.before\:h-\[10\%\]:before{content:var(--tw-content);height:10%}.before\:h-\[100\%\]:before{content:var(--tw-content);height:100%}.before\:h-\[20\%\]:before{content:var(--tw-content);height:20%}.before\:h-\[30\%\]:before{content:var(--tw-content);height:30%}.before\:h-\[40\%\]:before{content:var(--tw-content);height:40%}.before\:h-\[50\%\]:before{content:var(--tw-content);height:50%}.before\:h-\[60\%\]:before{content:var(--tw-content);height:60%}.before\:h-\[70\%\]:before{content:var(--tw-content);height:70%}.before\:h-\[80\%\]:before{content:var(--tw-content);height:80%}.before\:h-\[90\%\]:before{content:var(--tw-content);height:90%}.before\:w-\[4px\]:before{content:var(--tw-content);width:4px}.before\:border-t:before{content:var(--tw-content);border-top-width:1px}.before\:bg-highlight:before{content:var(--tw-content);background-color:hsl(var(--highlight))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-bottom-2\.5:after{content:var(--tw-content);bottom:-.625rem}.after\:-right-2\.5:after{content:var(--tw-content);right:-.625rem}.after\:right-10:after{content:var(--tw-content);right:2.5rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:-translate-x-2:after{content:var(--tw-content);--tw-translate-x: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rotate-45:after{content:var(--tw-content);--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:scale-75:after{content:var(--tw-content);--tw-scale-x: .75;--tw-scale-y: .75;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:bg-background:after{content:var(--tw-content);background-color:hsl(var(--background))}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition:after{content:var(--tw-content);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\"\"\]:after{--tw-content: "";content:var(--tw-content)}.after\:content-\[\'→\'\]:after{--tw-content: "→";content:var(--tw-content)}.first\:pt-3:first-child{padding-top:.75rem}.last\:pb-3:last-child{padding-bottom:.75rem}.focus-within\:-translate-y-1:focus-within{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.focus-within\:opacity-100:focus-within{opacity:1}.focus-within\:shadow-lg:focus-within{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-y-10{--tw-translate-y: 2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:bg-background{background-color:hsl(var(--background))}.group:hover .group-hover\:opacity-0{opacity:0}.group:hover .group-hover\:opacity-100{opacity:1}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.prose-pre\:m-0 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){margin:0}.prose-pre\:mb-1 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.25rem}.prose-pre\:rounded-none :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:0}.radix-disabled\:text-red-500[data-disabled]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.radix-highlighted\:opacity-100[data-highlighted]{opacity:1}.radix-highlighted\:outline-none[data-highlighted]{outline:2px solid transparent;outline-offset:2px}.radix-placeholder\:text-gray-500[data-placeholder]{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}.radix-state-active\:z-10[data-state=active]{z-index:10}.radix-state-active\:bg-foreground[data-state=active]{background-color:hsl(var(--foreground))}.radix-state-active\:text-background[data-state=active]{color:hsl(var(--background))}.radix-state-checked\:opacity-100[data-state=checked]{opacity:1}.radix-state-closed\:hidden[data-state=closed],.radix-state-inactive\:hidden[data-state=inactive]{display:none}.group[data-state=open] .group-radix-state-open\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-1:hover{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:animate-none:hover{animation:none}.hover\:bg-\[hsl\(var\(--foreground\)\/0\.02\)\]:hover{background-color:hsl(var(--foreground)/.02)}.hover\:bg-background:hover{background-color:hsl(var(--background))}.hover\:bg-foreground\/20:hover{background-color:hsl(var(--foreground) / .2)}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity))}.hover\:bg-white\/30:hover{background-color:#ffffff4d}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:after\:translate-x-0:hover:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:after\:opacity-100:hover:after{content:var(--tw-content);opacity:1}.radix-state-active\:hover\:bg-foreground\/80:hover[data-state=active]{background-color:hsl(var(--foreground) / .8)}.radix-state-active\:hover\:text-background\/80:hover[data-state=active]{color:hsl(var(--background) / .8)}.radix-state-inactive\:hover\:bg-foreground\/20:hover[data-state=inactive]{background-color:hsl(var(--foreground) / .2)}.radix-state-inactive\:hover\:text-foreground\/80:hover[data-state=inactive]{color:hsl(var(--foreground) / .8)}.focus\:animate-none:focus{animation:none}.focus\:bg-\[hsl\(var\(--foreground\)\/0\.02\)\]:focus{background-color:hsl(var(--foreground)/.02)}.focus\:bg-background:focus{background-color:hsl(var(--background))}.focus\:bg-foreground\/80:focus{background-color:hsl(var(--foreground) / .8)}.focus\:text-background\/80:focus{color:hsl(var(--background) / .8)}.focus\:text-foreground:focus{color:hsl(var(--foreground))}.focus\:underline:focus{text-decoration-line:underline}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.active\:bg-foreground\/30:active{background-color:hsl(var(--foreground) / .3)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-40:disabled{opacity:.4}@media (prefers-reduced-motion: no-preference){.motion-safe\:transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}}.dark\:divide-border\/50:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.dark\:bg-black\/40:is(.dark *){background-color:#0006}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.dark\:bg-white:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(212 212 212 / var(--tw-text-opacity))}.dark\:shadow-gray-800:is(.dark *){--tw-shadow-color: #262626;--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-purple-200:is(.dark *){--tw-shadow-color: #e9d5ff;--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:#ffffff0d}.hover\:dark\:bg-gray-600:is(.dark *):hover{--tw-bg-opacity: 1;background-color:rgb(82 82 82 / var(--tw-bg-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:mb-4{margin-bottom:1rem}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-\[calc\(100vh-64px-env\(safe-area-inset-top\)-env\(safe-area-inset-bottom\)\)\]{height:calc(100vh - 64px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.sm\:h-\[calc\(100vh-env\(safe-area-inset-top\)-env\(safe-area-inset-bottom\)\)\]{height:calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.sm\:h-full{height:100%}.sm\:min-h-\[800px\]{min-height:800px}.sm\:min-h-\[unset\]{min-height:unset}.sm\:w-full{width:100%}.sm\:max-w-\[calc\(100\%-56px\)\]{max-width:calc(100% - 56px)}.sm\:flex-shrink-0{flex-shrink:0}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:border-b{border-bottom-width:1px}.sm\:border-r-0{border-right-width:0px}.sm\:p-10{padding:2.5rem}.sm\:pt-8{padding-top:2rem}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:block{display:block}.md\:hidden{display:none}.md\:min-h-\[unset\]{min-height:unset}.md\:w-3\/4{width:75%}.md\:w-full{width:100%}.md\:flex-row{flex-direction:row}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:py-12{padding-top:3rem;padding-bottom:3rem}.md\:pt-16{padding-top:4rem}.md\:pt-8{padding-top:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width: 1024px){.lg\:max-h-\[70vh\]{max-height:70vh}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.lg\:justify-center{justify-content:center}.lg\:gap-4{gap:1rem}.lg\:border-b-0{border-bottom-width:0px}.lg\:border-r{border-right-width:1px}.lg\:text-xl{font-size:1.25rem;line-height:1.75rem}.lg\:slideUpContent{transform-origin:var(--radix-popover-content-transform-origin);animation:slideUp .25s ease-out}}@media (min-width: 1280px){.xl\:w-2\/3{width:66.666667%}.xl\:p-12{padding:3rem}}
@@ -0,0 +1,2 @@
1
+ import{j as t}from"./index-BFGhCX_U.js";import{T as r}from"./tests-Bw1rCopV.js";import{u as p}from"./components-9EGYHTc_.js";import"./epic-video-GDpD7_Qt.js";import"./index-_J-F_Dnc.js";import"./request-info-DCIQLE6H.js";import"./misc-BJtHv_Jh.js";import"./tooltip-BgynKV2c.js";import"./pe-ChIwTk8v.js";import"./loading-Dk0n07O3.js";import"./user-BBryXlM_.js";import"./workshop-config-DJY2cXU_.js";import"./accordion-DC885Li1.js";import"./index-BuA_RWlU.js";import"./index-BuoaxPEj.js";import"./use-event-source-x59d4R2Z.js";import"./set-playground-DgnOJqFN.js";import"./progress-bar-Cj5R4Zk7.js";function A(){const{appInfo:o}=p();return t.jsx(r,{playgroundAppInfo:o})}export{A as default};
2
+ //# sourceMappingURL=test-DJ7oeeeg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-B6zIK2V6.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test.tsx"],"sourcesContent":["import { requireExerciseApp } from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\ttype HeadersFunction,\n\tjson,\n\ttype LoaderFunctionArgs,\n} from '@remix-run/node'\nimport { useLoaderData } from '@remix-run/react'\nimport { TestUI } from './__shared/tests.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exercise-step-test')\n\tconst exerciseStepApp = await requireExerciseApp(params, { request, timings })\n\n\treturn json({\n\t\tappInfo: {\n\t\t\tname: exerciseStepApp?.name,\n\t\t\ttest: exerciseStepApp?.test,\n\t\t},\n\t})\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function TestsList() {\n\tconst { appInfo } = useLoaderData<typeof loader>()\n\n\treturn <TestUI playgroundAppInfo={appInfo} />\n}\n"],"names":["TestsList","appInfo","useLoaderData","jsx","TestUI","playgroundAppInfo"],"mappings":"qlBAiCA,SAAwBA,GAAY,CAC7B,KAAA,CAAEC,QAAAA,CAAQ,EAAIC,EAA6B,EAE1C,OAAAC,EAAAA,IAACC,EAAO,CAAAC,kBAAmBJ,CAAS,CAAA,CAC5C"}
1
+ {"version":3,"file":"test-DJ7oeeeg.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test.tsx"],"sourcesContent":["import { requireExerciseApp } from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\ttype HeadersFunction,\n\tjson,\n\ttype LoaderFunctionArgs,\n} from '@remix-run/node'\nimport { useLoaderData } from '@remix-run/react'\nimport { TestUI } from './__shared/tests.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exercise-step-test')\n\tconst exerciseStepApp = await requireExerciseApp(params, { request, timings })\n\n\treturn json({\n\t\tappInfo: {\n\t\t\tname: exerciseStepApp?.name,\n\t\t\ttest: exerciseStepApp?.test,\n\t\t},\n\t})\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function TestsList() {\n\tconst { appInfo } = useLoaderData<typeof loader>()\n\n\treturn <TestUI playgroundAppInfo={appInfo} />\n}\n"],"names":["TestsList","appInfo","useLoaderData","jsx","TestUI","playgroundAppInfo"],"mappings":"qlBAiCA,SAAwBA,GAAY,CAC7B,KAAA,CAAEC,QAAAA,CAAQ,EAAIC,EAA6B,EAE1C,OAAAC,EAAAA,IAACC,EAAO,CAAAC,kBAAmBJ,CAAS,CAAA,CAC5C"}