@epic-web/workshop-app 5.3.8 → 5.4.1
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.
- package/build/client/assets/{_-CWSCXcBv.js → _-BrkpfnBb.js} +2 -2
- package/build/client/assets/{_-CWSCXcBv.js.map → _-BrkpfnBb.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber-DvMYZgqk.js → _exerciseNumber-DCSM0NCG.js} +2 -2
- package/build/client/assets/{_exerciseNumber-DvMYZgqk.js.map → _exerciseNumber-DCSM0NCG.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_._stepNumber-BA2Xhzqs.js → _exerciseNumber_._stepNumber-BIMJh_sg.js} +2 -2
- package/build/client/assets/{_exerciseNumber_._stepNumber-BA2Xhzqs.js.map → _exerciseNumber_._stepNumber-BIMJh_sg.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_.finished-DYN2QHN6.js → _exerciseNumber_.finished-nbpk1ToO.js} +2 -2
- package/build/client/assets/{_exerciseNumber_.finished-DYN2QHN6.js.map → _exerciseNumber_.finished-nbpk1ToO.js.map} +1 -1
- package/build/client/assets/{_layout-BK7mLImi.js → _layout-Cbz7Qt-S.js} +2 -2
- package/build/client/assets/{_layout-BK7mLImi.js.map → _layout-Cbz7Qt-S.js.map} +1 -1
- package/build/client/assets/{_layout-BH5PQW0M.js → _layout-DTAM9xh5.js} +2 -2
- package/build/client/assets/{_layout-BH5PQW0M.js.map → _layout-DTAM9xh5.js.map} +1 -1
- package/build/client/assets/_layout-Dfmv2zcn.js +2 -0
- package/build/client/assets/_layout-Dfmv2zcn.js.map +1 -0
- package/build/client/assets/{accordion-DC885Li1.js → accordion-D9-D-n9p.js} +2 -2
- package/build/client/assets/{accordion-DC885Li1.js.map → accordion-D9-D-n9p.js.map} +1 -1
- package/build/client/assets/account-C4Piztoz.js +2 -0
- package/build/client/assets/account-C4Piztoz.js.map +1 -0
- package/build/client/assets/app-DgTXXO8s.js +2 -0
- package/build/client/assets/{app-CM8yuYni.js.map → app-DgTXXO8s.js.map} +1 -1
- package/build/client/assets/{button-DQ001ob0.js → button-_qPvcoqR.js} +2 -2
- package/build/client/assets/{button-DQ001ob0.js.map → button-_qPvcoqR.js.map} +1 -1
- package/build/client/assets/{components-9EGYHTc_.js → components-Be92gVxW.js} +2 -2
- package/build/client/assets/{components-9EGYHTc_.js.map → components-Be92gVxW.js.map} +1 -1
- package/build/client/assets/{diff-C2Hm_DHX.js → diff-8nlDkmpc.js} +2 -2
- package/build/client/assets/{diff-C2Hm_DHX.js.map → diff-8nlDkmpc.js.map} +1 -1
- package/build/client/assets/diff-BhRAIPKc.js +2 -0
- package/build/client/assets/{diff-CbIF8Oq1.js.map → diff-BhRAIPKc.js.map} +1 -1
- package/build/client/assets/discord-BUWZUTEC.js +2 -0
- package/build/client/assets/discord-BUWZUTEC.js.map +1 -0
- package/build/client/assets/discord-Bdnx7fu-.js +2 -0
- package/build/client/assets/discord-Bdnx7fu-.js.map +1 -0
- package/build/client/assets/{entry.client-BTYTUpFV.js → entry.client-DqIWuxf8.js} +2 -2
- package/build/client/assets/{entry.client-BTYTUpFV.js.map → entry.client-DqIWuxf8.js.map} +1 -1
- package/build/client/assets/{epic-video-Bxtz3elt.js → epic-video-Bp4BOD2R.js} +2 -2
- package/build/client/assets/{epic-video-Bxtz3elt.js.map → epic-video-Bp4BOD2R.js.map} +1 -1
- package/build/client/assets/{error-boundary-1-dmC941.js → error-boundary-BZA-ffa8.js} +2 -2
- package/build/client/assets/{error-boundary-1-dmC941.js.map → error-boundary-BZA-ffa8.js.map} +1 -1
- package/build/client/assets/{finished--PGQDzya.js → finished-C0cpfAFL.js} +2 -2
- package/build/client/assets/{finished--PGQDzya.js.map → finished-C0cpfAFL.js.map} +1 -1
- package/build/client/assets/{index-BuoaxPEj.js → index-BCTr8uu6.js} +2 -2
- package/build/client/assets/{index-BuoaxPEj.js.map → index-BCTr8uu6.js.map} +1 -1
- package/build/client/assets/{index-_J-F_Dnc.js → index-Bdg3v8tC.js} +2 -2
- package/build/client/assets/{index-_J-F_Dnc.js.map → index-Bdg3v8tC.js.map} +1 -1
- package/build/client/assets/{index-C2MH9l6b.js → index-Bi1TbRTj.js} +2 -2
- package/build/client/assets/{index-C2MH9l6b.js.map → index-Bi1TbRTj.js.map} +1 -1
- package/build/client/assets/{index-DRH72MzK.js → index-C9Hx0Dey.js} +2 -2
- package/build/client/assets/{index-DRH72MzK.js.map → index-C9Hx0Dey.js.map} +1 -1
- package/build/client/assets/{index-oZkQrXic.js → index-Ca4vBON4.js} +2 -2
- package/build/client/assets/{index-oZkQrXic.js.map → index-Ca4vBON4.js.map} +1 -1
- package/build/client/assets/{index-BuA_RWlU.js → index-DZDhtMuq.js} +2 -2
- package/build/client/assets/{index-BuA_RWlU.js.map → index-DZDhtMuq.js.map} +1 -1
- package/build/client/assets/index-pkiQppkK.js +2 -0
- package/build/client/assets/index-pkiQppkK.js.map +1 -0
- package/build/client/assets/{loading-Dk0n07O3.js → loading-XhMtj4mp.js} +2 -2
- package/build/client/assets/{loading-Dk0n07O3.js.map → loading-XhMtj4mp.js.map} +1 -1
- package/build/client/assets/{login-pZYDEC_l.js → login-C1oOgi98.js} +2 -2
- package/build/client/assets/{login-pZYDEC_l.js.map → login-C1oOgi98.js.map} +1 -1
- package/build/client/assets/manifest-e5b2a6e1.js +1 -0
- package/build/client/assets/{mdx-DIAWAXtT.js → mdx-CEjzXoEx.js} +2 -2
- package/build/client/assets/{mdx-DIAWAXtT.js.map → mdx-CEjzXoEx.js.map} +1 -1
- package/build/client/assets/{misc-BJtHv_Jh.js → misc-DUy_whwE.js} +2 -2
- package/build/client/assets/{misc-BJtHv_Jh.js.map → misc-DUy_whwE.js.map} +1 -1
- package/build/client/assets/{nav-chevrons-CgbSMLeb.js → nav-chevrons-DnR25VLp.js} +2 -2
- package/build/client/assets/{nav-chevrons-CgbSMLeb.js.map → nav-chevrons-DnR25VLp.js.map} +1 -1
- package/build/client/assets/{onboarding-BAVmCIKn.js → onboarding-C2YNq60k.js} +2 -2
- package/build/client/assets/{onboarding-BAVmCIKn.js.map → onboarding-C2YNq60k.js.map} +1 -1
- package/build/client/assets/{presence-DyppfK2V.js → presence-DJGFvdDh.js} +2 -2
- package/build/client/assets/{presence-DyppfK2V.js.map → presence-DJGFvdDh.js.map} +1 -1
- package/build/client/assets/{preview-CW_12I0i.js → preview-DaZd0wMb.js} +2 -2
- package/build/client/assets/{preview-CW_12I0i.js.map → preview-DaZd0wMb.js.map} +1 -1
- package/build/client/assets/{product-C1ynnrN_.js → product-DIAmCwmZ.js} +2 -2
- package/build/client/assets/{product-C1ynnrN_.js.map → product-DIAmCwmZ.js.map} +1 -1
- package/build/client/assets/{progress-DAB3nDa2.js → progress-DQt_Bn9o.js} +2 -2
- package/build/client/assets/{progress-DAB3nDa2.js.map → progress-DQt_Bn9o.js.map} +1 -1
- package/build/client/assets/{progress-bar-Cj5R4Zk7.js → progress-bar-BaTU3Yx_.js} +2 -2
- package/build/client/assets/{progress-bar-Cj5R4Zk7.js.map → progress-bar-BaTU3Yx_.js.map} +1 -1
- package/build/client/assets/{request-info-DCIQLE6H.js → request-info-ByUEfOil.js} +2 -2
- package/build/client/assets/{request-info-DCIQLE6H.js.map → request-info-ByUEfOil.js.map} +1 -1
- package/build/client/assets/{revalidation-ws-DU-PzW-_.js → revalidation-ws-dUa9CAqr.js} +2 -2
- package/build/client/assets/{revalidation-ws-DU-PzW-_.js.map → revalidation-ws-dUa9CAqr.js.map} +1 -1
- package/build/client/assets/{root-DCfiv1cO.js → root-a3d3Qwip.js} +2 -2
- package/build/client/assets/{root-DCfiv1cO.js.map → root-a3d3Qwip.js.map} +1 -1
- package/build/client/assets/{set-playground-S_rIwJAa.js → set-playground-CBHBA46B.js} +2 -2
- package/build/client/assets/{set-playground-S_rIwJAa.js.map → set-playground-CBHBA46B.js.map} +1 -1
- package/build/client/assets/{support-BNS-kEhc.js → support-CIz02V_r.js} +2 -2
- package/build/client/assets/{support-BNS-kEhc.js.map → support-CIz02V_r.js.map} +1 -1
- package/build/client/assets/test-DoKJvNug.js +2 -0
- package/build/client/assets/{test-3x2HHA0t.js.map → test-DoKJvNug.js.map} +1 -1
- package/build/client/assets/{tests-GmyhBOwD.js → tests-DbuyD2cI.js} +2 -2
- package/build/client/assets/{tests-GmyhBOwD.js.map → tests-DbuyD2cI.js.map} +1 -1
- package/build/client/assets/{tooltip-BgynKV2c.js → tooltip-DO9uwurQ.js} +2 -2
- package/build/client/assets/{tooltip-BgynKV2c.js.map → tooltip-DO9uwurQ.js.map} +1 -1
- package/build/client/assets/user-Bv6wYhQP.js +2 -0
- package/build/client/assets/{user-CFunCRfr.js.map → user-Bv6wYhQP.js.map} +1 -1
- package/build/client/assets/version-lxUUxt3s.js +2 -0
- package/build/client/assets/version-lxUUxt3s.js.map +1 -0
- package/build/client/assets/{workshop-config-DJY2cXU_.js → workshop-config-WVltG_BV.js} +2 -2
- package/build/client/assets/{workshop-config-DJY2cXU_.js.map → workshop-config-WVltG_BV.js.map} +1 -1
- package/build/server/index.js +368 -218
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/start.js +6 -0
- package/build/client/assets/_layout-gyrNluke.js +0 -2
- package/build/client/assets/_layout-gyrNluke.js.map +0 -1
- package/build/client/assets/account-B5baO5pg.js +0 -2
- package/build/client/assets/account-B5baO5pg.js.map +0 -1
- package/build/client/assets/app-CM8yuYni.js +0 -2
- package/build/client/assets/diff-CbIF8Oq1.js +0 -2
- package/build/client/assets/discord-BnQDHWJj.js +0 -2
- package/build/client/assets/discord-BnQDHWJj.js.map +0 -1
- package/build/client/assets/discord-DcHxc30v.js +0 -2
- package/build/client/assets/discord-DcHxc30v.js.map +0 -1
- package/build/client/assets/manifest-7f4f8707.js +0 -1
- package/build/client/assets/test-3x2HHA0t.js +0 -2
- package/build/client/assets/user-CFunCRfr.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as v,r as c}from"./index-BFGhCX_U.js";import{z as o,u as P}from"./request-info-
|
|
2
|
-
//# sourceMappingURL=revalidation-ws-
|
|
1
|
+
import{d as v,r as c}from"./index-BFGhCX_U.js";import{z as o,u as P}from"./request-info-ByUEfOil.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-dUa9CAqr.js.map
|
package/build/client/assets/{revalidation-ws-DU-PzW-_.js.map → revalidation-ws-dUa9CAqr.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revalidation-ws-
|
|
1
|
+
{"version":3,"file":"revalidation-ws-dUa9CAqr.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,4 +1,4 @@
|
|
|
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-
|
|
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-DUy_whwE.js";import{a as b}from"./pe-ChIwTk8v.js";import{G as z}from"./error-boundary-BZA-ffa8.js";import{E as K}from"./progress-bar-BaTU3Yx_.js";import{T as Z,J as tt}from"./index-C9Hx0Dey.js";import{T as et}from"./tooltip-DO9uwurQ.js";import{u as nt,C as it}from"./index-Bdg3v8tC.js";import{P as rt}from"./presence-DJGFvdDh.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-Be92gVxW.js";import"./request-info-ByUEfOil.js";/**
|
|
2
2
|
* @remix-run/react v2.12.1
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
@@ -8,4 +8,4 @@ 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-BFGh
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
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-
|
|
11
|
+
//# sourceMappingURL=root-a3d3Qwip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root-DCfiv1cO.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\tgetPreferences,\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\tunstable_data as data,\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 {\n\tgetProgress,\n\tgetUserInfo,\n\tuserHasAccessToWorkshop,\n} 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\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 data(\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
|
+
{"version":3,"file":"root-a3d3Qwip.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\tgetPreferences,\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\tunstable_data as data,\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 {\n\tgetProgress,\n\tgetUserInfo,\n\tuserHasAccessToWorkshop,\n} 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\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 data(\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-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-
|
|
2
|
-
//# sourceMappingURL=set-playground-
|
|
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-DZDhtMuq.js";import{I as l,c}from"./misc-DUy_whwE.js";import{s as I}from"./progress-bar-BaTU3Yx_.js";import{S as C}from"./tooltip-DO9uwurQ.js";import{u as T}from"./pe-ChIwTk8v.js";import{a as u}from"./components-Be92gVxW.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-CBHBA46B.js.map
|
package/build/client/assets/{set-playground-S_rIwJAa.js.map → set-playground-CBHBA46B.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-playground-S_rIwJAa.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 { unstable_data as data, 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 { dataWithPE, 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 dataWithPE(\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 dataWithPE(\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 data({ 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 dataWithPE(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-CBHBA46B.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 { unstable_data as data, 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 { dataWithPE, 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 dataWithPE(\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 dataWithPE(\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 data({ 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 dataWithPE(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,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-BFGhCX_U.js";import{L as i}from"./components-
|
|
2
|
-
//# sourceMappingURL=support-
|
|
1
|
+
import{j as e}from"./index-BFGhCX_U.js";import{L as i}from"./components-Be92gVxW.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-CIz02V_r.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support-
|
|
1
|
+
{"version":3,"file":"support-CIz02V_r.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,2 @@
|
|
|
1
|
+
import{j as t}from"./index-BFGhCX_U.js";import{T as r}from"./tests-DbuyD2cI.js";import{u as p}from"./components-Be92gVxW.js";import"./epic-video-Bp4BOD2R.js";import"./index-Bdg3v8tC.js";import"./request-info-ByUEfOil.js";import"./misc-DUy_whwE.js";import"./tooltip-DO9uwurQ.js";import"./pe-ChIwTk8v.js";import"./loading-XhMtj4mp.js";import"./user-Bv6wYhQP.js";import"./workshop-config-WVltG_BV.js";import"./accordion-D9-D-n9p.js";import"./index-DZDhtMuq.js";import"./index-BCTr8uu6.js";import"./use-event-source-x59d4R2Z.js";import"./set-playground-CBHBA46B.js";import"./progress-bar-BaTU3Yx_.js";function A(){const{appInfo:o}=p();return t.jsx(r,{playgroundAppInfo:o})}export{A as default};
|
|
2
|
+
//# sourceMappingURL=test-DoKJvNug.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-
|
|
1
|
+
{"version":3,"file":"test-DoKJvNug.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\tunstable_data as data,\n\ttype HeadersFunction,\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 data(\n\t\t{\n\t\t\tappInfo: {\n\t\t\t\tname: exerciseStepApp?.name,\n\t\t\t\ttest: exerciseStepApp?.test,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\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, 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":"qlBAwCA,SAAwBA,GAAY,CAC7B,KAAA,CAAEC,QAAAA,CAAQ,EAAIC,EAA6B,EAE1C,OAAAC,EAAAA,IAACC,EAAO,CAAAC,kBAAmBJ,CAAS,CAAA,CAC5C"}
|