@epic-web/workshop-app 4.20.0 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/build/client/assets/{_-DYArYM0Z.js → _-DbrWZazo.js} +2 -2
  2. package/build/client/assets/_-DbrWZazo.js.map +1 -0
  3. package/build/client/assets/_exerciseNumber-Cq0nozYz.js +2 -0
  4. package/build/client/assets/_exerciseNumber-Cq0nozYz.js.map +1 -0
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-Ct5BCuA1.js → _exerciseNumber_._stepNumber-B5pmJ29o.js} +2 -2
  6. package/build/client/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js.map +1 -0
  7. package/build/client/assets/{_exerciseNumber_.finished-C9TSc48F.js → _exerciseNumber_.finished-Q9qnPuZX.js} +2 -2
  8. package/build/client/assets/_exerciseNumber_.finished-Q9qnPuZX.js.map +1 -0
  9. package/build/client/assets/_layout-AgYGL72C.js +6 -0
  10. package/build/client/assets/_layout-AgYGL72C.js.map +1 -0
  11. package/build/client/assets/{_layout-DLIzcS5v.js → _layout-BUs3av-e.js} +2 -2
  12. package/build/client/assets/_layout-BUs3av-e.js.map +1 -0
  13. package/build/client/assets/{_layout-CZ3fjUvs.js → _layout-C8uU4Hwj.js} +2 -2
  14. package/build/client/assets/{_layout-CZ3fjUvs.js.map → _layout-C8uU4Hwj.js.map} +1 -1
  15. package/build/client/assets/_layout-DLVrpOki.js +2 -0
  16. package/build/client/assets/_layout-DLVrpOki.js.map +1 -0
  17. package/build/client/assets/accordion-BroSqIct.js +2 -0
  18. package/build/client/assets/accordion-BroSqIct.js.map +1 -0
  19. package/build/client/assets/{account-LnI_Eq0t.js → account-7o6O4ruO.js} +2 -2
  20. package/build/client/assets/{account-LnI_Eq0t.js.map → account-7o6O4ruO.js.map} +1 -1
  21. package/build/client/assets/app-BiWJY58g.js +2 -0
  22. package/build/client/assets/app-BiWJY58g.js.map +1 -0
  23. package/build/client/assets/{button-BA3iiLRs.js → button-BklqyTPS.js} +2 -2
  24. package/build/client/assets/{button-BA3iiLRs.js.map → button-BklqyTPS.js.map} +1 -1
  25. package/build/client/assets/{client-hints-DLYDs4RF.js → client-hints-DNUUFGmB.js} +2 -2
  26. package/build/client/assets/{client-hints-DLYDs4RF.js.map → client-hints-DNUUFGmB.js.map} +1 -1
  27. package/build/client/assets/{components-wgHiPsTg.js → components-CME-nGId.js} +3 -3
  28. package/build/client/assets/{components-wgHiPsTg.js.map → components-CME-nGId.js.map} +1 -1
  29. package/build/client/assets/diff-CpFxuKA2.js +2 -0
  30. package/build/client/assets/diff-CpFxuKA2.js.map +1 -0
  31. package/build/client/assets/diff-Cw8ktQ1-.js +2 -0
  32. package/build/client/assets/{diff-CPrD1rHd.js.map → diff-Cw8ktQ1-.js.map} +1 -1
  33. package/build/client/assets/discord-CHP4_JLJ.js +2 -0
  34. package/build/client/assets/discord-CHP4_JLJ.js.map +1 -0
  35. package/build/client/assets/{discord-BgaWmFRC.js → discord-Dq4e30wV.js} +2 -2
  36. package/build/client/assets/{discord-BgaWmFRC.js.map → discord-Dq4e30wV.js.map} +1 -1
  37. package/build/client/assets/{entry.client-Cs8lBz8l.js → entry.client-3M2p-8I3.js} +2 -2
  38. package/build/client/assets/{entry.client-Cs8lBz8l.js.map → entry.client-3M2p-8I3.js.map} +1 -1
  39. package/build/client/assets/{epic-video-CfelX9-n.js → epic-video-iluUs1-s.js} +2 -2
  40. package/build/client/assets/{epic-video-CfelX9-n.js.map → epic-video-iluUs1-s.js.map} +1 -1
  41. package/build/client/assets/{error-boundary-BVTbN8PZ.js → error-boundary-DDTvdkB4.js} +2 -2
  42. package/build/client/assets/{error-boundary-BVTbN8PZ.js.map → error-boundary-DDTvdkB4.js.map} +1 -1
  43. package/build/client/assets/{finished-C0mN8TiU.js → finished-Bm-bCUU2.js} +2 -2
  44. package/build/client/assets/{finished-C0mN8TiU.js.map → finished-Bm-bCUU2.js.map} +1 -1
  45. package/build/client/assets/{index-Czg1ruVn.js → index-1cKOJFpX.js} +2 -2
  46. package/build/client/assets/{index-Czg1ruVn.js.map → index-1cKOJFpX.js.map} +1 -1
  47. package/build/client/assets/{index-DjzedX4O.js → index-B-hHvmeV.js} +2 -2
  48. package/build/client/assets/{index-DjzedX4O.js.map → index-B-hHvmeV.js.map} +1 -1
  49. package/build/client/assets/{index-yEAxvbDV.js → index-BATSX33w.js} +2 -2
  50. package/build/client/assets/{index-yEAxvbDV.js.map → index-BATSX33w.js.map} +1 -1
  51. package/build/client/assets/{index-C6ToujzV.js → index-BXWoOGxB.js} +4 -4
  52. package/build/client/assets/{index-C6ToujzV.js.map → index-BXWoOGxB.js.map} +1 -1
  53. package/build/client/assets/index-Dm1ll1kT.js +2 -0
  54. package/build/client/assets/index-Dm1ll1kT.js.map +1 -0
  55. package/build/client/assets/{index-D6ukHE4T.js → index-Dx5GmdYq.js} +2 -2
  56. package/build/client/assets/{index-D6ukHE4T.js.map → index-Dx5GmdYq.js.map} +1 -1
  57. package/build/client/assets/{index-De7yI02n.js → index-Tfdnz1AB.js} +2 -2
  58. package/build/client/assets/{index-De7yI02n.js.map → index-Tfdnz1AB.js.map} +1 -1
  59. package/build/client/assets/index-hogig2HK.js +2 -0
  60. package/build/client/assets/index-hogig2HK.js.map +1 -0
  61. package/build/client/assets/{loading-B0uKxERz.js → loading-C5uX0jJw.js} +2 -2
  62. package/build/client/assets/{loading-B0uKxERz.js.map → loading-C5uX0jJw.js.map} +1 -1
  63. package/build/client/assets/{login-SJlLMYmL.js → login-4cvVFzF8.js} +2 -2
  64. package/build/client/assets/{login-SJlLMYmL.js.map → login-4cvVFzF8.js.map} +1 -1
  65. package/build/client/assets/manifest-746b2907.js +1 -0
  66. package/build/client/assets/{mdx-CQW0I4So.js → mdx-M0kcP-mP.js} +2 -2
  67. package/build/client/assets/{mdx-CQW0I4So.js.map → mdx-M0kcP-mP.js.map} +1 -1
  68. package/build/client/assets/{misc-S5ZD98sI.js → misc-ENVX3CWf.js} +2 -2
  69. package/build/client/assets/{misc-S5ZD98sI.js.map → misc-ENVX3CWf.js.map} +1 -1
  70. package/build/client/assets/{nav-chevrons-DaXg0NPS.js → nav-chevrons-B82nbdyj.js} +2 -2
  71. package/build/client/assets/{nav-chevrons-DaXg0NPS.js.map → nav-chevrons-B82nbdyj.js.map} +1 -1
  72. package/build/client/assets/{onboarding-BXGyEPXy.js → onboarding-Bib-wh6d.js} +2 -2
  73. package/build/client/assets/{onboarding-BXGyEPXy.js.map → onboarding-Bib-wh6d.js.map} +1 -1
  74. package/build/client/assets/presence-Cr--lRCr.js +28 -0
  75. package/build/client/assets/{presence-CW1_eiIo.js.map → presence-Cr--lRCr.js.map} +1 -1
  76. package/build/client/assets/preview-CqrRe2BV.js +2 -0
  77. package/build/client/assets/preview-CqrRe2BV.js.map +1 -0
  78. package/build/client/assets/{progress-BwanvUpB.js → progress-BsY6hGPp.js} +2 -2
  79. package/build/client/assets/{progress-BwanvUpB.js.map → progress-BsY6hGPp.js.map} +1 -1
  80. package/build/client/assets/{progress-bar-wMXWRGq0.js → progress-bar-CSvo1ZXP.js} +2 -2
  81. package/build/client/assets/{progress-bar-wMXWRGq0.js.map → progress-bar-CSvo1ZXP.js.map} +1 -1
  82. package/build/client/assets/{request-info-DHtGM4FI.js → request-info-CEhUGODY.js} +2 -2
  83. package/build/client/assets/{request-info-DHtGM4FI.js.map → request-info-CEhUGODY.js.map} +1 -1
  84. package/build/client/assets/{root-BUqeXmeK.js → root-Tcnfz99O.js} +3 -3
  85. package/build/client/assets/root-Tcnfz99O.js.map +1 -0
  86. package/build/client/assets/set-playground-Cdy8VlVD.js +2 -0
  87. package/build/client/assets/set-playground-Cdy8VlVD.js.map +1 -0
  88. package/build/client/assets/{support-DilzTPHE.js → support-hcqGIpir.js} +2 -2
  89. package/build/client/assets/{support-DilzTPHE.js.map → support-hcqGIpir.js.map} +1 -1
  90. package/build/client/assets/tailwind-DTowOebn.css +1 -0
  91. package/build/client/assets/test-D9HsTvpe.js +2 -0
  92. package/build/client/assets/test-D9HsTvpe.js.map +1 -0
  93. package/build/client/assets/tests-CmNNBElK.js +4 -0
  94. package/build/client/assets/tests-CmNNBElK.js.map +1 -0
  95. package/build/client/assets/{tooltip-BtzSIxlB.js → tooltip-BiHTe_7F.js} +2 -2
  96. package/build/client/assets/{tooltip-BtzSIxlB.js.map → tooltip-BiHTe_7F.js.map} +1 -1
  97. package/build/client/assets/{use-event-source-ySol3hbz.js → use-event-source-A_0lEOPX.js} +2 -2
  98. package/build/client/assets/{use-event-source-ySol3hbz.js.map → use-event-source-A_0lEOPX.js.map} +1 -1
  99. package/build/client/assets/use-hydrated-Citou692.js +2 -0
  100. package/build/client/assets/use-hydrated-Citou692.js.map +1 -0
  101. package/build/client/assets/{user-CdUDQ7a8.js → user-D6tTg1yS.js} +2 -2
  102. package/build/client/assets/{user-CdUDQ7a8.js.map → user-D6tTg1yS.js.map} +1 -1
  103. package/build/client/icons.svg +1 -1
  104. package/build/server/index.js +6134 -5859
  105. package/build/server/index.js.map +1 -1
  106. package/package.json +3 -3
  107. package/build/client/assets/_-DYArYM0Z.js.map +0 -1
  108. package/build/client/assets/_exerciseNumber-BLQUCLPr.js +0 -2
  109. package/build/client/assets/_exerciseNumber-BLQUCLPr.js.map +0 -1
  110. package/build/client/assets/_exerciseNumber_._stepNumber-Ct5BCuA1.js.map +0 -1
  111. package/build/client/assets/_exerciseNumber_.finished-C9TSc48F.js.map +0 -1
  112. package/build/client/assets/_layout-B789acDk.js +0 -6
  113. package/build/client/assets/_layout-B789acDk.js.map +0 -1
  114. package/build/client/assets/_layout-DLIzcS5v.js.map +0 -1
  115. package/build/client/assets/_layout-DhP5RhPk.js +0 -4
  116. package/build/client/assets/_layout-DhP5RhPk.js.map +0 -1
  117. package/build/client/assets/diff-4FQLirNf.js +0 -2
  118. package/build/client/assets/diff-4FQLirNf.js.map +0 -1
  119. package/build/client/assets/diff-CPrD1rHd.js +0 -2
  120. package/build/client/assets/discord-Dk1wbXOn.js +0 -2
  121. package/build/client/assets/discord-Dk1wbXOn.js.map +0 -1
  122. package/build/client/assets/manifest-73106676.js +0 -1
  123. package/build/client/assets/presence-CW1_eiIo.js +0 -28
  124. package/build/client/assets/root-BUqeXmeK.js.map +0 -1
  125. package/build/client/assets/tailwind-BZciDTNv.css +0 -1
@@ -1,2 +1,2 @@
1
- import{a as i,b as a,j as o,i as c}from"./index-Czg1ruVn.js";import{g as m}from"./misc-S5ZD98sI.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-BVTbN8PZ.js.map
1
+ import{a as i,b as a,j as o,i as c}from"./index-1cKOJFpX.js";import{g as m}from"./misc-ENVX3CWf.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-DDTvdkB4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-boundary-BVTbN8PZ.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"}
1
+ {"version":3,"file":"error-boundary-DDTvdkB4.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"}
@@ -1,2 +1,2 @@
1
- import{j as e,r as t}from"./index-Czg1ruVn.js";import{E as l}from"./index-D6ukHE4T.js";import{E as n}from"./epic-video-CfelX9-n.js";import{L as a}from"./loading-B0uKxERz.js";import{N as d}from"./nav-chevrons-DaXg0NPS.js";import{M as c,E as m}from"./mdx-CQW0I4So.js";import{c as p}from"./misc-S5ZD98sI.js";import{g as f}from"./seo-pBpFCWsy.js";import{P as h}from"./progress-BwanvUpB.js";import{u as x,L as u}from"./components-wgHiPsTg.js";import"./index-yEAxvbDV.js";import"./request-info-DHtGM4FI.js";import"./tooltip-BtzSIxlB.js";import"./client-hints-DLYDs4RF.js";import"./user-CdUDQ7a8.js";import"./clsx-B-dksMZM.js";import"./progress-bar-wMXWRGq0.js";const q={getSitemapEntries:()=>[{route:"/finished"}]},R=({matches:s})=>{var o;const r=(o=s.find(i=>i.id==="root"))==null?void 0:o.data;return r?f({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}):[]},j={h1:()=>null};function U(){const s=x();return 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(u,{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(c,{code:s.finishedCode,components:j})})}):"No finished instructions yet..."}),e.jsx(l,{elementQuery:`#${s.articleId}`}),e.jsx(h,{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(m,{file:s.workshopFinished.file,relativePath:s.workshopFinished.relativePath}):null,e.jsx(d,{prev:s.prevStepLink,next:{to:"/"}})]})]}),e.jsx(b,{workshopTitle:s.workshopTitle,workshopFormEmbedUrl:s.workshopFormEmbedUrl})]})})}function b({workshopTitle:s,workshopFormEmbedUrl:r}){const[o,i]=t.useState(!1);return e.jsxs("div",{className:"relative flex-shrink-0",children:[o?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:()=>i(!0),onError:()=>i(!0),title:"Elaboration",src:r,className:p("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0")})]})}export{U as default,q as handle,R as meta};
2
- //# sourceMappingURL=finished-C0mN8TiU.js.map
1
+ import{j as e,r as t}from"./index-1cKOJFpX.js";import{E as l}from"./index-Dx5GmdYq.js";import{E as n}from"./epic-video-iluUs1-s.js";import{L as a}from"./loading-C5uX0jJw.js";import{N as d}from"./nav-chevrons-B82nbdyj.js";import{M as c,E as m}from"./mdx-M0kcP-mP.js";import{c as p}from"./misc-ENVX3CWf.js";import{g as f}from"./seo-pBpFCWsy.js";import{P as h}from"./progress-BsY6hGPp.js";import{u as x,L as u}from"./components-CME-nGId.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./tooltip-BiHTe_7F.js";import"./client-hints-DNUUFGmB.js";import"./user-D6tTg1yS.js";import"./clsx-B-dksMZM.js";import"./progress-bar-CSvo1ZXP.js";const q={getSitemapEntries:()=>[{route:"/finished"}]},R=({matches:s})=>{var o;const r=(o=s.find(i=>i.id==="root"))==null?void 0:o.data;return r?f({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}):[]},j={h1:()=>null};function U(){const s=x();return 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(u,{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(c,{code:s.finishedCode,components:j})})}):"No finished instructions yet..."}),e.jsx(l,{elementQuery:`#${s.articleId}`}),e.jsx(h,{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(m,{file:s.workshopFinished.file,relativePath:s.workshopFinished.relativePath}):null,e.jsx(d,{prev:s.prevStepLink,next:{to:"/"}})]})]}),e.jsx(b,{workshopTitle:s.workshopTitle,workshopFormEmbedUrl:s.workshopFormEmbedUrl})]})})}function b({workshopTitle:s,workshopFormEmbedUrl:r}){const[o,i]=t.useState(!1);return e.jsxs("div",{className:"relative flex-shrink-0",children:[o?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:()=>i(!0),onError:()=>i(!0),title:"Elaboration",src:r,className:p("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0")})]})}export{U as default,q as handle,R as meta};
2
+ //# sourceMappingURL=finished-Bm-bCUU2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"finished-C0mN8TiU.js","sources":["../../../app/routes/_app+/finished.tsx"],"sourcesContent":["import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopFinished,\n\tworkshopRoot,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport { getPkgProp } from '@epic-web/workshop-utils/utils.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport {\n\tdefer,\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 { type loader as rootLoader } from '#app/root.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\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 workshopTitle = await getWorkshopTitle()\n\tconst workshopFormTemplate = await getPkgProp(\n\t\tworkshopRoot,\n\t\t'epicshop.forms.workshop',\n\t\t'https://docs.google.com/forms/d/e/1FAIpQLSdRmj9p8-5zyoqRzxp3UpqSbC3aFkweXvvJIKes0a5s894gzg/viewform?hl=en&embedded=true&entry.2123647600={workshopTitle}',\n\t)\n\tconst workshopFormEmbedUrl = workshopFormTemplate.replace(\n\t\t'{workshopTitle}',\n\t\tencodeURIComponent(workshopTitle),\n\t)\n\treturn defer(\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\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","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-Bm-bCUU2.js","sources":["../../../app/routes/_app+/finished.tsx"],"sourcesContent":["import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopFinished,\n\tworkshopRoot,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport { getPkgProp } from '@epic-web/workshop-utils/utils.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport {\n\tdefer,\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 { type loader as rootLoader } from '#app/root.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\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 workshopTitle = await getWorkshopTitle()\n\tconst workshopFormTemplate = await getPkgProp(\n\t\tworkshopRoot,\n\t\t'epicshop.forms.workshop',\n\t\t'https://docs.google.com/forms/d/e/1FAIpQLSdRmj9p8-5zyoqRzxp3UpqSbC3aFkweXvvJIKes0a5s894gzg/viewform?hl=en&embedded=true&entry.2123647600={workshopTitle}',\n\t)\n\tconst workshopFormEmbedUrl = workshopFormTemplate.replace(\n\t\t'{workshopTitle}',\n\t\tencodeURIComponent(workshopTitle),\n\t)\n\treturn defer(\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\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","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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"}
@@ -33,5 +33,5 @@ function fn(e,t){for(var r=0;r<t.length;r++){const n=t[r];if(typeof n!="string"&
33
33
  * LICENSE.md file in the root directory of this source tree.
34
34
  *
35
35
  * @license MIT
36
- */function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},pt.apply(this,arguments)}const Bt=b.createContext(null),_a=b.createContext(null),mt=b.createContext(null),ze=b.createContext(null),kt=b.createContext(null),ye=b.createContext({outlet:null,matches:[],isDataRoute:!1}),Kr=b.createContext(null);function qa(e,t){let{relative:r}=t===void 0?{}:t;rt()||M(!1);let{basename:n,navigator:a}=b.useContext(ze),{hash:l,pathname:o,search:c}=Ta(e,{relative:r}),u=o;return n!=="/"&&(u=o==="/"?n:ge([n,o])),a.createHref({pathname:u,search:c,hash:l})}function rt(){return b.useContext(kt)!=null}function zt(){return rt()||M(!1),b.useContext(kt).location}function Wr(e){b.useContext(ze).static||b.useLayoutEffect(e)}function Qa(){let{isDataRoute:e}=b.useContext(ye);return e?ka():Da()}function Da(){rt()||M(!1);let e=b.useContext(Bt),{basename:t,future:r,navigator:n}=b.useContext(ze),{matches:a}=b.useContext(ye),{pathname:l}=zt(),o=JSON.stringify(Ut(a,r.v7_relativeSplatPath)),c=b.useRef(!1);return Wr(()=>{c.current=!0}),b.useCallback(function(v,m){if(m===void 0&&(m={}),!c.current)return;if(typeof v=="number"){n.go(v);return}let f=Ft(v,JSON.parse(o),l,m.relative==="path");e==null&&t!=="/"&&(f.pathname=f.pathname==="/"?t:ge([t,f.pathname])),(m.replace?n.replace:n.push)(f,m.state,m)},[t,n,o,l,e])}const Ma=b.createContext(null);function La(e){let t=b.useContext(ye).outlet;return t&&b.createElement(Ma.Provider,{value:e},t)}function Za(){let{matches:e}=b.useContext(ye),t=e[e.length-1];return t?t.params:{}}function Ta(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=b.useContext(ze),{matches:a}=b.useContext(ye),{pathname:l}=zt(),o=JSON.stringify(Ut(a,n.v7_relativeSplatPath));return b.useMemo(()=>Ft(e,JSON.parse(o),l,r==="path"),[e,o,l,r])}function eo(e,t,r,n){rt()||M(!1);let{navigator:a}=b.useContext(ze),{matches:l}=b.useContext(ye),o=l[l.length-1],c=o?o.params:{};o&&o.pathname;let u=o?o.pathnameBase:"/";o&&o.route;let v=zt(),m;m=v;let f=m.pathname||"/",g=f;if(u!=="/"){let R=u.replace(/^\//,"").split("/");g="/"+f.replace(/^\//,"").split("/").slice(R.length).join("/")}let j=_e(e,{pathname:g});return Fa(j&&j.map(R=>Object.assign({},R,{params:Object.assign({},c,R.params),pathname:ge([u,a.encodeLocation?a.encodeLocation(R.pathname).pathname:R.pathname]),pathnameBase:R.pathnameBase==="/"?u:ge([u,a.encodeLocation?a.encodeLocation(R.pathnameBase).pathname:R.pathnameBase])})),l,r,n)}function ja(){let e=Ia(),t=gt(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,a={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return b.createElement(b.Fragment,null,b.createElement("h2",null,"Unexpected Application Error!"),b.createElement("h3",{style:{fontStyle:"italic"}},t),r?b.createElement("pre",{style:a},r):null,null)}const Oa=b.createElement(ja,null);class Aa extends b.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?b.createElement(ye.Provider,{value:this.props.routeContext},b.createElement(Kr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Ua(e){let{routeContext:t,match:r,children:n}=e,a=b.useContext(Bt);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),b.createElement(ye.Provider,{value:t},n)}function Fa(e,t,r,n){var a;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var l;if((l=r)!=null&&l.errors)e=r.matches;else return null}let o=e,c=(a=r)==null?void 0:a.errors;if(c!=null){let m=o.findIndex(f=>f.route.id&&(c==null?void 0:c[f.route.id])!==void 0);m>=0||M(!1),o=o.slice(0,Math.min(o.length,m+1))}let u=!1,v=-1;if(r&&n&&n.v7_partialHydration)for(let m=0;m<o.length;m++){let f=o[m];if((f.route.HydrateFallback||f.route.hydrateFallbackElement)&&(v=m),f.route.id){let{loaderData:g,errors:j}=r,S=f.route.loader&&g[f.route.id]===void 0&&(!j||j[f.route.id]===void 0);if(f.route.lazy||S){u=!0,v>=0?o=o.slice(0,v+1):o=[o[0]];break}}}return o.reduceRight((m,f,g)=>{let j,S=!1,R=null,C=null;r&&(j=c&&f.route.id?c[f.route.id]:void 0,R=f.route.errorElement||Oa,u&&(v<0&&g===0?(S=!0,C=null):v===g&&(S=!0,C=f.route.hydrateFallbackElement||null)));let z=t.concat(o.slice(0,g+1)),A=()=>{let X;return j?X=R:S?X=C:f.route.Component?X=b.createElement(f.route.Component,null):f.route.element?X=f.route.element:X=m,b.createElement(Ua,{match:f,routeContext:{outlet:m,matches:z,isDataRoute:r!=null},children:X})};return r&&(f.route.ErrorBoundary||f.route.errorElement||g===0)?b.createElement(Aa,{location:r.location,revalidation:r.revalidation,component:R,error:j,children:A(),routeContext:{outlet:null,matches:z,isDataRoute:!0}}):A()},null)}var Ht=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Ht||{}),se=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(se||{});function Jr(e){let t=b.useContext(Bt);return t||M(!1),t}function He(e){let t=b.useContext(_a);return t||M(!1),t}function Na(e){let t=b.useContext(ye);return t||M(!1),t}function yt(e){let t=Na(),r=t.matches[t.matches.length-1];return r.route.id||M(!1),r.route.id}function to(){return yt(se.UseRouteId)}function ro(){return He(se.UseNavigation).navigation}function no(){let e=Jr(Ht.UseRevalidator),t=He(se.UseRevalidator);return b.useMemo(()=>({revalidate:e.router.revalidate,state:t.revalidation}),[e.router.revalidate,t.revalidation])}function ao(){let{matches:e,loaderData:t}=He(se.UseMatches);return b.useMemo(()=>e.map(r=>Or(r,t)),[e,t])}function oo(){let e=He(se.UseLoaderData),t=yt(se.UseLoaderData);if(e.errors&&e.errors[t]!=null){console.error("You cannot `useLoaderData` in an errorElement (routeId: "+t+")");return}return e.loaderData[t]}function io(e){return He(se.UseRouteLoaderData).loaderData[e]}function Ia(){var e;let t=b.useContext(Kr),r=He(se.UseRouteError),n=yt(se.UseRouteError);return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function Ba(){let e=b.useContext(mt);return e==null?void 0:e._data}function lo(){let e=b.useContext(mt);return e==null?void 0:e._error}function ka(){let{router:e}=Jr(Ht.UseNavigateStable),t=yt(se.UseNavigateStable),r=b.useRef(!1);return Wr(()=>{r.current=!0}),b.useCallback(function(a,l){l===void 0&&(l={}),r.current&&(typeof a=="number"?e.navigate(a):e.navigate(a,pt({fromRouteId:t},l)))},[e,t])}function so(e){return La(e.context)}function uo(e){let{basename:t="/",children:r=null,location:n,navigationType:a=J.Pop,navigator:l,static:o=!1,future:c}=e;rt()&&M(!1);let u=t.replace(/^\/*/,"/"),v=b.useMemo(()=>({basename:u,navigator:l,static:o,future:pt({v7_relativeSplatPath:!1},c)}),[u,c,l,o]);typeof n=="string"&&(n=Pe(n));let{pathname:m="/",search:f="",hash:g="",state:j=null,key:S="default"}=n,R=b.useMemo(()=>{let C=tt(m,u);return C==null?null:{location:{pathname:C,search:f,hash:g,state:j,key:S},navigationType:a}},[u,m,f,g,j,S,a]);return R==null?null:b.createElement(ze.Provider,{value:v},b.createElement(kt.Provider,{children:r,value:R}))}function co(e){let{children:t,errorElement:r,resolve:n}=e;return b.createElement(Ha,{resolve:n,errorElement:r},b.createElement($a,null,t))}var ie=function(e){return e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error",e}(ie||{});const za=new Promise(()=>{});class Ha extends b.Component{constructor(t){super(t),this.state={error:null}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,r){console.error("<Await> caught the following error during render",t,r)}render(){let{children:t,errorElement:r,resolve:n}=this.props,a=null,l=ie.pending;if(!(n instanceof Promise))l=ie.success,a=Promise.resolve(),Object.defineProperty(a,"_tracked",{get:()=>!0}),Object.defineProperty(a,"_data",{get:()=>n});else if(this.state.error){l=ie.error;let o=this.state.error;a=Promise.reject().catch(()=>{}),Object.defineProperty(a,"_tracked",{get:()=>!0}),Object.defineProperty(a,"_error",{get:()=>o})}else n._tracked?(a=n,l="_error"in a?ie.error:"_data"in a?ie.success:ie.pending):(l=ie.pending,Object.defineProperty(n,"_tracked",{get:()=>!0}),a=n.then(o=>Object.defineProperty(n,"_data",{get:()=>o}),o=>Object.defineProperty(n,"_error",{get:()=>o})));if(l===ie.error&&a._error instanceof _t)throw za;if(l===ie.error&&!r)throw a._error;if(l===ie.error)return b.createElement(mt.Provider,{value:a,children:r});if(l===ie.success)return b.createElement(mt.Provider,{value:a,children:t});throw a}}function $a(e){let{children:t}=e,r=Ba(),n=typeof t=="function"?t(r):t;return b.createElement(b.Fragment,null,n)}function fo(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:b.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:b.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:b.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}export{qa as A,Wa as B,dr as C,Bt as D,Nr as E,Pe as F,_t as G,Va as H,ia as I,Ga as J,oo as K,co as L,lo as M,ze as N,so as O,io as P,Tn as R,Ia as a,Za as b,ro as c,Qa as d,no as e,Xa as f,Ja as g,fo as h,gt as i,Ka as j,Ya as k,ao as l,_e as m,hn as n,to as o,ye as p,M as q,b as r,Ta as s,ge as t,zt as u,et as v,tt as w,_a as x,uo as y,eo as z};
37
- //# sourceMappingURL=index-Czg1ruVn.js.map
36
+ */function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},pt.apply(this,arguments)}const Bt=b.createContext(null),_a=b.createContext(null),mt=b.createContext(null),ze=b.createContext(null),kt=b.createContext(null),ye=b.createContext({outlet:null,matches:[],isDataRoute:!1}),Kr=b.createContext(null);function qa(e,t){let{relative:r}=t===void 0?{}:t;rt()||M(!1);let{basename:n,navigator:a}=b.useContext(ze),{hash:l,pathname:o,search:c}=Ta(e,{relative:r}),u=o;return n!=="/"&&(u=o==="/"?n:ge([n,o])),a.createHref({pathname:u,search:c,hash:l})}function rt(){return b.useContext(kt)!=null}function zt(){return rt()||M(!1),b.useContext(kt).location}function Wr(e){b.useContext(ze).static||b.useLayoutEffect(e)}function Qa(){let{isDataRoute:e}=b.useContext(ye);return e?ka():Da()}function Da(){rt()||M(!1);let e=b.useContext(Bt),{basename:t,future:r,navigator:n}=b.useContext(ze),{matches:a}=b.useContext(ye),{pathname:l}=zt(),o=JSON.stringify(Ut(a,r.v7_relativeSplatPath)),c=b.useRef(!1);return Wr(()=>{c.current=!0}),b.useCallback(function(v,m){if(m===void 0&&(m={}),!c.current)return;if(typeof v=="number"){n.go(v);return}let f=Ft(v,JSON.parse(o),l,m.relative==="path");e==null&&t!=="/"&&(f.pathname=f.pathname==="/"?t:ge([t,f.pathname])),(m.replace?n.replace:n.push)(f,m.state,m)},[t,n,o,l,e])}const Ma=b.createContext(null);function La(e){let t=b.useContext(ye).outlet;return t&&b.createElement(Ma.Provider,{value:e},t)}function Za(){let{matches:e}=b.useContext(ye),t=e[e.length-1];return t?t.params:{}}function Ta(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=b.useContext(ze),{matches:a}=b.useContext(ye),{pathname:l}=zt(),o=JSON.stringify(Ut(a,n.v7_relativeSplatPath));return b.useMemo(()=>Ft(e,JSON.parse(o),l,r==="path"),[e,o,l,r])}function eo(e,t,r,n){rt()||M(!1);let{navigator:a}=b.useContext(ze),{matches:l}=b.useContext(ye),o=l[l.length-1],c=o?o.params:{};o&&o.pathname;let u=o?o.pathnameBase:"/";o&&o.route;let v=zt(),m;m=v;let f=m.pathname||"/",g=f;if(u!=="/"){let R=u.replace(/^\//,"").split("/");g="/"+f.replace(/^\//,"").split("/").slice(R.length).join("/")}let j=_e(e,{pathname:g});return Fa(j&&j.map(R=>Object.assign({},R,{params:Object.assign({},c,R.params),pathname:ge([u,a.encodeLocation?a.encodeLocation(R.pathname).pathname:R.pathname]),pathnameBase:R.pathnameBase==="/"?u:ge([u,a.encodeLocation?a.encodeLocation(R.pathnameBase).pathname:R.pathnameBase])})),l,r,n)}function ja(){let e=Ia(),t=gt(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,a={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return b.createElement(b.Fragment,null,b.createElement("h2",null,"Unexpected Application Error!"),b.createElement("h3",{style:{fontStyle:"italic"}},t),r?b.createElement("pre",{style:a},r):null,null)}const Oa=b.createElement(ja,null);class Aa extends b.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?b.createElement(ye.Provider,{value:this.props.routeContext},b.createElement(Kr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Ua(e){let{routeContext:t,match:r,children:n}=e,a=b.useContext(Bt);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),b.createElement(ye.Provider,{value:t},n)}function Fa(e,t,r,n){var a;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var l;if((l=r)!=null&&l.errors)e=r.matches;else return null}let o=e,c=(a=r)==null?void 0:a.errors;if(c!=null){let m=o.findIndex(f=>f.route.id&&(c==null?void 0:c[f.route.id])!==void 0);m>=0||M(!1),o=o.slice(0,Math.min(o.length,m+1))}let u=!1,v=-1;if(r&&n&&n.v7_partialHydration)for(let m=0;m<o.length;m++){let f=o[m];if((f.route.HydrateFallback||f.route.hydrateFallbackElement)&&(v=m),f.route.id){let{loaderData:g,errors:j}=r,S=f.route.loader&&g[f.route.id]===void 0&&(!j||j[f.route.id]===void 0);if(f.route.lazy||S){u=!0,v>=0?o=o.slice(0,v+1):o=[o[0]];break}}}return o.reduceRight((m,f,g)=>{let j,S=!1,R=null,C=null;r&&(j=c&&f.route.id?c[f.route.id]:void 0,R=f.route.errorElement||Oa,u&&(v<0&&g===0?(S=!0,C=null):v===g&&(S=!0,C=f.route.hydrateFallbackElement||null)));let z=t.concat(o.slice(0,g+1)),A=()=>{let X;return j?X=R:S?X=C:f.route.Component?X=b.createElement(f.route.Component,null):f.route.element?X=f.route.element:X=m,b.createElement(Ua,{match:f,routeContext:{outlet:m,matches:z,isDataRoute:r!=null},children:X})};return r&&(f.route.ErrorBoundary||f.route.errorElement||g===0)?b.createElement(Aa,{location:r.location,revalidation:r.revalidation,component:R,error:j,children:A(),routeContext:{outlet:null,matches:z,isDataRoute:!0}}):A()},null)}var Ht=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Ht||{}),se=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(se||{});function Jr(e){let t=b.useContext(Bt);return t||M(!1),t}function He(e){let t=b.useContext(_a);return t||M(!1),t}function Na(e){let t=b.useContext(ye);return t||M(!1),t}function yt(e){let t=Na(),r=t.matches[t.matches.length-1];return r.route.id||M(!1),r.route.id}function to(){return yt(se.UseRouteId)}function ro(){return He(se.UseNavigation).navigation}function no(){let e=Jr(Ht.UseRevalidator),t=He(se.UseRevalidator);return b.useMemo(()=>({revalidate:e.router.revalidate,state:t.revalidation}),[e.router.revalidate,t.revalidation])}function ao(){let{matches:e,loaderData:t}=He(se.UseMatches);return b.useMemo(()=>e.map(r=>Or(r,t)),[e,t])}function oo(){let e=He(se.UseLoaderData),t=yt(se.UseLoaderData);if(e.errors&&e.errors[t]!=null){console.error("You cannot `useLoaderData` in an errorElement (routeId: "+t+")");return}return e.loaderData[t]}function io(e){return He(se.UseRouteLoaderData).loaderData[e]}function Ia(){var e;let t=b.useContext(Kr),r=He(se.UseRouteError),n=yt(se.UseRouteError);return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function Ba(){let e=b.useContext(mt);return e==null?void 0:e._data}function lo(){let e=b.useContext(mt);return e==null?void 0:e._error}function ka(){let{router:e}=Jr(Ht.UseNavigateStable),t=yt(se.UseNavigateStable),r=b.useRef(!1);return Wr(()=>{r.current=!0}),b.useCallback(function(a,l){l===void 0&&(l={}),r.current&&(typeof a=="number"?e.navigate(a):e.navigate(a,pt({fromRouteId:t},l)))},[e,t])}function so(e){return La(e.context)}function uo(e){let{basename:t="/",children:r=null,location:n,navigationType:a=J.Pop,navigator:l,static:o=!1,future:c}=e;rt()&&M(!1);let u=t.replace(/^\/*/,"/"),v=b.useMemo(()=>({basename:u,navigator:l,static:o,future:pt({v7_relativeSplatPath:!1},c)}),[u,c,l,o]);typeof n=="string"&&(n=Pe(n));let{pathname:m="/",search:f="",hash:g="",state:j=null,key:S="default"}=n,R=b.useMemo(()=>{let C=tt(m,u);return C==null?null:{location:{pathname:C,search:f,hash:g,state:j,key:S},navigationType:a}},[u,m,f,g,j,S,a]);return R==null?null:b.createElement(ze.Provider,{value:v},b.createElement(kt.Provider,{children:r,value:R}))}function co(e){let{children:t,errorElement:r,resolve:n}=e;return b.createElement(Ha,{resolve:n,errorElement:r},b.createElement($a,null,t))}var ie=function(e){return e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error",e}(ie||{});const za=new Promise(()=>{});class Ha extends b.Component{constructor(t){super(t),this.state={error:null}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,r){console.error("<Await> caught the following error during render",t,r)}render(){let{children:t,errorElement:r,resolve:n}=this.props,a=null,l=ie.pending;if(!(n instanceof Promise))l=ie.success,a=Promise.resolve(),Object.defineProperty(a,"_tracked",{get:()=>!0}),Object.defineProperty(a,"_data",{get:()=>n});else if(this.state.error){l=ie.error;let o=this.state.error;a=Promise.reject().catch(()=>{}),Object.defineProperty(a,"_tracked",{get:()=>!0}),Object.defineProperty(a,"_error",{get:()=>o})}else n._tracked?(a=n,l="_error"in a?ie.error:"_data"in a?ie.success:ie.pending):(l=ie.pending,Object.defineProperty(n,"_tracked",{get:()=>!0}),a=n.then(o=>Object.defineProperty(n,"_data",{get:()=>o}),o=>Object.defineProperty(n,"_error",{get:()=>o})));if(l===ie.error&&a._error instanceof _t)throw za;if(l===ie.error&&!r)throw a._error;if(l===ie.error)return b.createElement(mt.Provider,{value:a,children:r});if(l===ie.success)return b.createElement(mt.Provider,{value:a,children:t});throw a}}function $a(e){let{children:t}=e,r=Ba(),n=typeof t=="function"?t(r):t;return b.createElement(b.Fragment,null,n)}function fo(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:b.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:b.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:b.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}export{qa as A,Wa as B,dr as C,Bt as D,Nr as E,Pe as F,_t as G,Va as H,ia as I,Ga as J,oo as K,co as L,lo as M,ze as N,so as O,io as P,Tn as R,Ia as a,Za as b,ro as c,Qa as d,no as e,Xa as f,Ja as g,fo as h,gt as i,Ka as j,ao as k,hn as l,_e as m,Ya as n,to as o,ye as p,M as q,b as r,Ta as s,ge as t,zt as u,et as v,tt as w,_a as x,uo as y,eo as z};
37
+ //# sourceMappingURL=index-1cKOJFpX.js.map