@epic-web/workshop-app 5.6.0 → 5.7.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/{_-hAKYb2AG.js → _-CjjFMNGC.js} +2 -2
- package/build/client/assets/{_-hAKYb2AG.js.map → _-CjjFMNGC.js.map} +1 -1
- package/build/client/assets/_exerciseNumber-CqkGzsgV.js +2 -0
- package/build/client/assets/{_exerciseNumber-PTdG9GGB.js.map → _exerciseNumber-CqkGzsgV.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_._stepNumber-03erOIGo.js → _exerciseNumber_._stepNumber-BNWGPi9m.js} +2 -2
- package/build/client/assets/{_exerciseNumber_._stepNumber-03erOIGo.js.map → _exerciseNumber_._stepNumber-BNWGPi9m.js.map} +1 -1
- package/build/client/assets/_exerciseNumber_.finished-CdNhLhKg.js +2 -0
- package/build/client/assets/{_exerciseNumber_.finished-DQg4F1NL.js.map → _exerciseNumber_.finished-CdNhLhKg.js.map} +1 -1
- package/build/client/assets/_layout-BMa5nZcJ.js +2 -0
- package/build/client/assets/{_layout-DHoH74NH.js.map → _layout-BMa5nZcJ.js.map} +1 -1
- package/build/client/assets/{_layout-B4JGpA3A.js → _layout-CwTidn3v.js} +2 -2
- package/build/client/assets/{_layout-B4JGpA3A.js.map → _layout-CwTidn3v.js.map} +1 -1
- package/build/client/assets/{_layout-BJbMl6SJ.js → _layout-DV29dlKr.js} +2 -2
- package/build/client/assets/{_layout-BJbMl6SJ.js.map → _layout-DV29dlKr.js.map} +1 -1
- package/build/client/assets/{_layout-Bu0lel3p.js → _layout-Muw3ERYT.js} +3 -3
- package/build/client/assets/{_layout-Bu0lel3p.js.map → _layout-Muw3ERYT.js.map} +1 -1
- package/build/client/assets/{accordion-DLg7gJkp.js → accordion-C-sW--in.js} +2 -2
- package/build/client/assets/{accordion-DLg7gJkp.js.map → accordion-C-sW--in.js.map} +1 -1
- package/build/client/assets/account-Cc968svU.js +2 -0
- package/build/client/assets/account-Cc968svU.js.map +1 -0
- package/build/client/assets/app-BOqXK9hi.js +2 -0
- package/build/client/assets/{app-DJDjmdlu.js.map → app-BOqXK9hi.js.map} +1 -1
- package/build/client/assets/{app-b7uXHF5m.css → app-C3e6tFRf.css} +1 -1
- package/build/client/assets/{button-39zQyNX6.js → button-BS845Tjo.js} +2 -2
- package/build/client/assets/{button-39zQyNX6.js.map → button-BS845Tjo.js.map} +1 -1
- package/build/client/assets/{components-DUNtf72c.js → components-DrvY4pal.js} +4 -4
- package/build/client/assets/{components-DUNtf72c.js.map → components-DrvY4pal.js.map} +1 -1
- package/build/client/assets/diff-D0e_PrB7.js +2 -0
- package/build/client/assets/{diff-B3oaU_KB.js.map → diff-D0e_PrB7.js.map} +1 -1
- package/build/client/assets/{diff-BNCREJvf.js → diff-DtvfyjPI.js} +2 -2
- package/build/client/assets/{diff-BNCREJvf.js.map → diff-DtvfyjPI.js.map} +1 -1
- package/build/client/assets/{discord-CEOqKs_c.js → discord-BfP_Rny5.js} +2 -2
- package/build/client/assets/{discord-CEOqKs_c.js.map → discord-BfP_Rny5.js.map} +1 -1
- package/build/client/assets/discord-DILzAZN8.js +2 -0
- package/build/client/assets/discord-DILzAZN8.js.map +1 -0
- package/build/client/assets/{entry.client-CrlHhRMR.js → entry.client-CQusg5Iz.js} +2 -2
- package/build/client/assets/{entry.client-CrlHhRMR.js.map → entry.client-CQusg5Iz.js.map} +1 -1
- package/build/client/assets/epic-video-qHKPWPt1.js +3053 -0
- package/build/client/assets/epic-video-qHKPWPt1.js.map +1 -0
- package/build/client/assets/error-boundary-Beul7lrT.js +2 -0
- package/build/client/assets/{error-boundary-3zItlMUO.js.map → error-boundary-Beul7lrT.js.map} +1 -1
- package/build/client/assets/finished-DUKfL220.js +2 -0
- package/build/client/assets/{finished-rUzUjnEm.js.map → finished-DUKfL220.js.map} +1 -1
- package/build/client/assets/{index-CV3nxGFp.js → index-BHwOR8R1.js} +2 -2
- package/build/client/assets/{index-CV3nxGFp.js.map → index-BHwOR8R1.js.map} +1 -1
- package/build/client/assets/index-BOQWfIQC.js +36 -0
- package/build/client/assets/index-BOQWfIQC.js.map +1 -0
- package/build/client/assets/{index-DFqQCjCw.js → index-BPegC-d3.js} +2 -2
- package/build/client/assets/{index-DFqQCjCw.js.map → index-BPegC-d3.js.map} +1 -1
- package/build/client/assets/{index-LjRZeU7x.js → index-CB8bjE90.js} +2 -2
- package/build/client/assets/{index-LjRZeU7x.js.map → index-CB8bjE90.js.map} +1 -1
- package/build/client/assets/{index-C_B1-9rF.js → index-CGzylDPY.js} +2 -2
- package/build/client/assets/{index-C_B1-9rF.js.map → index-CGzylDPY.js.map} +1 -1
- package/build/client/assets/index-DbCT6N5p.js +2 -0
- package/build/client/assets/{index-DE-jwnOP.js.map → index-DbCT6N5p.js.map} +1 -1
- package/build/client/assets/{index-DDqzbGM2.js → index-cZQeGrqL.js} +2 -2
- package/build/client/assets/{index-DDqzbGM2.js.map → index-cZQeGrqL.js.map} +1 -1
- package/build/client/assets/{index-CLNXC84j.js → index-egcHQOpF.js} +2 -2
- package/build/client/assets/{index-CLNXC84j.js.map → index-egcHQOpF.js.map} +1 -1
- package/build/client/assets/index-oED4uZLa.js +2 -0
- package/build/client/assets/{index-mivnjq36.js.map → index-oED4uZLa.js.map} +1 -1
- package/build/client/assets/{loading-DW_I206H.js → loading-C2wPVvQw.js} +2 -2
- package/build/client/assets/{loading-DW_I206H.js.map → loading-C2wPVvQw.js.map} +1 -1
- package/build/client/assets/login-DoU7gifi.js +2 -0
- package/build/client/assets/{login-CdNej0Z7.js.map → login-DoU7gifi.js.map} +1 -1
- package/build/client/assets/manifest-3096dc61.js +1 -0
- package/build/client/assets/mdx-CsS30JUo.js +2 -0
- package/build/client/assets/{mdx-C9dqA6IZ.js.map → mdx-CsS30JUo.js.map} +1 -1
- package/build/client/assets/{misc-DIdEn_jt.js → misc-BtjCSy-T.js} +2 -2
- package/build/client/assets/{misc-DIdEn_jt.js.map → misc-BtjCSy-T.js.map} +1 -1
- package/build/client/assets/{nav-chevrons-B3SvZV8B.js → nav-chevrons-2hLTwAZb.js} +2 -2
- package/build/client/assets/{nav-chevrons-B3SvZV8B.js.map → nav-chevrons-2hLTwAZb.js.map} +1 -1
- package/build/client/assets/onboarding-Cu6eD7KS.js +2 -0
- package/build/client/assets/{onboarding-CC9zz4rl.js.map → onboarding-Cu6eD7KS.js.map} +1 -1
- package/build/client/assets/{pe-D5h19vSo.js → pe-DXT2FOp1.js} +2 -2
- package/build/client/assets/{pe-D5h19vSo.js.map → pe-DXT2FOp1.js.map} +1 -1
- package/build/client/assets/preferences-br0VSK51.js +2 -0
- package/build/client/assets/preferences-br0VSK51.js.map +1 -0
- package/build/client/assets/{presence-D1DPz__2.js → presence-CrYBA3ta.js} +3 -3
- package/build/client/assets/{presence-D1DPz__2.js.map → presence-CrYBA3ta.js.map} +1 -1
- package/build/client/assets/preview-C2y4Z0qO.js +2 -0
- package/build/client/assets/{preview-BEtmdi0E.js.map → preview-C2y4Z0qO.js.map} +1 -1
- package/build/client/assets/{product-CYOFfeJM.js → product-gqq_YQBW.js} +2 -2
- package/build/client/assets/{product-CYOFfeJM.js.map → product-gqq_YQBW.js.map} +1 -1
- package/build/client/assets/{progress-D6SP0Gec.js → progress-D-HsH4j3.js} +2 -2
- package/build/client/assets/{progress-D6SP0Gec.js.map → progress-D-HsH4j3.js.map} +1 -1
- package/build/client/assets/{progress-bar-CBDBzRQ2.js → progress-bar-CTPCfvDi.js} +2 -2
- package/build/client/assets/{progress-bar-CBDBzRQ2.js.map → progress-bar-CTPCfvDi.js.map} +1 -1
- package/build/client/assets/revalidation-ws-DYaJNyw1.js +2 -0
- package/build/client/assets/{revalidation-ws-DK5QOPlL.js.map → revalidation-ws-DYaJNyw1.js.map} +1 -1
- package/build/client/assets/{root-Bg-hxaOK.js → root-C1pLsthM.js} +3 -3
- package/build/client/assets/{root-Bg-hxaOK.js.map → root-C1pLsthM.js.map} +1 -1
- package/build/client/assets/{set-playground-CMoUFgkO.js → set-playground-DQzAhC0t.js} +2 -2
- package/build/client/assets/{set-playground-CMoUFgkO.js.map → set-playground-DQzAhC0t.js.map} +1 -1
- package/build/client/assets/{support-CPzYlWkd.js → support-lgEG2piy.js} +2 -2
- package/build/client/assets/{support-CPzYlWkd.js.map → support-lgEG2piy.js.map} +1 -1
- package/build/client/assets/tailwind-CRGTilRc.css +1 -0
- package/build/client/assets/test-CDWRwwO-.js +2 -0
- package/build/client/assets/{test-C8wkLh9a.js.map → test-CDWRwwO-.js.map} +1 -1
- package/build/client/assets/{tests-CiM4RPOf.js → tests-LWW8wCYZ.js} +3 -3
- package/build/client/assets/{tests-CiM4RPOf.js.map → tests-LWW8wCYZ.js.map} +1 -1
- package/build/client/assets/{tooltip-BoVikCa-.js → tooltip-Bp9KHnLy.js} +2 -2
- package/build/client/assets/{tooltip-BoVikCa-.js.map → tooltip-Bp9KHnLy.js.map} +1 -1
- package/build/client/assets/{use-event-source-M87p8Tme.js → use-event-source-AZJtQsFX.js} +2 -2
- package/build/client/assets/{use-event-source-M87p8Tme.js.map → use-event-source-AZJtQsFX.js.map} +1 -1
- package/build/client/assets/{user-CbbIYEs8.js → user-C0j04V55.js} +2 -2
- package/build/client/assets/{user-CbbIYEs8.js.map → user-C0j04V55.js.map} +1 -1
- package/build/client/assets/{version-CIF3cX3N.js → version-D61Qvt0X.js} +2 -2
- package/build/client/assets/{version-CIF3cX3N.js.map → version-D61Qvt0X.js.map} +1 -1
- package/build/client/assets/{workshop-config-C5sYl312.js → workshop-config-oL_FWDKq.js} +2 -2
- package/build/client/assets/{workshop-config-C5sYl312.js.map → workshop-config-oL_FWDKq.js.map} +1 -1
- package/build/server/index.js +517 -445
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/_exerciseNumber-PTdG9GGB.js +0 -2
- package/build/client/assets/_exerciseNumber_.finished-DQg4F1NL.js +0 -2
- package/build/client/assets/_layout-DHoH74NH.js +0 -2
- package/build/client/assets/account-DLDPrc9J.js +0 -2
- package/build/client/assets/account-DLDPrc9J.js.map +0 -1
- package/build/client/assets/app-DJDjmdlu.js +0 -2
- package/build/client/assets/diff-B3oaU_KB.js +0 -2
- package/build/client/assets/discord-CpIgvYus.js +0 -2
- package/build/client/assets/discord-CpIgvYus.js.map +0 -1
- package/build/client/assets/epic-video-D8ex9vao.js +0 -2
- package/build/client/assets/epic-video-D8ex9vao.js.map +0 -1
- package/build/client/assets/error-boundary-3zItlMUO.js +0 -2
- package/build/client/assets/finished-rUzUjnEm.js +0 -2
- package/build/client/assets/index-BajUQsFT.js +0 -3053
- package/build/client/assets/index-BajUQsFT.js.map +0 -1
- package/build/client/assets/index-DE-jwnOP.js +0 -2
- package/build/client/assets/index-DH1w3QmP.js +0 -36
- package/build/client/assets/index-DH1w3QmP.js.map +0 -1
- package/build/client/assets/index-mivnjq36.js +0 -2
- package/build/client/assets/login-CdNej0Z7.js +0 -2
- package/build/client/assets/manifest-62ea49c4.js +0 -1
- package/build/client/assets/mdx-C9dqA6IZ.js +0 -2
- package/build/client/assets/onboarding-CC9zz4rl.js +0 -2
- package/build/client/assets/preview-BEtmdi0E.js +0 -2
- package/build/client/assets/request-info-vBkaf3Rk.js +0 -2
- package/build/client/assets/request-info-vBkaf3Rk.js.map +0 -1
- package/build/client/assets/revalidation-ws-DK5QOPlL.js +0 -2
- package/build/client/assets/tailwind-B5AAMtGC.css +0 -1
- package/build/client/assets/test-C8wkLh9a.js +0 -2
- /package/build/client/assets/{index-DUnRvy1A.css → epic-video-DUnRvy1A.css} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i,b as a,j as o,i as c}from"./index-CGzylDPY.js";import{g as m}from"./misc-BtjCSy-T.js";function f({defaultStatusHandler:s=({error:r})=>o.jsxs("p",{children:[r.status," ",r.data]}),statusHandlers:e,unexpectedErrorHandler:t=r=>o.jsx("p",{children:m(r)})}){const r=i(),n=a();return typeof document<"u"&&console.error(r),o.jsx("div",{className:"container flex items-center justify-center p-20 text-h2",children:c(r)?((e==null?void 0:e[r.status])??s)({error:r,params:n}):t(r)})}export{f as G};
|
|
2
|
+
//# sourceMappingURL=error-boundary-Beul7lrT.js.map
|
package/build/client/assets/{error-boundary-3zItlMUO.js.map → error-boundary-Beul7lrT.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary-
|
|
1
|
+
{"version":3,"file":"error-boundary-Beul7lrT.js","sources":["../../../app/components/error-boundary.tsx"],"sourcesContent":["import {\n\tisRouteErrorResponse,\n\tuseParams,\n\tuseRouteError,\n\ttype ErrorResponse,\n} from '@remix-run/react'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\n\ntype StatusHandler = (info: {\n\terror: ErrorResponse\n\tparams: Record<string, string | undefined>\n}) => React.ReactNode | null\n\nexport function GeneralErrorBoundary({\n\tdefaultStatusHandler = ({ error }) => (\n\t\t<p>\n\t\t\t{error.status} {error.data}\n\t\t</p>\n\t),\n\tstatusHandlers,\n\tunexpectedErrorHandler = (error) => <p>{getErrorMessage(error)}</p>,\n}: {\n\tdefaultStatusHandler?: StatusHandler\n\tstatusHandlers?: Record<number, StatusHandler>\n\tunexpectedErrorHandler?: (error: unknown) => React.ReactNode | null\n}) {\n\tconst error = useRouteError()\n\tconst params = useParams()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn (\n\t\t<div className=\"container flex items-center justify-center p-20 text-h2\">\n\t\t\t{isRouteErrorResponse(error)\n\t\t\t\t? (statusHandlers?.[error.status] ?? defaultStatusHandler)({\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t})\n\t\t\t\t: unexpectedErrorHandler(error)}\n\t\t</div>\n\t)\n}\n"],"names":["GeneralErrorBoundary","defaultStatusHandler","error","statusHandlers","unexpectedErrorHandler","getErrorMessage","useRouteError","params","useParams","jsx","isRouteErrorResponse"],"mappings":"oGAaO,SAASA,EAAqB,CACpC,qBAAAC,EAAuB,CAAC,CAAE,MAAAC,CAAM,WAC9B,IACC,CAAA,SAAA,CAAMA,EAAA,OAAO,IAAEA,EAAM,IAAA,EACvB,EAED,eAAAC,EACA,uBAAAC,EAA0BF,SAAW,IAAG,CAAA,SAAAG,EAAgBH,CAAK,EAAE,CAChE,EAIG,CACF,MAAMA,EAAQI,IACRC,EAASC,IAEX,OAAA,OAAO,SAAa,KACvB,QAAQ,MAAMN,CAAK,EAInBO,EAAA,IAAC,MAAI,CAAA,UAAU,0DACb,SAAAC,EAAqBR,CAAK,IACvBC,GAAA,YAAAA,EAAiBD,EAAM,UAAWD,GAAsB,CACzD,MAAAC,EACA,OAAAK,CACA,CAAA,EACAH,EAAuBF,CAAK,CAChC,CAAA,CAEF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,r as t}from"./index-CGzylDPY.js";import{E as l}from"./index-egcHQOpF.js";import{E as n}from"./epic-video-qHKPWPt1.js";import{L as a}from"./loading-C2wPVvQw.js";import{N as d}from"./nav-chevrons-2hLTwAZb.js";import{u as c}from"./revalidation-ws-DYaJNyw1.js";import{M as m,E as p}from"./mdx-CsS30JUo.js";import{a as f}from"./misc-BtjCSy-T.js";import{g as h}from"./seo-pBpFCWsy.js";import{P as x}from"./progress-D-HsH4j3.js";import{u,L as j}from"./components-DrvY4pal.js";import"./index-BOQWfIQC.js";import"./tooltip-Bp9KHnLy.js";import"./pe-DXT2FOp1.js";import"./user-C0j04V55.js";import"./workshop-config-oL_FWDKq.js";import"./progress-bar-CTPCfvDi.js";const q={getSitemapEntries:()=>[{route:"/finished"}]},H=({matches:s})=>{var i;const r=(i=s.find(o=>o.id==="root"))==null?void 0:i.data;return r?h({title:`🎉 ${r==null?void 0:r.workshopTitle}`,description:`Elaboration for ${r==null?void 0:r.workshopTitle}`,ogTitle:`Finished ${r==null?void 0:r.workshopTitle}`,ogDescription:"You finished! Time to submit feedback.",instructor:r.instructor,requestInfo:r.requestInfo}):[]},b={h1:()=>null};function U(){const s=u();return c({watchPaths:["./exercises/FINISHED.mdx"]}),e.jsx("div",{className:"flex h-full flex-grow flex-col",children:e.jsxs("main",{className:"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none",children:e.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:e.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[e.jsx(j,{to:"/",className:"hover:underline",children:s.workshopTitle}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.jsx("article",{className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",id:s.articleId,children:s.finishedCode?e.jsx(n,{epicVideoInfosPromise:s.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(m,{code:s.finishedCode,components:b})})}):"No finished instructions yet..."}),e.jsx(l,{elementQuery:`#${s.articleId}`}),e.jsx(x,{type:"workshop-finished",className:"h-14 border-t px-6"}),e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{}),s.workshopFinished.status==="success"?e.jsx(p,{file:s.workshopFinished.file,relativePath:s.workshopFinished.relativePath}):null,e.jsx(d,{prev:s.prevStepLink,next:{to:"/"}})]})]}),e.jsx(g,{workshopTitle:s.workshopTitle,workshopFormEmbedUrl:s.workshopFormEmbedUrl})]})})}function g({workshopTitle:s,workshopFormEmbedUrl:r}){const[i,o]=t.useState(!1);return e.jsxs("div",{className:"relative flex-shrink-0",children:[i?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(a,{children:e.jsxs("span",{children:["Loading ",s," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>o(!0),onError:()=>o(!0),title:"Elaboration",src:r,className:f("absolute inset-0 flex h-full w-full transition-opacity duration-300",i?"opacity-100":"opacity-0")})]})}export{U as default,q as handle,H as meta};
|
|
2
|
+
//# sourceMappingURL=finished-DUKfL220.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finished-rUzUjnEm.js","sources":["../../../app/routes/_app+/finished.tsx"],"sourcesContent":["import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopFinished,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport {\n\tunstable_data as data,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport { Link, useLoaderData } from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.js'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { EditFileOnGitHub } from '../launch-editor.tsx'\nimport { ProgressToggle } from '../progress.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => [{ route: '/finished' }],\n}\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tmatches,\n}) => {\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!rootData) return []\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🎉 ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${rootData?.workshopTitle}`,\n\t\togTitle: `Finished ${rootData?.workshopTitle}`,\n\t\togDescription: `You finished! Time to submit feedback.`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('finishedLoader')\n\tconst exercises = await getExercises({ request, timings })\n\tconst compiledFinished = await time(() => getWorkshopFinished({ request }), {\n\t\ttimings,\n\t\ttype: 'compileMdx',\n\t\tdesc: 'compileMdx in finished',\n\t})\n\n\tconst lastExercises = exercises[exercises.length - 1]\n\tconst workshopConfig = getWorkshopConfig()\n\tconst workshopTitle = workshopConfig.title\n\tconst workshopFormTemplate = workshopConfig.forms.workshop\n\tconst workshopFormEmbedUrl = workshopFormTemplate.replace(\n\t\t'{workshopTitle}',\n\t\tencodeURIComponent(workshopTitle),\n\t)\n\treturn data(\n\t\t{\n\t\t\tarticleId: `workshop-${slugify(workshopTitle)}-finished`,\n\t\t\tworkshopTitle,\n\t\t\tworkshopFormEmbedUrl,\n\t\t\tfinishedCode:\n\t\t\t\tcompiledFinished.compiled.status === 'success'\n\t\t\t\t\t? compiledFinished.compiled.code\n\t\t\t\t\t: null,\n\t\t\tepicVideoInfosPromise:\n\t\t\t\tcompiledFinished.compiled.status === 'success'\n\t\t\t\t\t? getEpicVideoInfos(compiledFinished.compiled.epicVideoEmbeds, {\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null,\n\t\t\tworkshopFinished: {\n\t\t\t\tstatus: compiledFinished.compiled.status,\n\t\t\t\tfile: compiledFinished.file,\n\t\t\t\trelativePath: compiledFinished.relativePath,\n\t\t\t},\n\t\t\tprevStepLink: lastExercises\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/${lastExercises.exerciseNumber}/finished`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\n\nexport default function ExerciseFinished() {\n\tconst data = useLoaderData<typeof loader>()\n\tuseRevalidationWS({ watchPaths: ['./exercises/FINISHED.mdx'] })\n\treturn (\n\t\t<div className=\"flex h-full flex-grow flex-col\">\n\t\t\t<main className=\"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to=\"/\" className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{data.workshopTitle}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx code={data.finishedCode} components={mdxComponents} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"workshop-finished\"\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t{data.workshopFinished.status === 'success' ? (\n\t\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\t\tfile={data.workshopFinished.file}\n\t\t\t\t\t\t\t\trelativePath={data.workshopFinished.relativePath}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={{ to: '/' }} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\tworkshopTitle={data.workshopTitle}\n\t\t\t\t\tworkshopFormEmbedUrl={data.workshopFormEmbedUrl}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\tworkshopTitle,\n\tworkshopFormEmbedUrl,\n}: {\n\tworkshopTitle: string\n\tworkshopFormEmbedUrl: string\n}) {\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\treturn (\n\t\t<div className=\"relative flex-shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {workshopTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\t// show what would have shown if there is an error\n\t\t\t\tonError={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={workshopFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","route","meta","matches","rootData","find","m","id","data","getSeoMetaTags","title","workshopTitle","description","ogTitle","ogDescription","instructor","requestInfo","mdxComponents","h1","ExerciseFinished","useLoaderData","useRevalidationWS","watchPaths","className","children","jsxs","jsx","Link","to","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","workshopFinished","status","EditFileOnGitHub","file","relativePath","NavChevrons","prev","prevStepLink","next","Survey","workshopFormEmbedUrl","iframeLoaded","setIframeLoaded","React","Loading","onLoad","onError","src","cn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"finished-DUKfL220.js","sources":["../../../app/routes/_app+/finished.tsx"],"sourcesContent":["import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopFinished,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport {\n\tunstable_data as data,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport { Link, useLoaderData } from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.js'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { EditFileOnGitHub } from '../launch-editor.tsx'\nimport { ProgressToggle } from '../progress.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => [{ route: '/finished' }],\n}\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tmatches,\n}) => {\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!rootData) return []\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🎉 ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${rootData?.workshopTitle}`,\n\t\togTitle: `Finished ${rootData?.workshopTitle}`,\n\t\togDescription: `You finished! Time to submit feedback.`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('finishedLoader')\n\tconst exercises = await getExercises({ request, timings })\n\tconst compiledFinished = await time(() => getWorkshopFinished({ request }), {\n\t\ttimings,\n\t\ttype: 'compileMdx',\n\t\tdesc: 'compileMdx in finished',\n\t})\n\n\tconst lastExercises = exercises[exercises.length - 1]\n\tconst workshopConfig = getWorkshopConfig()\n\tconst workshopTitle = workshopConfig.title\n\tconst workshopFormTemplate = workshopConfig.forms.workshop\n\tconst workshopFormEmbedUrl = workshopFormTemplate.replace(\n\t\t'{workshopTitle}',\n\t\tencodeURIComponent(workshopTitle),\n\t)\n\treturn data(\n\t\t{\n\t\t\tarticleId: `workshop-${slugify(workshopTitle)}-finished`,\n\t\t\tworkshopTitle,\n\t\t\tworkshopFormEmbedUrl,\n\t\t\tfinishedCode:\n\t\t\t\tcompiledFinished.compiled.status === 'success'\n\t\t\t\t\t? compiledFinished.compiled.code\n\t\t\t\t\t: null,\n\t\t\tepicVideoInfosPromise:\n\t\t\t\tcompiledFinished.compiled.status === 'success'\n\t\t\t\t\t? getEpicVideoInfos(compiledFinished.compiled.epicVideoEmbeds, {\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null,\n\t\t\tworkshopFinished: {\n\t\t\t\tstatus: compiledFinished.compiled.status,\n\t\t\t\tfile: compiledFinished.file,\n\t\t\t\trelativePath: compiledFinished.relativePath,\n\t\t\t},\n\t\t\tprevStepLink: lastExercises\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/${lastExercises.exerciseNumber}/finished`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\n\nexport default function ExerciseFinished() {\n\tconst data = useLoaderData<typeof loader>()\n\tuseRevalidationWS({ watchPaths: ['./exercises/FINISHED.mdx'] })\n\treturn (\n\t\t<div className=\"flex h-full flex-grow flex-col\">\n\t\t\t<main className=\"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to=\"/\" className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{data.workshopTitle}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx code={data.finishedCode} components={mdxComponents} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"workshop-finished\"\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t{data.workshopFinished.status === 'success' ? (\n\t\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\t\tfile={data.workshopFinished.file}\n\t\t\t\t\t\t\t\trelativePath={data.workshopFinished.relativePath}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={{ to: '/' }} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\tworkshopTitle={data.workshopTitle}\n\t\t\t\t\tworkshopFormEmbedUrl={data.workshopFormEmbedUrl}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\tworkshopTitle,\n\tworkshopFormEmbedUrl,\n}: {\n\tworkshopTitle: string\n\tworkshopFormEmbedUrl: string\n}) {\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\treturn (\n\t\t<div className=\"relative flex-shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {workshopTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\t// show what would have shown if there is an error\n\t\t\t\tonError={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={workshopFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","route","meta","matches","rootData","find","m","id","data","getSeoMetaTags","title","workshopTitle","description","ogTitle","ogDescription","instructor","requestInfo","mdxComponents","h1","ExerciseFinished","useLoaderData","useRevalidationWS","watchPaths","className","children","jsxs","jsx","Link","to","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","workshopFinished","status","EditFileOnGitHub","file","relativePath","NavChevrons","prev","prevStepLink","next","Survey","workshopFormEmbedUrl","iframeLoaded","setIframeLoaded","React","Loading","onLoad","onError","src","cn"],"mappings":"0pBAkCO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,CAAC,CAAEC,MAAO,YAAa,CACjD,EAEaC,EAAiEA,CAAC,CAC9EC,QAAAA,CACD,IAAM,OACC,MAAAC,GAAWD,EAAAA,EAAQE,KAAMC,GAAMA,EAAEC,KAAO,MAAM,IAAnCJ,YAAAA,EAAsCK,KACnD,OAACJ,EAEEK,EAAe,CACrBC,MAAO,MAAMN,GAAAA,YAAAA,EAAUO,aAAa,GACpCC,YAAa,mBAAmBR,GAAAA,YAAAA,EAAUO,aAAa,GACvDE,QAAS,YAAYT,GAAAA,YAAAA,EAAUO,aAAa,GAC5CG,cAAe,yCACfC,WAAYX,EAASW,WACrBC,YAAaZ,EAASY,WACvB,CAAC,EATqB,EAUvB,EA6DMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EAEvC,SAAwBC,GAAmB,CAC1C,MAAMX,EAAOY,IACbC,OAAAA,EAAkB,CAAEC,WAAY,CAAC,0BAA0B,CAAE,CAAC,QAE5D,MAAI,CAAAC,UAAU,iCACdC,SAACC,EAAA,KAAA,OAAA,CAAKF,UAAU,8EACfC,SAAA,CAACC,EAAA,KAAA,MAAA,CAAIF,UAAU,kEACdC,SAAA,CAACE,EAAA,IAAA,KAAA,CAAGH,UAAU,sEACbC,SAACE,EAAA,IAAA,MAAA,CAAIH,UAAU,gEACdC,SAAAC,EAAA,KAAC,MAAI,CAAAF,UAAU,0CACdC,SAAA,CAAAE,EAAA,IAACC,GAAKC,GAAG,IAAIL,UAAU,kBACrBC,SAAAhB,EAAKG,aACP,CAAA,EACAe,EAAA,IAAC,QAAKF,SAAC,GAAA,CAAA,EACPE,EAAA,IAAC,QAAKF,SAAW,aAAA,CAAA,CAAA,EAClB,EACD,CACD,CAAA,EACAE,EAAA,IAAC,UAAA,CACAH,UAAU,yJACVhB,GAAIC,EAAKqB,UAERL,SAAAhB,EAAKsB,aACLJ,EAAAA,IAACK,EAAA,CACAC,sBAAuBxB,EAAKwB,sBAE5BR,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACO,EAAI,CAAAC,KAAM1B,EAAKsB,aAAcK,WAAYlB,EAAe,EAC1D,CAAA,CACD,EAGA,iCAAA,CAEF,QACCmB,EAAyB,CAAAC,aAAc,IAAI7B,EAAKqB,SAAS,EAAI,CAAA,EAC9DH,EAAA,IAACY,EAAA,CACAC,KAAK,oBACLhB,UAAU,oBAAA,CACX,EACAE,EAAA,KAAC,MAAI,CAAAF,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAI,EAAA,EACJlB,EAAKgC,iBAAiBC,SAAW,UACjCf,EAAAA,IAACgB,EAAA,CACAC,KAAMnC,EAAKgC,iBAAiBG,KAC5BC,aAAcpC,EAAKgC,iBAAiBI,aACrC,EACG,KACJlB,EAAA,IAACmB,GAAYC,KAAMtC,EAAKuC,aAAcC,KAAM,CAAEpB,GAAI,GAAI,CAAG,CAAA,CAAA,CAC1D,CAAA,CAAA,CACD,CAAA,EACAF,EAAA,IAACuB,EAAA,CACAtC,cAAeH,EAAKG,cACpBuC,qBAAsB1C,EAAK0C,oBAAA,CAC5B,CAAA,EACD,CACD,CAAA,CAEF,CAEA,SAASD,EAAO,CACftC,cAAAA,EACAuC,qBAAAA,CACD,EAGG,CACF,KAAM,CAACC,EAAcC,CAAe,EAAIC,WAAe,EAAK,EAE3D,OAAA5B,EAAAA,KAAC,MAAI,CAAAF,UAAU,yBACbC,SAAA,CAAC2B,EAME,WALF,MAAI,CAAA5B,UAAU,yDACdC,SAACE,EAAA,IAAA4B,EAAA,CACA9B,gBAAC,OAAK,CAAAA,SAAA,CAAA,WAASb,EAAc,mBAAA,EAAiB,EAC/C,EACD,EAEDe,EAAA,IAAC,SAAA,CACA6B,OAAQA,IAAMH,EAAgB,EAAI,EAElCI,QAASA,IAAMJ,EAAgB,EAAI,EACnC1C,MAAM,cACN+C,IAAKP,EACL3B,UAAWmC,EACV,sEACAP,EAAe,cAAgB,WAChC,CAAA,CACD,CAAA,CACD,CAAA,CAEF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as u,j as oe}from"./index-
|
|
1
|
+
import{r as u,j as oe}from"./index-CGzylDPY.js";import{R as pe}from"./components-DrvY4pal.js";import{i as ge,P as ce,n as G,h as ye}from"./tooltip-Bp9KHnLy.js";var be="Portal",Ee=u.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[c,i]=u.useState(!1);ge(()=>i(!0),[]);const l=n||c&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return l?pe.createPortal(oe.jsx(ce.div,{...r,ref:t}),l):null});Ee.displayName=be;var _="focusScope.autoFocusOnMount",j="focusScope.autoFocusOnUnmount",Z={bubbles:!1,cancelable:!0},Se="FocusScope",we=u.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:c,onUnmountAutoFocus:i,...l}=e,[a,S]=u.useState(null),y=G(c),p=G(i),f=u.useRef(null),v=ye(t,o=>S(o)),h=u.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;u.useEffect(()=>{if(r){let o=function(m){if(h.paused||!a)return;const g=m.target;a.contains(g)?f.current=g:R(f.current,{select:!0})},s=function(m){if(h.paused||!a)return;const g=m.relatedTarget;g!==null&&(a.contains(g)||R(f.current,{select:!0}))},d=function(m){if(document.activeElement===document.body)for(const b of m)b.removedNodes.length>0&&R(a)};document.addEventListener("focusin",o),document.addEventListener("focusout",s);const E=new MutationObserver(d);return a&&E.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",o),document.removeEventListener("focusout",s),E.disconnect()}}},[r,a,h.paused]),u.useEffect(()=>{if(a){Q.add(h);const o=document.activeElement;if(!a.contains(o)){const d=new CustomEvent(_,Z);a.addEventListener(_,y),a.dispatchEvent(d),d.defaultPrevented||(Ce(Te(ue(a)),{select:!0}),document.activeElement===o&&R(a))}return()=>{a.removeEventListener(_,y),setTimeout(()=>{const d=new CustomEvent(j,Z);a.addEventListener(j,p),a.dispatchEvent(d),d.defaultPrevented||R(o??document.body,{select:!0}),a.removeEventListener(j,p),Q.remove(h)},0)}}},[a,y,p,h]);const w=u.useCallback(o=>{if(!n&&!r||h.paused)return;const s=o.key==="Tab"&&!o.altKey&&!o.ctrlKey&&!o.metaKey,d=document.activeElement;if(s&&d){const E=o.currentTarget,[m,g]=Re(E);m&&g?!o.shiftKey&&d===g?(o.preventDefault(),n&&R(m,{select:!0})):o.shiftKey&&d===m&&(o.preventDefault(),n&&R(g,{select:!0})):d===E&&o.preventDefault()}},[n,r,h.paused]);return oe.jsx(ce.div,{tabIndex:-1,...l,ref:v,onKeyDown:w})});we.displayName=Se;function Ce(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(R(r,{select:t}),document.activeElement!==n)return}function Re(e){const t=ue(e),n=q(t,e),r=q(t.reverse(),e);return[n,r]}function ue(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const c=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||c?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function q(e,t){for(const n of e)if(!Ae(n,{upTo:t}))return n}function Ae(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function Pe(e){return e instanceof HTMLInputElement&&"select"in e}function R(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Pe(e)&&t&&e.select()}}var Q=ke();function ke(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=$(e,t),e.unshift(t)},remove(t){var n;e=$(e,t),(n=e[0])==null||n.resume()}}}function $(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Te(e){return e.filter(t=>t.tagName!=="A")}var U=0;function yt(){u.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??J()),document.body.insertAdjacentElement("beforeend",e[1]??J()),U++,()=>{U===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),U--}},[])}function J(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var C=function(){return C=Object.assign||function(t){for(var n,r=1,c=arguments.length;r<c;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},C.apply(this,arguments)};function ie(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var c=0,r=Object.getOwnPropertySymbols(e);c<r.length;c++)t.indexOf(r[c])<0&&Object.prototype.propertyIsEnumerable.call(e,r[c])&&(n[r[c]]=e[r[c]]);return n}function Me(e,t,n){if(n||arguments.length===2)for(var r=0,c=t.length,i;r<c;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var W="right-scroll-bar-position",B="width-before-scroll-bar",Ne="with-scroll-bars-hidden",Fe="--removed-body-scroll-bar-size";function K(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function Le(e,t){var n=u.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var c=n.value;c!==r&&(n.value=r,n.callback(r,c))}}}})[0];return n.callback=t,n.facade}var Oe=typeof window<"u"?u.useLayoutEffect:u.useEffect,ee=new WeakMap;function xe(e,t){var n=Le(null,function(r){return e.forEach(function(c){return K(c,r)})});return Oe(function(){var r=ee.get(n);if(r){var c=new Set(r),i=new Set(e),l=n.current;c.forEach(function(a){i.has(a)||K(a,null)}),i.forEach(function(a){c.has(a)||K(a,l)})}ee.set(n,e)},[e]),n}function Ie(e){return e}function We(e,t){t===void 0&&(t=Ie);var n=[],r=!1,c={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var l=t(i,r);return n.push(l),function(){n=n.filter(function(a){return a!==l})}},assignSyncMedium:function(i){for(r=!0;n.length;){var l=n;n=[],l.forEach(i)}n={push:function(a){return i(a)},filter:function(){return n}}},assignMedium:function(i){r=!0;var l=[];if(n.length){var a=n;n=[],a.forEach(i),l=n}var S=function(){var p=l;l=[],p.forEach(i)},y=function(){return Promise.resolve().then(S)};y(),n={push:function(p){l.push(p),y()},filter:function(p){return l=l.filter(p),n}}}};return c}function Be(e){e===void 0&&(e={});var t=We(null);return t.options=C({async:!0,ssr:!1},e),t}var le=function(e){var t=e.sideCar,n=ie(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return u.createElement(r,C({},n))};le.isSideCarExport=!0;function De(e,t){return e.useMedium(t),le}var se=Be(),H=function(){},D=u.forwardRef(function(e,t){var n=u.useRef(null),r=u.useState({onScrollCapture:H,onWheelCapture:H,onTouchMoveCapture:H}),c=r[0],i=r[1],l=e.forwardProps,a=e.children,S=e.className,y=e.removeScrollBar,p=e.enabled,f=e.shards,v=e.sideCar,h=e.noIsolation,w=e.inert,o=e.allowPinchZoom,s=e.as,d=s===void 0?"div":s,E=e.gapMode,m=ie(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),g=v,b=xe([n,t]),A=C(C({},m),c);return u.createElement(u.Fragment,null,p&&u.createElement(g,{sideCar:se,removeScrollBar:y,shards:f,noIsolation:h,inert:w,setCallbacks:i,allowPinchZoom:!!o,lockRef:n,gapMode:E}),l?u.cloneElement(u.Children.only(a),C(C({},A),{ref:b})):u.createElement(d,C({},A,{className:S,ref:b}),a))});D.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};D.classNames={fullWidth:B,zeroRight:W};var _e=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function je(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=_e();return t&&e.setAttribute("nonce",t),e}function Ue(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Ke(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var He=function(){var e=0,t=null;return{add:function(n){e==0&&(t=je())&&(Ue(t,n),Ke(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ve=function(){var e=He();return function(t,n){u.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},fe=function(){var e=Ve(),t=function(n){var r=n.styles,c=n.dynamic;return e(r,c),null};return t},Xe={left:0,top:0,right:0,gap:0},V=function(e){return parseInt(e||"",10)||0},Ye=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],c=t[e==="padding"?"paddingRight":"marginRight"];return[V(n),V(r),V(c)]},ze=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Xe;var t=Ye(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Ge=fe(),M="data-scroll-locked",Ze=function(e,t,n,r){var c=e.left,i=e.top,l=e.right,a=e.gap;return n===void 0&&(n="margin"),`
|
|
2
2
|
.`.concat(Ne,` {
|
|
3
3
|
overflow: hidden `).concat(r,`;
|
|
4
4
|
padding-right: `).concat(a,"px ").concat(r,`;
|
|
@@ -39,4 +39,4 @@ import{r as u,j as oe}from"./index-C_B1-9rF.js";import{R as pe}from"./components
|
|
|
39
39
|
.block-interactivity-`.concat(e,` {pointer-events: none;}
|
|
40
40
|
.allow-interactivity-`).concat(e,` {pointer-events: all;}
|
|
41
41
|
`)},ut=0,k=[];function it(e){var t=u.useRef([]),n=u.useRef([0,0]),r=u.useRef(),c=u.useState(ut++)[0],i=u.useState(fe)[0],l=u.useRef(e);u.useEffect(function(){l.current=e},[e]),u.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(c));var o=Me([e.lockRef.current],(e.shards||[]).map(ae),!0).filter(Boolean);return o.forEach(function(s){return s.classList.add("allow-interactivity-".concat(c))}),function(){document.body.classList.remove("block-interactivity-".concat(c)),o.forEach(function(s){return s.classList.remove("allow-interactivity-".concat(c))})}}},[e.inert,e.lockRef.current,e.shards]);var a=u.useCallback(function(o,s){if("touches"in o&&o.touches.length===2||o.type==="wheel"&&o.ctrlKey)return!l.current.allowPinchZoom;var d=O(o),E=n.current,m="deltaX"in o?o.deltaX:E[0]-d[0],g="deltaY"in o?o.deltaY:E[1]-d[1],b,A=o.target,N=Math.abs(m)>Math.abs(g)?"h":"v";if("touches"in o&&N==="h"&&A.type==="range")return!1;var F=ne(N,A);if(!F)return!0;if(F?b=N:(b=N==="v"?"h":"v",F=ne(N,A)),!F)return!1;if(!r.current&&"changedTouches"in o&&(m||g)&&(r.current=b),!b)return!0;var z=r.current||b;return at(z,s,o,z==="h"?m:g,!0)},[]),S=u.useCallback(function(o){var s=o;if(!(!k.length||k[k.length-1]!==i)){var d="deltaY"in s?re(s):O(s),E=t.current.filter(function(b){return b.name===s.type&&(b.target===s.target||s.target===b.shadowParent)&&ot(b.delta,d)})[0];if(E&&E.should){s.cancelable&&s.preventDefault();return}if(!E){var m=(l.current.shards||[]).map(ae).filter(Boolean).filter(function(b){return b.contains(s.target)}),g=m.length>0?a(s,m[0]):!l.current.noIsolation;g&&s.cancelable&&s.preventDefault()}}},[]),y=u.useCallback(function(o,s,d,E){var m={name:o,delta:s,target:d,should:E,shadowParent:lt(d)};t.current.push(m),setTimeout(function(){t.current=t.current.filter(function(g){return g!==m})},1)},[]),p=u.useCallback(function(o){n.current=O(o),r.current=void 0},[]),f=u.useCallback(function(o){y(o.type,re(o),o.target,a(o,e.lockRef.current))},[]),v=u.useCallback(function(o){y(o.type,O(o),o.target,a(o,e.lockRef.current))},[]);u.useEffect(function(){return k.push(i),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:v}),document.addEventListener("wheel",S,P),document.addEventListener("touchmove",S,P),document.addEventListener("touchstart",p,P),function(){k=k.filter(function(o){return o!==i}),document.removeEventListener("wheel",S,P),document.removeEventListener("touchmove",S,P),document.removeEventListener("touchstart",p,P)}},[]);var h=e.removeScrollBar,w=e.inert;return u.createElement(u.Fragment,null,w?u.createElement(i,{styles:ct(c)}):null,h?u.createElement(Qe,{gapMode:e.gapMode}):null)}function lt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const st=De(se,it);var ft=u.forwardRef(function(e,t){return u.createElement(D,C({},e,{ref:t,sideCar:st}))});ft.classNames=D.classNames;var dt=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},T=new WeakMap,x=new WeakMap,I={},X=0,me=function(e){return e&&(e.host||me(e.parentNode))},vt=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=me(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},ht=function(e,t,n,r){var c=vt(t,Array.isArray(e)?e:[e]);I[n]||(I[n]=new WeakMap);var i=I[n],l=[],a=new Set,S=new Set(c),y=function(f){!f||a.has(f)||(a.add(f),y(f.parentNode))};c.forEach(y);var p=function(f){!f||S.has(f)||Array.prototype.forEach.call(f.children,function(v){if(a.has(v))p(v);else try{var h=v.getAttribute(r),w=h!==null&&h!=="false",o=(T.get(v)||0)+1,s=(i.get(v)||0)+1;T.set(v,o),i.set(v,s),l.push(v),o===1&&w&&x.set(v,!0),s===1&&v.setAttribute(n,"true"),w||v.setAttribute(r,"true")}catch(d){console.error("aria-hidden: cannot operate on ",v,d)}})};return p(t),a.clear(),X++,function(){l.forEach(function(f){var v=T.get(f)-1,h=i.get(f)-1;T.set(f,v),i.set(f,h),v||(x.has(f)||f.removeAttribute(r),x.delete(f)),h||f.removeAttribute(n)}),X--,X||(T=new WeakMap,T=new WeakMap,x=new WeakMap,I={})}},bt=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),c=dt(e);return c?(r.push.apply(r,Array.from(c.querySelectorAll("[aria-live]"))),ht(r,c,n,"aria-hidden")):function(){return null}};export{we as F,Ee as P,ft as R,bt as h,yt as u};
|
|
42
|
-
//# sourceMappingURL=index-
|
|
42
|
+
//# sourceMappingURL=index-BHwOR8R1.js.map
|