@epic-web/workshop-app 5.22.3 → 5.22.4

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 (105) hide show
  1. package/build/client/assets/{_-BDcQ_M2J.js → _-CHaVBRQw.js} +2 -2
  2. package/build/client/assets/{_-BDcQ_M2J.js.map → _-CHaVBRQw.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-CG2AFTtQ.js → _exerciseNumber-3uq8PYSd.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-CG2AFTtQ.js.map → _exerciseNumber-3uq8PYSd.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-COWC332q.js → _exerciseNumber_._stepNumber-D5VDI7vZ.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-COWC332q.js.map → _exerciseNumber_._stepNumber-D5VDI7vZ.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber_.finished-BgGBYU74.js → _exerciseNumber_.finished-3Iv9ikNq.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber_.finished-BgGBYU74.js.map → _exerciseNumber_.finished-3Iv9ikNq.js.map} +1 -1
  9. package/build/client/assets/_layout-Brb3LPqZ.js +5 -0
  10. package/build/client/assets/_layout-Brb3LPqZ.js.map +1 -0
  11. package/build/client/assets/_layout-CkabS-6c.js +9 -0
  12. package/build/client/assets/_layout-CkabS-6c.js.map +1 -0
  13. package/build/client/assets/accordion-BjQ-5Z44.js +2 -0
  14. package/build/client/assets/accordion-BjQ-5Z44.js.map +1 -0
  15. package/build/client/assets/{account-BwQvf4AS.js → account-CN4B8rm4.js} +2 -2
  16. package/build/client/assets/{account-BwQvf4AS.js.map → account-CN4B8rm4.js.map} +1 -1
  17. package/build/client/assets/app-lUkT_xku.js +2 -0
  18. package/build/client/assets/{app-XHqxOZfy.js.map → app-lUkT_xku.js.map} +1 -1
  19. package/build/client/assets/{button-DVPKzWkn.js → button-ChOzbirS.js} +2 -2
  20. package/build/client/assets/{button-DVPKzWkn.js.map → button-ChOzbirS.js.map} +1 -1
  21. package/build/client/assets/{diff-C7Zh3uuA.js → diff-CTHVtVGQ.js} +2 -2
  22. package/build/client/assets/{diff-C7Zh3uuA.js.map → diff-CTHVtVGQ.js.map} +1 -1
  23. package/build/client/assets/diff-CVrsnWqw.js +2 -0
  24. package/build/client/assets/{diff-DVOUmaq6.js.map → diff-CVrsnWqw.js.map} +1 -1
  25. package/build/client/assets/discord-Cl4hiMqz.js +2 -0
  26. package/build/client/assets/discord-Cl4hiMqz.js.map +1 -0
  27. package/build/client/assets/{discord-CoBo5eVK.js → discord-gROK6Zn6.js} +2 -2
  28. package/build/client/assets/{discord-CoBo5eVK.js.map → discord-gROK6Zn6.js.map} +1 -1
  29. package/build/client/assets/{epic-video-DRZssA4U.js → epic-video-BQtjG_Y0.js} +2 -2
  30. package/build/client/assets/{epic-video-DRZssA4U.js.map → epic-video-BQtjG_Y0.js.map} +1 -1
  31. package/build/client/assets/{error-boundary-De7jJlR5.js → error-boundary-CAu3AmhN.js} +2 -2
  32. package/build/client/assets/{error-boundary-De7jJlR5.js.map → error-boundary-CAu3AmhN.js.map} +1 -1
  33. package/build/client/assets/{finished-6JNE1a1E.js → finished-9PhQncNF.js} +2 -2
  34. package/build/client/assets/{finished-6JNE1a1E.js.map → finished-9PhQncNF.js.map} +1 -1
  35. package/build/client/assets/index-BncqUVfr.js +39 -0
  36. package/build/client/assets/index-BncqUVfr.js.map +1 -0
  37. package/build/client/assets/{index-BZWIdOoA.js → index-CMYl882D.js} +2 -2
  38. package/build/client/assets/{index-BZWIdOoA.js.map → index-CMYl882D.js.map} +1 -1
  39. package/build/client/assets/index-CSGHuBiw.js +5 -0
  40. package/build/client/assets/index-CSGHuBiw.js.map +1 -0
  41. package/build/client/assets/{index-Cnxrq9Ny.js → index-CYZfnGWa.js} +2 -2
  42. package/build/client/assets/{index-Cnxrq9Ny.js.map → index-CYZfnGWa.js.map} +1 -1
  43. package/build/client/assets/index-mZJ8sz9i.js +2 -0
  44. package/build/client/assets/{index-M647UyZv.js.map → index-mZJ8sz9i.js.map} +1 -1
  45. package/build/client/assets/{index-CyFsiCNp.js → index-qo6WmPUa.js} +2 -2
  46. package/build/client/assets/{index-CyFsiCNp.js.map → index-qo6WmPUa.js.map} +1 -1
  47. package/build/client/assets/{loading-ClL22bF9.js → loading-CPEkK5hO.js} +2 -2
  48. package/build/client/assets/{loading-ClL22bF9.js.map → loading-CPEkK5hO.js.map} +1 -1
  49. package/build/client/assets/{login-C3I5NCrj.js → login-C9JmYc0v.js} +2 -2
  50. package/build/client/assets/{login-C3I5NCrj.js.map → login-C9JmYc0v.js.map} +1 -1
  51. package/build/client/assets/{manifest-6899d50c.js → manifest-4acdd3e2.js} +1 -1
  52. package/build/client/assets/{mdx-Z4bEoKXn.js → mdx-CnaWQCDw.js} +2 -2
  53. package/build/client/assets/{mdx-Z4bEoKXn.js.map → mdx-CnaWQCDw.js.map} +1 -1
  54. package/build/client/assets/{misc-BK2EiKtY.js → misc-CQmANiHr.js} +2 -2
  55. package/build/client/assets/{misc-BK2EiKtY.js.map → misc-CQmANiHr.js.map} +1 -1
  56. package/build/client/assets/{nav-chevrons-DVD_0i2a.js → nav-chevrons-DCuva9-Q.js} +2 -2
  57. package/build/client/assets/{nav-chevrons-DVD_0i2a.js.map → nav-chevrons-DCuva9-Q.js.map} +1 -1
  58. package/build/client/assets/{onboarding-DjyKxkKx.js → onboarding-DzfDHJg_.js} +2 -2
  59. package/build/client/assets/{onboarding-DjyKxkKx.js.map → onboarding-DzfDHJg_.js.map} +1 -1
  60. package/build/client/assets/{online-CHlOuJG-.js → online-BsTX44az.js} +2 -2
  61. package/build/client/assets/{online-CHlOuJG-.js.map → online-BsTX44az.js.map} +1 -1
  62. package/build/client/assets/{preferences-BmwlU5EC.js → preferences-BYBJKp8k.js} +2 -2
  63. package/build/client/assets/{preferences-BmwlU5EC.js.map → preferences-BYBJKp8k.js.map} +1 -1
  64. package/build/client/assets/{presence-CPOTHCHm.js → presence-D5UF-NOM.js} +2 -2
  65. package/build/client/assets/{presence-CPOTHCHm.js.map → presence-D5UF-NOM.js.map} +1 -1
  66. package/build/client/assets/{preview-B2BxDDhi.js → preview-DaTpH6lj.js} +2 -2
  67. package/build/client/assets/{preview-B2BxDDhi.js.map → preview-DaTpH6lj.js.map} +1 -1
  68. package/build/client/assets/{product-BkDgAOLQ.js → product-BKhLQKd7.js} +2 -2
  69. package/build/client/assets/{product-BkDgAOLQ.js.map → product-BKhLQKd7.js.map} +1 -1
  70. package/build/client/assets/{progress-CnHFlUmF.js → progress-DwE8EkAa.js} +2 -2
  71. package/build/client/assets/{progress-CnHFlUmF.js.map → progress-DwE8EkAa.js.map} +1 -1
  72. package/build/client/assets/{progress-bar-Q9l2dtTg.js → progress-bar-ZCHf2Y4W.js} +2 -2
  73. package/build/client/assets/{progress-bar-Q9l2dtTg.js.map → progress-bar-ZCHf2Y4W.js.map} +1 -1
  74. package/build/client/assets/{revalidation-ws-CLolY6Iu.js → revalidation-ws-BoJZTvOQ.js} +2 -2
  75. package/build/client/assets/{revalidation-ws-CLolY6Iu.js.map → revalidation-ws-BoJZTvOQ.js.map} +1 -1
  76. package/build/client/assets/{root-BIqtHKak.js → root-4MvCzrFd.js} +2 -2
  77. package/build/client/assets/{root-BIqtHKak.js.map → root-4MvCzrFd.js.map} +1 -1
  78. package/build/client/assets/{set-playground-ZcPraYj5.js → set-playground-IUJCGVu2.js} +2 -2
  79. package/build/client/assets/{set-playground-ZcPraYj5.js.map → set-playground-IUJCGVu2.js.map} +1 -1
  80. package/build/client/assets/test-B8jDo0X4.js +2 -0
  81. package/build/client/assets/{test-Bt9AuCey.js.map → test-B8jDo0X4.js.map} +1 -1
  82. package/build/client/assets/{tests-CmjMQrMj.js → tests-y-atkhWB.js} +2 -2
  83. package/build/client/assets/{tests-CmjMQrMj.js.map → tests-y-atkhWB.js.map} +1 -1
  84. package/build/client/assets/tooltip-Cd0yJoQb.js +2 -0
  85. package/build/client/assets/tooltip-Cd0yJoQb.js.map +1 -0
  86. package/build/server/index.js +1 -1
  87. package/package.json +3 -3
  88. package/build/client/assets/_layout-DKC1JUTc.js +0 -2
  89. package/build/client/assets/_layout-DKC1JUTc.js.map +0 -1
  90. package/build/client/assets/_layout-DuDUPWax.js +0 -6
  91. package/build/client/assets/_layout-DuDUPWax.js.map +0 -1
  92. package/build/client/assets/accordion-BPyhq471.js +0 -2
  93. package/build/client/assets/accordion-BPyhq471.js.map +0 -1
  94. package/build/client/assets/app-XHqxOZfy.js +0 -2
  95. package/build/client/assets/diff-DVOUmaq6.js +0 -2
  96. package/build/client/assets/discord-CFZUT74L.js +0 -2
  97. package/build/client/assets/discord-CFZUT74L.js.map +0 -1
  98. package/build/client/assets/index-6Hu4Lmzn.js +0 -2
  99. package/build/client/assets/index-6Hu4Lmzn.js.map +0 -1
  100. package/build/client/assets/index-BE3KRz8n.js +0 -42
  101. package/build/client/assets/index-BE3KRz8n.js.map +0 -1
  102. package/build/client/assets/index-M647UyZv.js +0 -2
  103. package/build/client/assets/test-Bt9AuCey.js +0 -2
  104. package/build/client/assets/tooltip-leWCE50J.js +0 -2
  105. package/build/client/assets/tooltip-leWCE50J.js.map +0 -1
@@ -11158,7 +11158,7 @@ const route44 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11158
11158
  __proto__: null,
11159
11159
  loader
11160
11160
  }, Symbol.toStringTag, { value: "Module" }));
11161
- const serverManifest = { "entry": { "module": "/assets/entry.client-CQusg5Iz.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-BIqtHKak.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js", "/assets/misc-BK2EiKtY.js", "/assets/pe-DXT2FOp1.js", "/assets/error-boundary-De7jJlR5.js", "/assets/progress-bar-Q9l2dtTg.js", "/assets/index-CB8bjE90.js", "/assets/tooltip-leWCE50J.js", "/assets/index-BZWIdOoA.js", "/assets/presence-CPOTHCHm.js", "/assets/seo-pBpFCWsy.js", "/assets/online-CHlOuJG-.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-BDcQ_M2J.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/error-boundary-De7jJlR5.js", "/assets/misc-BK2EiKtY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DuDUPWax.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BK2EiKtY.js", "/assets/pe-DXT2FOp1.js", "/assets/product-BkDgAOLQ.js", "/assets/revalidation-ws-CLolY6Iu.js", "/assets/tooltip-leWCE50J.js", "/assets/index-BE3KRz8n.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/online-CHlOuJG-.js", "/assets/presence-CPOTHCHm.js", "/assets/progress-CnHFlUmF.js", "/assets/index-BZWIdOoA.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-BwQvf4AS.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-DVPKzWkn.js", "/assets/misc-BK2EiKtY.js", "/assets/tooltip-leWCE50J.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.epic_ws[.js]": { "id": "routes/_app+/app.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-CFZUT74L.js", "imports": ["/assets/discord-CoBo5eVK.js", "/assets/index-CGzylDPY.js", "/assets/misc-BK2EiKtY.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-CwTidn3v.js", "imports": ["/assets/index-CGzylDPY.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-CG2AFTtQ.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DRZssA4U.js", "/assets/revalidation-ws-CLolY6Iu.js", "/assets/mdx-Z4bEoKXn.js", "/assets/progress-CnHFlUmF.js", "/assets/misc-BK2EiKtY.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-BZWIdOoA.js", "/assets/tooltip-leWCE50J.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CHlOuJG-.js", "/assets/loading-ClL22bF9.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Q9l2dtTg.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-COWC332q.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BK2EiKtY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-DKC1JUTc.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/error-boundary-De7jJlR5.js", "/assets/nav-chevrons-DVD_0i2a.js", "/assets/revalidation-ws-CLolY6Iu.js", "/assets/mdx-Z4bEoKXn.js", "/assets/progress-CnHFlUmF.js", "/assets/set-playground-ZcPraYj5.js", "/assets/misc-BK2EiKtY.js", "/assets/seo-pBpFCWsy.js", "/assets/epic-video-DRZssA4U.js", "/assets/tooltip-leWCE50J.js", "/assets/index-BZWIdOoA.js", "/assets/components-DrvY4pal.js", "/assets/index-BE3KRz8n.js", "/assets/progress-bar-Q9l2dtTg.js", "/assets/pe-DXT2FOp1.js", "/assets/index-6Hu4Lmzn.js", "/assets/online-CHlOuJG-.js", "/assets/loading-ClL22bF9.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-XHqxOZfy.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/preview-B2BxDDhi.js", "/assets/components-DrvY4pal.js", "/assets/misc-BK2EiKtY.js", "/assets/index-BZWIdOoA.js", "/assets/tooltip-leWCE50J.js", "/assets/pe-DXT2FOp1.js", "/assets/button-DVPKzWkn.js", "/assets/loading-ClL22bF9.js", "/assets/progress-bar-Q9l2dtTg.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-M647UyZv.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tooltip-leWCE50J.js", "/assets/index-6Hu4Lmzn.js", "/assets/misc-BK2EiKtY.js", "/assets/diff-C7Zh3uuA.js", "/assets/error-boundary-De7jJlR5.js", "/assets/loading-ClL22bF9.js", "/assets/discord-CoBo5eVK.js", "/assets/online-CHlOuJG-.js", "/assets/components-DrvY4pal.js", "/assets/index-CB8bjE90.js", "/assets/set-playground-ZcPraYj5.js", "/assets/tests-CmjMQrMj.js", "/assets/preview-B2BxDDhi.js", "/assets/index-BE3KRz8n.js", "/assets/accordion-BPyhq471.js", "/assets/mdx-Z4bEoKXn.js", "/assets/epic-video-DRZssA4U.js", "/assets/index-BZWIdOoA.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Q9l2dtTg.js", "/assets/revalidation-ws-CLolY6Iu.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-DVPKzWkn.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-Bt9AuCey.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tests-CmjMQrMj.js", "/assets/components-DrvY4pal.js", "/assets/epic-video-DRZssA4U.js", "/assets/index-BZWIdOoA.js", "/assets/misc-BK2EiKtY.js", "/assets/tooltip-leWCE50J.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CHlOuJG-.js", "/assets/loading-ClL22bF9.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/accordion-BPyhq471.js", "/assets/index-6Hu4Lmzn.js", "/assets/index-BE3KRz8n.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/set-playground-ZcPraYj5.js", "/assets/progress-bar-Q9l2dtTg.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-BgGBYU74.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DRZssA4U.js", "/assets/misc-BK2EiKtY.js", "/assets/loading-ClL22bF9.js", "/assets/nav-chevrons-DVD_0i2a.js", "/assets/revalidation-ws-CLolY6Iu.js", "/assets/mdx-Z4bEoKXn.js", "/assets/progress-CnHFlUmF.js", "/assets/index-BZWIdOoA.js", "/assets/online-CHlOuJG-.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Q9l2dtTg.js", "/assets/pe-DXT2FOp1.js", "/assets/tooltip-leWCE50J.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-6JNE1a1E.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DRZssA4U.js", "/assets/misc-BK2EiKtY.js", "/assets/loading-ClL22bF9.js", "/assets/nav-chevrons-DVD_0i2a.js", "/assets/revalidation-ws-CLolY6Iu.js", "/assets/mdx-Z4bEoKXn.js", "/assets/online-CHlOuJG-.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-CnHFlUmF.js", "/assets/index-BZWIdOoA.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Q9l2dtTg.js", "/assets/pe-DXT2FOp1.js", "/assets/tooltip-leWCE50J.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-CyFsiCNp.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DRZssA4U.js", "/assets/error-boundary-De7jJlR5.js", "/assets/mdx-Z4bEoKXn.js", "/assets/misc-BK2EiKtY.js", "/assets/progress-CnHFlUmF.js", "/assets/components-DrvY4pal.js", "/assets/index-BZWIdOoA.js", "/assets/tooltip-leWCE50J.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CHlOuJG-.js", "/assets/loading-ClL22bF9.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Q9l2dtTg.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-C3I5NCrj.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-DVPKzWkn.js", "/assets/loading-ClL22bF9.js", "/assets/product-BkDgAOLQ.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/index-BZWIdOoA.js", "/assets/components-DrvY4pal.js", "/assets/misc-BK2EiKtY.js", "/assets/tooltip-leWCE50J.js", "/assets/pe-DXT2FOp1.js"], "css": [] }, "routes/_app+/preferences": { "id": "routes/_app+/preferences", "parentId": "routes/_app+/_layout", "path": "preferences", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/preferences-BmwlU5EC.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-DVPKzWkn.js", "/assets/misc-BK2EiKtY.js", "/assets/tooltip-leWCE50J.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-CW3-Iilk.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DV29dlKr.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/index": { "id": "routes/admin+/index", "parentId": "routes/admin+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-Cnxrq9Ny.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BK2EiKtY.js", "/assets/tooltip-leWCE50J.js", "/assets/progress-CnHFlUmF.js", "/assets/components-DrvY4pal.js", "/assets/pe-DXT2FOp1.js"], "css": [] }, "routes/admin+/notifications": { "id": "routes/admin+/notifications", "parentId": "routes/admin+/_layout", "path": "notifications", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/notifications-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/update-repo": { "id": "routes/admin+/update-repo", "parentId": "routes/admin+/_layout", "path": "update-repo", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-repo-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/version": { "id": "routes/admin+/version", "parentId": "routes/admin+/_layout", "path": "version", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/version-D61Qvt0X.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-DVOUmaq6.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BK2EiKtY.js", "/assets/diff-C7Zh3uuA.js", "/assets/nav-chevrons-DVD_0i2a.js", "/assets/components-DrvY4pal.js", "/assets/accordion-BPyhq471.js", "/assets/tooltip-leWCE50J.js", "/assets/index-6Hu4Lmzn.js", "/assets/index-BE3KRz8n.js", "/assets/mdx-Z4bEoKXn.js", "/assets/epic-video-DRZssA4U.js", "/assets/index-BZWIdOoA.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CHlOuJG-.js", "/assets/loading-ClL22bF9.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Q9l2dtTg.js", "/assets/revalidation-ws-CLolY6Iu.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-DjyKxkKx.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-DVPKzWkn.js", "/assets/epic-video-DRZssA4U.js", "/assets/components-DrvY4pal.js", "/assets/misc-BK2EiKtY.js", "/assets/index-BZWIdOoA.js", "/assets/tooltip-leWCE50J.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CHlOuJG-.js", "/assets/loading-ClL22bF9.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-6899d50c.js", "version": "6899d50c" };
11161
+ const serverManifest = { "entry": { "module": "/assets/entry.client-CQusg5Iz.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-4MvCzrFd.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js", "/assets/misc-CQmANiHr.js", "/assets/pe-DXT2FOp1.js", "/assets/error-boundary-CAu3AmhN.js", "/assets/progress-bar-ZCHf2Y4W.js", "/assets/index-CB8bjE90.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/index-CMYl882D.js", "/assets/presence-D5UF-NOM.js", "/assets/seo-pBpFCWsy.js", "/assets/online-BsTX44az.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-CHaVBRQw.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/error-boundary-CAu3AmhN.js", "/assets/misc-CQmANiHr.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-CkabS-6c.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-CQmANiHr.js", "/assets/pe-DXT2FOp1.js", "/assets/product-BKhLQKd7.js", "/assets/revalidation-ws-BoJZTvOQ.js", "/assets/components-DrvY4pal.js", "/assets/index-BncqUVfr.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/online-BsTX44az.js", "/assets/presence-D5UF-NOM.js", "/assets/progress-DwE8EkAa.js", "/assets/index-CMYl882D.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-CN4B8rm4.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-ChOzbirS.js", "/assets/misc-CQmANiHr.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.epic_ws[.js]": { "id": "routes/_app+/app.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-Cl4hiMqz.js", "imports": ["/assets/discord-gROK6Zn6.js", "/assets/index-CGzylDPY.js", "/assets/misc-CQmANiHr.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-CwTidn3v.js", "imports": ["/assets/index-CGzylDPY.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-3uq8PYSd.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/revalidation-ws-BoJZTvOQ.js", "/assets/mdx-CnaWQCDw.js", "/assets/progress-DwE8EkAa.js", "/assets/misc-CQmANiHr.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-CMYl882D.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/pe-DXT2FOp1.js", "/assets/online-BsTX44az.js", "/assets/loading-CPEkK5hO.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-ZCHf2Y4W.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-D5VDI7vZ.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-CQmANiHr.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-Brb3LPqZ.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/error-boundary-CAu3AmhN.js", "/assets/nav-chevrons-DCuva9-Q.js", "/assets/revalidation-ws-BoJZTvOQ.js", "/assets/mdx-CnaWQCDw.js", "/assets/progress-DwE8EkAa.js", "/assets/set-playground-IUJCGVu2.js", "/assets/misc-CQmANiHr.js", "/assets/seo-pBpFCWsy.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/index-CMYl882D.js", "/assets/components-DrvY4pal.js", "/assets/index-BncqUVfr.js", "/assets/progress-bar-ZCHf2Y4W.js", "/assets/pe-DXT2FOp1.js", "/assets/index-CSGHuBiw.js", "/assets/online-BsTX44az.js", "/assets/loading-CPEkK5hO.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-lUkT_xku.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/preview-DaTpH6lj.js", "/assets/components-DrvY4pal.js", "/assets/misc-CQmANiHr.js", "/assets/index-CMYl882D.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/pe-DXT2FOp1.js", "/assets/button-ChOzbirS.js", "/assets/loading-CPEkK5hO.js", "/assets/progress-bar-ZCHf2Y4W.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-mZJ8sz9i.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-CSGHuBiw.js", "/assets/accordion-BjQ-5Z44.js", "/assets/misc-CQmANiHr.js", "/assets/diff-CTHVtVGQ.js", "/assets/error-boundary-CAu3AmhN.js", "/assets/loading-CPEkK5hO.js", "/assets/discord-gROK6Zn6.js", "/assets/online-BsTX44az.js", "/assets/components-DrvY4pal.js", "/assets/index-CB8bjE90.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/set-playground-IUJCGVu2.js", "/assets/tests-y-atkhWB.js", "/assets/preview-DaTpH6lj.js", "/assets/index-BncqUVfr.js", "/assets/mdx-CnaWQCDw.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/index-CMYl882D.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-ZCHf2Y4W.js", "/assets/revalidation-ws-BoJZTvOQ.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-ChOzbirS.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-B8jDo0X4.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tests-y-atkhWB.js", "/assets/components-DrvY4pal.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/index-CMYl882D.js", "/assets/misc-CQmANiHr.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/pe-DXT2FOp1.js", "/assets/online-BsTX44az.js", "/assets/loading-CPEkK5hO.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/accordion-BjQ-5Z44.js", "/assets/index-CSGHuBiw.js", "/assets/index-BncqUVfr.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/set-playground-IUJCGVu2.js", "/assets/progress-bar-ZCHf2Y4W.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-3Iv9ikNq.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/misc-CQmANiHr.js", "/assets/loading-CPEkK5hO.js", "/assets/nav-chevrons-DCuva9-Q.js", "/assets/revalidation-ws-BoJZTvOQ.js", "/assets/mdx-CnaWQCDw.js", "/assets/progress-DwE8EkAa.js", "/assets/index-CMYl882D.js", "/assets/online-BsTX44az.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-ZCHf2Y4W.js", "/assets/pe-DXT2FOp1.js", "/assets/tooltip-Cd0yJoQb.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-9PhQncNF.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/misc-CQmANiHr.js", "/assets/loading-CPEkK5hO.js", "/assets/nav-chevrons-DCuva9-Q.js", "/assets/revalidation-ws-BoJZTvOQ.js", "/assets/mdx-CnaWQCDw.js", "/assets/online-BsTX44az.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DwE8EkAa.js", "/assets/index-CMYl882D.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-ZCHf2Y4W.js", "/assets/pe-DXT2FOp1.js", "/assets/tooltip-Cd0yJoQb.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-qo6WmPUa.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/error-boundary-CAu3AmhN.js", "/assets/mdx-CnaWQCDw.js", "/assets/misc-CQmANiHr.js", "/assets/progress-DwE8EkAa.js", "/assets/components-DrvY4pal.js", "/assets/index-CMYl882D.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/pe-DXT2FOp1.js", "/assets/online-BsTX44az.js", "/assets/loading-CPEkK5hO.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-ZCHf2Y4W.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-C9JmYc0v.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-ChOzbirS.js", "/assets/loading-CPEkK5hO.js", "/assets/product-BKhLQKd7.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/index-CMYl882D.js", "/assets/components-DrvY4pal.js", "/assets/misc-CQmANiHr.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/pe-DXT2FOp1.js"], "css": [] }, "routes/_app+/preferences": { "id": "routes/_app+/preferences", "parentId": "routes/_app+/_layout", "path": "preferences", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/preferences-BYBJKp8k.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-ChOzbirS.js", "/assets/misc-CQmANiHr.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-CW3-Iilk.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DV29dlKr.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/index": { "id": "routes/admin+/index", "parentId": "routes/admin+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-CYZfnGWa.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-CQmANiHr.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/progress-DwE8EkAa.js", "/assets/components-DrvY4pal.js", "/assets/pe-DXT2FOp1.js"], "css": [] }, "routes/admin+/notifications": { "id": "routes/admin+/notifications", "parentId": "routes/admin+/_layout", "path": "notifications", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/notifications-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/update-repo": { "id": "routes/admin+/update-repo", "parentId": "routes/admin+/_layout", "path": "update-repo", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-repo-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/version": { "id": "routes/admin+/version", "parentId": "routes/admin+/_layout", "path": "version", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/version-D61Qvt0X.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-CVrsnWqw.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-CQmANiHr.js", "/assets/diff-CTHVtVGQ.js", "/assets/nav-chevrons-DCuva9-Q.js", "/assets/components-DrvY4pal.js", "/assets/accordion-BjQ-5Z44.js", "/assets/index-CSGHuBiw.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/index-BncqUVfr.js", "/assets/mdx-CnaWQCDw.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/index-CMYl882D.js", "/assets/pe-DXT2FOp1.js", "/assets/online-BsTX44az.js", "/assets/loading-CPEkK5hO.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-ZCHf2Y4W.js", "/assets/revalidation-ws-BoJZTvOQ.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-DzfDHJg_.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-ChOzbirS.js", "/assets/epic-video-BQtjG_Y0.js", "/assets/components-DrvY4pal.js", "/assets/misc-CQmANiHr.js", "/assets/index-CMYl882D.js", "/assets/tooltip-Cd0yJoQb.js", "/assets/pe-DXT2FOp1.js", "/assets/online-BsTX44az.js", "/assets/loading-CPEkK5hO.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-4acdd3e2.js", "version": "4acdd3e2" };
11162
11162
  const mode = "production";
11163
11163
  const assetsBuildDirectory = "build/client";
11164
11164
  const basename = "/";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epic-web/workshop-app",
3
- "version": "5.22.3",
3
+ "version": "5.22.4",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -44,8 +44,8 @@
44
44
  "@epic-web/invariant": "^1.0.0",
45
45
  "@epic-web/remember": "^1.1.0",
46
46
  "@epic-web/restore-scroll": "^1.1.1",
47
- "@epic-web/workshop-presence": "5.22.3",
48
- "@epic-web/workshop-utils": "5.22.3",
47
+ "@epic-web/workshop-presence": "5.22.4",
48
+ "@epic-web/workshop-utils": "5.22.4",
49
49
  "@mdx-js/mdx": "^3.0.1",
50
50
  "@mux/mux-player-react": "^3.0.0",
51
51
  "@nasa-gcn/remix-seo": "^2.0.1",
@@ -1,2 +0,0 @@
1
- import{r as p,j as r,O as Q}from"./index-CGzylDPY.js";import{E as Z}from"./index-egcHQOpF.js";import{G as J}from"./error-boundary-De7jJlR5.js";import{N as X}from"./nav-chevrons-DVD_0i2a.js";import{u as ee}from"./revalidation-ws-CLolY6Iu.js";import{M as re,L as b,E as te}from"./mdx-Z4bEoKXn.js";import{P as oe}from"./progress-CnHFlUmF.js";import{S as D}from"./set-playground-ZcPraYj5.js";import{b as ne,a as A,I as S,i as se,e as ie}from"./misc-BK2EiKtY.js";import{g as ae}from"./seo-pBpFCWsy.js";import{E as le}from"./epic-video-DRZssA4U.js";import{S as C,d as ce,j as k,A as _,h as I,P as L,f as j,g as F,k as pe,D as ue,C as de,l as fe,u as me,R as xe,e as he}from"./tooltip-leWCE50J.js";import{a as ve}from"./index-BZWIdOoA.js";import{u as P,L as v,e as ge,A as Pe}from"./components-DrvY4pal.js";import{h as je,R as Ne,u as be,F as Se,P as Ce}from"./index-BE3KRz8n.js";import"./progress-bar-Q9l2dtTg.js";import"./pe-DXT2FOp1.js";import"./index-6Hu4Lmzn.js";import"./online-CHlOuJG-.js";import"./loading-ClL22bF9.js";import"./user-C0j04V55.js";import"./workshop-config-oL_FWDKq.js";const $=p.createContext(null);function Ee(){const e=p.useContext($);if(!e)throw new Error("useStepContext must be used within a StepContext.Provider");return e}function we({children:e,inBrowserBrowserRef:t}){return r.jsx($.Provider,{value:{inBrowserBrowserRef:t},children:e})}const ye={DiffLink:E,PrevDiffLink:Ae,NextDiffLink:Re,InlineFile:De,LinkToApp:_e};function Oe({inBrowserBrowserRef:e}){const t=P();return t.exerciseStepApp.instructionsCode?r.jsx(we,{inBrowserBrowserRef:e,children:r.jsx(le,{epicVideoInfosPromise:t.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(re,{code:t.exerciseStepApp.instructionsCode,components:ye})})})}):null}function T(e,t,o){const n=new URLSearchParams(e);return o===null?n.delete(t):n.set(t,o),n}function Re({app:e=0,fullPage:t=!1,children:o}){return r.jsx(E,{app1:e,app2:e+1,fullPage:t,children:o})}function Ae({app:e=-1,fullPage:t=!1,children:o}){return r.jsx(E,{app1:e,app2:e+1,fullPage:t,children:o})}function E({app1:e=0,app2:t=1,children:o,fullPage:n=!1,to:i}){const s=P();if(!i&&!e&&!t)return r.jsx("callout-danger",{className:"notification",children:r.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function a(d){var f;if(typeof d=="number"){const m=s.exerciseIndex+d;return(f=s.allApps[m])==null?void 0:f.name}if(!d)return null;for(const{name:m,stepName:x}of s.allApps)if(d===m||d===x)return m;return null}if(i){const d=new URLSearchParams(i);e=d.get("app1"),t=d.get("app2")}const l=a(e),c=a(t);if(!l||!c)return r.jsxs("callout-danger",{className:"notification",children:[r.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!l&&r.jsxs("div",{children:['app1: "',e,'" is not a valid app name']}),!c&&r.jsxs("div",{children:['app2: "',t,'" is not a valid app name']})]});i||(i=`app1=${l}&app2=${c}`);const u=n?`/diff?${i}`:`?${decodeURIComponent(T(new URLSearchParams,"preview",`diff&${i}`).toString())}`;return o||(o=r.jsxs("span",{children:["Go to Diff ",n?"":"Preview"," from: ",r.jsx("code",{children:l})," to:"," ",r.jsx("code",{children:c})]})),r.jsx(v,{to:u,children:o})}function De({file:e,type:t="playground",children:o=r.jsx("code",{children:e}),...n}){const i=P(),s=i[t]||i[i.type],a=r.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[o," ",r.jsx("svg",{height:24,width:24,children:r.jsx("use",{href:`${se}#Keyboard`})})]});return ENV.EPICSHOP_DEPLOYED&&s?r.jsx("div",{className:"inline-block grow",children:r.jsx(b,{appFile:e,appName:s.name,...n,children:a})}):s?r.jsx("div",{className:"inline-block grow",children:r.jsx(b,{appFile:e,appName:s.name,...n,children:a})}):t==="playground"?r.jsx(C,{content:"You must 'Set to Playground' before opening a file",children:r.jsx("div",{className:"inline-block grow cursor-not-allowed",children:a})}):r.jsx(r.Fragment,{children:"children"})}function ke(e){return e==="problem"?"problem":e==="solution"?"solution":"playground"}function _e({to:e,children:t=r.jsx("code",{children:e.toString()}),...o}){var m;const[n]=ge(),i=`?${T(n,"pathname",e.toString()).toString()}`,s=P(),a=ke(n.get("preview")),l=ve(),c=s[a],u=(c==null?void 0:c.dev.type)==="script"?ne({domain:l.domain,port:c.dev.portNumber}):((m=s.playground)==null?void 0:m.dev.type)==="browser"?s.playground.dev.pathname:null,{inBrowserBrowserRef:d}=Ee(),f=u?u.slice(0,-1)+e.toString():null;return r.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[r.jsx(v,{to:i,...o,className:A(o.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:x=>{var O,R;ENV.EPICSHOP_DEPLOYED&&x.preventDefault(),(O=o.onClick)==null||O.call(o,x),(R=d.current)==null||R.handleExtrnalNavigation(e.toString())},children:t}),f?r.jsx(C,{content:"Open in new tab",children:r.jsx("a",{href:f,target:"_blank",rel:"noreferrer",className:A("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:x=>{ENV.EPICSHOP_DEPLOYED&&x.preventDefault()},children:r.jsx(S,{name:"ExternalLink"})})}):null]})}var w="Popover",[M,hr]=ce(w,[k]),N=k(),[Ie,h]=M(w),H=e=>{const{__scopePopover:t,children:o,open:n,defaultOpen:i,onOpenChange:s,modal:a=!1}=e,l=N(t),c=p.useRef(null),[u,d]=p.useState(!1),[f=!1,m]=me({prop:n,defaultProp:i,onChange:s});return r.jsx(xe,{...l,children:r.jsx(Ie,{scope:t,contentId:he(),triggerRef:c,open:f,onOpenChange:m,onOpenToggle:p.useCallback(()=>m(x=>!x),[m]),hasCustomAnchor:u,onCustomAnchorAdd:p.useCallback(()=>d(!0),[]),onCustomAnchorRemove:p.useCallback(()=>d(!1),[]),modal:a,children:o})})};H.displayName=w;var U="PopoverAnchor",Le=p.forwardRef((e,t)=>{const{__scopePopover:o,...n}=e,i=h(U,o),s=N(o),{onCustomAnchorAdd:a,onCustomAnchorRemove:l}=i;return p.useEffect(()=>(a(),()=>l()),[a,l]),r.jsx(_,{...s,...n,ref:t})});Le.displayName=U;var V="PopoverTrigger",Y=p.forwardRef((e,t)=>{const{__scopePopover:o,...n}=e,i=h(V,o),s=N(o),a=I(t,i.triggerRef),l=r.jsx(L.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":W(i.open),...n,ref:a,onClick:j(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?l:r.jsx(_,{asChild:!0,...s,children:l})});Y.displayName=V;var y="PopoverPortal",[Fe,$e]=M(y,{forceMount:void 0}),B=e=>{const{__scopePopover:t,forceMount:o,children:n,container:i}=e,s=h(y,t);return r.jsx(Fe,{scope:t,forceMount:o,children:r.jsx(F,{present:o||s.open,children:r.jsx(Ce,{asChild:!0,container:i,children:n})})})};B.displayName=y;var g="PopoverContent",G=p.forwardRef((e,t)=>{const o=$e(g,e.__scopePopover),{forceMount:n=o.forceMount,...i}=e,s=h(g,e.__scopePopover);return r.jsx(F,{present:n||s.open,children:s.modal?r.jsx(Te,{...i,ref:t}):r.jsx(Me,{...i,ref:t})})});G.displayName=g;var Te=p.forwardRef((e,t)=>{const o=h(g,e.__scopePopover),n=p.useRef(null),i=I(t,n),s=p.useRef(!1);return p.useEffect(()=>{const a=n.current;if(a)return je(a)},[]),r.jsx(Ne,{as:pe,allowPinchZoom:!0,children:r.jsx(q,{...e,ref:i,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:j(e.onCloseAutoFocus,a=>{var l;a.preventDefault(),s.current||(l=o.triggerRef.current)==null||l.focus()}),onPointerDownOutside:j(e.onPointerDownOutside,a=>{const l=a.detail.originalEvent,c=l.button===0&&l.ctrlKey===!0,u=l.button===2||c;s.current=u},{checkForDefaultPrevented:!1}),onFocusOutside:j(e.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1})})})}),Me=p.forwardRef((e,t)=>{const o=h(g,e.__scopePopover),n=p.useRef(!1),i=p.useRef(!1);return r.jsx(q,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{var a,l;(a=e.onCloseAutoFocus)==null||a.call(e,s),s.defaultPrevented||(n.current||(l=o.triggerRef.current)==null||l.focus(),s.preventDefault()),n.current=!1,i.current=!1},onInteractOutside:s=>{var c,u;(c=e.onInteractOutside)==null||c.call(e,s),s.defaultPrevented||(n.current=!0,s.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const a=s.target;((u=o.triggerRef.current)==null?void 0:u.contains(a))&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&i.current&&s.preventDefault()}})}),q=p.forwardRef((e,t)=>{const{__scopePopover:o,trapFocus:n,onOpenAutoFocus:i,onCloseAutoFocus:s,disableOutsidePointerEvents:a,onEscapeKeyDown:l,onPointerDownOutside:c,onFocusOutside:u,onInteractOutside:d,...f}=e,m=h(g,o),x=N(o);return be(),r.jsx(Se,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:i,onUnmountAutoFocus:s,children:r.jsx(ue,{asChild:!0,disableOutsidePointerEvents:a,onInteractOutside:d,onEscapeKeyDown:l,onPointerDownOutside:c,onFocusOutside:u,onDismiss:()=>m.onOpenChange(!1),children:r.jsx(de,{"data-state":W(m.open),role:"dialog",id:m.contentId,...x,...f,ref:t,style:{...f.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),K="PopoverClose",He=p.forwardRef((e,t)=>{const{__scopePopover:o,...n}=e,i=h(K,o);return r.jsx(L.button,{type:"button",...n,ref:t,onClick:j(e.onClick,()=>i.onOpenChange(!1))})});He.displayName=K;var Ue="PopoverArrow",Ve=p.forwardRef((e,t)=>{const{__scopePopover:o,...n}=e,i=N(o);return r.jsx(fe,{...i,...n,ref:t})});Ve.displayName=Ue;function W(e){return e?"open":"closed"}var Ye=H,Be=Y,Ge=B,qe=G;function Ke({diffFilesPromise:e}){var l,c;const t=P(),[o,n]=p.useState(!1),i=p.useRef(null);function s(){n(!1)}const a=(l=t.playground)==null?void 0:l.appName;return r.jsx(r.Fragment,{children:r.jsxs(Ye,{open:o,onOpenChange:n,children:[r.jsx(Be,{asChild:!0,children:r.jsxs("button",{className:"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[r.jsx(S,{name:"Files"}),"Files"]})}),r.jsx(Ge,{children:r.jsx(qe,{ref:i,className:"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground",align:"start",sideOffset:5,children:r.jsxs("div",{className:"launch-editor-wrapper",children:[r.jsx("strong",{className:"inline-block px-2 pb-4 font-semibold uppercase",children:"Relevant Files"}),t.problem&&((c=t.playground)==null?void 0:c.appName)!==t.problem.name?r.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:r.jsx(D,{appName:t.problem.name})}):null,r.jsx("div",{id:"files",children:r.jsx(p.Suspense,{fallback:r.jsx(C,{content:"Loading diff",children:r.jsx("div",{className:"flex justify-center",children:r.jsx(S,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:r.jsx(Pe,{resolve:e,errorElement:r.jsx("div",{className:"text-foreground-destructive",children:"Something went wrong."}),children:u=>{if(!u)return r.jsx("p",{className:"text-foreground-destructive",children:"Unable to determine diff"});if(typeof u=="string")return r.jsx("p",{className:"text-foreground-destructive",children:u});if(!u.length)return r.jsx("p",{children:"No files changed"});const d=a||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return r.jsxs("ul",{...d,children:[u.length>1&&!ENV.EPICSHOP_DEPLOYED?r.jsx("div",{className:"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans",children:r.jsx(b,{appFile:u.map(f=>`${f.path},${f.line},1`),appName:"playground",onUpdate:s,children:r.jsx("p",{children:"Open All Files"})})}):null,u.map(f=>{var m;return r.jsx("li",{"data-state":f.status,children:r.jsx(b,{appFile:`${f.path},${f.line},1`,appName:ENV.EPICSHOP_DEPLOYED?((m=t.problem)==null?void 0:m.name)??"playground":"playground",onUpdate:s,children:r.jsx("code",{children:f.path})})},f.path)})]})}})})})]})})})]})})}function z(e,t){var a;const o=(e==null?void 0:e.exerciseStepApp.exerciseNumber.toString().padStart(2,"0"))??"00",n=(e==null?void 0:e.exerciseStepApp.stepNumber.toString().padStart(2,"0"))??"00",i={problem:"💪",solution:"🏁"}[(e==null?void 0:e.type)??"problem"],s=((a=e==null?void 0:e[e.type])==null?void 0:a.title)??"N/A";return{emoji:i,stepNumber:n,title:s,exerciseNumber:o,exerciseTitle:(e==null?void 0:e.exerciseTitle)??"Unknown exercise",workshopTitle:t,type:(e==null?void 0:e.type)??"problem"}}const vr=({data:e,matches:t,params:o})=>{var u;const n=(u=t.find(d=>d.id==="root"))==null?void 0:u.data;if(!e||!n)return[{title:"🦉 | Error"}];const{emoji:i,stepNumber:s,title:a,exerciseNumber:l,exerciseTitle:c}=z(e);return ae({title:`${i} | ${s}. ${a} | ${l}. ${c} | ${n.workshopTitle}`,description:`${o.type} step for exercise ${l}. ${c}`,ogTitle:a,ogDescription:`${c} step ${Number(s)} ${o.type}`,instructor:n.instructor,requestInfo:n.requestInfo})};function gr(){var n;const e=P(),t=p.useRef(null),o=z(e);return ee({watchPaths:[`${e.exerciseStepApp.relativePath}/README.mdx`]}),r.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:r.jsxs("main",{className:"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[r.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[r.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:r.jsxs("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:[r.jsxs("div",{className:"flex items-center justify-start gap-x-2 uppercase",children:[r.jsxs(v,{to:ie(e.exerciseStepApp.exerciseNumber),className:"hover:underline",children:[o.exerciseNumber,". ",o.exerciseTitle]}),"/",r.jsxs(v,{to:".",className:"hover:underline",children:[o.stepNumber,". ",o.title," (",o.emoji," ",o.type,")"]})]}),e.problem&&((n=e.playground)==null?void 0:n.appName)!==e.problem.name?r.jsx("div",{className:"hidden md:block",children:r.jsx(D,{appName:e.problem.name})}):null]})}),r.jsxs("article",{id:e.articleId,className:"shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",children:[e.exerciseStepApp.instructionsCode?r.jsx(Oe,{inBrowserBrowserRef:t}):r.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:r.jsx("p",{children:"No instructions yet..."})}),r.jsxs("div",{className:"mt-auto flex justify-between",children:[e.prevStepLink?r.jsx(v,{to:e.prevStepLink.to,"aria-label":"Previous Step",prefetch:"intent",children:"← Previous"}):r.jsx("span",{}),e.nextStepLink?r.jsx(v,{to:e.nextStepLink.to,"aria-label":"Next Step",prefetch:"intent",children:"Next →"}):r.jsx("span",{})]})]},e.articleId),r.jsx(Z,{elementQuery:`#${e.articleId}`},`scroll-${e.articleId}`),e.type==="solution"?r.jsx(oe,{type:"step",exerciseNumber:e.exerciseStepApp.exerciseNumber,stepNumber:e.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,r.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[r.jsx("div",{children:r.jsx("div",{className:"h-full",children:r.jsx(Ke,{diffFilesPromise:e.diffFiles})})}),r.jsx(te,{appName:e.exerciseStepApp.name,relativePath:e.exerciseStepApp.relativePath}),r.jsx(X,{prev:e.prevStepLink?{to:e.prevStepLink.to,"aria-label":"Previous Step"}:null,next:e.nextStepLink?{to:e.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),r.jsx(Q,{})]})})}function Pr(){return r.jsx(J,{statusHandlers:{404:()=>r.jsx("p",{children:"Sorry, we couldn't find an app here."})}})}export{Pr as ErrorBoundary,gr as default,vr as meta};
2
- //# sourceMappingURL=_layout-DKC1JUTc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_layout-DKC1JUTc.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/step-mdx.tsx","../../../../../node_modules/@radix-ui/react-popover/dist/index.mjs","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/touched-files.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout.tsx"],"sourcesContent":["import {\n\tLink,\n\tuseLoaderData,\n\tuseSearchParams,\n\ttype LinkProps,\n} from '@remix-run/react'\nimport * as React from 'react'\nimport { type PropsWithChildren } from 'react'\nimport iconsSvg from '#app/assets/icons.svg'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn, getBaseUrl } from '#app/utils/misc.tsx'\nimport { useRequestInfo } from '#app/utils/request-info.ts'\nimport { type loader } from '../_layout.tsx'\n\ntype StepContextType = {\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n}\nconst StepContext = React.createContext<StepContextType | null>(null)\n\nfunction useStepContext() {\n\tconst context = React.useContext(StepContext)\n\tif (!context) {\n\t\tthrow new Error('useStepContext must be used within a StepContext.Provider')\n\t}\n\treturn context\n}\n\nfunction StepContextProvider({\n\tchildren,\n\tinBrowserBrowserRef,\n}: {\n\tchildren: React.ReactNode\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n}) {\n\treturn (\n\t\t<StepContext.Provider value={{ inBrowserBrowserRef }}>\n\t\t\t{children}\n\t\t</StepContext.Provider>\n\t)\n}\n\nconst stepMdxComponents = {\n\tDiffLink,\n\tPrevDiffLink,\n\tNextDiffLink,\n\tInlineFile,\n\tLinkToApp,\n}\n\nexport function StepMdx({\n\tinBrowserBrowserRef,\n}: {\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tif (!data.exerciseStepApp.instructionsCode) return null\n\treturn (\n\t\t<StepContextProvider inBrowserBrowserRef={inBrowserBrowserRef}>\n\t\t\t<EpicVideoInfoProvider epicVideoInfosPromise={data.epicVideoInfosPromise}>\n\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t<Mdx\n\t\t\t\t\t\tcode={data.exerciseStepApp.instructionsCode}\n\t\t\t\t\t\tcomponents={stepMdxComponents}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</EpicVideoInfoProvider>\n\t\t</StepContextProvider>\n\t)\n}\n\nfunction withParam(\n\tsearchParams: URLSearchParams,\n\tkey: string,\n\tvalue: string | null,\n) {\n\tconst newSearchParams = new URLSearchParams(searchParams)\n\tif (value === null) {\n\t\tnewSearchParams.delete(key)\n\t} else {\n\t\tnewSearchParams.set(key, value)\n\t}\n\treturn newSearchParams\n}\n\nfunction NextDiffLink({\n\tapp = 0,\n\tfullPage = false,\n\tchildren,\n}: {\n\tapp: number\n\tfullPage?: boolean\n\tchildren?: React.ReactNode\n}) {\n\treturn (\n\t\t<DiffLink app1={app} app2={app + 1} fullPage={fullPage}>\n\t\t\t{children}\n\t\t</DiffLink>\n\t)\n}\n\nfunction PrevDiffLink({\n\tapp = -1,\n\tfullPage = false,\n\tchildren,\n}: {\n\tapp: number\n\tfullPage?: boolean\n\tchildren?: React.ReactNode\n}) {\n\treturn (\n\t\t<DiffLink app1={app} app2={app + 1} fullPage={fullPage}>\n\t\t\t{children}\n\t\t</DiffLink>\n\t)\n}\n\nfunction DiffLink({\n\tapp1 = 0,\n\tapp2 = 1,\n\tchildren,\n\tfullPage = false,\n\tto,\n}: {\n\tapp1?: string | number | null\n\tapp2?: string | number | null\n\tto?: string\n\tfullPage?: boolean\n\tchildren?: React.ReactNode\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tif (!to && !app1 && !app2) {\n\t\treturn (\n\t\t\t// @ts-expect-error 🤷‍♂️\n\t\t\t<callout-danger className=\"notification\">\n\t\t\t\t<div className=\"title\">DiffLink Error: invalid input</div>\n\t\t\t\t{/* @ts-expect-error 🤷‍♂️ */}\n\t\t\t</callout-danger>\n\t\t)\n\t}\n\n\tfunction getAppName(input: typeof app1) {\n\t\tif (typeof input === 'number') {\n\t\t\tconst stepIndex = data.exerciseIndex + input\n\t\t\treturn data.allApps[stepIndex]?.name\n\t\t}\n\t\tif (!input) return null\n\t\tfor (const { name, stepName } of data.allApps) {\n\t\t\tif (input === name || input === stepName) {\n\t\t\t\treturn name\n\t\t\t}\n\t\t}\n\t\treturn null\n\t}\n\n\tif (to) {\n\t\tconst params = new URLSearchParams(to)\n\t\tapp1 = params.get('app1')\n\t\tapp2 = params.get('app2')\n\t}\n\tconst app1Name = getAppName(app1)\n\tconst app2Name = getAppName(app2)\n\tif (!app1Name || !app2Name) {\n\t\treturn (\n\t\t\t// @ts-expect-error 🤷‍♂️\n\t\t\t<callout-danger className=\"notification\">\n\t\t\t\t<div className=\"title\">DiffLink Error: invalid input</div>\n\t\t\t\t{!app1Name && <div>app1: \"{app1}\" is not a valid app name</div>}\n\t\t\t\t{!app2Name && <div>app2: \"{app2}\" is not a valid app name</div>}\n\t\t\t\t{/* @ts-expect-error 🤷‍♂️ */}\n\t\t\t</callout-danger>\n\t\t)\n\t}\n\n\tif (!to) {\n\t\tto = `app1=${app1Name}&app2=${app2Name}`\n\t}\n\tconst pathToDiff = fullPage\n\t\t? `/diff?${to}`\n\t\t: `?${decodeURIComponent(\n\t\t\t\twithParam(new URLSearchParams(), 'preview', `diff&${to}`).toString(),\n\t\t\t)}`\n\n\tif (!children) {\n\t\tchildren = (\n\t\t\t<span>\n\t\t\t\tGo to Diff {fullPage ? '' : 'Preview'} from: <code>{app1Name}</code> to:{' '}\n\t\t\t\t<code>{app2Name}</code>\n\t\t\t</span>\n\t\t)\n\t}\n\n\treturn <Link to={pathToDiff}>{children}</Link>\n}\n\nfunction InlineFile({\n\tfile,\n\ttype = 'playground',\n\tchildren = <code>{file}</code>,\n\t...props\n}: Omit<PropsWithChildren<typeof LaunchEditor>, 'appName'> & {\n\tfile: string\n\ttype?: 'playground' | 'solution' | 'problem'\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tconst app = data[type] || data[data.type]\n\n\tconst info = (\n\t\t<div className=\"launch-editor-button-wrapper flex underline underline-offset-4\">\n\t\t\t{children}{' '}\n\t\t\t<svg height={24} width={24}>\n\t\t\t\t<use href={`${iconsSvg}#Keyboard`} />\n\t\t\t</svg>\n\t\t</div>\n\t)\n\n\treturn ENV.EPICSHOP_DEPLOYED && app ? (\n\t\t<div className=\"inline-block grow\">\n\t\t\t<LaunchEditor appFile={file} appName={app.name} {...props}>\n\t\t\t\t{info}\n\t\t\t</LaunchEditor>\n\t\t</div>\n\t) : app ? (\n\t\t<div className=\"inline-block grow\">\n\t\t\t<LaunchEditor appFile={file} appName={app.name} {...props}>\n\t\t\t\t{info}\n\t\t\t</LaunchEditor>\n\t\t</div>\n\t) : type === 'playground' ? (\n\t\t// playground does not exist yet\n\t\t<SimpleTooltip content=\"You must 'Set to Playground' before opening a file\">\n\t\t\t<div className=\"inline-block grow cursor-not-allowed\">{info}</div>\n\t\t</SimpleTooltip>\n\t) : (\n\t\t<>children</>\n\t)\n}\n\nfunction getPreviewType(\n\tpreview: string | null,\n): 'playground' | 'problem' | 'solution' {\n\tif (preview === 'problem') return 'problem'\n\tif (preview === 'solution') return 'solution'\n\treturn 'playground'\n}\n\nfunction LinkToApp({\n\tto: appTo,\n\tchildren = <code>{appTo.toString()}</code>,\n\t...props\n}: LinkProps) {\n\tconst [searchParams] = useSearchParams()\n\tconst to = `?${withParam(\n\t\tsearchParams,\n\t\t'pathname',\n\t\tappTo.toString(),\n\t).toString()}`\n\tconst data = useLoaderData<typeof loader>()\n\tconst type = getPreviewType(searchParams.get('preview'))\n\tconst requestInfo = useRequestInfo()\n\tconst app = data[type]\n\tconst previewAppUrl =\n\t\tapp?.dev.type === 'script'\n\t\t\t? getBaseUrl({\n\t\t\t\t\tdomain: requestInfo.domain,\n\t\t\t\t\tport: app.dev.portNumber,\n\t\t\t\t})\n\t\t\t: data.playground?.dev.type === 'browser'\n\t\t\t\t? data.playground.dev.pathname\n\t\t\t\t: null\n\tconst { inBrowserBrowserRef } = useStepContext()\n\tconst href = previewAppUrl\n\t\t? previewAppUrl.slice(0, -1) + appTo.toString()\n\t\t: null\n\treturn (\n\t\t<div className=\"inline-flex items-center justify-between gap-1\">\n\t\t\t<Link\n\t\t\t\tto={to}\n\t\t\t\t{...props}\n\t\t\t\tclassName={cn(props.className, {\n\t\t\t\t\t'cursor-not-allowed': ENV.EPICSHOP_DEPLOYED,\n\t\t\t\t})}\n\t\t\t\ttitle={\n\t\t\t\t\tENV.EPICSHOP_DEPLOYED\n\t\t\t\t\t\t? 'Cannot link to app in deployed version'\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tif (ENV.EPICSHOP_DEPLOYED) event.preventDefault()\n\n\t\t\t\t\tprops.onClick?.(event)\n\t\t\t\t\tinBrowserBrowserRef.current?.handleExtrnalNavigation(appTo.toString())\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Link>\n\t\t\t{href ? (\n\t\t\t\t<SimpleTooltip content=\"Open in new tab\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={href}\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\tclassName={cn('flex aspect-square items-center justify-center', {\n\t\t\t\t\t\t\t'cursor-not-allowed': ENV.EPICSHOP_DEPLOYED,\n\t\t\t\t\t\t})}\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED\n\t\t\t\t\t\t\t\t? 'Cannot link to app in deployed version'\n\t\t\t\t\t\t\t\t: 'Open in new tab'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\tif (ENV.EPICSHOP_DEPLOYED) event.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"ExternalLink\" />\n\t\t\t\t\t</a>\n\t\t\t\t</SimpleTooltip>\n\t\t\t) : null}\n\t\t</div>\n\t)\n}\n","\"use client\";\n\n// packages/react/popover/src/Popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as Popover from '@radix-ui/react-popover'\nimport { type SerializeFrom } from '@remix-run/node'\nimport { Await, useLoaderData } from '@remix-run/react'\nimport * as React from 'react'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport { SetAppToPlayground } from '#app/routes/set-playground.tsx'\nimport { type loader } from '../_layout.tsx'\n\nfunction TouchedFiles({\n\tdiffFilesPromise,\n}: {\n\tdiffFilesPromise: SerializeFrom<typeof loader>['diffFiles']\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst [open, setOpen] = React.useState(false)\n\tconst contentRef = React.useRef<HTMLDivElement>(null)\n\n\tfunction handleLaunchUpdate() {\n\t\tsetOpen(false)\n\t}\n\n\tconst appName = data.playground?.appName\n\n\treturn (\n\t\t<>\n\t\t\t<Popover.Root open={open} onOpenChange={setOpen}>\n\t\t\t\t<Popover.Trigger asChild>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName=\"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase\"\n\t\t\t\t\t\taria-label=\"Relevant Files\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"Files\" />\n\t\t\t\t\t\tFiles\n\t\t\t\t\t</button>\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Portal>\n\t\t\t\t\t<Popover.Content\n\t\t\t\t\t\tref={contentRef}\n\t\t\t\t\t\tclassName=\"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tsideOffset={5}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"launch-editor-wrapper\">\n\t\t\t\t\t\t\t<strong className=\"inline-block px-2 pb-4 font-semibold uppercase\">\n\t\t\t\t\t\t\t\tRelevant Files\n\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t\t{data.problem &&\n\t\t\t\t\t\t\tdata.playground?.appName !== data.problem.name ? (\n\t\t\t\t\t\t\t\t<div className=\"mb-2 rounded p-1 font-mono font-medium\">\n\t\t\t\t\t\t\t\t\t<SetAppToPlayground appName={data.problem.name} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<div id=\"files\">\n\t\t\t\t\t\t\t\t<React.Suspense\n\t\t\t\t\t\t\t\t\tfallback={\n\t\t\t\t\t\t\t\t\t\t<SimpleTooltip content=\"Loading diff\">\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex justify-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Refresh\" className=\"h-8 w-8 animate-spin\" />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Await\n\t\t\t\t\t\t\t\t\t\tresolve={diffFilesPromise}\n\t\t\t\t\t\t\t\t\t\terrorElement={\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"text-foreground-destructive\">\n\t\t\t\t\t\t\t\t\t\t\t\tSomething went wrong.\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(diffFiles) => {\n\t\t\t\t\t\t\t\t\t\t\tif (!diffFiles) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-foreground-destructive\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tUnable to determine diff\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tif (typeof diffFiles === 'string') {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-foreground-destructive\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{diffFiles}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tif (!diffFiles.length) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn <p>No files changed</p>\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst props =\n\t\t\t\t\t\t\t\t\t\t\t\tappName || ENV.EPICSHOP_GITHUB_ROOT\n\t\t\t\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"You must 'Set to Playground' before opening a file\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'not-allowed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<ul {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{diffFiles.length > 1 && !ENV.EPICSHOP_DEPLOYED ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappFile={diffFiles.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(file) => `${file.path},${file.line},1`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappName=\"playground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonUpdate={handleLaunchUpdate}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p>Open All Files</p>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{diffFiles.map((file) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li key={file.path} data-state={file.status}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappFile={`${file.path},${file.line},1`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappName={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (data.problem?.name ?? 'playground')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'playground'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonUpdate={handleLaunchUpdate}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<code>{file.path}</code>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t</Await>\n\t\t\t\t\t\t\t\t</React.Suspense>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Portal>\n\t\t\t</Popover.Root>\n\t\t</>\n\t)\n}\n\nexport default TouchedFiles\n","import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppDisplayName,\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExerciseApp,\n\tgetNextExerciseApp,\n\tgetPrevExerciseApp,\n\tisExerciseStepApp,\n\tisPlaygroundApp,\n\trequireExercise,\n\trequireExerciseApp,\n\ttype App,\n\ttype ExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getDiffFiles } from '@epic-web/workshop-utils/diff.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tunstable_data as data,\n\tredirect,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n\ttype SerializeFrom,\n} from '@remix-run/node'\nimport { Link, Outlet, useLoaderData } from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport { useRef } from 'react'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.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 { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { SetAppToPlayground } from '#app/routes/set-playground.tsx'\nimport { getExercisePath } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { StepMdx } from './__shared/step-mdx.tsx'\nimport TouchedFiles from './__shared/touched-files.tsx'\n\nfunction pageTitle(\n\tdata: SerializeFrom<typeof loader> | undefined,\n\tworkshopTitle?: string,\n) {\n\tconst exerciseNumber =\n\t\tdata?.exerciseStepApp.exerciseNumber.toString().padStart(2, '0') ?? '00'\n\tconst stepNumber =\n\t\tdata?.exerciseStepApp.stepNumber.toString().padStart(2, '0') ?? '00'\n\tconst emoji = (\n\t\t{\n\t\t\tproblem: '💪',\n\t\t\tsolution: '🏁',\n\t\t} as const\n\t)[data?.type ?? 'problem']\n\tconst title = data?.[data.type]?.title ?? 'N/A'\n\treturn {\n\t\temoji,\n\t\tstepNumber,\n\t\ttitle,\n\t\texerciseNumber,\n\t\texerciseTitle: data?.exerciseTitle ?? 'Unknown exercise',\n\t\tworkshopTitle,\n\t\ttype: data?.type ?? 'problem',\n\t}\n}\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n\tparams,\n}) => {\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\tconst { emoji, stepNumber, title, exerciseNumber, exerciseTitle } =\n\t\tpageTitle(data)\n\n\treturn getSeoMetaTags({\n\t\ttitle: `${emoji} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${rootData.workshopTitle}`,\n\t\tdescription: `${params.type} step for exercise ${exerciseNumber}. ${exerciseTitle}`,\n\t\togTitle: title,\n\t\togDescription: `${exerciseTitle} step ${Number(stepNumber)} ${params.type}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseStepTypeLayoutLoader')\n\tconst url = new URL(request.url)\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst cacheOptions = { request, timings }\n\tconst exerciseStepApp = await requireExerciseApp(params, cacheOptions)\n\tconst exercise = await requireExercise(\n\t\texerciseStepApp.exerciseNumber,\n\t\tcacheOptions,\n\t)\n\tconst reqUrl = new URL(request.url)\n\n\tconst pathnameParam = reqUrl.searchParams.get('pathname')\n\tif (pathnameParam === '' || pathnameParam === '/') {\n\t\treqUrl.searchParams.delete('pathname')\n\t\tthrow redirect(reqUrl.toString())\n\t}\n\n\tconst problemApp = await getExerciseApp(\n\t\t{ ...params, type: 'problem' },\n\t\tcacheOptions,\n\t)\n\tconst solutionApp = await getExerciseApp(\n\t\t{ ...params, type: 'solution' },\n\t\tcacheOptions,\n\t)\n\n\tif (!problemApp && !solutionApp) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst allAppsFull = await getApps(cacheOptions)\n\tconst playgroundApp = allAppsFull.find(isPlaygroundApp)\n\n\tfunction getStepId(a: ExerciseStepApp) {\n\t\treturn (\n\t\t\ta.exerciseNumber * 1000 +\n\t\t\ta.stepNumber * 10 +\n\t\t\t(a.type === 'problem' ? 0 : 1)\n\t\t)\n\t}\n\n\tfunction getStepNameAndId(a: App) {\n\t\tif (isExerciseStepApp(a)) {\n\t\t\tconst exerciseNumberStr = String(a.exerciseNumber).padStart(2, '0')\n\t\t\tconst stepNumberStr = String(a.stepNumber).padStart(2, '0')\n\n\t\t\treturn {\n\t\t\t\tstepName: `${exerciseNumberStr}/${stepNumberStr}.${a.type}`,\n\t\t\t\tstepId: getStepId(a),\n\t\t\t}\n\t\t}\n\t\treturn { stepName: '', stepId: -1 }\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t\t...getStepNameAndId(a),\n\t\t}))\n\n\tallApps.sort((a, b) => {\n\t\t// order them by their stepId\n\t\tif (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId\n\n\t\t// non-step apps should come after step apps\n\t\tif (a.stepId > 0) return -1\n\t\tif (b.stepId > 0) return 1\n\n\t\treturn 0\n\t})\n\tconst exerciseId = getStepId(exerciseStepApp)\n\tconst exerciseIndex = allApps.findIndex((step) => step.stepId === exerciseId)\n\n\tconst exerciseApps = allAppsFull\n\t\t.filter(isExerciseStepApp)\n\t\t.filter((app) => app.exerciseNumber === exerciseStepApp.exerciseNumber)\n\tconst isLastStep =\n\t\texerciseApps[exerciseApps.length - 1]?.name === exerciseStepApp.name\n\tconst isFirstStep = exerciseApps[0]?.name === exerciseStepApp.name\n\n\tconst nextApp = await getNextExerciseApp(exerciseStepApp, cacheOptions)\n\tconst prevApp = await getPrevExerciseApp(exerciseStepApp, cacheOptions)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-${exerciseStepApp.stepNumber}-${exerciseStepApp.type}`\n\n\tconst subroute = url.pathname.split(\n\t\t`/exercise/${params.exerciseNumber}/${params.stepNumber}/${params.type}/`,\n\t)[1]\n\treturn data(\n\t\t{\n\t\t\tarticleId,\n\t\t\ttype: params.type as 'problem' | 'solution',\n\t\t\texerciseStepApp,\n\t\t\texerciseTitle: exercise.title,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(exerciseStepApp.epicVideoEmbeds),\n\t\t\texerciseIndex,\n\t\t\tallApps,\n\t\t\tprevStepLink: isFirstStep\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${exerciseStepApp.exerciseNumber\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t.padStart(2, '0')}`,\n\t\t\t\t\t}\n\t\t\t\t: prevApp\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tto: getAppPageRoute(prevApp, {\n\t\t\t\t\t\t\t\tsubroute,\n\t\t\t\t\t\t\t\tsearchParams: url.searchParams,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\tnextStepLink: isLastStep\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${exerciseStepApp.exerciseNumber\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t.padStart(2, '0')}/finished`,\n\t\t\t\t\t}\n\t\t\t\t: nextApp\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tto: getAppPageRoute(nextApp, {\n\t\t\t\t\t\t\t\tsubroute,\n\t\t\t\t\t\t\t\tsearchParams: url.searchParams,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\tplayground: playgroundApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'playground',\n\t\t\t\t\t\tappName: playgroundApp.appName,\n\t\t\t\t\t\tname: playgroundApp.name,\n\t\t\t\t\t\tfullPath: playgroundApp.fullPath,\n\t\t\t\t\t\tdev: playgroundApp.dev,\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tproblem: problemApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'problem',\n\t\t\t\t\t\ttitle: problemApp.title,\n\t\t\t\t\t\tname: problemApp.name,\n\t\t\t\t\t\tfullPath: problemApp.fullPath,\n\t\t\t\t\t\tdev: problemApp.dev,\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tsolution: solutionApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'solution',\n\t\t\t\t\t\ttitle: solutionApp.title,\n\t\t\t\t\t\tname: solutionApp.name,\n\t\t\t\t\t\tfullPath: solutionApp.fullPath,\n\t\t\t\t\t\tdev: solutionApp.dev,\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tdiffFiles:\n\t\t\t\tproblemApp && solutionApp\n\t\t\t\t\t? getDiffFiles(problemApp, solutionApp, {\n\t\t\t\t\t\t\t...cacheOptions,\n\t\t\t\t\t\t\tforceFresh: url.searchParams.get('forceFresh') === 'diff',\n\t\t\t\t\t\t}).catch((e) => {\n\t\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t\t\treturn 'There was a problem generating the diff (check the terminal output)'\n\t\t\t\t\t\t})\n\t\t\t\t\t: 'No diff available',\n\t\t} as const,\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'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function ExercisePartRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst inBrowserBrowserRef = useRef<InBrowserBrowserRef>(null)\n\n\tconst titleBits = pageTitle(data)\n\n\tuseRevalidationWS({\n\t\twatchPaths: [`${data.exerciseStepApp.relativePath}/README.mdx`],\n\t})\n\n\treturn (\n\t\t<div className=\"flex max-w-full flex-grow flex-col\">\n\t\t\t<main className=\"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight\">\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 uppercase\">\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={getExercisePath(data.exerciseStepApp.exerciseNumber)}\n\t\t\t\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{titleBits.exerciseNumber}. {titleBits.exerciseTitle}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t{'/'}\n\t\t\t\t\t\t\t\t<Link to=\".\" className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{titleBits.stepNumber}. {titleBits.title}\n\t\t\t\t\t\t\t\t\t{' ('}\n\t\t\t\t\t\t\t\t\t{titleBits.emoji} {titleBits.type}\n\t\t\t\t\t\t\t\t\t{')'}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{data.problem &&\n\t\t\t\t\t\t\tdata.playground?.appName !== data.problem.name ? (\n\t\t\t\t\t\t\t\t<div className=\"hidden md:block\">\n\t\t\t\t\t\t\t\t\t<SetAppToPlayground appName={data.problem.name} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\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\tid={data.articleId}\n\t\t\t\t\t\tkey={data.articleId}\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between 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>\n\t\t\t\t\t\t{data.exerciseStepApp.instructionsCode ? (\n\t\t\t\t\t\t\t<StepMdx inBrowserBrowserRef={inBrowserBrowserRef} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"flex h-full items-center justify-center text-lg\">\n\t\t\t\t\t\t\t\t<p>No instructions yet...</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"mt-auto flex justify-between\">\n\t\t\t\t\t\t\t{data.prevStepLink ? (\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={data.prevStepLink.to}\n\t\t\t\t\t\t\t\t\taria-label=\"Previous Step\"\n\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t← Previous\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{data.nextStepLink ? (\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={data.nextStepLink.to}\n\t\t\t\t\t\t\t\t\taria-label=\"Next Step\"\n\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tNext →\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration\n\t\t\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t\t\t/>\n\t\t\t\t\t{data.type === 'solution' ? (\n\t\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\t\ttype=\"step\"\n\t\t\t\t\t\t\texerciseNumber={data.exerciseStepApp.exerciseNumber}\n\t\t\t\t\t\t\tstepNumber={data.exerciseStepApp.stepNumber}\n\t\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\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\t<div className=\"h-full\">\n\t\t\t\t\t\t\t\t<TouchedFiles diffFilesPromise={data.diffFiles} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\tappName={data.exerciseStepApp.name}\n\t\t\t\t\t\t\trelativePath={data.exerciseStepApp.relativePath}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<NavChevrons\n\t\t\t\t\t\t\tprev={\n\t\t\t\t\t\t\t\tdata.prevStepLink\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tto: data.prevStepLink.to,\n\t\t\t\t\t\t\t\t\t\t\t'aria-label': 'Previous Step',\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnext={\n\t\t\t\t\t\t\t\tdata.nextStepLink\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tto: data.nextStepLink.to,\n\t\t\t\t\t\t\t\t\t\t\t'aria-label': 'Next Step',\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Outlet />\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => <p>Sorry, we couldn't find an app here.</p>,\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["StepContext","React.createContext","useStepContext","context","React.useContext","StepContextProvider","children","inBrowserBrowserRef","jsx","stepMdxComponents","DiffLink","PrevDiffLink","NextDiffLink","InlineFile","LinkToApp","StepMdx","data","useLoaderData","EpicVideoInfoProvider","Mdx","withParam","searchParams","key","value","newSearchParams","app","fullPage","app1","app2","to","getAppName","input","stepIndex","_a","name","stepName","params","app1Name","app2Name","jsxs","pathToDiff","Link","file","type","props","info","iconsSvg","LaunchEditor","SimpleTooltip","getPreviewType","preview","appTo","useSearchParams","requestInfo","useRequestInfo","previewAppUrl","getBaseUrl","href","cn","event","_b","Icon","POPOVER_NAME","createPopoverContext","createPopoverScope","createContextScope","createPopperScope","usePopperScope","PopoverProvider","usePopoverContext","Popover","__scopePopover","openProp","defaultOpen","onOpenChange","modal","popperScope","triggerRef","React.useRef","hasCustomAnchor","setHasCustomAnchor","React.useState","open","setOpen","useControllableState","PopperPrimitive.Root","useId","React.useCallback","prevOpen","ANCHOR_NAME","PopoverAnchor","React.forwardRef","forwardedRef","anchorProps","onCustomAnchorAdd","onCustomAnchorRemove","React.useEffect","PopperPrimitive.Anchor","TRIGGER_NAME","PopoverTrigger","triggerProps","composedTriggerRef","useComposedRefs","trigger","Primitive","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","PopoverPortal","forceMount","container","Presence","PortalPrimitive","CONTENT_NAME","PopoverContent","portalContext","contentProps","PopoverContentModal","PopoverContentNonModal","contentRef","composedRefs","isRightClickOutsideRef","content","hideOthers","RemoveScroll","Slot","PopoverContentImpl","originalEvent","ctrlLeftClick","isRightClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","useFocusGuards","FocusScope","DismissableLayer","PopperPrimitive.Content","CLOSE_NAME","PopoverClose","closeProps","ARROW_NAME","PopoverArrow","arrowProps","PopperPrimitive.Arrow","Root2","Trigger","Portal","Content2","TouchedFiles","diffFilesPromise","handleLaunchUpdate","appName","Popover.Root","Popover.Trigger","Popover.Portal","Popover.Content","SetAppToPlayground","React.Suspense","Await","diffFiles","pageTitle","workshopTitle","exerciseNumber","exerciseStepApp","toString","padStart","stepNumber","emoji","problem","solution","title","exerciseTitle","meta","matches","rootData","find","m","id","getSeoMetaTags","description","ogTitle","ogDescription","Number","instructor","ExercisePartRoute","useRef","titleBits","useRevalidationWS","watchPaths","relativePath","className","getExercisePath","playground","articleId","instructionsCode","prevStepLink","prefetch","nextStepLink","ElementScrollRestoration","elementQuery","ProgressToggle","EditFileOnGitHub","NavChevrons","prev","next","Outlet","ErrorBoundary","GeneralErrorBoundary","statusHandlers"],"mappings":"6jCAsBA,MAAMA,EAAcC,EAAAA,cAA4C,IAAI,EAEpE,SAASC,IAAiB,CACnB,MAAAC,EAAUC,aAAiBJ,CAAW,EAC5C,GAAI,CAACG,EACE,MAAA,IAAI,MAAM,2DAA2D,EAErE,OAAAA,CACR,CAEA,SAASE,GAAoB,CAC5B,SAAAC,EACA,oBAAAC,CACD,EAGG,CAED,OAAAC,EAAA,IAACR,EAAY,SAAZ,CAAqB,MAAO,CAAE,oBAAAO,CAAA,EAC7B,SAAAD,CACF,CAAA,CAEF,CAEA,MAAMG,GAAoB,CACzB,SAAAC,EACA,aAAAC,GACA,aAAAC,GACA,WAAAC,GACA,UAAAC,EACD,EAEO,SAASC,GAAQ,CACvB,oBAAAR,CACD,EAEG,CACF,MAAMS,EAAOC,IACb,OAAKD,EAAK,gBAAgB,iBAEzBR,EAAAA,IAACH,GAAoB,CAAA,oBAAAE,EACpB,SAACC,EAAA,IAAAU,GAAA,CAAsB,sBAAuBF,EAAK,sBAClD,SAAAR,MAAC,MAAI,CAAA,UAAU,sCACd,SAAAA,EAAA,IAACW,GAAA,CACA,KAAMH,EAAK,gBAAgB,iBAC3B,WAAYP,EAAA,CAAA,EAEd,EACD,CACD,CAAA,EAXkD,IAapD,CAEA,SAASW,EACRC,EACAC,EACAC,EACC,CACK,MAAAC,EAAkB,IAAI,gBAAgBH,CAAY,EACxD,OAAIE,IAAU,KACbC,EAAgB,OAAOF,CAAG,EAEVE,EAAA,IAAIF,EAAKC,CAAK,EAExBC,CACR,CAEA,SAASZ,GAAa,CACrB,IAAAa,EAAM,EACN,SAAAC,EAAW,GACX,SAAApB,CACD,EAIG,CAED,OAAAE,MAACE,GAAS,KAAMe,EAAK,KAAMA,EAAM,EAAG,SAAAC,EAClC,SAAApB,CACF,CAAA,CAEF,CAEA,SAASK,GAAa,CACrB,IAAAc,EAAM,GACN,SAAAC,EAAW,GACX,SAAApB,CACD,EAIG,CAED,OAAAE,MAACE,GAAS,KAAMe,EAAK,KAAMA,EAAM,EAAG,SAAAC,EAClC,SAAApB,CACF,CAAA,CAEF,CAEA,SAASI,EAAS,CACjB,KAAAiB,EAAO,EACP,KAAAC,EAAO,EACP,SAAAtB,EACA,SAAAoB,EAAW,GACX,GAAAG,CACD,EAMG,CACF,MAAMb,EAAOC,IACb,GAAI,CAACY,GAAM,CAACF,GAAQ,CAACC,EACpB,OAECpB,EAAAA,IAAC,kBAAe,UAAU,eACzB,eAAC,MAAI,CAAA,UAAU,QAAQ,SAAA,+BAAA,CAA6B,CAErD,CAAA,EAIF,SAASsB,EAAWC,EAAoB,OACnC,GAAA,OAAOA,GAAU,SAAU,CACxB,MAAAC,EAAYhB,EAAK,cAAgBe,EAChC,OAAAE,EAAAjB,EAAK,QAAQgB,CAAS,IAAtB,YAAAC,EAAyB,IACjC,CACI,GAAA,CAACF,EAAc,OAAA,KACnB,SAAW,CAAE,KAAAG,EAAM,SAAAC,CAAS,IAAKnB,EAAK,QACjC,GAAAe,IAAUG,GAAQH,IAAUI,EACxB,OAAAD,EAGF,OAAA,IACR,CAEA,GAAIL,EAAI,CACD,MAAAO,EAAS,IAAI,gBAAgBP,CAAE,EAC9BF,EAAAS,EAAO,IAAI,MAAM,EACjBR,EAAAQ,EAAO,IAAI,MAAM,CACzB,CACM,MAAAC,EAAWP,EAAWH,CAAI,EAC1BW,EAAWR,EAAWF,CAAI,EAC5B,GAAA,CAACS,GAAY,CAACC,EACjB,OAECC,EAAAA,KAAC,iBAAe,CAAA,UAAU,eACzB,SAAA,CAAC/B,EAAA,IAAA,MAAA,CAAI,UAAU,QAAQ,SAA6B,gCAAA,EACnD,CAAC6B,GAAYE,EAAAA,KAAC,MAAI,CAAA,SAAA,CAAA,UAAQZ,EAAK,2BAAA,EAAyB,EACxD,CAACW,GAAYC,EAAAA,KAAC,MAAI,CAAA,SAAA,CAAA,UAAQX,EAAK,2BAAA,EAAyB,CAAA,EAE1D,EAIGC,IACCA,EAAA,QAAQQ,CAAQ,SAASC,CAAQ,IAEvC,MAAME,EAAad,EAChB,SAASG,CAAE,GACX,IAAI,mBACJT,EAAU,IAAI,gBAAmB,UAAW,QAAQS,CAAE,EAAE,EAAE,SAAS,CACnE,CAAA,GAEH,OAAKvB,IACJA,SACE,OAAK,CAAA,SAAA,CAAA,cACOoB,EAAW,GAAK,UAAU,UAAOlB,EAAAA,IAAC,QAAM,SAAS6B,CAAA,CAAA,EAAO,OAAK,IACzE7B,EAAAA,IAAC,QAAM,SAAS8B,CAAA,CAAA,CACjB,CAAA,CAAA,GAIM9B,EAAAA,IAAAiC,EAAA,CAAK,GAAID,EAAa,SAAAlC,CAAS,CAAA,CACxC,CAEA,SAASO,GAAW,CACnB,KAAA6B,EACA,KAAAC,EAAO,aACP,SAAArC,EAAYE,EAAAA,IAAA,OAAA,CAAM,SAAKkC,CAAA,CAAA,EACvB,GAAGE,CACJ,EAGG,CACF,MAAM5B,EAAOC,IACPQ,EAAMT,EAAK2B,CAAI,GAAK3B,EAAKA,EAAK,IAAI,EAElC6B,EACLN,EAAAA,KAAC,MAAI,CAAA,UAAU,iEACb,SAAA,CAAAjC,EAAU,IACVE,EAAA,IAAA,MAAA,CAAI,OAAQ,GAAI,MAAO,GACvB,SAACA,EAAA,IAAA,MAAA,CAAI,KAAM,GAAGsC,EAAQ,WAAa,CAAA,EACpC,CACD,CAAA,CAAA,EAGD,OAAO,IAAI,mBAAqBrB,EAC9BjB,EAAA,IAAA,MAAA,CAAI,UAAU,oBACd,SAAAA,EAAA,IAACuC,EAAa,CAAA,QAASL,EAAM,QAASjB,EAAI,KAAO,GAAGmB,EAClD,SACFC,EAAA,CAAA,CACD,EACGpB,QACF,MAAI,CAAA,UAAU,oBACd,SAAAjB,EAAAA,IAACuC,GAAa,QAASL,EAAM,QAASjB,EAAI,KAAO,GAAGmB,EAClD,SACFC,EAAA,CAAA,CACD,EACGF,IAAS,aAEZnC,EAAAA,IAACwC,GAAc,QAAQ,qDACtB,eAAC,MAAI,CAAA,UAAU,uCAAwC,SAAAH,CAAA,CAAK,CAC7D,CAAA,oBAEE,SAAQ,UAAA,CAAA,CAEZ,CAEA,SAASI,GACRC,EACwC,CACpC,OAAAA,IAAY,UAAkB,UAC9BA,IAAY,WAAmB,WAC5B,YACR,CAEA,SAASpC,GAAU,CAClB,GAAIqC,EACJ,SAAA7C,EAAWE,EAAA,IAAC,OAAM,CAAA,SAAA2C,EAAM,WAAW,EACnC,GAAGP,CACJ,EAAc,OACP,KAAA,CAACvB,CAAY,EAAI+B,KACjBvB,EAAK,IAAIT,EACdC,EACA,WACA8B,EAAM,SAAS,CAAA,EACd,SAAU,CAAA,GACNnC,EAAOC,IACP0B,EAAOM,GAAe5B,EAAa,IAAI,SAAS,CAAC,EACjDgC,EAAcC,KACd7B,EAAMT,EAAK2B,CAAI,EACfY,GACL9B,GAAA,YAAAA,EAAK,IAAI,QAAS,SACf+B,GAAW,CACX,OAAQH,EAAY,OACpB,KAAM5B,EAAI,IAAI,UACd,CAAA,IACAQ,EAAAjB,EAAK,aAAL,YAAAiB,EAAiB,IAAI,QAAS,UAC7BjB,EAAK,WAAW,IAAI,SACpB,KACC,CAAE,oBAAAT,GAAwBL,KAC1BuD,EAAOF,EACVA,EAAc,MAAM,EAAG,EAAE,EAAIJ,EAAM,SAAA,EACnC,KAEF,OAAAZ,EAAA,KAAC,MAAI,CAAA,UAAU,iDACd,SAAA,CAAA/B,EAAA,IAACiC,EAAA,CACA,GAAAZ,EACC,GAAGe,EACJ,UAAWc,EAAGd,EAAM,UAAW,CAC9B,qBAAsB,IAAI,iBAAA,CAC1B,EACD,MACC,IAAI,kBACD,yCACA,OAEJ,QAAUe,GAAU,SACf,IAAI,mBAAmBA,EAAM,eAAe,GAEhD1B,EAAAW,EAAM,UAAN,MAAAX,EAAA,KAAAW,EAAgBe,IAChBC,EAAArD,EAAoB,UAApB,MAAAqD,EAA6B,wBAAwBT,EAAM,SAAU,EACtE,EAEC,SAAA7C,CAAA,CACF,EACCmD,EACAjD,EAAA,IAACwC,EAAc,CAAA,QAAQ,kBACtB,SAAAxC,EAAA,IAAC,IAAA,CACA,KAAAiD,EACA,OAAO,SACP,IAAI,aACJ,UAAWC,EAAG,iDAAkD,CAC/D,qBAAsB,IAAI,iBAAA,CAC1B,EACD,MACC,IAAI,kBACD,yCACA,kBAEJ,QAAUC,GAAU,CACf,IAAI,mBAAmBA,EAAM,eAAe,CACjD,EAEA,SAAAnD,EAAAA,IAACqD,EAAK,CAAA,KAAK,cAAe,CAAA,CAAA,GAE5B,EACG,IACL,CAAA,CAAA,CAEF,CC/SA,IAAIC,EAAe,UACf,CAACC,EAAsBC,EAAkB,EAAIC,GAAmBH,EAAc,CAChFI,CACF,CAAC,EACGC,EAAiBD,EAAiB,EAClC,CAACE,GAAiBC,CAAiB,EAAIN,EAAqBD,CAAY,EACxEQ,EAAW1B,GAAU,CACvB,KAAM,CACJ,eAAA2B,EACA,SAAAjE,EACA,KAAMkE,EACN,YAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,EACT,EAAG/B,EACEgC,EAAcT,EAAeI,CAAc,EAC3CM,EAAaC,SAAa,IAAI,EAC9B,CAACC,EAAiBC,CAAkB,EAAIC,EAAc,SAAC,EAAK,EAC5D,CAACC,EAAO,GAAOC,CAAO,EAAIC,GAAqB,CACnD,KAAMZ,EACN,YAAaC,EACb,SAAUC,CACd,CAAG,EACD,OAAuBlE,EAAG,IAAC6E,GAAsB,CAAE,GAAGT,EAAa,SAA0BpE,EAAG,IAC9F4D,GACA,CACE,MAAOG,EACP,UAAWe,GAAO,EAClB,WAAAT,EACA,KAAAK,EACA,aAAcC,EACd,aAAcI,EAAAA,YAAkB,IAAMJ,EAASK,GAAa,CAACA,CAAQ,EAAG,CAACL,CAAO,CAAC,EACjF,gBAAAJ,EACA,kBAAmBQ,EAAAA,YAAkB,IAAMP,EAAmB,EAAI,EAAG,CAAA,CAAE,EACvE,qBAAsBO,EAAAA,YAAkB,IAAMP,EAAmB,EAAK,EAAG,CAAA,CAAE,EAC3E,MAAAL,EACA,SAAArE,CACD,CACF,CAAA,CAAE,CACL,EACAgE,EAAQ,YAAcR,EACtB,IAAI2B,EAAc,gBACdC,GAAgBC,EAAgB,WAClC,CAAC/C,EAAOgD,IAAiB,CACvB,KAAM,CAAE,eAAArB,EAAgB,GAAGsB,CAAW,EAAKjD,EACrCzC,EAAUkE,EAAkBoB,EAAalB,CAAc,EACvDK,EAAcT,EAAeI,CAAc,EAC3C,CAAE,kBAAAuB,EAAmB,qBAAAC,CAAsB,EAAG5F,EACpD6F,OAAAA,EAAAA,UAAgB,KACdF,IACO,IAAMC,EAAoB,GAChC,CAACD,EAAmBC,CAAoB,CAAC,EACrBvF,EAAG,IAACyF,EAAwB,CAAE,GAAGrB,EAAa,GAAGiB,EAAa,IAAKD,CAAY,CAAE,CACzG,CACH,EACAF,GAAc,YAAcD,EAC5B,IAAIS,EAAe,iBACfC,EAAiBR,EAAgB,WACnC,CAAC/C,EAAOgD,IAAiB,CACvB,KAAM,CAAE,eAAArB,EAAgB,GAAG6B,CAAY,EAAKxD,EACtCzC,EAAUkE,EAAkB6B,EAAc3B,CAAc,EACxDK,EAAcT,EAAeI,CAAc,EAC3C8B,EAAqBC,EAAgBV,EAAczF,EAAQ,UAAU,EACrEoG,EAA0B/F,EAAG,IACjCgG,EAAU,OACV,CACE,KAAM,SACN,gBAAiB,SACjB,gBAAiBrG,EAAQ,KACzB,gBAAiBA,EAAQ,UACzB,aAAcsG,EAAStG,EAAQ,IAAI,EACnC,GAAGiG,EACH,IAAKC,EACL,QAASK,EAAqB9D,EAAM,QAASzC,EAAQ,YAAY,CAClE,CACP,EACI,OAAOA,EAAQ,gBAAkBoG,EAA0B/F,EAAAA,IAAIyF,EAAwB,CAAE,QAAS,GAAM,GAAGrB,EAAa,SAAU2B,CAAS,CAAA,CAC5I,CACH,EACAJ,EAAe,YAAcD,EAC7B,IAAIS,EAAc,gBACd,CAACC,GAAgBC,EAAgB,EAAI9C,EAAqB4C,EAAa,CACzE,WAAY,MACd,CAAC,EACGG,EAAiBlE,GAAU,CAC7B,KAAM,CAAE,eAAA2B,EAAgB,WAAAwC,EAAY,SAAAzG,EAAU,UAAA0G,CAAS,EAAKpE,EACtDzC,EAAUkE,EAAkBsC,EAAapC,CAAc,EAC7D,OAAuB/D,MAAIoG,GAAgB,CAAE,MAAOrC,EAAgB,WAAAwC,EAAY,SAA0BvG,EAAG,IAACyG,EAAU,CAAE,QAASF,GAAc5G,EAAQ,KAAM,SAA0BK,MAAI0G,GAAiB,CAAE,QAAS,GAAM,UAAAF,EAAW,SAAA1G,CAAQ,CAAE,CAAG,CAAA,CAAG,CAAA,CAC5P,EACAwG,EAAc,YAAcH,EAC5B,IAAIQ,EAAe,iBACfC,EAAiBzB,EAAgB,WACnC,CAAC/C,EAAOgD,IAAiB,CACvB,MAAMyB,EAAgBR,GAAiBM,EAAcvE,EAAM,cAAc,EACnE,CAAE,WAAAmE,EAAaM,EAAc,WAAY,GAAGC,CAAc,EAAG1E,EAC7DzC,EAAUkE,EAAkB8C,EAAcvE,EAAM,cAAc,EACpE,OAAuBpC,MAAIyG,EAAU,CAAE,QAASF,GAAc5G,EAAQ,KAAM,SAAUA,EAAQ,MAAwBK,EAAG,IAAC+G,GAAqB,CAAE,GAAGD,EAAc,IAAK1B,CAAc,CAAA,EAAoBpF,EAAAA,IAAIgH,GAAwB,CAAE,GAAGF,EAAc,IAAK1B,CAAc,CAAA,CAAG,CAAA,CAC/Q,CACH,EACAwB,EAAe,YAAcD,EAC7B,IAAII,GAAsB5B,EAAgB,WACxC,CAAC/C,EAAOgD,IAAiB,CACvB,MAAMzF,EAAUkE,EAAkB8C,EAAcvE,EAAM,cAAc,EAC9D6E,EAAa3C,SAAa,IAAI,EAC9B4C,EAAepB,EAAgBV,EAAc6B,CAAU,EACvDE,EAAyB7C,SAAa,EAAK,EACjDkB,OAAAA,EAAAA,UAAgB,IAAM,CACpB,MAAM4B,EAAUH,EAAW,QAC3B,GAAIG,EAAS,OAAOC,GAAWD,CAAO,CACvC,EAAE,CAAE,CAAA,EACkBpH,EAAG,IAACsH,GAAc,CAAE,GAAIC,GAAM,eAAgB,GAAM,SAA0BvH,EAAG,IACtGwH,EACA,CACE,GAAGpF,EACH,IAAK8E,EACL,UAAWvH,EAAQ,KACnB,4BAA6B,GAC7B,iBAAkBuG,EAAqB9D,EAAM,iBAAmBe,GAAU,OACxEA,EAAM,eAAc,EACfgE,EAAuB,UAAS1F,EAAA9B,EAAQ,WAAW,UAAnB,MAAA8B,EAA4B,OAC3E,CAAS,EACD,qBAAsByE,EACpB9D,EAAM,qBACLe,GAAU,CACT,MAAMsE,EAAgBtE,EAAM,OAAO,cAC7BuE,EAAgBD,EAAc,SAAW,GAAKA,EAAc,UAAY,GACxEE,EAAeF,EAAc,SAAW,GAAKC,EACnDP,EAAuB,QAAUQ,CAClC,EACD,CAAE,yBAA0B,EAAO,CACpC,EACD,eAAgBzB,EACd9D,EAAM,eACLe,GAAUA,EAAM,eAAgB,EACjC,CAAE,yBAA0B,EAAO,CACpC,CACF,CACF,CAAA,CAAE,CACJ,CACH,EACI6D,GAAyB7B,EAAgB,WAC3C,CAAC/C,EAAOgD,IAAiB,CACvB,MAAMzF,EAAUkE,EAAkB8C,EAAcvE,EAAM,cAAc,EAC9DwF,EAA0BtD,SAAa,EAAK,EAC5CuD,EAA2BvD,SAAa,EAAK,EACnD,OAAuBtE,EAAG,IACxBwH,EACA,CACE,GAAGpF,EACH,IAAKgD,EACL,UAAW,GACX,4BAA6B,GAC7B,iBAAmBjC,GAAU,UAC3B1B,EAAAW,EAAM,mBAAN,MAAAX,EAAA,KAAAW,EAAyBe,GACpBA,EAAM,mBACJyE,EAAwB,UAASxE,EAAAzD,EAAQ,WAAW,UAAnB,MAAAyD,EAA4B,QAClED,EAAM,eAAc,GAEtByE,EAAwB,QAAU,GAClCC,EAAyB,QAAU,EACpC,EACD,kBAAoB1E,GAAU,UAC5B1B,EAAAW,EAAM,oBAAN,MAAAX,EAAA,KAAAW,EAA0Be,GACrBA,EAAM,mBACTyE,EAAwB,QAAU,GAC9BzE,EAAM,OAAO,cAAc,OAAS,gBACtC0E,EAAyB,QAAU,KAGvC,MAAMC,EAAS3E,EAAM,SACGC,EAAAzD,EAAQ,WAAW,UAAnB,YAAAyD,EAA4B,SAAS0E,KACxC3E,EAAM,iBACvBA,EAAM,OAAO,cAAc,OAAS,WAAa0E,EAAyB,SAC5E1E,EAAM,eAAc,CAEvB,CACF,CACP,CACG,CACH,EACIqE,EAAqBrC,EAAgB,WACvC,CAAC/C,EAAOgD,IAAiB,CACvB,KAAM,CACJ,eAAArB,EACA,UAAAgE,EACA,gBAAAC,EACA,iBAAAC,EACA,4BAAAC,EACA,gBAAAC,EACA,qBAAAC,EACA,eAAAC,EACA,kBAAAC,EACA,GAAGxB,CACJ,EAAG1E,EACEzC,EAAUkE,EAAkB8C,EAAc5C,CAAc,EACxDK,EAAcT,EAAeI,CAAc,EACjD,OAAAwE,KACuBvI,EAAG,IACxBwI,GACA,CACE,QAAS,GACT,KAAM,GACN,QAAST,EACT,iBAAkBC,EAClB,mBAAoBC,EACpB,SAA0BjI,EAAG,IAC3ByI,GACA,CACE,QAAS,GACT,4BAAAP,EACA,kBAAAI,EACA,gBAAAH,EACA,qBAAAC,EACA,eAAAC,EACA,UAAW,IAAM1I,EAAQ,aAAa,EAAK,EAC3C,SAA0BK,EAAG,IAC3B0I,GACA,CACE,aAAczC,EAAStG,EAAQ,IAAI,EACnC,KAAM,SACN,GAAIA,EAAQ,UACZ,GAAGyE,EACH,GAAG0C,EACH,IAAK1B,EACL,MAAO,CACL,GAAG0B,EAAa,MAGd,2CAA4C,uCAC5C,0CAA2C,sCAC3C,2CAA4C,uCAC5C,gCAAiC,mCACjC,iCAAkC,mCAErC,CACF,CACF,CACF,CACF,CACF,CACP,CACG,CACH,EACI6B,EAAa,eACbC,GAAezD,EAAgB,WACjC,CAAC/C,EAAOgD,IAAiB,CACvB,KAAM,CAAE,eAAArB,EAAgB,GAAG8E,CAAU,EAAKzG,EACpCzC,EAAUkE,EAAkB8E,EAAY5E,CAAc,EAC5D,OAAuB/D,EAAG,IACxBgG,EAAU,OACV,CACE,KAAM,SACN,GAAG6C,EACH,IAAKzD,EACL,QAASc,EAAqB9D,EAAM,QAAS,IAAMzC,EAAQ,aAAa,EAAK,CAAC,CAC/E,CACP,CACG,CACH,EACAiJ,GAAa,YAAcD,EAC3B,IAAIG,GAAa,eACbC,GAAe5D,EAAgB,WACjC,CAAC/C,EAAOgD,IAAiB,CACvB,KAAM,CAAE,eAAArB,EAAgB,GAAGiF,CAAU,EAAK5G,EACpCgC,EAAcT,EAAeI,CAAc,EACjD,OAAuB/D,EAAG,IAACiJ,GAAuB,CAAE,GAAG7E,EAAa,GAAG4E,EAAY,IAAK5D,CAAY,CAAE,CACvG,CACH,EACA2D,GAAa,YAAcD,GAC3B,SAAS7C,EAASvB,EAAM,CACtB,OAAOA,EAAO,OAAS,QACzB,CACA,IAAIwE,GAAQpF,EAERqF,GAAUxD,EACVyD,GAAS9C,EACT+C,GAAWzC,EC/Rf,SAAS0C,GAAa,CACrB,iBAAAC,CACD,EAEG,SACF,MAAM/I,EAAOC,IAEP,CAACiE,EAAMC,CAAO,EAAIF,WAAe,EAAK,EACtCwC,EAAa3C,SAA6B,IAAI,EAEpD,SAASkF,GAAqB,CAC7B7E,EAAQ,EAAK,CACd,CAEM,MAAA8E,GAAUhI,EAAAjB,EAAK,aAAL,YAAAiB,EAAiB,QAEjC,yBAEE,SAACM,EAAA,KAAA2H,GAAA,CAAa,KAAAhF,EAAY,aAAcC,EACvC,SAAA,CAAA3E,EAAAA,IAAC2J,GAAA,CAAgB,QAAO,GACvB,SAAA5H,EAAA,KAAC,SAAA,CACA,UAAU,gFACV,aAAW,iBAEX,SAAA,CAAC/B,EAAAA,IAAAqD,EAAA,CAAK,KAAK,OAAQ,CAAA,EAAE,OAAA,CAAA,CAAA,EAGvB,EACArD,MAAC4J,GAAA,CACA,SAAA5J,EAAA,IAAC6J,GAAA,CACA,IAAK5C,EACL,UAAU,oHACV,MAAM,QACN,WAAY,EAEZ,SAAAlF,EAAA,KAAC,MAAI,CAAA,UAAU,wBACd,SAAA,CAAC/B,EAAA,IAAA,SAAA,CAAO,UAAU,iDAAiD,SAEnE,iBAAA,EACCQ,EAAK,WACN4C,EAAA5C,EAAK,aAAL,YAAA4C,EAAiB,WAAY5C,EAAK,QAAQ,KACzCR,MAAC,OAAI,UAAU,yCACd,eAAC8J,EAAmB,CAAA,QAAStJ,EAAK,QAAQ,IAAA,CAAM,CACjD,CAAA,EACG,KACJR,EAAAA,IAAC,MAAI,CAAA,GAAG,QACP,SAAAA,EAAA,IAAC+J,EAAM,SAAN,CACA,SACE/J,EAAAA,IAAAwC,EAAA,CAAc,QAAQ,eACtB,eAAC,MAAI,CAAA,UAAU,sBACd,SAAAxC,EAAAA,IAACqD,GAAK,KAAK,UAAU,UAAU,sBAAA,CAAuB,CACvD,CAAA,EACD,EAGD,SAAArD,EAAA,IAACgK,GAAA,CACA,QAAST,EACT,aACCvJ,EAAA,IAAC,MAAI,CAAA,UAAU,8BAA8B,SAE7C,wBAAA,EAGA,SAACiK,GAAc,CACf,GAAI,CAACA,EACJ,OACEjK,EAAAA,IAAA,IAAA,CAAE,UAAU,8BAA8B,SAE3C,0BAAA,CAAA,EAGE,GAAA,OAAOiK,GAAc,SACxB,OACEjK,EAAAA,IAAA,IAAA,CAAE,UAAU,8BACX,SACFiK,CAAA,CAAA,EAGE,GAAA,CAACA,EAAU,OACP,OAAAjK,EAAA,IAAC,KAAE,SAAgB,kBAAA,CAAA,EAG3B,MAAMoC,EACLqH,GAAW,IAAI,qBACZ,CAAA,EACA,CACA,MACC,qDACD,UAAW,aAAA,EAGd,OAAA1H,EAAA,KAAC,KAAI,CAAA,GAAGK,EACN,SAAA,CAAU6H,EAAA,OAAS,GAAK,CAAC,IAAI,kBAC5BjK,MAAA,MAAA,CAAI,UAAU,kEACd,SAAAA,EAAA,IAACuC,EAAA,CACA,QAAS0H,EAAU,IACjB/H,GAAS,GAAGA,EAAK,IAAI,IAAIA,EAAK,IAAI,IACpC,EACA,QAAQ,aACR,SAAUsH,EAEV,SAAAxJ,EAAAA,IAAC,KAAE,SAAc,gBAAA,CAAA,CAAA,GAEnB,EACG,KACHiK,EAAU,IAAK/H,GAAA,oBACd,KAAmB,CAAA,aAAYA,EAAK,OACpC,SAAAlC,EAAA,IAACuC,EAAA,CACA,QAAS,GAAGL,EAAK,IAAI,IAAIA,EAAK,IAAI,KAClC,QACC,IAAI,oBACAT,EAAAjB,EAAK,UAAL,YAAAiB,EAAc,OAAQ,aACvB,aAEJ,SAAU+H,EAEV,SAAAxJ,EAAA,IAAC,OAAM,CAAA,SAAAkC,EAAK,KAAK,CAAA,CAAA,GAVVA,EAAK,IAYd,EACA,CACF,CAAA,CAAA,CAEF,CAAA,CACD,CAAA,CAAA,EAEF,CAAA,EACD,CAAA,CAAA,EAEF,CAAA,CACD,CAAA,CACD,CAAA,CAEF,CC/FA,SAASgI,EACR1J,EACA2J,EACC,OACK,MAAAC,GACL5J,GAAAA,YAAAA,EAAM6J,gBAAgBD,eAAeE,WAAWC,SAAS,EAAG,OAAQ,KAC/DC,GACLhK,GAAAA,YAAAA,EAAM6J,gBAAgBG,WAAWF,WAAWC,SAAS,EAAG,OAAQ,KAC3DE,EACL,CACCC,QAAS,KACTC,SAAU,IACX,GACCnK,GAAAA,YAAAA,EAAM2B,OAAQ,SAAS,EACnByI,IAAQpK,EAAAA,GAAAA,YAAAA,EAAOA,EAAK2B,QAAZ3B,YAAAA,EAAmBoK,QAAS,MACnC,MAAA,CACNH,MAAAA,EACAD,WAAAA,EACAI,MAAAA,EACAR,eAAAA,EACAS,eAAerK,GAAAA,YAAAA,EAAMqK,gBAAiB,mBACtCV,cAAAA,EACAhI,MAAM3B,GAAAA,YAAAA,EAAM2B,OAAQ,UAEtB,CAEO,MAAM2I,GAAiEA,CAAC,CAC9EtK,KAAAA,EACAuK,QAAAA,EACAnJ,OAAAA,CACD,IAAM,OACC,MAAAoJ,GAAWD,EAAAA,EAAQE,KAAMC,GAAMA,EAAEC,KAAO,MAAM,IAAnCJ,YAAAA,EAAsCvK,KACnD,GAAA,CAACA,GAAQ,CAACwK,QAAiB,CAAC,CAAEJ,MAAO,YAAa,CAAC,EACjD,KAAA,CAAEH,MAAAA,EAAOD,WAAAA,EAAYI,MAAAA,EAAOR,eAAAA,EAAgBS,cAAAA,CAAc,EAC/DX,EAAU1J,CAAI,EAEf,OAAO4K,GAAe,CACrBR,MAAO,GAAGH,CAAK,MAAMD,CAAU,KAAKI,CAAK,MAAMR,CAAc,KAAKS,CAAa,MAAMG,EAASb,aAAa,GAC3GkB,YAAa,GAAGzJ,EAAOO,IAAI,sBAAsBiI,CAAc,KAAKS,CAAa,GACjFS,QAASV,EACTW,cAAe,GAAGV,CAAa,SAASW,OAAOhB,CAAU,CAAC,IAAI5I,EAAOO,IAAI,GACzEsJ,WAAYT,EAASS,WACrB5I,YAAamI,EAASnI,WACvB,CAAC,CACF,EA2LA,SAAwB6I,IAAoB,OAC3C,MAAMlL,EAAOC,IAEPV,EAAsB4L,SAA4B,IAAI,EAEtDC,EAAY1B,EAAU1J,CAAI,EAEdqL,OAAAA,GAAA,CACjBC,WAAY,CAAC,GAAGtL,EAAK6J,gBAAgB0B,YAAY,aAAa,CAC/D,CAAC,QAGC,MAAI,CAAAC,UAAU,qCACdlM,SAACiC,EAAA,KAAA,OAAA,CAAKiK,UAAU,0IACflM,SAAA,CAACiC,EAAA,KAAA,MAAA,CAAIiK,UAAU,2EACdlM,SAAA,CAAAE,EAAA,IAAC,MAAGgM,UAAU,6DACblM,SAACiC,EAAA,KAAA,MAAA,CAAIiK,UAAU,gEACdlM,SAAA,CAACiC,EAAA,KAAA,MAAA,CAAIiK,UAAU,oDACdlM,SAAA,CAAAiC,EAAA,KAACE,EAAA,CACAZ,GAAI4K,GAAgBzL,EAAK6J,gBAAgBD,cAAc,EACvD4B,UAAU,kBAETlM,SAAA,CAAU8L,EAAAxB,eAAe,KAAGwB,EAAUf,aAAA,EACxC,EACC,IACA9I,EAAA,KAAAE,EAAA,CAAKZ,GAAG,IAAI2K,UAAU,kBACrBlM,SAAA,CAAU8L,EAAApB,WAAW,KAAGoB,EAAUhB,MAClC,KACAgB,EAAUnB,MAAM,IAAEmB,EAAUzJ,KAC5B,GAAA,CACF,CAAA,CAAA,CACD,CAAA,EACC3B,EAAKkK,WACNlK,EAAAA,EAAK0L,aAAL1L,YAAAA,EAAiBiJ,WAAYjJ,EAAKkK,QAAQhJ,KACzC1B,EAAAA,IAAC,OAAIgM,UAAU,kBACdlM,eAACgK,EAAmB,CAAAL,QAASjJ,EAAKkK,QAAQhJ,KAAM,CACjD,CAAA,EACG,IAAA,EACL,CACD,CAAA,EACAK,EAAA,KAAC,UAAA,CACAoJ,GAAI3K,EAAK2L,UAETH,UAAU,uLAETlM,SAAA,CAAAU,EAAK6J,gBAAgB+B,iBACrBpM,EAAAA,IAACO,IAAQR,oBAAAA,CAA0C,CAAA,EAElDC,EAAA,IAAA,MAAA,CAAIgM,UAAU,kDACdlM,SAACE,EAAA,IAAA,IAAA,CAAEF,kCAAsB,CAC1B,CAAA,EAEDiC,EAAA,KAAC,MAAI,CAAAiK,UAAU,+BACblM,SAAA,CAAAU,EAAK6L,aACLrM,EAAAA,IAACiC,EAAA,CACAZ,GAAIb,EAAK6L,aAAahL,GACtB,aAAW,gBACXiL,SAAS,SACTxM,SAAA,YAAA,CAED,QAEC,OAAK,CAAA,CAAA,EAENU,EAAK+L,aACLvM,EAAA,IAACiC,EAAA,CACAZ,GAAIb,EAAK+L,aAAalL,GACtB,aAAW,YACXiL,SAAS,SACTxM,SAAA,QAED,CAAA,QAEC,OAAK,CAAA,CAAA,CAAA,CAER,CAAA,CAAA,CAAA,EAjCKU,EAAK2L,SAkCX,EACAnM,EAAAA,IAACwM,EAAA,CACAC,aAAc,IAAIjM,EAAK2L,SAAS,EAAA,EAC3B,UAAU3L,EAAK2L,SAAS,EAC9B,EACC3L,EAAK2B,OAAS,WACdnC,EAAA,IAAC0M,GAAA,CACAvK,KAAK,OACLiI,eAAgB5J,EAAK6J,gBAAgBD,eACrCI,WAAYhK,EAAK6J,gBAAgBG,WACjCwB,UAAU,qBACX,EACG,KACJjK,EAAA,KAAC,MAAI,CAAAiK,UAAU,8DACdlM,SAAA,CAACE,EAAA,IAAA,MAAA,CACAF,SAACE,EAAA,IAAA,MAAA,CAAIgM,UAAU,SACdlM,SAACE,EAAA,IAAAsJ,GAAA,CAAaC,iBAAkB/I,EAAKyJ,UAAW,EACjD,CACD,CAAA,EACAjK,EAAA,IAAC2M,GAAA,CACAlD,QAASjJ,EAAK6J,gBAAgB3I,KAC9BqK,aAAcvL,EAAK6J,gBAAgB0B,YAAA,CACpC,EACA/L,EAAA,IAAC4M,EAAA,CACAC,KACCrM,EAAK6L,aACF,CACAhL,GAAIb,EAAK6L,aAAahL,GACtB,aAAc,eACf,EACC,KAEJyL,KACCtM,EAAK+L,aACF,CACAlL,GAAIb,EAAK+L,aAAalL,GACtB,aAAc,WACf,EACC,IAAA,CAEL,CAAA,CACD,CAAA,CAAA,CACD,CAAA,QACC0L,EAAO,CAAA,CAAA,CAAA,EACT,CACD,CAAA,CAEF,CAEO,SAASC,IAAgB,CAE9B,OAAAhN,EAAAA,IAACiN,EAAA,CACAC,eAAgB,CACf,IAAK,IAAOlN,EAAA,IAAA,IAAA,CAAEF,SAAoC,uCAAA,CACnD,CAAA,CACD,CAEF","x_google_ignoreList":[1]}
@@ -1,6 +0,0 @@
1
- import{r as u,j as e,O as He,b as re}from"./index-CGzylDPY.js";import{a as m,I as N,c as x,e as P,f as C}from"./misc-BK2EiKtY.js";import{a as Ve}from"./pe-DXT2FOp1.js";import{L as W}from"./product-BkDgAOLQ.js";import{u as Ue}from"./revalidation-ws-CLolY6Iu.js";import{d as Ye,h as Y,P as T,f as A,g as z,k as ze,D as Be,m as Ge,u as Qe,e as O,S,T as Je,a as X,b as ee,c as te}from"./tooltip-leWCE50J.js";import{R as Ke,h as Me,u as qe,F as Ze,P as Xe}from"./index-BE3KRz8n.js";import{c as $,b as et}from"./user-C0j04V55.js";import{u as oe}from"./workshop-config-oL_FWDKq.js";import{u as le}from"./online-CHlOuJG-.js";import{u as B}from"./presence-CPOTHCHm.js";import{b as tt,s as ie,c as nt,d as at,e as ce,m as g,u as st,f as rt}from"./progress-CnHFlUmF.js";import{T as de}from"./index-BZWIdOoA.js";import{u as G,L as h,N as E}from"./components-DrvY4pal.js";function ot(t){t.values.forEach(n=>n.stop())}function V(t,n){[...n].reverse().forEach(s=>{const o=t.getVariant(s);o&&ie(t,o),t.variantChildren&&t.variantChildren.forEach(r=>{V(r,n)})})}function lt(t,n){if(Array.isArray(n))return V(t,n);if(typeof n=="string")return V(t,[n]);ie(t,n)}function it(){const t=new Set,n={subscribe(a){return t.add(a),()=>void t.delete(a)},start(a,s){const o=[];return t.forEach(r=>{o.push(tt(r,a,{transitionOverride:s}))}),Promise.all(o)},set(a){return t.forEach(s=>{lt(s,a)})},stop(){t.forEach(a=>{ot(a)})},mount(){return()=>{n.stop()}}};return n}function U(){const t=nt(it);return at(t.mount,[]),t}function ct(t,n){function a(){return window.matchMedia(t).matches}function s(o){const r=window.matchMedia(t);return r.addEventListener("change",o),()=>{r.removeEventListener("change",o)}}return function(){return u.useSyncExternalStore(s,a,()=>n)}}var Q="Dialog",[fe,zt]=Ye(Q),[dt,y]=fe(Q),ue=t=>{const{__scopeDialog:n,children:a,open:s,defaultOpen:o,onOpenChange:r,modal:i=!0}=t,f=u.useRef(null),c=u.useRef(null),[l=!1,j]=Qe({prop:s,defaultProp:o,onChange:r});return e.jsx(dt,{scope:n,triggerRef:f,contentRef:c,contentId:O(),titleId:O(),descriptionId:O(),open:l,onOpenChange:j,onOpenToggle:u.useCallback(()=>j(w=>!w),[j]),modal:i,children:a})};ue.displayName=Q;var he="DialogTrigger",me=u.forwardRef((t,n)=>{const{__scopeDialog:a,...s}=t,o=y(he,a),r=Y(n,o.triggerRef);return e.jsx(T.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":M(o.open),...s,ref:r,onClick:A(t.onClick,o.onOpenToggle)})});me.displayName=he;var J="DialogPortal",[ft,pe]=fe(J,{forceMount:void 0}),xe=t=>{const{__scopeDialog:n,forceMount:a,children:s,container:o}=t,r=y(J,n);return e.jsx(ft,{scope:n,forceMount:a,children:u.Children.map(s,i=>e.jsx(z,{present:a||r.open,children:e.jsx(Xe,{asChild:!0,container:o,children:i})}))})};xe.displayName=J;var L="DialogOverlay",ge=u.forwardRef((t,n)=>{const a=pe(L,t.__scopeDialog),{forceMount:s=a.forceMount,...o}=t,r=y(L,t.__scopeDialog);return r.modal?e.jsx(z,{present:s||r.open,children:e.jsx(ut,{...o,ref:n})}):null});ge.displayName=L;var ut=u.forwardRef((t,n)=>{const{__scopeDialog:a,...s}=t,o=y(L,a);return e.jsx(Ke,{as:ze,allowPinchZoom:!0,shards:[o.contentRef],children:e.jsx(T.div,{"data-state":M(o.open),...s,ref:n,style:{pointerEvents:"auto",...s.style}})})}),_="DialogContent",be=u.forwardRef((t,n)=>{const a=pe(_,t.__scopeDialog),{forceMount:s=a.forceMount,...o}=t,r=y(_,t.__scopeDialog);return e.jsx(z,{present:s||r.open,children:r.modal?e.jsx(ht,{...o,ref:n}):e.jsx(mt,{...o,ref:n})})});be.displayName=_;var ht=u.forwardRef((t,n)=>{const a=y(_,t.__scopeDialog),s=u.useRef(null),o=Y(n,a.contentRef,s);return u.useEffect(()=>{const r=s.current;if(r)return Me(r)},[]),e.jsx(je,{...t,ref:o,trapFocus:a.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:A(t.onCloseAutoFocus,r=>{var i;r.preventDefault(),(i=a.triggerRef.current)==null||i.focus()}),onPointerDownOutside:A(t.onPointerDownOutside,r=>{const i=r.detail.originalEvent,f=i.button===0&&i.ctrlKey===!0;(i.button===2||f)&&r.preventDefault()}),onFocusOutside:A(t.onFocusOutside,r=>r.preventDefault())})}),mt=u.forwardRef((t,n)=>{const a=y(_,t.__scopeDialog),s=u.useRef(!1),o=u.useRef(!1);return e.jsx(je,{...t,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:r=>{var i,f;(i=t.onCloseAutoFocus)==null||i.call(t,r),r.defaultPrevented||(s.current||(f=a.triggerRef.current)==null||f.focus(),r.preventDefault()),s.current=!1,o.current=!1},onInteractOutside:r=>{var c,l;(c=t.onInteractOutside)==null||c.call(t,r),r.defaultPrevented||(s.current=!0,r.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const i=r.target;((l=a.triggerRef.current)==null?void 0:l.contains(i))&&r.preventDefault(),r.detail.originalEvent.type==="focusin"&&o.current&&r.preventDefault()}})}),je=u.forwardRef((t,n)=>{const{__scopeDialog:a,trapFocus:s,onOpenAutoFocus:o,onCloseAutoFocus:r,...i}=t,f=y(_,a),c=u.useRef(null),l=Y(n,c);return qe(),e.jsxs(e.Fragment,{children:[e.jsx(Ze,{asChild:!0,loop:!0,trapped:s,onMountAutoFocus:o,onUnmountAutoFocus:r,children:e.jsx(Be,{role:"dialog",id:f.contentId,"aria-describedby":f.descriptionId,"aria-labelledby":f.titleId,"data-state":M(f.open),...i,ref:l,onDismiss:()=>f.onOpenChange(!1)})}),e.jsxs(e.Fragment,{children:[e.jsx(pt,{titleId:f.titleId}),e.jsx(gt,{contentRef:c,descriptionId:f.descriptionId})]})]})}),K="DialogTitle",ve=u.forwardRef((t,n)=>{const{__scopeDialog:a,...s}=t,o=y(K,a);return e.jsx(T.h2,{id:o.titleId,...s,ref:n})});ve.displayName=K;var we="DialogDescription",Ne=u.forwardRef((t,n)=>{const{__scopeDialog:a,...s}=t,o=y(we,a);return e.jsx(T.p,{id:o.descriptionId,...s,ref:n})});Ne.displayName=we;var ye="DialogClose",De=u.forwardRef((t,n)=>{const{__scopeDialog:a,...s}=t,o=y(ye,a);return e.jsx(T.button,{type:"button",...s,ref:n,onClick:A(t.onClick,()=>o.onOpenChange(!1))})});De.displayName=ye;function M(t){return t?"open":"closed"}var Ee="DialogTitleWarning",[Bt,Ce]=Ge(Ee,{contentName:_,titleName:K,docsSlug:"dialog"}),pt=({titleId:t})=>{const n=Ce(Ee),a=`\`${n.contentName}\` requires a \`${n.titleName}\` for the component to be accessible for screen reader users.
2
-
3
- If you want to hide the \`${n.titleName}\`, you can wrap it with our VisuallyHidden component.
4
-
5
- For more information, see https://radix-ui.com/primitives/docs/components/${n.docsSlug}`;return u.useEffect(()=>{t&&(document.getElementById(t)||console.error(a))},[a,t]),null},xt="DialogDescriptionWarning",gt=({contentRef:t,descriptionId:n})=>{const s=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Ce(xt).contentName}}.`;return u.useEffect(()=>{var r;const o=(r=t.current)==null?void 0:r.getAttribute("aria-describedby");n&&o&&(document.getElementById(n)||console.warn(s))},[s,t,n]),null},bt=ue,jt=me,vt=xe,ke=ge,Pe=be,wt=ve,_e=Ne,Nt=De;const yt=bt,Dt=jt,Et=vt;function Re({className:t,ref:n,...a}){return e.jsx(ke,{ref:n,className:m("fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...a})}Re.displayName=ke.displayName;function Se({className:t,children:n,ref:a,...s}){return e.jsxs(Et,{children:[e.jsx(Re,{}),e.jsxs(Pe,{ref:a,className:m("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full",t),...s,children:[n,e.jsxs(Nt,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[e.jsx(N,{name:"Close"}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}Se.displayName=Pe.displayName;function Ie({className:t,...n}){return e.jsx("div",{className:m("flex flex-col space-y-1.5 text-center sm:text-left",t),...n})}Ie.displayName="DialogHeader";wt.displayName;function Ae({className:t,ref:n,...a}){return e.jsx(_e,{ref:n,className:m("text-sm text-muted-foreground",t),...a})}Ae.displayName=_e.displayName;const ne=["opacity-70","opacity-80","opacity-90","opacity-100"],ae=["shadow-[0_0_2px_0_rgba(0,0,0,0.3)]","shadow-[0_0_4px_0_rgba(0,0,0,0.3)]","shadow-[0_0_7px_0_rgba(0,0,0,0.3)]","shadow-[0_0_10px_0_rgba(0,0,0,0.3)]"];function se(t){const n=Math.round(t*ne.length-1),a=Math.round(t*ae.length-1);return m("shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200",ne[n]??"opacity-60",ae[a]??"shadow-none",t===1?"animate-pulse hover:animate-none focus:animate-none":null)}function Te({isMenuOpened:t}){const n=$(),{users:a}=B(),{product:{displayNameShort:s}}=oe(),o=t?17:0,r=a.length-o,i=r>(t?1:0);if(!a.length)return null;const f=t&&a.length===1?e.jsx(h,{target:"_blank",rel:"noopener noreferrer",to:"https://www.youtube.com/watch?v=w6Q3mHyzn78",children:e.jsx("img",{alt:"Tiffany Tunes",className:m("h-8 w-8 rounded-full border object-cover",se(1)),src:"/img/tiffany.png"})}):null,c=`${r}${t?" more ":" "}${s} Dev${r===1?"":"s"} working now`;return e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e.jsxs(Je,{children:[(i?a.slice(0,o):a).map(({user:l,score:j})=>{var k,b;const w=se(j),p=Ct(l.location),d=l.imageUrlSmall||l.avatarUrl,v=l.hasAccess,R=(b=(k=l.location)==null?void 0:k.origin)==null?void 0:b.includes("localhost");let D;return v?D=R?"working":"referencing":D=R?"previewing":"reviewing",e.jsxs(X,{children:[e.jsx(ee,{asChild:!0,children:d?e.jsx("img",{tabIndex:0,alt:l.name||s,className:m("h-8 w-8 rounded-full border object-cover",w),src:d}):e.jsx("div",{tabIndex:0,"aria-label":l.name||`${s} Dev`,className:m("flex h-8 w-8 items-center justify-center rounded-full border",w),children:e.jsx(N,{name:"User"})})}),e.jsx(te,{children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1",children:[e.jsxs("span",{children:[l.name||`${s} Dev`," ",p?` is ${D} ${j===1&&(n==null?void 0:n.id)!==l.id?"with you":""} on`:null]}),p!=null&&p.line1?e.jsx("span",{children:p.line1}):null,p!=null&&p.line2?e.jsx("span",{children:p.line2}):null]})})]},l.id)}),f,i?e.jsxs(X,{children:[e.jsx(ee,{asChild:!0,children:e.jsx("div",{tabIndex:0,"aria-label":c,className:m("flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground",t?"h-8 w-8":"h-6 w-6"),children:e.jsx("span",{className:m("pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center",t?"w-8":"w-6"),children:t?`+${r}`:r})})}),e.jsx(te,{children:c})]}):null]})})}const Le=ct("(min-width: 640px)",!0);function Gt(){const t=G(),n=$(),a=Le(),s=Ve(),[o,r]=u.useState(t.isMenuOpened);Ue({watchPaths:["./exercises/README.mdx"]});function i(f){r(f),document.cookie=`es_menu_open=${f.toString()}; path=/; SameSite=Lax;`}return e.jsxs("div",{className:"flex flex-col",children:[n?null:e.jsx(kt,{}),s&&a?null:e.jsx(Pt,{isMenuOpened:o,onMenuOpenChange:i}),e.jsxs("div",{className:m("flex flex-grow flex-col sm:flex-row",{"h-[calc(100vh-128px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":!n,"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":n,"h-[unset]":!a&&o}),children:[a?e.jsx(_t,{isMenuOpened:o,onMenuOpenChange:i}):null,e.jsx("div",{className:m("h-full w-full max-w-full sm:max-w-[calc(100%-56px)]",o?"hidden md:block":""),children:e.jsx(He,{})})]})]})}function Ct(t){if(!t)return null;const{exercise:n}=t,a=[n?[n.exerciseNumber,n.stepNumber].filter(Boolean).map(s=>s.toString().padStart(2,"0")).join("/"):null,n==null?void 0:n.type].filter(Boolean).join(" - ");return{line1:t.workshopTitle,line2:a}}function kt(){const t=Le(),{product:{host:n,displayName:a}}=oe(),s=et(),o=e.jsx("div",{children:ENV.EPICSHOP_DEPLOYED?e.jsxs("div",{children:["This is the deployed version. ",e.jsxs(e.Fragment,{children:[e.jsx(h,{className:"underline",target:"_blank",rel:"noopener noreferrer",to:ENV.EPICSHOP_GITHUB_REPO,children:"Run locally"})," for full experience."]})," "]}):s?e.jsxs("div",{children:[e.jsx(h,{to:"/login",className:"underline",children:"Login"})," ","or"," ",e.jsx("a",{href:`https://${n}/login`,className:"underline",children:"join for free"})," ","for the full experience."]}):null});return e.jsx("div",{className:"z-10 flex h-16 items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white",children:t?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden flex-1 flex-wrap items-center gap-4 sm:flex",children:[e.jsx(W,{size:"lg",style:"monochrome"}),e.jsxs("div",{className:"flex flex-1 flex-wrap items-center",children:[e.jsxs("p",{className:"mr-2",children:["Welcome to the"," ",e.jsx(h,{to:`https://${n}`,className:"underline",target:"_blank",children:a})," ","Workshop app!"]}),o]})]}),s?null:e.jsxs("div",{className:"hidden h-full flex-col items-center sm:flex md:flex-row",children:[e.jsxs(h,{to:`https://${n}`,target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsxs("span",{className:"drop-shadow-sm",children:["Join ",a]}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(h,{to:ENV.EPICSHOP_DEPLOYED?`https://${n}/login`:"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(N,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-center gap-4 sm:hidden",children:[e.jsx("a",{href:`https://${n}`,children:e.jsx(W,{size:"lg",style:"monochrome"})}),e.jsxs(yt,{children:[e.jsx(Dt,{children:e.jsx(N,{name:"Question",size:"lg",className:"animate-pulse"})}),e.jsxs(Se,{children:[e.jsxs(Ie,{children:[e.jsx(W,{size:"lg",style:"monochrome"}),e.jsx("span",{className:"text-lg font-semibold",children:a})]}),e.jsxs(Ae,{children:["Welcome to the"," ",e.jsx(h,{to:`https://${n}`,className:"underline",children:a})," ","Workshop app!"]}),o]})]})]}),s?null:e.jsxs("div",{className:"flex h-full items-center",children:[e.jsxs(h,{to:`https://${n}`,target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsx("span",{className:"drop-shadow-sm",children:"Join"}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(h,{to:ENV.EPICSHOP_DEPLOYED?`https://${n}/login`:"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(N,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]})})}const $e={hidden:{opacity:0,x:-20},visible:{opacity:1,x:0}};function Fe({exerciseNumber:t,children:n}){const a=st(t);return e.jsx(g.li,{variants:$e,className:m("py-[6px] first:pt-3 last:pb-3",a?`${a} before:border-t`:null),children:e.jsx("span",{className:"inline-block pl-2",children:n})})}function I({children:t,...n}){const a=rt(n);return e.jsx(g.li,{variants:$e,className:m("py-[6px] first:pt-3 last:pb-3",a?`${a} before:border-t`:null),children:e.jsx("span",{className:"inline-block pl-2",children:t})})}function Pt({isMenuOpened:t,onMenuOpenChange:n}){const a=G(),s=$(),o=ce(),r=re(),i=le(),{users:f}=B(),c={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}};return e.jsx("nav",{className:"flex w-full border-b sm:hidden",children:e.jsx("div",{className:"w-full",children:e.jsxs("div",{className:m("flex items-center",{"flex-col":t,"h-14":!t}),children:[e.jsx(We,{title:a.workshopTitle,isMenuOpened:t,setMenuOpened:n}),t&&e.jsxs(g.div,{className:"flex w-full flex-grow flex-col justify-between overflow-x-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsxs(g.ul,{variants:c,initial:"hidden",animate:"visible",className:"flex flex-col",children:[e.jsx("span",{children:e.jsx(E,{prefetch:"intent",to:"/",className:({isActive:l})=>x("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":l}),children:"Home"})}),a.exercises.map(({exerciseNumber:l,title:j,steps:w})=>{const p=Number(r.exerciseNumber)===l,d=!p&&a.playground.exerciseNumber===l;return e.jsxs(Fe,{exerciseNumber:l,children:[e.jsxs("span",{className:"flex items-center gap-1 text-2xl font-bold",children:[e.jsx(h,{prefetch:"intent",to:P(l),className:x("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":p}),children:j}),d?e.jsx(h,{to:C(a.playground.exerciseNumber,a.playground.stepNumber,a.playground.type),prefetch:"intent",children:"🛝"}):null]}),p?e.jsxs(g.ul,{variants:c,initial:"hidden",animate:"visible",className:"ml-4 mt-2 flex flex-col",children:[e.jsx(I,{type:"instructions",exerciseNumber:l,children:e.jsx(h,{to:P(l),prefetch:"intent",className:x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!r.stepNumber}),children:"Intro"})},l),w.filter(Boolean).map(({stepNumber:v,title:R,problem:D,solution:k})=>e.jsx(I,{type:"step",stepNumber:v,exerciseNumber:l,children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(h,{to:C(l,v),prefetch:"intent",className:"font-semibold leading-tight",children:[v.toString().padStart(2,"0"),"."," ",R]}),e.jsxs("div",{className:"ml-3 mt-0.5 flex gap-1",children:[D&&e.jsxs(E,{to:C(l,v,"problem"),prefetch:"intent",className:({isActive:b})=>x("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":b}),children:["Problem",D.name===a.playground.appName?" 🛝":""]}),k&&e.jsxs(E,{to:C(l,v,"solution"),prefetch:"intent",className:({isActive:b})=>x("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":b}),children:["Solution",k.name===a.playground.appName?" 🛝":""]})]})]})},v)),e.jsx(I,{type:"finished",exerciseNumber:l,children:e.jsx(E,{to:P(l,"finished"),prefetch:"intent",className:({isActive:v})=>x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":v}),children:"📝 Elaboration"})})]}):null]},l)})]}),e.jsx("div",{className:"mt-6",children:e.jsx(E,{to:"/finished",className:({isActive:l})=>x("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':l}),children:"📝 Workshop Feedback"})})]}),e.jsx("div",{className:"flex-grow"}),i?null:e.jsx(S,{content:t?null:"You are offline",children:e.jsx("div",{className:m("flex h-14 animate-pulse items-center justify-start p-4",t?"w-full border-t":"border-l"),children:e.jsx(N,{name:"WifiNoConnection",className:"text-foreground-destructive",children:t?"You are offline":null})})}),e.jsx("div",{className:m("flex items-center justify-start p-4",t&&f.length>4?"min-h-14":"h-14",t?"w-full border-t":"border-l"),children:e.jsx(Te,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:s?e.jsx(S,{content:t?null:"Your account",children:e.jsxs(h,{className:m("flex h-14 flex-shrink-0 items-center justify-start space-x-3 px-4 py-4 text-center no-underline hover:underline",{"border-l":!t,"w-full border-t":t}),to:"/account",children:[s.imageUrlSmall?e.jsx("img",{alt:s.name??s.email,src:s.imageUrlSmall,className:"h-full rounded-full"}):e.jsx(N,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(g.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:s&&o?e.jsx(S,{content:t?null:"Continue to next lesson",children:e.jsxs(h,{to:o,prefetch:"intent",className:x("flex h-14 w-full items-center space-x-3 border-l px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(N,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(g.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:m("flex h-14 w-14 items-center justify-center self-start p-4 sm:mb-4 sm:w-full",{"w-full border-t":t,"border-l":!t}),children:e.jsx(de,{})})]})})})}const H=400;function _t({isMenuOpened:t,onMenuOpenChange:n}){const a=G(),s=$(),o=ce(),r=re(),i=le(),{users:f}=B(),c=a.exercises.find(d=>d.exerciseNumber===Number(r.exerciseNumber)),l=r.type==="solution"?c==null?void 0:c.solutions.find(d=>d.stepNumber===Number(r.stepNumber)):r.type==="problem"?c==null?void 0:c.problems.find(d=>d.stepNumber===Number(r.stepNumber)):null,j=U(),w={close:{width:56},open:{width:H}},p={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}};return e.jsx("nav",{className:"hidden border-r sm:flex",children:e.jsx(g.div,{initial:t?"open":"close",variants:w,animate:j,children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(We,{title:a.workshopTitle,menuControls:j,isMenuOpened:t,setMenuOpened:n}),t&&e.jsxs(g.div,{style:{width:H},className:"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsxs(g.ul,{variants:p,initial:"hidden",animate:"visible",className:"flex flex-col",children:[e.jsx("span",{children:e.jsx(E,{prefetch:"intent",to:"/",className:({isActive:d})=>x("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":d}),children:"Home"})}),a.exercises.map(({exerciseNumber:d,title:v,steps:R})=>{const D=Number(r.exerciseNumber)===d,k=!D&&a.playground.exerciseNumber===d;return e.jsxs(Fe,{exerciseNumber:d,children:[e.jsxs("span",{className:"flex items-center gap-1 text-2xl font-bold",children:[e.jsx(h,{prefetch:"intent",to:P(d),className:x("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":D}),children:v}),k?e.jsx(h,{to:C(a.playground.exerciseNumber,a.playground.stepNumber,a.playground.type),prefetch:"intent",children:"🛝"}):null]}),D?e.jsxs(g.ul,{variants:p,initial:"hidden",animate:"visible",className:"ml-4 mt-2 flex flex-col",children:[e.jsx(I,{type:"instructions",exerciseNumber:d,children:e.jsx(h,{to:P(d),prefetch:"intent",className:x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!r.stepNumber}),children:"Intro"})},d),R.filter(Boolean).map(({stepNumber:b,title:Oe,problem:q,solution:Z})=>e.jsx(I,{type:"step",stepNumber:b,exerciseNumber:d,children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(h,{to:C(d,b),prefetch:"intent",className:"font-semibold leading-tight",children:[b.toString().padStart(2,"0"),"."," ",Oe]}),e.jsxs("div",{className:"ml-3 mt-0.5 flex gap-1",children:[q&&e.jsxs(E,{to:C(d,b,"problem"),prefetch:"intent",className:({isActive:F})=>x("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":F}),children:["Problem",q.name===a.playground.appName?" 🛝":""]}),Z&&e.jsxs(E,{to:C(d,b,"solution"),prefetch:"intent",className:({isActive:F})=>x("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":F}),children:["Solution",Z.name===a.playground.appName?" 🛝":""]})]})]})},b)),e.jsx(I,{type:"finished",exerciseNumber:d,children:e.jsx(E,{to:P(d,"finished"),prefetch:"intent",className:({isActive:b})=>x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":b}),children:"📝 Elaboration"})})]}):null]},d)})]}),e.jsx("div",{className:"mt-6",children:e.jsx(E,{to:"/finished",className:({isActive:d})=>x("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':d}),children:"📝 Workshop Feedback"})})]}),!t&&e.jsx("div",{className:"flex flex-grow flex-col justify-center",children:e.jsxs("div",{className:"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none",children:[c!=null&&c.title?e.jsx(h,{to:P(Number(r.exerciseNumber)),children:c.title}):null,c!=null&&c.title&&(l!=null&&l.title)?" — ":null,l!=null&&l.title?e.jsx(h,{to:C(Number(r.exerciseNumber),l.stepNumber),children:l.title}):null]})}),i?null:e.jsx(S,{content:t?null:"You are offline",children:e.jsx("div",{className:m("flex w-full animate-pulse items-center border-t p-4",t?"justify-start":"justify-center"),children:e.jsx(N,{name:"WifiNoConnection",className:"text-foreground-destructive",children:t?e.jsx("span",{className:"whitespace-nowrap",children:"You are offline"}):null})})}),e.jsx("div",{className:m("flex w-full items-center justify-start border-t p-4 transition-[height]",t&&f.length>4?"h-28":"h-14"),style:t?{width:H}:{},children:e.jsx(Te,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:s?e.jsx(S,{content:t?null:"Your account",children:e.jsxs(h,{className:"flex h-14 w-full flex-shrink-0 items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",to:"/account",children:[s.imageUrlSmall?e.jsx("img",{alt:s.name??s.email,src:s.imageUrlSmall,className:"h-full rounded-full"}):e.jsx(N,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(g.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:s&&o?e.jsx(S,{content:t?null:"Continue to next lesson",children:e.jsxs(h,{to:o,prefetch:"intent",className:x("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(N,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(g.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:"mb-4 w-full self-start border-t pl-3 pt-[15px]",children:e.jsx(de,{})})]})})})}function We({title:t,isMenuOpened:n,setMenuOpened:a,menuControls:s}){const o=u.useRef(n),r=u.useRef(null),i={open:{d:"M3.06061 2.99999L21.0606 21"},closed:{d:"M0 9.5L24 9.5"}},f={open:{d:"M3.00006 21.0607L21 3.06064"},moving:{d:"M0 14.5L24 14.5"},closed:{d:"M0 14.5L15 14.5"}},c=U(),l=U();async function j(){s==null||s.start(n?"close":"open"),a(!n),n?(c.start(i.closed),await l.start(f.moving),l.start(f.closed)):(await l.start(f.moving),c.start(i.open),l.start(f.open))}return u.useEffect(()=>{if(!n)return;function w(p){var d;p.key==="Escape"&&((d=r.current)==null||d.click())}return document.addEventListener("keyup",w),()=>document.removeEventListener("keyup",w)},[n]),e.jsxs("div",{className:m("relative inline-flex h-14 flex-shrink-0 items-center justify-between overflow-hidden border-r sm:w-full sm:border-b sm:border-r-0",{"w-full":n}),children:[e.jsx("button",{ref:r,className:"flex h-14 w-14 items-center justify-center","aria-label":"Open Navigation menu",onClick:j,children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[e.jsx(g.path,{...i[o.current?"open":"closed"],animate:c,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5}),e.jsx(g.path,{...f[o.current?"open":"closed"],animate:l,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5})]})}),n&&e.jsx(g.p,{transition:{delay:.2},initial:{opacity:0,y:5},animate:{opacity:1,y:0},className:"absolute right-5 whitespace-nowrap font-mono text-sm uppercase",children:e.jsx(h,{to:"/",children:t})})]})}export{Gt as default};
6
- //# sourceMappingURL=_layout-DuDUPWax.js.map