@epic-web/workshop-app 4.6.6 → 4.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/assets/{_-COWH0sBh.js → _-Bd2gNcck.js} +2 -2
- package/build/client/assets/{_-COWH0sBh.js.map → _-Bd2gNcck.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber-wyz3vbhs.js → _exerciseNumber-CFOo2dQj.js} +2 -2
- package/build/client/assets/{_exerciseNumber-wyz3vbhs.js.map → _exerciseNumber-CFOo2dQj.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_._stepNumber-C37pli7_.js → _exerciseNumber_._stepNumber-DCbWNWpZ.js} +2 -2
- package/build/client/assets/{_exerciseNumber_._stepNumber-C37pli7_.js.map → _exerciseNumber_._stepNumber-DCbWNWpZ.js.map} +1 -1
- package/build/client/assets/_exerciseNumber_.finished-P7xMAtl1.js +2 -0
- package/build/client/assets/_exerciseNumber_.finished-P7xMAtl1.js.map +1 -0
- package/build/client/assets/_layout-Bdd3mpVx.js +2 -0
- package/build/client/assets/_layout-Bdd3mpVx.js.map +1 -0
- package/build/client/assets/_layout-DHBLG7Ti.js +6 -0
- package/build/client/assets/_layout-DHBLG7Ti.js.map +1 -0
- package/build/client/assets/_layout-DaZNLfOL.js +2 -0
- package/build/client/assets/{_layout-BR-Qyofe.js.map → _layout-DaZNLfOL.js.map} +1 -1
- package/build/client/assets/{_layout-D0zbQZjf.js → _layout-rEQoj43V.js} +2 -2
- package/build/client/assets/{_layout-D0zbQZjf.js.map → _layout-rEQoj43V.js.map} +1 -1
- package/build/client/assets/{account-DesvwOeg.js → account-CnLkZd_O.js} +2 -2
- package/build/client/assets/{account-DesvwOeg.js.map → account-CnLkZd_O.js.map} +1 -1
- package/build/client/assets/{button-BfWwrI9B.js → button-CyZl24U2.js} +2 -2
- package/build/client/assets/{button-BfWwrI9B.js.map → button-CyZl24U2.js.map} +1 -1
- package/build/client/assets/{client-hints-BKxdo5Js.js → client-hints-BE5mB4r0.js} +2 -2
- package/build/client/assets/{client-hints-BKxdo5Js.js.map → client-hints-BE5mB4r0.js.map} +1 -1
- package/build/client/assets/components-BMzmvxYw.js +166 -0
- package/build/client/assets/components-BMzmvxYw.js.map +1 -0
- package/build/client/assets/diff-P5f7-8E4.js +2 -0
- package/build/client/assets/diff-P5f7-8E4.js.map +1 -0
- package/build/client/assets/diff-PfwTHr6-.js +2 -0
- package/build/client/assets/{diff-KDzcgGYL.js.map → diff-PfwTHr6-.js.map} +1 -1
- package/build/client/assets/{discord-0kv66Q6F.js → discord-COPE8EOZ.js} +2 -2
- package/build/client/assets/{discord-0kv66Q6F.js.map → discord-COPE8EOZ.js.map} +1 -1
- package/build/client/assets/discord-DIog7bBO.js +2 -0
- package/build/client/assets/discord-DIog7bBO.js.map +1 -0
- package/build/client/assets/entry.client-B0vV2fsa.js +43 -0
- package/build/client/assets/entry.client-B0vV2fsa.js.map +1 -0
- package/build/client/assets/{epic-video-BwtXsHGU.js → epic-video-CYnG2ziQ.js} +128 -128
- package/build/client/assets/epic-video-CYnG2ziQ.js.map +1 -0
- package/build/client/assets/{error-boundary-Bcric_4t.js → error-boundary-DxfVshQ5.js} +2 -2
- package/build/client/assets/{error-boundary-Bcric_4t.js.map → error-boundary-DxfVshQ5.js.map} +1 -1
- package/build/client/assets/finished-DP5ynR5u.js +2 -0
- package/build/client/assets/finished-DP5ynR5u.js.map +1 -0
- package/build/client/assets/index-4E9_Sx3m.js +42 -0
- package/build/client/assets/index-4E9_Sx3m.js.map +1 -0
- package/build/client/assets/{index-Bg9MMnnf.js → index-90bzTYUX.js} +2 -2
- package/build/client/assets/index-90bzTYUX.js.map +1 -0
- package/build/client/assets/{index-BQRtqn3g.js → index-BXefr1BB.js} +2 -2
- package/build/client/assets/{index-BQRtqn3g.js.map → index-BXefr1BB.js.map} +1 -1
- package/build/client/assets/index-Czg1ruVn.js +37 -0
- package/build/client/assets/index-Czg1ruVn.js.map +1 -0
- package/build/client/assets/{index-9nNr0Zqr.js → index-D6ukHE4T.js} +2 -2
- package/build/client/assets/{index-9nNr0Zqr.js.map → index-D6ukHE4T.js.map} +1 -1
- package/build/client/assets/index-Doi37489.js +3 -0
- package/build/client/assets/index-Doi37489.js.map +1 -0
- package/build/client/assets/{loading-C9f_vBoM.js → loading-CNWJVymJ.js} +2 -2
- package/build/client/assets/{loading-C9f_vBoM.js.map → loading-CNWJVymJ.js.map} +1 -1
- package/build/client/assets/{login-D8zyjBAb.js → login-DxG854vQ.js} +2 -2
- package/build/client/assets/{login-D8zyjBAb.js.map → login-DxG854vQ.js.map} +1 -1
- package/build/client/assets/manifest-805aa13a.js +1 -0
- package/build/client/assets/mdx-CR7Me1v_.js +2 -0
- package/build/client/assets/{mdx-BYvGbvEr.js.map → mdx-CR7Me1v_.js.map} +1 -1
- package/build/client/assets/misc-CypjEQkt.js +2 -0
- package/build/client/assets/misc-CypjEQkt.js.map +1 -0
- package/build/client/assets/{nav-chevrons-DOYtx9XE.js → nav-chevrons-BYKwyIgG.js} +2 -2
- package/build/client/assets/{nav-chevrons-DOYtx9XE.js.map → nav-chevrons-BYKwyIgG.js.map} +1 -1
- package/build/client/assets/{onboarding-euWyXpCL.js → onboarding-b9lcdh4n.js} +2 -2
- package/build/client/assets/{onboarding-euWyXpCL.js.map → onboarding-b9lcdh4n.js.map} +1 -1
- package/build/client/assets/{presence-BJPzwbUy.js → presence-DXXVJbaH.js} +2 -2
- package/build/client/assets/{presence-BJPzwbUy.js.map → presence-DXXVJbaH.js.map} +1 -1
- package/build/client/assets/progress-B_mReZVE.js +2 -0
- package/build/client/assets/progress-B_mReZVE.js.map +1 -0
- package/build/client/assets/{progress-bar-7LK87ZMh.js → progress-bar-DCrt7X4t.js} +2 -2
- package/build/client/assets/{progress-bar-7LK87ZMh.js.map → progress-bar-DCrt7X4t.js.map} +1 -1
- package/build/client/assets/{request-info-Dyls4H67.js → request-info-CUT0ULYN.js} +2 -2
- package/build/client/assets/{request-info-Dyls4H67.js.map → request-info-CUT0ULYN.js.map} +1 -1
- package/build/client/assets/{root-BQ7V6fP4.js → root-bgHbi7rA.js} +4 -4
- package/build/client/assets/root-bgHbi7rA.js.map +1 -0
- package/build/client/assets/{support-DUAHYT3r.js → support-DrY-qRGh.js} +2 -2
- package/build/client/assets/{support-DUAHYT3r.js.map → support-DrY-qRGh.js.map} +1 -1
- package/build/client/assets/tailwind-D2vjZZFL.css +1 -0
- package/build/client/assets/tooltip-CfmIzAYi.js +2 -0
- package/build/client/assets/tooltip-CfmIzAYi.js.map +1 -0
- package/build/client/assets/{use-event-source-aW6X9lN1.js → use-event-source-ySol3hbz.js} +2 -2
- package/build/client/assets/{use-event-source-aW6X9lN1.js.map → use-event-source-ySol3hbz.js.map} +1 -1
- package/build/client/assets/{user-73ocDYRe.js → user-C4QTtQw5.js} +2 -2
- package/build/client/assets/{user-73ocDYRe.js.map → user-C4QTtQw5.js.map} +1 -1
- package/build/server/index.js +840 -607
- package/build/server/index.js.map +1 -1
- package/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js +65 -3
- package/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js +65 -3
- package/node_modules/@babel/runtime/package.json +1 -28
- package/node_modules/@conform-to/dom/dom.d.ts +17 -5
- package/node_modules/@conform-to/dom/form.d.ts +221 -122
- package/node_modules/@conform-to/dom/index.d.ts +24 -2
- package/node_modules/@conform-to/dom/intent.d.ts +92 -60
- package/node_modules/@conform-to/dom/package.json +1 -1
- package/node_modules/@conform-to/dom/parse.d.ts +47 -27
- package/node_modules/@conform-to/dom/types.d.ts +17 -14
- package/node_modules/@conform-to/dom/util.d.ts +4 -1
- package/node_modules/@conform-to/react/context.d.ts +187 -59
- package/node_modules/@conform-to/react/context.js +3 -5
- package/node_modules/@conform-to/react/context.mjs +4 -6
- package/node_modules/@conform-to/react/experimental.d.ts +0 -0
- package/node_modules/@conform-to/react/hooks.d.ts +53 -24
- package/node_modules/@conform-to/react/index.d.ts +28 -4
- package/node_modules/@conform-to/react/integrations.js +14 -1
- package/node_modules/@conform-to/react/integrations.mjs +14 -1
- package/node_modules/@conform-to/react/package.json +2 -2
- package/node_modules/@conform-to/zod/coercion.d.ts +14 -4
- package/node_modules/@conform-to/zod/constraint.d.ts +3 -1
- package/node_modules/@conform-to/zod/package.json +2 -2
- package/node_modules/@conform-to/zod/parse.d.ts +43 -25
- package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs +1 -1
- package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.mjs +14 -3
- package/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts +51 -51
- package/node_modules/@floating-ui/core/dist/floating-ui.core.d.ts +51 -51
- package/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js +14 -3
- package/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +14 -3
- package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.js +14 -3
- package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.min.js +1 -1
- package/node_modules/@floating-ui/core/package.json +2 -2
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs +1 -1
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs +12 -11
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts +11 -8
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.ts +11 -8
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +1 -12
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +1 -12
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.js +12 -11
- package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.min.js +1 -1
- package/node_modules/@floating-ui/dom/package.json +2 -2
- package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts +12 -4
- package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.ts +12 -4
- package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js +1 -0
- package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs +1 -0
- package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.umd.js +1 -0
- package/node_modules/@floating-ui/react-dom/package.json +1 -1
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts +11 -6
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.ts +11 -6
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts +2 -0
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.ts +2 -0
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.esm.js +13 -1
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +13 -1
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.js +13 -0
- package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.min.js +1 -1
- package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.d.ts +2 -0
- package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.esm.js +13 -1
- package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.umd.js +13 -0
- package/node_modules/@floating-ui/utils/package.json +1 -1
- package/node_modules/@radix-ui/number/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/number/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/number/dist/index.js +28 -10
- package/node_modules/@radix-ui/number/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/number/dist/index.mjs +6 -7
- package/node_modules/@radix-ui/number/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/number/package.json +1 -4
- package/node_modules/@radix-ui/primitive/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/primitive/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/primitive/dist/index.js +33 -13
- package/node_modules/@radix-ui/primitive/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/primitive/dist/index.mjs +11 -10
- package/node_modules/@radix-ui/primitive/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/primitive/package.json +1 -4
- package/node_modules/@radix-ui/react-accordion/dist/index.d.mts +40 -28
- package/node_modules/@radix-ui/react-accordion/dist/index.d.ts +40 -28
- package/node_modules/@radix-ui/react-accordion/dist/index.js +324 -316
- package/node_modules/@radix-ui/react-accordion/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-accordion/dist/index.mjs +293 -300
- package/node_modules/@radix-ui/react-accordion/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-accordion/package.json +12 -13
- package/node_modules/@radix-ui/react-arrow/dist/index.d.mts +8 -8
- package/node_modules/@radix-ui/react-arrow/dist/index.d.ts +8 -8
- package/node_modules/@radix-ui/react-arrow/dist/index.js +57 -37
- package/node_modules/@radix-ui/react-arrow/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-arrow/dist/index.mjs +25 -30
- package/node_modules/@radix-ui/react-arrow/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-arrow/package.json +4 -5
- package/node_modules/@radix-ui/react-collapsible/dist/index.d.mts +27 -16
- package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts +27 -16
- package/node_modules/@radix-ui/react-collapsible/dist/index.js +176 -167
- package/node_modules/@radix-ui/react-collapsible/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-collapsible/dist/index.mjs +143 -153
- package/node_modules/@radix-ui/react-collapsible/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-collapsible/package.json +11 -12
- package/node_modules/@radix-ui/react-collection/dist/index.d.mts +27 -15
- package/node_modules/@radix-ui/react-collection/dist/index.d.ts +27 -15
- package/node_modules/@radix-ui/react-collection/dist/index.js +99 -112
- package/node_modules/@radix-ui/react-collection/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-collection/dist/index.mjs +68 -106
- package/node_modules/@radix-ui/react-collection/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-collection/package.json +7 -8
- package/node_modules/@radix-ui/react-compose-refs/dist/index.d.mts +5 -4
- package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts +5 -4
- package/node_modules/@radix-ui/react-compose-refs/dist/index.js +47 -30
- package/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs +16 -27
- package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-compose-refs/package.json +2 -5
- package/node_modules/@radix-ui/react-context/dist/index.d.mts +10 -8
- package/node_modules/@radix-ui/react-context/dist/index.d.ts +10 -8
- package/node_modules/@radix-ui/react-context/dist/index.js +104 -123
- package/node_modules/@radix-ui/react-context/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-context/dist/index.mjs +73 -120
- package/node_modules/@radix-ui/react-context/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-context/package.json +2 -5
- package/node_modules/@radix-ui/react-direction/dist/index.d.mts +6 -5
- package/node_modules/@radix-ui/react-direction/dist/index.d.ts +6 -5
- package/node_modules/@radix-ui/react-direction/dist/index.js +47 -24
- package/node_modules/@radix-ui/react-direction/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-direction/dist/index.mjs +16 -20
- package/node_modules/@radix-ui/react-direction/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-direction/package.json +2 -5
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts +10 -10
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts +10 -10
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +230 -270
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs +199 -261
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-dismissable-layer/package.json +9 -10
- package/node_modules/@radix-ui/react-focus-guards/dist/index.d.mts +4 -4
- package/node_modules/@radix-ui/react-focus-guards/dist/index.d.ts +4 -4
- package/node_modules/@radix-ui/react-focus-guards/dist/index.js +63 -39
- package/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-focus-guards/dist/index.mjs +32 -34
- package/node_modules/@radix-ui/react-focus-guards/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-focus-guards/package.json +2 -5
- package/node_modules/@radix-ui/react-focus-scope/dist/index.d.mts +8 -8
- package/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts +8 -8
- package/node_modules/@radix-ui/react-focus-scope/dist/index.js +228 -282
- package/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-focus-scope/dist/index.mjs +197 -275
- package/node_modules/@radix-ui/react-focus-scope/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-focus-scope/package.json +6 -7
- package/node_modules/@radix-ui/react-id/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/react-id/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/react-id/dist/index.js +47 -26
- package/node_modules/@radix-ui/react-id/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-id/dist/index.mjs +14 -22
- package/node_modules/@radix-ui/react-id/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-id/package.json +3 -4
- package/node_modules/@radix-ui/react-popover/dist/index.d.mts +48 -37
- package/node_modules/@radix-ui/react-popover/dist/index.d.ts +48 -37
- package/node_modules/@radix-ui/react-popover/dist/index.js +319 -311
- package/node_modules/@radix-ui/react-popover/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-popover/dist/index.mjs +288 -291
- package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-popover/package.json +17 -18
- package/node_modules/@radix-ui/react-popper/dist/index.d.mts +36 -25
- package/node_modules/@radix-ui/react-popper/dist/index.d.ts +36 -25
- package/node_modules/@radix-ui/react-popper/dist/index.js +305 -321
- package/node_modules/@radix-ui/react-popper/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-popper/dist/index.mjs +284 -305
- package/node_modules/@radix-ui/react-popper/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-popper/package.json +12 -13
- package/node_modules/@radix-ui/react-portal/dist/index.d.mts +9 -9
- package/node_modules/@radix-ui/react-portal/dist/index.d.ts +9 -9
- package/node_modules/@radix-ui/react-portal/dist/index.js +52 -34
- package/node_modules/@radix-ui/react-portal/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-portal/dist/index.mjs +21 -27
- package/node_modules/@radix-ui/react-portal/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-portal/package.json +5 -5
- package/node_modules/@radix-ui/react-presence/dist/index.d.mts +5 -4
- package/node_modules/@radix-ui/react-presence/dist/index.d.ts +5 -4
- package/node_modules/@radix-ui/react-presence/dist/index.js +147 -132
- package/node_modules/@radix-ui/react-presence/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-presence/dist/index.mjs +116 -129
- package/node_modules/@radix-ui/react-presence/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-presence/package.json +5 -6
- package/node_modules/@radix-ui/react-primitive/dist/index.d.mts +8 -9
- package/node_modules/@radix-ui/react-primitive/dist/index.d.ts +8 -9
- package/node_modules/@radix-ui/react-primitive/dist/index.js +73 -100
- package/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-primitive/dist/index.mjs +42 -93
- package/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-primitive/package.json +4 -5
- package/node_modules/@radix-ui/react-roving-focus/dist/index.d.mts +25 -13
- package/node_modules/@radix-ui/react-roving-focus/dist/index.d.ts +25 -13
- package/node_modules/@radix-ui/react-roving-focus/dist/index.js +239 -247
- package/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-roving-focus/dist/index.mjs +209 -238
- package/node_modules/@radix-ui/react-roving-focus/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-roving-focus/package.json +12 -13
- package/node_modules/@radix-ui/react-select/dist/index.d.mts +77 -65
- package/node_modules/@radix-ui/react-select/dist/index.d.ts +77 -65
- package/node_modules/@radix-ui/react-select/dist/index.js +1107 -1235
- package/node_modules/@radix-ui/react-select/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-select/dist/index.mjs +1076 -1197
- package/node_modules/@radix-ui/react-select/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-select/package.json +23 -24
- package/node_modules/@radix-ui/react-slot/dist/index.d.mts +9 -7
- package/node_modules/@radix-ui/react-slot/dist/index.d.ts +9 -7
- package/node_modules/@radix-ui/react-slot/dist/index.js +107 -87
- package/node_modules/@radix-ui/react-slot/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-slot/dist/index.mjs +76 -80
- package/node_modules/@radix-ui/react-slot/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-slot/package.json +3 -4
- package/node_modules/@radix-ui/react-tabs/dist/index.d.mts +32 -21
- package/node_modules/@radix-ui/react-tabs/dist/index.d.ts +32 -21
- package/node_modules/@radix-ui/react-tabs/dist/index.js +217 -184
- package/node_modules/@radix-ui/react-tabs/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-tabs/dist/index.mjs +185 -169
- package/node_modules/@radix-ui/react-tabs/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-tabs/package.json +11 -12
- package/node_modules/@radix-ui/react-toast/dist/index.d.mts +43 -32
- package/node_modules/@radix-ui/react-toast/dist/index.d.ts +43 -32
- package/node_modules/@radix-ui/react-toast/dist/index.js +645 -715
- package/node_modules/@radix-ui/react-toast/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-toast/dist/index.mjs +614 -695
- package/node_modules/@radix-ui/react-toast/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-toast/package.json +15 -16
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +42 -23
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs +11 -21
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-callback-ref/package.json +2 -5
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.mts +4 -3
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts +4 -3
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +75 -52
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs +44 -50
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-controllable-state/package.json +3 -4
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +50 -29
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs +17 -25
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-escape-keydown/package.json +3 -4
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.mts +4 -3
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts +4 -3
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +38 -17
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs +7 -15
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-layout-effect/package.json +2 -5
- package/node_modules/@radix-ui/react-use-previous/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/react-use-previous/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/react-use-previous/dist/index.js +45 -26
- package/node_modules/@radix-ui/react-use-previous/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-previous/dist/index.mjs +14 -24
- package/node_modules/@radix-ui/react-use-previous/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-previous/package.json +2 -5
- package/node_modules/@radix-ui/react-use-rect/dist/index.d.mts +4 -3
- package/node_modules/@radix-ui/react-use-rect/dist/index.d.ts +4 -3
- package/node_modules/@radix-ui/react-use-rect/dist/index.js +52 -32
- package/node_modules/@radix-ui/react-use-rect/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-rect/dist/index.mjs +19 -28
- package/node_modules/@radix-ui/react-use-rect/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-rect/package.json +3 -4
- package/node_modules/@radix-ui/react-use-size/dist/index.d.mts +2 -2
- package/node_modules/@radix-ui/react-use-size/dist/index.d.ts +2 -2
- package/node_modules/@radix-ui/react-use-size/dist/index.js +70 -57
- package/node_modules/@radix-ui/react-use-size/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-use-size/dist/index.mjs +39 -55
- package/node_modules/@radix-ui/react-use-size/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-use-size/package.json +3 -4
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts +8 -8
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.ts +8 -8
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.js +64 -41
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs +33 -35
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/react-visually-hidden/package.json +4 -5
- package/node_modules/@radix-ui/rect/dist/index.d.mts +3 -3
- package/node_modules/@radix-ui/rect/dist/index.d.ts +3 -3
- package/node_modules/@radix-ui/rect/dist/index.js +69 -66
- package/node_modules/@radix-ui/rect/dist/index.js.map +7 -1
- package/node_modules/@radix-ui/rect/dist/index.mjs +47 -63
- package/node_modules/@radix-ui/rect/dist/index.mjs.map +7 -1
- package/node_modules/@radix-ui/rect/package.json +1 -4
- package/node_modules/@remix-run/react/CHANGELOG.md +18 -0
- package/node_modules/@remix-run/react/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
- package/node_modules/@remix-run/react/dist/browser.js +14 -3
- package/node_modules/@remix-run/react/dist/components.d.ts +9 -0
- package/node_modules/@remix-run/react/dist/components.js +23 -19
- package/node_modules/@remix-run/react/dist/data.js +1 -1
- package/node_modules/@remix-run/react/dist/entry.d.ts +1 -0
- package/node_modules/@remix-run/react/dist/errorBoundaries.d.ts +5 -2
- package/node_modules/@remix-run/react/dist/errorBoundaries.js +26 -5
- package/node_modules/@remix-run/react/dist/errors.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/browser.js +14 -3
- package/node_modules/@remix-run/react/dist/esm/components.js +24 -20
- package/node_modules/@remix-run/react/dist/esm/data.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/errorBoundaries.js +26 -5
- package/node_modules/@remix-run/react/dist/esm/errors.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/fallback.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/fog-of-war.js +226 -0
- package/node_modules/@remix-run/react/dist/esm/index.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/invariant.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/links.js +2 -2
- package/node_modules/@remix-run/react/dist/esm/markup.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/routeModules.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/routes.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/scroll-restoration.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/server.js +1 -1
- package/node_modules/@remix-run/react/dist/esm/single-fetch.js +1 -1
- package/node_modules/@remix-run/react/dist/fallback.js +1 -1
- package/node_modules/@remix-run/react/dist/fog-of-war.d.ts +37 -0
- package/node_modules/@remix-run/react/dist/fog-of-war.js +254 -0
- package/node_modules/@remix-run/react/dist/index.js +1 -1
- package/node_modules/@remix-run/react/dist/invariant.js +1 -1
- package/node_modules/@remix-run/react/dist/links.js +2 -2
- package/node_modules/@remix-run/react/dist/markup.js +1 -1
- package/node_modules/@remix-run/react/dist/routeModules.js +1 -1
- package/node_modules/@remix-run/react/dist/routes.d.ts +1 -1
- package/node_modules/@remix-run/react/dist/routes.js +1 -1
- package/node_modules/@remix-run/react/dist/scroll-restoration.js +1 -1
- package/node_modules/@remix-run/react/dist/server.js +1 -1
- package/node_modules/@remix-run/react/dist/single-fetch.js +1 -1
- package/node_modules/@remix-run/react/package.json +8 -8
- package/node_modules/@remix-run/router/CHANGELOG.md +9 -0
- package/node_modules/@remix-run/router/dist/index.d.ts +1 -1
- package/node_modules/@remix-run/router/dist/router.cjs.js +467 -80
- package/node_modules/@remix-run/router/dist/router.cjs.js.map +1 -1
- package/node_modules/@remix-run/router/dist/router.d.ts +11 -1
- package/node_modules/@remix-run/router/dist/router.js +457 -76
- package/node_modules/@remix-run/router/dist/router.js.map +1 -1
- package/node_modules/@remix-run/router/dist/router.umd.js +467 -80
- package/node_modules/@remix-run/router/dist/router.umd.js.map +1 -1
- package/node_modules/@remix-run/router/dist/router.umd.min.js +2 -2
- package/node_modules/@remix-run/router/dist/router.umd.min.js.map +1 -1
- package/node_modules/@remix-run/router/dist/utils.d.ts +9 -1
- package/node_modules/@remix-run/router/index.ts +1 -0
- package/node_modules/@remix-run/router/package.json +1 -1
- package/node_modules/@remix-run/router/router.ts +586 -73
- package/node_modules/@remix-run/router/utils.ts +51 -8
- package/node_modules/@remix-run/server-runtime/CHANGELOG.md +17 -0
- package/node_modules/@remix-run/server-runtime/dist/cookies.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/data.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/deprecations.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/dev.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/entry.d.ts +1 -0
- package/node_modules/@remix-run/server-runtime/dist/entry.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/errors.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/cookies.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/data.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/deprecations.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/dev.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/entry.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/errors.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/formData.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/headers.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/index.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/invariant.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/markup.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/mode.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/responses.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/routeMatching.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/routes.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/server.js +76 -11
- package/node_modules/@remix-run/server-runtime/dist/esm/serverHandoff.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/sessions/cookieStorage.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/sessions/memoryStorage.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/sessions.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/single-fetch.js +17 -8
- package/node_modules/@remix-run/server-runtime/dist/esm/upload/errors.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/upload/memoryUploadHandler.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/esm/warnings.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/formData.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/headers.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/index.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/invariant.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/markup.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/mode.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/responses.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/routeMatching.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/routes.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/server.js +70 -5
- package/node_modules/@remix-run/server-runtime/dist/serverHandoff.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/sessions/cookieStorage.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/sessions/memoryStorage.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/sessions.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/single-fetch.d.ts +3 -0
- package/node_modules/@remix-run/server-runtime/dist/single-fetch.js +18 -7
- package/node_modules/@remix-run/server-runtime/dist/upload/errors.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/upload/memoryUploadHandler.js +1 -1
- package/node_modules/@remix-run/server-runtime/dist/warnings.js +1 -1
- package/node_modules/@remix-run/server-runtime/package.json +3 -3
- package/node_modules/deep-eql/index.js +10 -5
- package/node_modules/deep-eql/package.json +1 -1
- package/node_modules/framer-motion/dist/cjs/{dom-entry-DSxBucW4.js → dom-entry-GDJJhIpT.js} +59 -106
- package/node_modules/framer-motion/dist/cjs/dom-entry.js +1 -1
- package/node_modules/framer-motion/dist/cjs/index.js +123 -36
- package/node_modules/framer-motion/dist/dom.js +1 -1
- package/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +3 -3
- package/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs +6 -3
- package/node_modules/framer-motion/dist/es/motion/index.mjs +33 -13
- package/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +6 -3
- package/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs +54 -3
- package/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs +5 -2
- package/node_modules/framer-motion/dist/es/projection-entry.mjs +11 -0
- package/node_modules/framer-motion/dist/es/render/VisualElement.mjs +30 -78
- package/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs +5 -1
- package/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs +1 -1
- package/node_modules/framer-motion/dist/es/utils/mix/color.mjs +8 -2
- package/node_modules/framer-motion/dist/es/utils/mix/complex.mjs +1 -3
- package/node_modules/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
- package/node_modules/framer-motion/dist/es/value/index.mjs +1 -1
- package/node_modules/framer-motion/dist/es/value/types/color/rgba.mjs +1 -1
- package/node_modules/framer-motion/dist/framer-motion.dev.js +175 -134
- package/node_modules/framer-motion/dist/framer-motion.js +1 -1
- package/node_modules/framer-motion/dist/index.d.ts +78 -78
- package/node_modules/framer-motion/dist/three-entry.d.ts +59 -72
- package/node_modules/framer-motion/package.json +14 -28
- package/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +15 -4
- package/node_modules/react-remove-scroll/dist/es2015/UI.js +2 -2
- package/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +12 -4
- package/node_modules/react-remove-scroll/dist/es2015/types.d.ts +10 -2
- package/node_modules/react-remove-scroll/dist/es2019/SideEffect.js +15 -4
- package/node_modules/react-remove-scroll/dist/es2019/UI.js +2 -2
- package/node_modules/react-remove-scroll/dist/es2019/handleScroll.js +12 -4
- package/node_modules/react-remove-scroll/dist/es2019/types.d.ts +10 -2
- package/node_modules/react-remove-scroll/dist/es5/SideEffect.js +15 -4
- package/node_modules/react-remove-scroll/dist/es5/UI.js +2 -2
- package/node_modules/react-remove-scroll/dist/es5/handleScroll.js +12 -4
- package/node_modules/react-remove-scroll/dist/es5/types.d.ts +10 -2
- package/node_modules/react-remove-scroll/dist/index.js +93 -0
- package/node_modules/react-remove-scroll/package.json +4 -3
- package/node_modules/react-router/CHANGELOG.md +14 -0
- package/node_modules/react-router/dist/index.d.ts +4 -1
- package/node_modules/react-router/dist/index.js +3 -2
- package/node_modules/react-router/dist/index.js.map +1 -1
- package/node_modules/react-router/dist/main.js +1 -1
- package/node_modules/react-router/dist/react-router.development.js +3 -2
- package/node_modules/react-router/dist/react-router.development.js.map +1 -1
- package/node_modules/react-router/dist/react-router.production.min.js +2 -2
- package/node_modules/react-router/dist/react-router.production.min.js.map +1 -1
- package/node_modules/react-router/dist/umd/react-router.development.js +3 -2
- package/node_modules/react-router/dist/umd/react-router.development.js.map +1 -1
- package/node_modules/react-router/dist/umd/react-router.production.min.js +2 -2
- package/node_modules/react-router/dist/umd/react-router.production.min.js.map +1 -1
- package/node_modules/react-router/package.json +3 -3
- package/node_modules/react-router-dom/CHANGELOG.md +17 -0
- package/node_modules/react-router-dom/dist/dom.d.ts +29 -16
- package/node_modules/react-router-dom/dist/index.d.ts +18 -6
- package/node_modules/react-router-dom/dist/index.js +3 -1
- package/node_modules/react-router-dom/dist/index.js.map +1 -1
- package/node_modules/react-router-dom/dist/main.js +1 -1
- package/node_modules/react-router-dom/dist/react-router-dom.development.js +29 -1
- package/node_modules/react-router-dom/dist/react-router-dom.development.js.map +1 -1
- package/node_modules/react-router-dom/dist/react-router-dom.production.min.js +2 -2
- package/node_modules/react-router-dom/dist/react-router-dom.production.min.js.map +1 -1
- package/node_modules/react-router-dom/dist/server.js +4 -1
- package/node_modules/react-router-dom/dist/server.mjs +4 -1
- package/node_modules/react-router-dom/dist/umd/react-router-dom.development.js +29 -1
- package/node_modules/react-router-dom/dist/umd/react-router-dom.development.js.map +1 -1
- package/node_modules/react-router-dom/dist/umd/react-router-dom.production.min.js +2 -2
- package/node_modules/react-router-dom/dist/umd/react-router-dom.production.min.js.map +1 -1
- package/node_modules/react-router-dom/package.json +3 -3
- package/node_modules/react-router-dom/server.js +4 -1
- package/node_modules/react-router-dom/server.mjs +4 -1
- package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/README.md +32 -112
- package/node_modules/source-map/dist/source-map.debug.js +3234 -0
- package/node_modules/source-map/dist/source-map.js +3233 -0
- package/node_modules/source-map/dist/source-map.min.js +2 -0
- package/node_modules/source-map/dist/source-map.min.js.map +1 -0
- package/node_modules/source-map/lib/array-set.js +121 -0
- package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/base64-vlq.js +40 -11
- package/node_modules/source-map/lib/base64.js +67 -0
- package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/binary-search.js +19 -15
- package/node_modules/source-map/lib/mapping-list.js +79 -0
- package/node_modules/source-map/lib/quick-sort.js +114 -0
- package/node_modules/source-map/lib/source-map-consumer.js +1145 -0
- package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/source-map-generator.js +169 -157
- package/node_modules/source-map/lib/source-node.js +413 -0
- package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/util.js +51 -109
- package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/package.json +9 -27
- package/node_modules/source-map/source-map.d.ts +98 -0
- package/node_modules/source-map/source-map.js +8 -0
- package/node_modules/turbo-stream/dist/flatten.d.ts +1 -1
- package/node_modules/turbo-stream/dist/flatten.js +44 -9
- package/node_modules/turbo-stream/dist/turbo-stream.js +11 -2
- package/node_modules/turbo-stream/dist/turbo-stream.mjs +58 -7
- package/node_modules/turbo-stream/dist/unflatten.js +2 -0
- package/node_modules/turbo-stream/dist/utils.d.ts +1 -0
- package/node_modules/turbo-stream/dist/utils.js +2 -1
- package/node_modules/turbo-stream/package.json +1 -1
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/index.d.ts +1 -0
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/package.json +2 -1
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/readme.md +1 -0
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-literal.d.ts +6 -4
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge-deep.d.ts +8 -9
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/omit-deep.d.ts +3 -3
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/paths.d.ts +14 -8
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/schema.d.ts +12 -12
- package/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
- package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/simplify.d.ts +1 -1
- package/package.json +4 -4
- package/build/client/assets/_exerciseNumber_.finished-DNtyBHjg.js +0 -2
- package/build/client/assets/_exerciseNumber_.finished-DNtyBHjg.js.map +0 -1
- package/build/client/assets/_layout-BR-Qyofe.js +0 -2
- package/build/client/assets/_layout-CNgYirUN.js +0 -2
- package/build/client/assets/_layout-CNgYirUN.js.map +0 -1
- package/build/client/assets/_layout-xu6a9He_.js +0 -2
- package/build/client/assets/_layout-xu6a9He_.js.map +0 -1
- package/build/client/assets/components-C5xBZAiL.js +0 -119
- package/build/client/assets/components-C5xBZAiL.js.map +0 -1
- package/build/client/assets/diff-BKsbFB6w.js +0 -42
- package/build/client/assets/diff-BKsbFB6w.js.map +0 -1
- package/build/client/assets/diff-KDzcgGYL.js +0 -2
- package/build/client/assets/discord-Xp0X4-Fl.js +0 -2
- package/build/client/assets/discord-Xp0X4-Fl.js.map +0 -1
- package/build/client/assets/entry.client-0j1eoieD.js +0 -80
- package/build/client/assets/entry.client-0j1eoieD.js.map +0 -1
- package/build/client/assets/epic-video-BwtXsHGU.js.map +0 -1
- package/build/client/assets/finished-Cu9PZd5Q.js +0 -2
- package/build/client/assets/finished-Cu9PZd5Q.js.map +0 -1
- package/build/client/assets/index-Bg9MMnnf.js.map +0 -1
- package/build/client/assets/index-D6ygCrVn.js +0 -37
- package/build/client/assets/index-D6ygCrVn.js.map +0 -1
- package/build/client/assets/index-r90CY6Wk.js +0 -8
- package/build/client/assets/index-r90CY6Wk.js.map +0 -1
- package/build/client/assets/manifest-b31ba37c.js +0 -1
- package/build/client/assets/mdx-BYvGbvEr.js +0 -2
- package/build/client/assets/misc-DNgC2Frq.js +0 -2
- package/build/client/assets/misc-DNgC2Frq.js.map +0 -1
- package/build/client/assets/progress-CF9Xwfxf.js +0 -2
- package/build/client/assets/progress-CF9Xwfxf.js.map +0 -1
- package/build/client/assets/root-BQ7V6fP4.js.map +0 -1
- package/build/client/assets/tailwind-Ck4g-nq0.css +0 -1
- package/build/client/assets/tooltip-Kw0lYWBI.js +0 -2
- package/build/client/assets/tooltip-Kw0lYWBI.js.map +0 -1
- package/node_modules/@babel/runtime/helpers/AsyncGenerator.js +0 -64
- package/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js +0 -64
- package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimitLoose.js +0 -10
- package/node_modules/@babel/runtime/helpers/esm/slicedToArrayLoose.js +0 -8
- package/node_modules/@babel/runtime/helpers/iterableToArrayLimitLoose.js +0 -10
- package/node_modules/@babel/runtime/helpers/slicedToArrayLoose.js +0 -8
- package/node_modules/@conform-to/dom/rollup.config.js +0 -100
- package/node_modules/@conform-to/react/rollup.config.js +0 -102
- package/node_modules/@conform-to/zod/rollup.config.js +0 -100
- package/node_modules/@radix-ui/number/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/primitive/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-accordion/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-arrow/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-collection/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-context/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-direction/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-focus-guards/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-id/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-popover/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-popper/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-portal/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-presence/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-primitive/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-roving-focus/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-select/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-slot/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-tabs/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-toast/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-previous/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-rect/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-use-size/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.ts.map +0 -1
- package/node_modules/@radix-ui/rect/dist/index.d.ts.map +0 -1
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/dist/source-map.js +0 -1
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/array-set.js +0 -100
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/base64.js +0 -18
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/mapping-list.js +0 -80
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/source-map-consumer.js +0 -1237
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/source-node.js +0 -404
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/source-map.d.ts +0 -369
- package/node_modules/@remix-run/server-runtime/node_modules/source-map/source-map.js +0 -8
- package/node_modules/framer-motion/dist/projection.dev.js +0 -6659
- /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/LICENSE +0 -0
- /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/mappings.wasm +0 -0
- /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/read-wasm.js +0 -0
- /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/wasm.js +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/and.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-indices.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-slice.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-splice.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-values.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/async-return-type.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/asyncify.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/basic.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-case.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-cased-properties-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-cased-properties.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-except.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-keys.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-pick-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-pick.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-simplify.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-case.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-cased-properties-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-cased-properties.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/distributed-omit.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/distributed-pick.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/empty-object.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/enforce-optional.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/entries.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/entry.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/exact.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/except.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/fixed-length-array.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/get.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/global-this.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/greater-than-or-equal.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/greater-than.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-optional-keys.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-readonly-keys.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-required-keys.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-writable-keys.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-any.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-empty-object.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-never.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-null.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-unknown.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/includes.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/int-range.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/internal.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/invariant-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-any.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-equal.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-float.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-integer.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-never.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-null.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-unknown.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/iterable-element.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/join.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/jsonifiable.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/jsonify.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-case.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-cased-properties-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-cased-properties.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/keys-of-union.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/last-array-element.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/less-than-or-equal.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/less-than.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-to-primitive-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-to-primitive.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-union.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge-exclusive.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/multidimensional-array.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/multidimensional-readonly-array.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/non-empty-object.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/numeric.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/observable-like.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/omit-index-signature.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/opaque.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/optional-keys-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/or.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/override-properties.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/package-json.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/partial-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/partial-on-undefined-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-case.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-cased-properties-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-cased-properties.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pick-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pick-index-signature.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/primitive.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/promisable.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-keys-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-tuple.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/replace.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-all-or-none.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-at-least-one.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-exactly-one.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-one-or-none.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/required-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/required-keys-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/screaming-snake-case.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-field-type.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-non-nullable.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-optional.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-parameter-type.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-readonly.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-required.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-return-type.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/shared-union-fields-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/single-key-object.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-case.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-cased-properties-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-cased-properties.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/split-words.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/split.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/spread.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/string-key-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/string-slice.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/stringified.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/subtract.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/sum.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tagged-union.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/trim.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tsconfig-json.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tuple-to-union.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/typed-array.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/undefined-on-partial-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/union-to-intersection.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/unknown-array.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/unknown-record.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/value-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable-deep.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable-keys-of.d.ts +0 -0
- /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable.d.ts +0 -0
package/build/server/index.js
CHANGED
|
@@ -33,14 +33,13 @@ import child_process, { spawn } from "child_process";
|
|
|
33
33
|
import net from "node:net";
|
|
34
34
|
import chalk from "chalk";
|
|
35
35
|
import fkill from "fkill";
|
|
36
|
-
import { promises } from "node:dns";
|
|
37
36
|
import { createReadableStreamFromReadable, redirect, json, createCookieSessionStorage, defer } from "@remix-run/node";
|
|
38
37
|
import { RemixServer, Link, useRouteError, useParams, isRouteErrorResponse, useNavigation, useFetchers, useRouteLoaderData, useRevalidator, useFetcher, useLoaderData, Outlet, Meta, Links, ScrollRestoration, Scripts, useLocation, NavLink, Await, useSubmit, useSearchParams, Form, useNavigate } from "@remix-run/react";
|
|
39
38
|
import { isbot } from "isbot";
|
|
40
39
|
import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
|
|
41
40
|
import { cssBundleHref } from "@remix-run/css-bundle";
|
|
42
41
|
import * as React from "react";
|
|
43
|
-
import React__default, { useRef, useEffect, useMemo, useState, createContext, useContext, Suspense, forwardRef, useImperativeHandle, useReducer } from "react";
|
|
42
|
+
import React__default, { useRef, useEffect, useMemo, useState, createContext, useContext, useSyncExternalStore, Suspense, forwardRef, useImperativeHandle, useReducer } from "react";
|
|
44
43
|
import { useSpinDelay } from "spin-delay";
|
|
45
44
|
import { Index as Index$1 } from "confetti-react";
|
|
46
45
|
import { ClientOnly } from "remix-utils/client-only";
|
|
@@ -60,6 +59,7 @@ import * as cookie from "cookie";
|
|
|
60
59
|
import { createId } from "@paralleldrive/cuid2";
|
|
61
60
|
import { usePartySocket } from "partysocket/react";
|
|
62
61
|
import { motion, useAnimationControls } from "framer-motion";
|
|
62
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
63
63
|
import { invariantResponse, invariant } from "@epic-web/invariant";
|
|
64
64
|
import { ElementScrollRestoration } from "@epic-web/restore-scroll";
|
|
65
65
|
import RealMuxPlayer from "@mux/mux-player-react";
|
|
@@ -118,15 +118,13 @@ async function time(fn, {
|
|
|
118
118
|
}) {
|
|
119
119
|
const timer = createTimer(type, desc);
|
|
120
120
|
const promise = typeof fn === "function" ? fn() : fn;
|
|
121
|
-
if (!timings)
|
|
122
|
-
return promise;
|
|
121
|
+
if (!timings) return promise;
|
|
123
122
|
const result = await promise;
|
|
124
123
|
timer.end(timings);
|
|
125
124
|
return result;
|
|
126
125
|
}
|
|
127
126
|
function getServerTimeHeader(timings) {
|
|
128
|
-
if (!timings)
|
|
129
|
-
return "";
|
|
127
|
+
if (!timings) return "";
|
|
130
128
|
return Object.entries(timings).map(([key, timingInfos]) => {
|
|
131
129
|
const dur = timingInfos.reduce((acc, timingInfo) => {
|
|
132
130
|
const time2 = timingInfo.time ?? performance.now() - timingInfo.start;
|
|
@@ -146,8 +144,7 @@ function combineServerTimings(headers1, headers2) {
|
|
|
146
144
|
return newHeaders.get("Server-Timing") ?? "";
|
|
147
145
|
}
|
|
148
146
|
function cachifiedTimingReporter(timings) {
|
|
149
|
-
if (!timings)
|
|
150
|
-
return;
|
|
147
|
+
if (!timings) return;
|
|
151
148
|
return ({ key }) => {
|
|
152
149
|
const cacheRetrievalTimer = createTimer(
|
|
153
150
|
`cache:${key}`,
|
|
@@ -210,8 +207,7 @@ const fsCache = {
|
|
|
210
207
|
}
|
|
211
208
|
};
|
|
212
209
|
async function deleteCache() {
|
|
213
|
-
if (process.env.EPICSHOP_DEPLOYED)
|
|
214
|
-
return null;
|
|
210
|
+
if (process.env.EPICSHOP_DEPLOYED) return null;
|
|
215
211
|
try {
|
|
216
212
|
if (await fsExtra.exists(cacheDir$1)) {
|
|
217
213
|
await fsExtra.remove(cacheDir$1);
|
|
@@ -271,20 +267,15 @@ async function shouldForceFresh({
|
|
|
271
267
|
request,
|
|
272
268
|
key
|
|
273
269
|
}) {
|
|
274
|
-
if (typeof forceFresh === "boolean")
|
|
275
|
-
return forceFresh;
|
|
270
|
+
if (typeof forceFresh === "boolean") return forceFresh;
|
|
276
271
|
if (typeof forceFresh === "string" && key) {
|
|
277
272
|
return forceFresh.split(",").includes(key);
|
|
278
273
|
}
|
|
279
|
-
if (!request)
|
|
280
|
-
return false;
|
|
274
|
+
if (!request) return false;
|
|
281
275
|
const fresh = new URL(request.url).searchParams.get("fresh");
|
|
282
|
-
if (typeof fresh !== "string")
|
|
283
|
-
|
|
284
|
-
if (
|
|
285
|
-
return true;
|
|
286
|
-
if (!key)
|
|
287
|
-
return false;
|
|
276
|
+
if (typeof fresh !== "string") return false;
|
|
277
|
+
if (fresh === "") return true;
|
|
278
|
+
if (!key) return false;
|
|
288
279
|
return fresh.split(",").includes(key);
|
|
289
280
|
}
|
|
290
281
|
let watcher = global.__change_tracker_watcher__;
|
|
@@ -292,8 +283,7 @@ function getWatcher() {
|
|
|
292
283
|
if (process.env.EPICSHOP_DEPLOYED ?? process.env.EPICSHOP_DISABLE_WATCHER === "true") {
|
|
293
284
|
return null;
|
|
294
285
|
}
|
|
295
|
-
if (watcher)
|
|
296
|
-
return watcher;
|
|
286
|
+
if (watcher) return watcher;
|
|
297
287
|
const workshopRoot2 = process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd();
|
|
298
288
|
watcher = chokidar.watch(workshopRoot2, {
|
|
299
289
|
ignoreInitial: true,
|
|
@@ -326,8 +316,7 @@ const transformRange = (value) => value == null ? void 0 : value.split(",").map(
|
|
|
326
316
|
return [start, end ?? start];
|
|
327
317
|
});
|
|
328
318
|
const isRangeBounded = (range, ctx, lines) => {
|
|
329
|
-
if (!lines || !Array.isArray(range))
|
|
330
|
-
return;
|
|
319
|
+
if (!lines || !Array.isArray(range)) return;
|
|
331
320
|
if (range.flat().some((r) => r < 1 || r > lines)) {
|
|
332
321
|
ctx.addIssue({
|
|
333
322
|
code: z.ZodIssueCode.custom,
|
|
@@ -337,8 +326,7 @@ const isRangeBounded = (range, ctx, lines) => {
|
|
|
337
326
|
};
|
|
338
327
|
const isRangeInOrder = (range) => Array.isArray(range) ? range.every(([a, b]) => !isNaN(Number(a)) && !isNaN(Number(b)) && b >= a) : true;
|
|
339
328
|
const isRangesNonOverlapping = (range) => {
|
|
340
|
-
if (!Array.isArray(range))
|
|
341
|
-
return true;
|
|
329
|
+
if (!Array.isArray(range)) return true;
|
|
342
330
|
return range.every(([a], i) => {
|
|
343
331
|
var _a2;
|
|
344
332
|
return i === 0 || (((_a2 = range[i - 1]) == null ? void 0 : _a2[1]) ?? 0) < a;
|
|
@@ -593,8 +581,7 @@ function trimCodeBlocks() {
|
|
|
593
581
|
return;
|
|
594
582
|
}
|
|
595
583
|
const [codeStringNode] = codeNode.children;
|
|
596
|
-
if (!codeStringNode)
|
|
597
|
-
return;
|
|
584
|
+
if (!codeStringNode) return;
|
|
598
585
|
if (codeStringNode.type !== "text") {
|
|
599
586
|
console.warn(
|
|
600
587
|
`trimCodeBlocks: Unexpected: codeStringNode type is not "text": ${codeStringNode.type}`
|
|
@@ -611,12 +598,9 @@ function removePreContainerDivs() {
|
|
|
611
598
|
tree,
|
|
612
599
|
{ type: "element", tagName: "pre" },
|
|
613
600
|
function visitor(node, index, parent) {
|
|
614
|
-
if ((parent == null ? void 0 : parent.type) !== "element")
|
|
615
|
-
|
|
616
|
-
if (parent.
|
|
617
|
-
return;
|
|
618
|
-
if (parent.children.length !== 1 && index === 0)
|
|
619
|
-
return;
|
|
601
|
+
if ((parent == null ? void 0 : parent.type) !== "element") return;
|
|
602
|
+
if (parent.tagName !== "div") return;
|
|
603
|
+
if (parent.children.length !== 1 && index === 0) return;
|
|
620
604
|
Object.assign(parent, node);
|
|
621
605
|
}
|
|
622
606
|
);
|
|
@@ -636,8 +620,7 @@ function checkFileExists$1(file) {
|
|
|
636
620
|
const verboseLog = process.env.EPICSHOP_VERBOSE_LOG === "true" ? console.log : () => {
|
|
637
621
|
};
|
|
638
622
|
function validateEmbeddedFiles(embeddedFiles, lastCompiledTime) {
|
|
639
|
-
if (process.env.NODE_ENV !== "development")
|
|
640
|
-
return Promise.resolve(true);
|
|
623
|
+
if (process.env.NODE_ENV !== "development") return Promise.resolve(true);
|
|
641
624
|
return Promise.all(
|
|
642
625
|
Array.from(embeddedFiles).map(async ({ file }) => {
|
|
643
626
|
const stat = await fs$1.promises.stat(file).catch(() => ({ mtimeMs: 0 }));
|
|
@@ -703,8 +686,7 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
703
686
|
gfm,
|
|
704
687
|
() => (tree) => {
|
|
705
688
|
visit(tree, "heading", (node) => {
|
|
706
|
-
if (title)
|
|
707
|
-
return;
|
|
689
|
+
if (title) return;
|
|
708
690
|
if (node.depth === 1) {
|
|
709
691
|
visit(node, "text", (textNode) => {
|
|
710
692
|
title = textNode.value.trim();
|
|
@@ -715,18 +697,14 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
715
697
|
},
|
|
716
698
|
() => (tree) => {
|
|
717
699
|
visit(tree, "mdxJsxFlowElement", (jsxEl) => {
|
|
718
|
-
if (jsxEl.name !== "EpicVideo")
|
|
719
|
-
return;
|
|
700
|
+
if (jsxEl.name !== "EpicVideo") return;
|
|
720
701
|
const urlAttr = jsxEl.attributes.find(
|
|
721
702
|
(a) => a.type === "mdxJsxAttribute" && a.name === "url"
|
|
722
703
|
);
|
|
723
|
-
if (!urlAttr)
|
|
724
|
-
return;
|
|
704
|
+
if (!urlAttr) return;
|
|
725
705
|
let url = urlAttr.value;
|
|
726
|
-
if (typeof url !== "string")
|
|
727
|
-
|
|
728
|
-
if (url.endsWith("/"))
|
|
729
|
-
url = url.slice(0, -1);
|
|
706
|
+
if (typeof url !== "string") return;
|
|
707
|
+
if (url.endsWith("/")) url = url.slice(0, -1);
|
|
730
708
|
epicVideoEmbeds.push(url);
|
|
731
709
|
});
|
|
732
710
|
},
|
|
@@ -743,8 +721,7 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
743
721
|
return options;
|
|
744
722
|
}
|
|
745
723
|
});
|
|
746
|
-
if (!bundleResult)
|
|
747
|
-
throw new Error(`Timeout for file: ${file}`);
|
|
724
|
+
if (!bundleResult) throw new Error(`Timeout for file: ${file}`);
|
|
748
725
|
const result = { code: bundleResult.code, title, epicVideoEmbeds };
|
|
749
726
|
await fsExtra.ensureDir(cacheDir);
|
|
750
727
|
await fs$1.promises.writeFile(
|
|
@@ -794,8 +771,7 @@ async function compileMarkdownString(markdownString) {
|
|
|
794
771
|
return options;
|
|
795
772
|
}
|
|
796
773
|
});
|
|
797
|
-
if (!result)
|
|
798
|
-
throw new Error(`Timed out compiling markdown string`);
|
|
774
|
+
if (!result) throw new Error(`Timed out compiling markdown string`);
|
|
799
775
|
return result.code;
|
|
800
776
|
} catch (error) {
|
|
801
777
|
console.error(`Compilation error for code: `, markdownString, error);
|
|
@@ -816,8 +792,7 @@ async function updateEmbeddedFilesCache({
|
|
|
816
792
|
embeddedFiles
|
|
817
793
|
}) {
|
|
818
794
|
var _a2;
|
|
819
|
-
if (mdxFile.includes("playground"))
|
|
820
|
-
return;
|
|
795
|
+
if (mdxFile.includes("playground")) return;
|
|
821
796
|
let cachedList = await getEmbeddedFilesCache();
|
|
822
797
|
const hash = cachedList ? md5(JSON.stringify(cachedList)) : null;
|
|
823
798
|
if (cachedList) {
|
|
@@ -852,11 +827,9 @@ async function updateEmbeddedFilesCache({
|
|
|
852
827
|
async function getEmbeddedFilesCache() {
|
|
853
828
|
const key = EMBEDDED_FILES_CACHE_KEY;
|
|
854
829
|
function getForceFresh2(cacheEntry) {
|
|
855
|
-
if (!cacheEntry)
|
|
856
|
-
return true;
|
|
830
|
+
if (!cacheEntry) return true;
|
|
857
831
|
const latestModifiedTime = modifiedEmbeddedFilesTime.get(key);
|
|
858
|
-
if (!latestModifiedTime)
|
|
859
|
-
return void 0;
|
|
832
|
+
if (!latestModifiedTime) return void 0;
|
|
860
833
|
return latestModifiedTime > cacheEntry.metadata.createdTime ? true : void 0;
|
|
861
834
|
}
|
|
862
835
|
return cachified$1({
|
|
@@ -881,8 +854,7 @@ async function getEmbeddedFilesCache() {
|
|
|
881
854
|
}
|
|
882
855
|
let _queue = null;
|
|
883
856
|
async function getQueue() {
|
|
884
|
-
if (_queue)
|
|
885
|
-
return _queue;
|
|
857
|
+
if (_queue) return _queue;
|
|
886
858
|
_queue = new PQueue({
|
|
887
859
|
concurrency: 1,
|
|
888
860
|
throwOnTimeout: true,
|
|
@@ -896,8 +868,7 @@ async function queuedBundleMDX(...args) {
|
|
|
896
868
|
return result;
|
|
897
869
|
}
|
|
898
870
|
function getErrorMessage$1(error) {
|
|
899
|
-
if (typeof error === "string")
|
|
900
|
-
return error;
|
|
871
|
+
if (typeof error === "string") return error;
|
|
901
872
|
if (error && typeof error === "object" && "message" in error && typeof error.message === "string") {
|
|
902
873
|
return error.message;
|
|
903
874
|
}
|
|
@@ -946,8 +917,7 @@ const colors = [
|
|
|
946
917
|
"magentaBright"
|
|
947
918
|
];
|
|
948
919
|
async function runAppDev(app) {
|
|
949
|
-
if (isDeployed$1)
|
|
950
|
-
throw new Error("cannot run apps in deployed mode");
|
|
920
|
+
if (isDeployed$1) throw new Error("cannot run apps in deployed mode");
|
|
951
921
|
const key = app.name;
|
|
952
922
|
if (devProcesses.has(key)) {
|
|
953
923
|
return { status: "process-running", running: true };
|
|
@@ -1004,8 +974,7 @@ async function runAppDev(app) {
|
|
|
1004
974
|
}
|
|
1005
975
|
async function runAppTests(app) {
|
|
1006
976
|
var _a2, _b2;
|
|
1007
|
-
if (isDeployed$1)
|
|
1008
|
-
throw new Error("cannot run tests in deployed mode");
|
|
977
|
+
if (isDeployed$1) throw new Error("cannot run tests in deployed mode");
|
|
1009
978
|
const key = app.name;
|
|
1010
979
|
if (app.test.type !== "script") {
|
|
1011
980
|
return { status: "error", error: "no-test" };
|
|
@@ -1090,8 +1059,7 @@ function isPortAvailable(port2) {
|
|
|
1090
1059
|
function isAppRunning(app) {
|
|
1091
1060
|
try {
|
|
1092
1061
|
const devProcess = devProcesses.get(app.name);
|
|
1093
|
-
if (!devProcess)
|
|
1094
|
-
return false;
|
|
1062
|
+
if (!devProcess) return false;
|
|
1095
1063
|
devProcess.process.kill(0);
|
|
1096
1064
|
return true;
|
|
1097
1065
|
} catch {
|
|
@@ -1101,10 +1069,8 @@ function isAppRunning(app) {
|
|
|
1101
1069
|
function isTestRunning(app) {
|
|
1102
1070
|
try {
|
|
1103
1071
|
const testProcess = testProcesses.get(app.name);
|
|
1104
|
-
if (!testProcess)
|
|
1105
|
-
|
|
1106
|
-
if (testProcess.process === null)
|
|
1107
|
-
return false;
|
|
1072
|
+
if (!testProcess) return false;
|
|
1073
|
+
if (testProcess.process === null) return false;
|
|
1108
1074
|
testProcess.process.kill(0);
|
|
1109
1075
|
return true;
|
|
1110
1076
|
} catch {
|
|
@@ -1121,8 +1087,7 @@ function getProcesses() {
|
|
|
1121
1087
|
return { devProcesses, testProcesses };
|
|
1122
1088
|
}
|
|
1123
1089
|
async function closeProcess(key) {
|
|
1124
|
-
if (isDeployed$1)
|
|
1125
|
-
throw new Error("cannot close processes in deployed mode");
|
|
1090
|
+
if (isDeployed$1) throw new Error("cannot close processes in deployed mode");
|
|
1126
1091
|
const proc = devProcesses.get(key);
|
|
1127
1092
|
if (proc) {
|
|
1128
1093
|
const exitedPromise = new Promise(
|
|
@@ -1144,8 +1109,7 @@ async function closeProcess(key) {
|
|
|
1144
1109
|
}
|
|
1145
1110
|
const sleep = (t) => new Promise((resolve) => setTimeout(resolve, t));
|
|
1146
1111
|
async function stopPort(port2) {
|
|
1147
|
-
if (isDeployed$1)
|
|
1148
|
-
throw new Error("cannot stop ports in deployed mode");
|
|
1112
|
+
if (isDeployed$1) throw new Error("cannot stop ports in deployed mode");
|
|
1149
1113
|
await fkill(`:${port2}`, { force: true, silent: true });
|
|
1150
1114
|
await waitForPortToBeAvailable(port2);
|
|
1151
1115
|
}
|
|
@@ -1160,12 +1124,6 @@ async function waitForPortToBeAvailable(port2) {
|
|
|
1160
1124
|
console.error("Timed out waiting for the port to become available");
|
|
1161
1125
|
}
|
|
1162
1126
|
}
|
|
1163
|
-
async function checkConnection() {
|
|
1164
|
-
return promises.resolve("example.com").then(
|
|
1165
|
-
() => true,
|
|
1166
|
-
() => false
|
|
1167
|
-
);
|
|
1168
|
-
}
|
|
1169
1127
|
const PkgSchema = z$1.object({}).passthrough();
|
|
1170
1128
|
async function getPkgProp(fullPath, prop, defaultValue) {
|
|
1171
1129
|
let pkg;
|
|
@@ -1184,8 +1142,7 @@ async function getPkgProp(fullPath, prop, defaultValue) {
|
|
|
1184
1142
|
let value = pkg;
|
|
1185
1143
|
for (const p of propPath) {
|
|
1186
1144
|
value = value[p];
|
|
1187
|
-
if (value === void 0)
|
|
1188
|
-
break;
|
|
1145
|
+
if (value === void 0) break;
|
|
1189
1146
|
}
|
|
1190
1147
|
if (value === void 0 && defaultValue === void 0) {
|
|
1191
1148
|
throw new Error(
|
|
@@ -1340,11 +1297,9 @@ function init() {
|
|
|
1340
1297
|
(_a2 = getWatcher()) == null ? void 0 : _a2.on("all", handleFileChanges);
|
|
1341
1298
|
}
|
|
1342
1299
|
function getForceFresh$1(cacheEntry) {
|
|
1343
|
-
if (!cacheEntry)
|
|
1344
|
-
return true;
|
|
1300
|
+
if (!cacheEntry) return true;
|
|
1345
1301
|
const latestModifiedTime = Math.max(...Array.from(modifiedTimes.values()));
|
|
1346
|
-
if (!latestModifiedTime)
|
|
1347
|
-
return void 0;
|
|
1302
|
+
if (!latestModifiedTime) return void 0;
|
|
1348
1303
|
return latestModifiedTime > cacheEntry.metadata.createdTime ? true : void 0;
|
|
1349
1304
|
}
|
|
1350
1305
|
function setModifiedTimesForDir(dir) {
|
|
@@ -1354,11 +1309,9 @@ function getForceFreshForDir(dir, cacheEntry) {
|
|
|
1354
1309
|
if (!path$1.isAbsolute(dir)) {
|
|
1355
1310
|
throw new Error(`Trying to get force fresh for non-absolute path: ${dir}`);
|
|
1356
1311
|
}
|
|
1357
|
-
if (!cacheEntry)
|
|
1358
|
-
return true;
|
|
1312
|
+
if (!cacheEntry) return true;
|
|
1359
1313
|
const modifiedTime = modifiedTimes.get(dir);
|
|
1360
|
-
if (!modifiedTime)
|
|
1361
|
-
return void 0;
|
|
1314
|
+
if (!modifiedTime) return void 0;
|
|
1362
1315
|
return modifiedTime > cacheEntry.metadata.createdTime ? true : void 0;
|
|
1363
1316
|
}
|
|
1364
1317
|
async function readDir(dir) {
|
|
@@ -1416,8 +1369,7 @@ async function getExercises({
|
|
|
1416
1369
|
const exercises = [];
|
|
1417
1370
|
for (const dirName of exerciseDirs) {
|
|
1418
1371
|
const exerciseNumber = extractExerciseNumber(dirName);
|
|
1419
|
-
if (!exerciseNumber)
|
|
1420
|
-
continue;
|
|
1372
|
+
if (!exerciseNumber) continue;
|
|
1421
1373
|
const compiledReadme = await compileMdxIfExists(
|
|
1422
1374
|
path$1.join(workshopRoot, "exercises", dirName, "README.mdx"),
|
|
1423
1375
|
{ request }
|
|
@@ -1479,21 +1431,15 @@ async function getApps({
|
|
|
1479
1431
|
...exampleApps
|
|
1480
1432
|
].filter(Boolean).sort((a, b) => {
|
|
1481
1433
|
if (isPlaygroundApp(a)) {
|
|
1482
|
-
if (isPlaygroundApp(b))
|
|
1483
|
-
|
|
1484
|
-
else
|
|
1485
|
-
return 1;
|
|
1434
|
+
if (isPlaygroundApp(b)) return a.name.localeCompare(b.name);
|
|
1435
|
+
else return 1;
|
|
1486
1436
|
}
|
|
1487
|
-
if (isPlaygroundApp(b))
|
|
1488
|
-
return 1;
|
|
1437
|
+
if (isPlaygroundApp(b)) return 1;
|
|
1489
1438
|
if (isExampleApp(a)) {
|
|
1490
|
-
if (isExampleApp(b))
|
|
1491
|
-
|
|
1492
|
-
else
|
|
1493
|
-
return 1;
|
|
1439
|
+
if (isExampleApp(b)) return a.name.localeCompare(b.name);
|
|
1440
|
+
else return 1;
|
|
1494
1441
|
}
|
|
1495
|
-
if (isExampleApp(b))
|
|
1496
|
-
return -1;
|
|
1442
|
+
if (isExampleApp(b)) return -1;
|
|
1497
1443
|
if (a.type === b.type) {
|
|
1498
1444
|
if (a.exerciseNumber === b.exerciseNumber) {
|
|
1499
1445
|
return a.stepNumber - b.stepNumber;
|
|
@@ -1537,8 +1483,7 @@ function extractNumbersAndTypeFromAppNameOrPath(fullPathOrAppName) {
|
|
|
1537
1483
|
""
|
|
1538
1484
|
);
|
|
1539
1485
|
const [exerciseNumberPart, stepNumberPart] = relativePath.split(path$1.sep);
|
|
1540
|
-
if (!exerciseNumberPart || !stepNumberPart)
|
|
1541
|
-
return null;
|
|
1486
|
+
if (!exerciseNumberPart || !stepNumberPart) return null;
|
|
1542
1487
|
const exerciseNumber = exerciseNumberPart.split(".")[0];
|
|
1543
1488
|
const stepNumber = stepNumberPart.split(".")[0];
|
|
1544
1489
|
const type = (_a2 = stepNumberPart.split(".")[1]) == null ? void 0 : _a2.split(".")[0];
|
|
@@ -1552,8 +1497,7 @@ function extractNumbersAndTypeFromAppNameOrPath(fullPathOrAppName) {
|
|
|
1552
1497
|
info.type = type;
|
|
1553
1498
|
}
|
|
1554
1499
|
const result = AppIdInfoSchema.safeParse(info);
|
|
1555
|
-
if (result.success)
|
|
1556
|
-
return result.data;
|
|
1500
|
+
if (result.success) return result.data;
|
|
1557
1501
|
return null;
|
|
1558
1502
|
}
|
|
1559
1503
|
async function getProblemDirs() {
|
|
@@ -1577,8 +1521,7 @@ function getPathname(fullPath) {
|
|
|
1577
1521
|
return `/app/${appName}/`;
|
|
1578
1522
|
}
|
|
1579
1523
|
function getAppName(fullPath) {
|
|
1580
|
-
if (/playground\/?$/.test(fullPath))
|
|
1581
|
-
return "playground";
|
|
1524
|
+
if (/playground\/?$/.test(fullPath)) return "playground";
|
|
1582
1525
|
if (/examples\/.+\/?$/.test(fullPath)) {
|
|
1583
1526
|
const restOfPath = fullPath.replace(
|
|
1584
1527
|
`${getWorkshopRoot()}${path$1.sep}examples${path$1.sep}`,
|
|
@@ -1596,8 +1539,7 @@ function getAppName(fullPath) {
|
|
|
1596
1539
|
}
|
|
1597
1540
|
}
|
|
1598
1541
|
async function getFullPathFromAppName(appName) {
|
|
1599
|
-
if (appName === "playground")
|
|
1600
|
-
return path$1.join(workshopRoot, "playground");
|
|
1542
|
+
if (appName === "playground") return path$1.join(workshopRoot, "playground");
|
|
1601
1543
|
if (appName.startsWith(".example")) {
|
|
1602
1544
|
const relativePath = appName.replace(".example", "").split("__sep__").join(path$1.sep);
|
|
1603
1545
|
return path$1.join(workshopRoot, "examples", relativePath);
|
|
@@ -1610,8 +1552,7 @@ async function getFullPathFromAppName(appName) {
|
|
|
1610
1552
|
const appDirs = type === "problem" ? await getProblemDirs() : type === "solution" ? await getSolutionDirs() : [];
|
|
1611
1553
|
const dir = appDirs.find((dir2) => {
|
|
1612
1554
|
const info = extractNumbersAndTypeFromAppNameOrPath(dir2);
|
|
1613
|
-
if (!info)
|
|
1614
|
-
return false;
|
|
1555
|
+
if (!info) return false;
|
|
1615
1556
|
return info.exerciseNumber === exerciseNumber && info.stepNumber === stepNumber;
|
|
1616
1557
|
});
|
|
1617
1558
|
return dir ?? appName;
|
|
@@ -1622,8 +1563,7 @@ async function findSolutionDir({
|
|
|
1622
1563
|
const dirName = path$1.basename(fullPath);
|
|
1623
1564
|
if (dirName.includes(".problem")) {
|
|
1624
1565
|
const info = getAppDirInfo(dirName);
|
|
1625
|
-
if (!info)
|
|
1626
|
-
return null;
|
|
1566
|
+
if (!info) return null;
|
|
1627
1567
|
const { stepNumber } = info;
|
|
1628
1568
|
const paddedStepNumber = stepNumber.toString().padStart(2, "0");
|
|
1629
1569
|
const parentDir = path$1.dirname(fullPath);
|
|
@@ -1650,8 +1590,7 @@ async function findProblemDir({
|
|
|
1650
1590
|
const dirName = path$1.basename(fullPath);
|
|
1651
1591
|
if (dirName.includes(".solution")) {
|
|
1652
1592
|
const info = getAppDirInfo(dirName);
|
|
1653
|
-
if (!info)
|
|
1654
|
-
return null;
|
|
1593
|
+
if (!info) return null;
|
|
1655
1594
|
const { stepNumber } = info;
|
|
1656
1595
|
const paddedStepNumber = stepNumber.toString().padStart(2, "0");
|
|
1657
1596
|
const parentDir = path$1.dirname(fullPath);
|
|
@@ -1729,10 +1668,8 @@ async function getPlaygroundApp({
|
|
|
1729
1668
|
request,
|
|
1730
1669
|
forceFresh: forceFreshPlaygroundDir || forceFreshBaseApp,
|
|
1731
1670
|
getFreshValue: async () => {
|
|
1732
|
-
if (!await exists(playgroundDir))
|
|
1733
|
-
|
|
1734
|
-
if (!baseAppName)
|
|
1735
|
-
return null;
|
|
1671
|
+
if (!await exists(playgroundDir)) return null;
|
|
1672
|
+
if (!baseAppName) return null;
|
|
1736
1673
|
const dirName = path$1.basename(playgroundDir);
|
|
1737
1674
|
const name = getAppName(playgroundDir);
|
|
1738
1675
|
const portNumber = 4e3;
|
|
@@ -1812,8 +1749,7 @@ async function getExampleApps({
|
|
|
1812
1749
|
return null;
|
|
1813
1750
|
})
|
|
1814
1751
|
});
|
|
1815
|
-
if (exampleApp)
|
|
1816
|
-
exampleApps.push(exampleApp);
|
|
1752
|
+
if (exampleApp) exampleApps.push(exampleApp);
|
|
1817
1753
|
}
|
|
1818
1754
|
return exampleApps;
|
|
1819
1755
|
}
|
|
@@ -1821,12 +1757,10 @@ async function getSolutionAppFromPath(fullPath, request) {
|
|
|
1821
1757
|
const dirName = path$1.basename(fullPath);
|
|
1822
1758
|
const parentDirName = path$1.basename(path$1.dirname(fullPath));
|
|
1823
1759
|
const exerciseNumber = extractExerciseNumber(parentDirName);
|
|
1824
|
-
if (!exerciseNumber)
|
|
1825
|
-
return null;
|
|
1760
|
+
if (!exerciseNumber) return null;
|
|
1826
1761
|
const name = getAppName(fullPath);
|
|
1827
1762
|
const info = getAppDirInfo(dirName);
|
|
1828
|
-
if (!info)
|
|
1829
|
-
return null;
|
|
1763
|
+
if (!info) return null;
|
|
1830
1764
|
const { stepNumber } = info;
|
|
1831
1765
|
const portNumber = 7e3 + (exerciseNumber - 1) * 10 + stepNumber;
|
|
1832
1766
|
const compiledReadme = await compileMdxIfExists(
|
|
@@ -1881,8 +1815,7 @@ async function getSolutionApps({
|
|
|
1881
1815
|
return null;
|
|
1882
1816
|
})
|
|
1883
1817
|
});
|
|
1884
|
-
if (solutionApp)
|
|
1885
|
-
solutionApps.push(solutionApp);
|
|
1818
|
+
if (solutionApp) solutionApps.push(solutionApp);
|
|
1886
1819
|
}
|
|
1887
1820
|
return solutionApps;
|
|
1888
1821
|
}
|
|
@@ -1890,12 +1823,10 @@ async function getProblemAppFromPath(fullPath, request) {
|
|
|
1890
1823
|
const dirName = path$1.basename(fullPath);
|
|
1891
1824
|
const parentDirName = path$1.basename(path$1.dirname(fullPath));
|
|
1892
1825
|
const exerciseNumber = extractExerciseNumber(parentDirName);
|
|
1893
|
-
if (!exerciseNumber)
|
|
1894
|
-
return null;
|
|
1826
|
+
if (!exerciseNumber) return null;
|
|
1895
1827
|
const name = getAppName(fullPath);
|
|
1896
1828
|
const info = getAppDirInfo(dirName);
|
|
1897
|
-
if (!info)
|
|
1898
|
-
return null;
|
|
1829
|
+
if (!info) return null;
|
|
1899
1830
|
const { stepNumber } = info;
|
|
1900
1831
|
const portNumber = 6e3 + (exerciseNumber - 1) * 10 + stepNumber;
|
|
1901
1832
|
const compiledReadme = await compileMdxIfExists(
|
|
@@ -1950,8 +1881,7 @@ async function getProblemApps({
|
|
|
1950
1881
|
return null;
|
|
1951
1882
|
})
|
|
1952
1883
|
});
|
|
1953
|
-
if (problemApp)
|
|
1954
|
-
problemApps.push(problemApp);
|
|
1884
|
+
if (problemApp) problemApps.push(problemApp);
|
|
1955
1885
|
}
|
|
1956
1886
|
return problemApps;
|
|
1957
1887
|
}
|
|
@@ -1989,8 +1919,7 @@ async function getExerciseApp(params, { request, timings } = {}) {
|
|
|
1989
1919
|
const { type, exerciseNumber, stepNumber } = result.data;
|
|
1990
1920
|
const apps = (await getApps({ request, timings })).filter(isExerciseStepApp);
|
|
1991
1921
|
const exerciseApp = apps.find((app) => {
|
|
1992
|
-
if (isExampleApp(app))
|
|
1993
|
-
return false;
|
|
1922
|
+
if (isExampleApp(app)) return false;
|
|
1994
1923
|
return app.exerciseNumber === exerciseNumber && app.stepNumber === stepNumber && app.type === type;
|
|
1995
1924
|
});
|
|
1996
1925
|
if (!exerciseApp) {
|
|
@@ -2066,25 +1995,18 @@ async function setPlayground(srcDir, { reset } = {}) {
|
|
|
2066
1995
|
if (srcFile.includes(`${basename2}${path$1.sep}build`) || srcFile.includes(`${basename2}${path$1.sep}public${path$1.sep}build`)) {
|
|
2067
1996
|
return false;
|
|
2068
1997
|
}
|
|
2069
|
-
if (srcFile === srcDir)
|
|
2070
|
-
|
|
2071
|
-
if (srcFile.
|
|
2072
|
-
|
|
2073
|
-
if (srcFile.endsWith(".env"))
|
|
2074
|
-
return true;
|
|
2075
|
-
if (isIgnored(srcFile))
|
|
2076
|
-
return false;
|
|
1998
|
+
if (srcFile === srcDir) return true;
|
|
1999
|
+
if (srcFile.includes("node_modules")) return true;
|
|
2000
|
+
if (srcFile.endsWith(".env")) return true;
|
|
2001
|
+
if (isIgnored(srcFile)) return false;
|
|
2077
2002
|
try {
|
|
2078
2003
|
const isDir = (await fsExtra.stat(srcFile)).isDirectory();
|
|
2079
|
-
if (isDir)
|
|
2080
|
-
return true;
|
|
2004
|
+
if (isDir) return true;
|
|
2081
2005
|
const destIsDir = (await fsExtra.stat(destFile)).isDirectory();
|
|
2082
|
-
if (destIsDir)
|
|
2083
|
-
return true;
|
|
2006
|
+
if (destIsDir) return true;
|
|
2084
2007
|
const currentContents = await fsExtra.readFile(destFile);
|
|
2085
2008
|
const newContents = await fsExtra.readFile(srcFile);
|
|
2086
|
-
if (currentContents.equals(newContents))
|
|
2087
|
-
return false;
|
|
2009
|
+
if (currentContents.equals(newContents)) return false;
|
|
2088
2010
|
return true;
|
|
2089
2011
|
} catch {
|
|
2090
2012
|
return true;
|
|
@@ -2147,8 +2069,7 @@ async function getPlaygroundAppName() {
|
|
|
2147
2069
|
"utf8"
|
|
2148
2070
|
);
|
|
2149
2071
|
const { appName } = JSON.parse(jsonString);
|
|
2150
|
-
if (typeof appName !== "string")
|
|
2151
|
-
return null;
|
|
2072
|
+
if (typeof appName !== "string") return null;
|
|
2152
2073
|
return appName;
|
|
2153
2074
|
} catch {
|
|
2154
2075
|
return null;
|
|
@@ -2159,8 +2080,7 @@ async function getDirModifiedTime(dir) {
|
|
|
2159
2080
|
const files = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
2160
2081
|
const modifiedTimes2 = await Promise.all(
|
|
2161
2082
|
files.map(async (file) => {
|
|
2162
|
-
if (isIgnored(file.name))
|
|
2163
|
-
return 0;
|
|
2083
|
+
if (isIgnored(file.name)) return 0;
|
|
2164
2084
|
const filePath = path$1.join(dir, file.name);
|
|
2165
2085
|
if (file.isDirectory()) {
|
|
2166
2086
|
return getDirModifiedTime(filePath);
|
|
@@ -2366,8 +2286,7 @@ const DataSchema = z$1.object({
|
|
|
2366
2286
|
const appDir = path.join(os.homedir(), ".epicshop");
|
|
2367
2287
|
const dbPath = path.join(appDir, "data.json");
|
|
2368
2288
|
async function deleteDb() {
|
|
2369
|
-
if (process.env.EPICSHOP_DEPLOYED)
|
|
2370
|
-
return null;
|
|
2289
|
+
if (process.env.EPICSHOP_DEPLOYED) return null;
|
|
2371
2290
|
try {
|
|
2372
2291
|
if (await fsExtra.exists(dbPath)) {
|
|
2373
2292
|
await fsExtra.remove(dbPath);
|
|
@@ -2377,8 +2296,7 @@ async function deleteDb() {
|
|
|
2377
2296
|
}
|
|
2378
2297
|
}
|
|
2379
2298
|
async function readDb() {
|
|
2380
|
-
if (process.env.EPICSHOP_DEPLOYED)
|
|
2381
|
-
return null;
|
|
2299
|
+
if (process.env.EPICSHOP_DEPLOYED) return null;
|
|
2382
2300
|
try {
|
|
2383
2301
|
if (await fsExtra.exists(dbPath)) {
|
|
2384
2302
|
const db = DataSchema.parse(await fsExtra.readJSON(dbPath));
|
|
@@ -2401,8 +2319,7 @@ async function getAuthInfo() {
|
|
|
2401
2319
|
async function getUserInfo() {
|
|
2402
2320
|
var _a2, _b2;
|
|
2403
2321
|
const db = await readDb();
|
|
2404
|
-
if (!(db == null ? void 0 : db.authInfo))
|
|
2405
|
-
return null;
|
|
2322
|
+
if (!(db == null ? void 0 : db.authInfo)) return null;
|
|
2406
2323
|
return {
|
|
2407
2324
|
id: db.authInfo.id,
|
|
2408
2325
|
name: ((_a2 = db.discordMember) == null ? void 0 : _a2.displayName) ?? db.authInfo.name ?? null,
|
|
@@ -2542,17 +2459,11 @@ async function getPresentUsers(user, { timings, request } = {}) {
|
|
|
2542
2459
|
async getFreshValue(context) {
|
|
2543
2460
|
try {
|
|
2544
2461
|
const response = await Promise.race([
|
|
2545
|
-
(
|
|
2546
|
-
const connected = await checkConnection();
|
|
2547
|
-
if (!connected)
|
|
2548
|
-
throw new Error(`No internet connection`);
|
|
2549
|
-
return fetch(`${partykitBaseUrl}/presence`);
|
|
2550
|
-
})(),
|
|
2462
|
+
fetch(`${partykitBaseUrl}/presence`),
|
|
2551
2463
|
new Promise(
|
|
2552
|
-
(resolve) => setTimeout(
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
)
|
|
2464
|
+
(resolve) => setTimeout(() => {
|
|
2465
|
+
resolve(new Response("Timeout", { status: 500 }));
|
|
2466
|
+
}, 500)
|
|
2556
2467
|
)
|
|
2557
2468
|
]);
|
|
2558
2469
|
if (response.statusText === "Timeout") {
|
|
@@ -2571,7 +2482,7 @@ async function getPresentUsers(user, { timings, request } = {}) {
|
|
|
2571
2482
|
} else {
|
|
2572
2483
|
return uniqueUsers([...users, user]);
|
|
2573
2484
|
}
|
|
2574
|
-
} catch {
|
|
2485
|
+
} catch (error) {
|
|
2575
2486
|
context.metadata.ttl = 300;
|
|
2576
2487
|
return [];
|
|
2577
2488
|
}
|
|
@@ -2580,7 +2491,7 @@ async function getPresentUsers(user, { timings, request } = {}) {
|
|
|
2580
2491
|
}
|
|
2581
2492
|
function uniqueUsers(users) {
|
|
2582
2493
|
const seen = /* @__PURE__ */ new Set();
|
|
2583
|
-
return users.filter((user) => {
|
|
2494
|
+
return users.filter(Boolean).filter((user) => {
|
|
2584
2495
|
if (seen.has(user.id)) {
|
|
2585
2496
|
return false;
|
|
2586
2497
|
}
|
|
@@ -2589,8 +2500,7 @@ function uniqueUsers(users) {
|
|
|
2589
2500
|
});
|
|
2590
2501
|
}
|
|
2591
2502
|
function Confetti({ id }) {
|
|
2592
|
-
if (!id)
|
|
2593
|
-
return null;
|
|
2503
|
+
if (!id) return null;
|
|
2594
2504
|
return /* @__PURE__ */ jsx(ClientOnly, { children: () => /* @__PURE__ */ jsx(
|
|
2595
2505
|
Index$1,
|
|
2596
2506
|
{
|
|
@@ -2902,8 +2812,7 @@ const Heading = React.forwardRef(function Heading2({ id, children, as: asProp, c
|
|
|
2902
2812
|
);
|
|
2903
2813
|
});
|
|
2904
2814
|
function getErrorMessage(error) {
|
|
2905
|
-
if (typeof error === "string")
|
|
2906
|
-
return error;
|
|
2815
|
+
if (typeof error === "string") return error;
|
|
2907
2816
|
if (error && typeof error === "object" && "message" in error && typeof error.message === "string") {
|
|
2908
2817
|
return error.message;
|
|
2909
2818
|
}
|
|
@@ -2957,8 +2866,7 @@ function getBaseUrl({
|
|
|
2957
2866
|
function combineHeaders(...headers2) {
|
|
2958
2867
|
const combined = new Headers();
|
|
2959
2868
|
for (const header of headers2) {
|
|
2960
|
-
if (!header)
|
|
2961
|
-
continue;
|
|
2869
|
+
if (!header) continue;
|
|
2962
2870
|
for (const [key, value] of new Headers(header).entries()) {
|
|
2963
2871
|
combined.append(key, value);
|
|
2964
2872
|
}
|
|
@@ -2968,8 +2876,7 @@ function combineHeaders(...headers2) {
|
|
|
2968
2876
|
function debounce(fn, delay) {
|
|
2969
2877
|
let timer = null;
|
|
2970
2878
|
return (...args) => {
|
|
2971
|
-
if (timer)
|
|
2972
|
-
clearTimeout(timer);
|
|
2879
|
+
if (timer) clearTimeout(timer);
|
|
2973
2880
|
timer = setTimeout(() => {
|
|
2974
2881
|
fn(...args);
|
|
2975
2882
|
}, delay);
|
|
@@ -3028,14 +2935,11 @@ function EpicProgress() {
|
|
|
3028
2935
|
const isSubmitting = states.some((s) => s === "submitting");
|
|
3029
2936
|
const isLoading = states.some((s) => s === "loading");
|
|
3030
2937
|
useEffect(() => {
|
|
3031
|
-
if (!ref.current)
|
|
3032
|
-
|
|
3033
|
-
if (delayedPending)
|
|
3034
|
-
setAnimationComplete(false);
|
|
2938
|
+
if (!ref.current) return;
|
|
2939
|
+
if (delayedPending) setAnimationComplete(false);
|
|
3035
2940
|
const animationPromises = ref.current.getAnimations().map(({ finished }) => finished);
|
|
3036
2941
|
void Promise.allSettled(animationPromises).then(() => {
|
|
3037
|
-
if (!delayedPending)
|
|
3038
|
-
setAnimationComplete(true);
|
|
2942
|
+
if (!delayedPending) setAnimationComplete(true);
|
|
3039
2943
|
});
|
|
3040
2944
|
}, [delayedPending]);
|
|
3041
2945
|
return /* @__PURE__ */ jsx(
|
|
@@ -3078,25 +2982,31 @@ function ShowToast({ toast: toast$1 }) {
|
|
|
3078
2982
|
const TooltipProvider = TooltipPrimitive.Provider;
|
|
3079
2983
|
const Tooltip = TooltipPrimitive.Root;
|
|
3080
2984
|
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
2985
|
+
function TooltipContent({
|
|
2986
|
+
className,
|
|
2987
|
+
sideOffset = 4,
|
|
2988
|
+
ref,
|
|
2989
|
+
...props
|
|
2990
|
+
}) {
|
|
2991
|
+
return /* @__PURE__ */ jsx(
|
|
2992
|
+
TooltipPrimitive.Content,
|
|
2993
|
+
{
|
|
2994
|
+
ref,
|
|
2995
|
+
sideOffset,
|
|
2996
|
+
className: cn(
|
|
2997
|
+
"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
2998
|
+
className
|
|
2999
|
+
),
|
|
3000
|
+
...props
|
|
3001
|
+
}
|
|
3002
|
+
);
|
|
3003
|
+
}
|
|
3093
3004
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
3094
3005
|
function SimpleTooltip({
|
|
3095
3006
|
content,
|
|
3096
3007
|
children
|
|
3097
3008
|
}) {
|
|
3098
|
-
if (!content)
|
|
3099
|
-
return children;
|
|
3009
|
+
if (!content) return children;
|
|
3100
3010
|
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
3101
3011
|
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children }),
|
|
3102
3012
|
/* @__PURE__ */ jsx(TooltipContent, { children: content })
|
|
@@ -3152,16 +3062,14 @@ function ErrorList({
|
|
|
3152
3062
|
errors
|
|
3153
3063
|
}) {
|
|
3154
3064
|
const errorsToRender = errors == null ? void 0 : errors.filter(Boolean);
|
|
3155
|
-
if (!(errorsToRender == null ? void 0 : errorsToRender.length))
|
|
3156
|
-
return null;
|
|
3065
|
+
if (!(errorsToRender == null ? void 0 : errorsToRender.length)) return null;
|
|
3157
3066
|
return /* @__PURE__ */ jsx("ul", { id, className: "space-y-1", children: errorsToRender.map((e) => /* @__PURE__ */ jsx("li", { className: "text-danger text-[10px]", children: e }, e)) });
|
|
3158
3067
|
}
|
|
3159
3068
|
const cookieName$1 = "EpicShop_theme";
|
|
3160
3069
|
function getTheme(request) {
|
|
3161
3070
|
const cookieHeader = request.headers.get("cookie");
|
|
3162
3071
|
const parsed = cookieHeader ? cookie.parse(cookieHeader)[cookieName$1] : null;
|
|
3163
|
-
if (parsed === "light" || parsed === "dark")
|
|
3164
|
-
return parsed;
|
|
3072
|
+
if (parsed === "light" || parsed === "dark") return parsed;
|
|
3165
3073
|
return null;
|
|
3166
3074
|
}
|
|
3167
3075
|
function setTheme(theme) {
|
|
@@ -3204,7 +3112,7 @@ function ThemeSwitch() {
|
|
|
3204
3112
|
setIsHydrated(true);
|
|
3205
3113
|
}, []);
|
|
3206
3114
|
const [form] = useForm({
|
|
3207
|
-
id: "
|
|
3115
|
+
id: "theme-switcher",
|
|
3208
3116
|
lastResult: fetcher.data,
|
|
3209
3117
|
onValidate({ formData }) {
|
|
3210
3118
|
return parseWithZod(formData, { schema: ThemeFormSchema });
|
|
@@ -3247,8 +3155,7 @@ function useTheme() {
|
|
|
3247
3155
|
}
|
|
3248
3156
|
);
|
|
3249
3157
|
const optimisticTheme = (_a2 = fetcher == null ? void 0 : fetcher.formData) == null ? void 0 : _a2.get("theme");
|
|
3250
|
-
if (optimisticTheme === "system")
|
|
3251
|
-
return hints.theme;
|
|
3158
|
+
if (optimisticTheme === "system") return hints.theme;
|
|
3252
3159
|
if (optimisticTheme === "light" || optimisticTheme === "dark") {
|
|
3253
3160
|
return optimisticTheme;
|
|
3254
3161
|
}
|
|
@@ -3261,7 +3168,7 @@ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
3261
3168
|
useTheme
|
|
3262
3169
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3263
3170
|
const appStylesheetUrl = "/assets/app-BKC4z3M_.css";
|
|
3264
|
-
const tailwindStylesheetUrl = "/assets/tailwind-
|
|
3171
|
+
const tailwindStylesheetUrl = "/assets/tailwind-D2vjZZFL.css";
|
|
3265
3172
|
const cookieName = "EpicShop_confetti";
|
|
3266
3173
|
function getConfetti(request) {
|
|
3267
3174
|
const cookieHeader = request.headers.get("cookie");
|
|
@@ -3313,11 +3220,9 @@ const CachedEpicVideoInfoSchema = z$1.object({
|
|
|
3313
3220
|
})
|
|
3314
3221
|
).or(z$1.null());
|
|
3315
3222
|
async function getEpicVideoInfos(epicWebUrls, { request, timings } = {}) {
|
|
3316
|
-
if (!epicWebUrls)
|
|
3317
|
-
return {};
|
|
3223
|
+
if (!epicWebUrls) return {};
|
|
3318
3224
|
const authInfo = await getAuthInfo();
|
|
3319
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3320
|
-
return {};
|
|
3225
|
+
if (ENV.EPICSHOP_DEPLOYED) return {};
|
|
3321
3226
|
const epicVideoInfos = {};
|
|
3322
3227
|
for (const epicVideoEmbed of epicWebUrls) {
|
|
3323
3228
|
const epicVideoInfo = await getEpicVideoInfo({
|
|
@@ -3350,8 +3255,7 @@ async function getEpicVideoInfo({
|
|
|
3350
3255
|
checkValue: CachedEpicVideoInfoSchema,
|
|
3351
3256
|
async getFreshValue(context) {
|
|
3352
3257
|
const epicWebUrl = new URL(epicVideoEmbed);
|
|
3353
|
-
if (epicWebUrl.host !== "www.epicweb.dev")
|
|
3354
|
-
return null;
|
|
3258
|
+
if (epicWebUrl.host !== "www.epicweb.dev") return null;
|
|
3355
3259
|
const infoResponse = await fetch(
|
|
3356
3260
|
`https://www.epicweb.dev/api${epicWebUrl.pathname}`,
|
|
3357
3261
|
accessToken ? { headers: { authorization: `Bearer ${accessToken}` } } : void 0
|
|
@@ -3413,11 +3317,9 @@ async function getEpicProgress({
|
|
|
3413
3317
|
request,
|
|
3414
3318
|
forceFresh
|
|
3415
3319
|
} = {}) {
|
|
3416
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3417
|
-
return [];
|
|
3320
|
+
if (ENV.EPICSHOP_DEPLOYED) return [];
|
|
3418
3321
|
const authInfo = await getAuthInfo();
|
|
3419
|
-
if (!authInfo)
|
|
3420
|
-
return [];
|
|
3322
|
+
if (!authInfo) return [];
|
|
3421
3323
|
const tokenPart = md5(authInfo.tokenSet.access_token);
|
|
3422
3324
|
const EpicProgressSchema = z$1.array(
|
|
3423
3325
|
z$1.object({
|
|
@@ -3456,14 +3358,11 @@ async function getProgress({
|
|
|
3456
3358
|
timings,
|
|
3457
3359
|
request
|
|
3458
3360
|
} = {}) {
|
|
3459
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3460
|
-
return [];
|
|
3361
|
+
if (ENV.EPICSHOP_DEPLOYED) return [];
|
|
3461
3362
|
const authInfo = await getAuthInfo();
|
|
3462
|
-
if (!authInfo)
|
|
3463
|
-
return [];
|
|
3363
|
+
if (!authInfo) return [];
|
|
3464
3364
|
const epicWorkshopSlug = await getEpicWorkshopSlug();
|
|
3465
|
-
if (!epicWorkshopSlug)
|
|
3466
|
-
return [];
|
|
3365
|
+
if (!epicWorkshopSlug) return [];
|
|
3467
3366
|
const [
|
|
3468
3367
|
workshopData,
|
|
3469
3368
|
epicProgress,
|
|
@@ -3595,11 +3494,9 @@ async function getWorkshopData(epicWorkshopSlug, {
|
|
|
3595
3494
|
request,
|
|
3596
3495
|
forceFresh
|
|
3597
3496
|
} = {}) {
|
|
3598
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3599
|
-
return { sections: [] };
|
|
3497
|
+
if (ENV.EPICSHOP_DEPLOYED) return { sections: [] };
|
|
3600
3498
|
const authInfo = await getAuthInfo();
|
|
3601
|
-
if (!authInfo)
|
|
3602
|
-
return { sections: [] };
|
|
3499
|
+
if (!authInfo) return { sections: [] };
|
|
3603
3500
|
return cachified({
|
|
3604
3501
|
key: `epic-workshop-data:${epicWorkshopSlug}`,
|
|
3605
3502
|
cache: fsCache,
|
|
@@ -3646,13 +3543,10 @@ function usePresenceSocket(user) {
|
|
|
3646
3543
|
const data = useRouteLoaderData("root");
|
|
3647
3544
|
const [users, setUsers] = useState((data == null ? void 0 : data.presence.users) ?? []);
|
|
3648
3545
|
const [clientId] = useState(() => {
|
|
3649
|
-
if (typeof document === "undefined")
|
|
3650
|
-
|
|
3651
|
-
if (user)
|
|
3652
|
-
return user.id;
|
|
3546
|
+
if (typeof document === "undefined") return null;
|
|
3547
|
+
if (user) return user.id;
|
|
3653
3548
|
const clientId2 = sessionStorage.getItem("clientId");
|
|
3654
|
-
if (clientId2)
|
|
3655
|
-
return clientId2;
|
|
3549
|
+
if (clientId2) return clientId2;
|
|
3656
3550
|
const newClientId = createId();
|
|
3657
3551
|
sessionStorage.setItem("clientId", newClientId);
|
|
3658
3552
|
return newClientId;
|
|
@@ -3664,8 +3558,7 @@ function usePresenceSocket(user) {
|
|
|
3664
3558
|
const messageResult = MessageSchema.safeParse(
|
|
3665
3559
|
JSON.parse(String(evt.data))
|
|
3666
3560
|
);
|
|
3667
|
-
if (!messageResult.success)
|
|
3668
|
-
return;
|
|
3561
|
+
if (!messageResult.success) return;
|
|
3669
3562
|
if (messageResult.data.type === "presence") {
|
|
3670
3563
|
setUsers(messageResult.data.payload.users);
|
|
3671
3564
|
}
|
|
@@ -3703,8 +3596,7 @@ function usePresenceSocket(user) {
|
|
|
3703
3596
|
}
|
|
3704
3597
|
const messageJson = message ? JSON.stringify(message) : null;
|
|
3705
3598
|
useEffect(() => {
|
|
3706
|
-
if (messageJson)
|
|
3707
|
-
socket.send(messageJson);
|
|
3599
|
+
if (messageJson) socket.send(messageJson);
|
|
3708
3600
|
}, [messageJson, socket]);
|
|
3709
3601
|
const scoredUsers = scoreUsers(location, users);
|
|
3710
3602
|
return { users: scoredUsers };
|
|
@@ -3729,8 +3621,7 @@ function scoreUsers(location, users) {
|
|
|
3729
3621
|
return { user, score: Math.floor(score / available * 10) / 10 };
|
|
3730
3622
|
});
|
|
3731
3623
|
return scoredUsers.sort((a, b) => {
|
|
3732
|
-
if (a.score === b.score)
|
|
3733
|
-
return 0;
|
|
3624
|
+
if (a.score === b.score) return 0;
|
|
3734
3625
|
return a.score > b.score ? -1 : 1;
|
|
3735
3626
|
});
|
|
3736
3627
|
}
|
|
@@ -3845,8 +3736,7 @@ const links = () => {
|
|
|
3845
3736
|
];
|
|
3846
3737
|
};
|
|
3847
3738
|
const meta$5 = ({ data }) => {
|
|
3848
|
-
if (!data)
|
|
3849
|
-
return [];
|
|
3739
|
+
if (!data) return [];
|
|
3850
3740
|
return getSeoMetaTags({
|
|
3851
3741
|
instructor: data.instructor,
|
|
3852
3742
|
title: data.workshopTitle,
|
|
@@ -4104,6 +3994,103 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
4104
3994
|
default: NotFound,
|
|
4105
3995
|
loader: loader$r
|
|
4106
3996
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3997
|
+
function makeMediaQueryStore(mediaQuery, serverSnapshot) {
|
|
3998
|
+
function getSnapshot() {
|
|
3999
|
+
return window.matchMedia(mediaQuery).matches;
|
|
4000
|
+
}
|
|
4001
|
+
function subscribe(callback) {
|
|
4002
|
+
const mediaQueryList = window.matchMedia(mediaQuery);
|
|
4003
|
+
mediaQueryList.addEventListener("change", callback);
|
|
4004
|
+
return () => {
|
|
4005
|
+
mediaQueryList.removeEventListener("change", callback);
|
|
4006
|
+
};
|
|
4007
|
+
}
|
|
4008
|
+
return function useMediaQuery() {
|
|
4009
|
+
return useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot);
|
|
4010
|
+
};
|
|
4011
|
+
}
|
|
4012
|
+
const Dialog = DialogPrimitive.Root;
|
|
4013
|
+
const DialogTrigger = DialogPrimitive.Trigger;
|
|
4014
|
+
const DialogPortal = DialogPrimitive.Portal;
|
|
4015
|
+
function DialogOverlay({
|
|
4016
|
+
className,
|
|
4017
|
+
ref,
|
|
4018
|
+
...props
|
|
4019
|
+
}) {
|
|
4020
|
+
return /* @__PURE__ */ jsx(
|
|
4021
|
+
DialogPrimitive.Overlay,
|
|
4022
|
+
{
|
|
4023
|
+
ref,
|
|
4024
|
+
className: cn(
|
|
4025
|
+
"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",
|
|
4026
|
+
className
|
|
4027
|
+
),
|
|
4028
|
+
...props
|
|
4029
|
+
}
|
|
4030
|
+
);
|
|
4031
|
+
}
|
|
4032
|
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
4033
|
+
function DialogContent({
|
|
4034
|
+
className,
|
|
4035
|
+
children,
|
|
4036
|
+
ref,
|
|
4037
|
+
...props
|
|
4038
|
+
}) {
|
|
4039
|
+
return /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
4040
|
+
/* @__PURE__ */ jsx(DialogOverlay, {}),
|
|
4041
|
+
/* @__PURE__ */ jsxs(
|
|
4042
|
+
DialogPrimitive.Content,
|
|
4043
|
+
{
|
|
4044
|
+
ref,
|
|
4045
|
+
className: cn(
|
|
4046
|
+
"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",
|
|
4047
|
+
className
|
|
4048
|
+
),
|
|
4049
|
+
...props,
|
|
4050
|
+
children: [
|
|
4051
|
+
children,
|
|
4052
|
+
/* @__PURE__ */ jsxs(DialogPrimitive.Close, { 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: [
|
|
4053
|
+
/* @__PURE__ */ jsx(Icon, { name: "Close" }),
|
|
4054
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
4055
|
+
] })
|
|
4056
|
+
]
|
|
4057
|
+
}
|
|
4058
|
+
)
|
|
4059
|
+
] });
|
|
4060
|
+
}
|
|
4061
|
+
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
4062
|
+
function DialogHeader({
|
|
4063
|
+
className,
|
|
4064
|
+
...props
|
|
4065
|
+
}) {
|
|
4066
|
+
return /* @__PURE__ */ jsx(
|
|
4067
|
+
"div",
|
|
4068
|
+
{
|
|
4069
|
+
className: cn(
|
|
4070
|
+
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
4071
|
+
className
|
|
4072
|
+
),
|
|
4073
|
+
...props
|
|
4074
|
+
}
|
|
4075
|
+
);
|
|
4076
|
+
}
|
|
4077
|
+
DialogHeader.displayName = "DialogHeader";
|
|
4078
|
+
DialogPrimitive.Title.displayName;
|
|
4079
|
+
function DialogDescription({
|
|
4080
|
+
className,
|
|
4081
|
+
ref,
|
|
4082
|
+
...props
|
|
4083
|
+
}) {
|
|
4084
|
+
return /* @__PURE__ */ jsx(
|
|
4085
|
+
DialogPrimitive.Description,
|
|
4086
|
+
{
|
|
4087
|
+
ref,
|
|
4088
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
4089
|
+
...props
|
|
4090
|
+
}
|
|
4091
|
+
);
|
|
4092
|
+
}
|
|
4093
|
+
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
4107
4094
|
function useOptionalUser() {
|
|
4108
4095
|
const data = useRouteLoaderData("root");
|
|
4109
4096
|
return data == null ? void 0 : data.user;
|
|
@@ -4129,8 +4116,7 @@ function useEpicProgress() {
|
|
|
4129
4116
|
return f.formAction === "/progress" && ((_a2 = f.formData) == null ? void 0 : _a2.has("complete"));
|
|
4130
4117
|
}
|
|
4131
4118
|
);
|
|
4132
|
-
if (!progressFetcher || !(data == null ? void 0 : data.progress))
|
|
4133
|
-
return (data == null ? void 0 : data.progress) ?? null;
|
|
4119
|
+
if (!progressFetcher || !(data == null ? void 0 : data.progress)) return (data == null ? void 0 : data.progress) ?? null;
|
|
4134
4120
|
return data.progress.map((p) => {
|
|
4135
4121
|
var _a2, _b2;
|
|
4136
4122
|
const optimisticCompleted = ((_a2 = progressFetcher.formData) == null ? void 0 : _a2.get("complete")) === "true";
|
|
@@ -4147,49 +4133,34 @@ function useEpicProgress() {
|
|
|
4147
4133
|
}
|
|
4148
4134
|
function useRequireEpicProgress() {
|
|
4149
4135
|
const progress = useEpicProgress();
|
|
4150
|
-
if (!progress)
|
|
4151
|
-
return [];
|
|
4136
|
+
if (!progress) return [];
|
|
4152
4137
|
return progress;
|
|
4153
4138
|
}
|
|
4154
4139
|
function useNextExerciseRoute() {
|
|
4155
4140
|
const progress = useEpicProgress();
|
|
4156
|
-
if (!progress)
|
|
4157
|
-
return null;
|
|
4141
|
+
if (!progress) return null;
|
|
4158
4142
|
const scoreProgress = (a) => {
|
|
4159
|
-
if (a.type === "workshop-instructions")
|
|
4160
|
-
|
|
4161
|
-
if (a.type === "
|
|
4162
|
-
|
|
4163
|
-
if (a.type === "
|
|
4164
|
-
|
|
4165
|
-
if (a.type === "step")
|
|
4166
|
-
return a.exerciseNumber * 100 + a.stepNumber;
|
|
4167
|
-
if (a.type === "finished")
|
|
4168
|
-
return a.exerciseNumber * 100 + 100;
|
|
4169
|
-
if (a.type === "unknown")
|
|
4170
|
-
return 1e5;
|
|
4143
|
+
if (a.type === "workshop-instructions") return 0;
|
|
4144
|
+
if (a.type === "workshop-finished") return 1e4;
|
|
4145
|
+
if (a.type === "instructions") return a.exerciseNumber * 100;
|
|
4146
|
+
if (a.type === "step") return a.exerciseNumber * 100 + a.stepNumber;
|
|
4147
|
+
if (a.type === "finished") return a.exerciseNumber * 100 + 100;
|
|
4148
|
+
if (a.type === "unknown") return 1e5;
|
|
4171
4149
|
return -1;
|
|
4172
4150
|
};
|
|
4173
4151
|
const sortedProgress = progress.sort((a, b) => {
|
|
4174
4152
|
return scoreProgress(a) - scoreProgress(b);
|
|
4175
4153
|
});
|
|
4176
4154
|
const nextProgress = sortedProgress.find((p) => !p.epicCompletedAt);
|
|
4177
|
-
if (!nextProgress)
|
|
4178
|
-
|
|
4179
|
-
if (nextProgress.type === "
|
|
4180
|
-
|
|
4181
|
-
if (nextProgress.type === "workshop-instructions")
|
|
4182
|
-
return "/";
|
|
4183
|
-
if (nextProgress.type === "workshop-finished")
|
|
4184
|
-
return "/finished";
|
|
4155
|
+
if (!nextProgress) return null;
|
|
4156
|
+
if (nextProgress.type === "unknown") return null;
|
|
4157
|
+
if (nextProgress.type === "workshop-instructions") return "/";
|
|
4158
|
+
if (nextProgress.type === "workshop-finished") return "/finished";
|
|
4185
4159
|
const ex = nextProgress.exerciseNumber.toString().padStart(2, "0");
|
|
4186
|
-
if (nextProgress.type === "instructions")
|
|
4187
|
-
|
|
4188
|
-
if (nextProgress.type === "finished")
|
|
4189
|
-
return `/${ex}/finished`;
|
|
4160
|
+
if (nextProgress.type === "instructions") return `/${ex}`;
|
|
4161
|
+
if (nextProgress.type === "finished") return `/${ex}/finished`;
|
|
4190
4162
|
const st = nextProgress.stepNumber.toString().padStart(2, "0");
|
|
4191
|
-
if (nextProgress.type === "step")
|
|
4192
|
-
return `/${ex}/${st}/problem`;
|
|
4163
|
+
if (nextProgress.type === "step") return `/${ex}/${st}/problem`;
|
|
4193
4164
|
return null;
|
|
4194
4165
|
}
|
|
4195
4166
|
const percentageClassNames = {
|
|
@@ -4207,13 +4178,11 @@ const percentageClassNames = {
|
|
|
4207
4178
|
};
|
|
4208
4179
|
function useExerciseProgressClassName(exerciseNumber) {
|
|
4209
4180
|
const progress = useEpicProgress();
|
|
4210
|
-
if (!(progress == null ? void 0 : progress.length))
|
|
4211
|
-
return null;
|
|
4181
|
+
if (!(progress == null ? void 0 : progress.length)) return null;
|
|
4212
4182
|
const exerciseProgress = progress.filter(
|
|
4213
4183
|
(p) => (p.type === "instructions" || p.type === "step" || p.type === "finished") && p.exerciseNumber === exerciseNumber
|
|
4214
4184
|
);
|
|
4215
|
-
if (!exerciseProgress.length)
|
|
4216
|
-
return null;
|
|
4185
|
+
if (!exerciseProgress.length) return null;
|
|
4217
4186
|
const percentComlete = exerciseProgress.reduce(
|
|
4218
4187
|
(acc, p) => p.epicCompletedAt ? acc + 1 : acc,
|
|
4219
4188
|
0
|
|
@@ -4225,8 +4194,7 @@ function useExerciseProgressClassName(exerciseNumber) {
|
|
|
4225
4194
|
}
|
|
4226
4195
|
function useProgressItemClassName(progressItemSearch) {
|
|
4227
4196
|
const progressItem = useProgressItem(progressItemSearch);
|
|
4228
|
-
if (!(progressItem == null ? void 0 : progressItem.epicCompletedAt))
|
|
4229
|
-
return null;
|
|
4197
|
+
if (!(progressItem == null ? void 0 : progressItem.epicCompletedAt)) return null;
|
|
4230
4198
|
return `relative before:h-[100%] before:bg-highlight before:absolute before:left-0 before:top-0 before:w-[4px]`;
|
|
4231
4199
|
}
|
|
4232
4200
|
function useProgressItem({
|
|
@@ -4235,8 +4203,7 @@ function useProgressItem({
|
|
|
4235
4203
|
type
|
|
4236
4204
|
}) {
|
|
4237
4205
|
const progress = useEpicProgress();
|
|
4238
|
-
if (!(progress == null ? void 0 : progress.length))
|
|
4239
|
-
return null;
|
|
4206
|
+
if (!(progress == null ? void 0 : progress.length)) return null;
|
|
4240
4207
|
if (type === "workshop-finished" || type === "workshop-instructions") {
|
|
4241
4208
|
return progress.find((p) => p.type === type) ?? null;
|
|
4242
4209
|
} else if (type === "instructions" || type === "finished") {
|
|
@@ -4270,15 +4237,12 @@ async function action$b({ request }) {
|
|
|
4270
4237
|
(p) => p.epicLessonSlug === lessonSlug
|
|
4271
4238
|
);
|
|
4272
4239
|
function getCompletionAnnouncement() {
|
|
4273
|
-
if (!complete)
|
|
4274
|
-
|
|
4275
|
-
if (!lessonProgress)
|
|
4276
|
-
return null;
|
|
4240
|
+
if (!complete) return null;
|
|
4241
|
+
if (!lessonProgress) return null;
|
|
4277
4242
|
const allOtherAreFinished = beforeProgress.every(
|
|
4278
4243
|
(p) => p.epicCompletedAt || p.epicLessonSlug === lessonProgress.epicLessonSlug
|
|
4279
4244
|
);
|
|
4280
|
-
if (allOtherAreFinished)
|
|
4281
|
-
return "You completed the workshop!";
|
|
4245
|
+
if (allOtherAreFinished) return "You completed the workshop!";
|
|
4282
4246
|
if (lessonProgress.type === "workshop-instructions" || lessonProgress.type === "unknown" || lessonProgress.type === "workshop-finished") {
|
|
4283
4247
|
return null;
|
|
4284
4248
|
}
|
|
@@ -4334,17 +4298,14 @@ function ProgressToggle({
|
|
|
4334
4298
|
navigationLocationStateFrom
|
|
4335
4299
|
]);
|
|
4336
4300
|
React.useEffect(() => {
|
|
4337
|
-
if (!animationRef.current)
|
|
4338
|
-
|
|
4339
|
-
if (!startAnimation)
|
|
4340
|
-
return;
|
|
4301
|
+
if (!animationRef.current) return;
|
|
4302
|
+
if (!startAnimation) return;
|
|
4341
4303
|
const animationPromises = animationRef.current.getAnimations().map(({ finished }) => finished);
|
|
4342
4304
|
void Promise.allSettled(animationPromises).then(() => {
|
|
4343
4305
|
setStartAnimation(false);
|
|
4344
4306
|
});
|
|
4345
4307
|
}, [startAnimation]);
|
|
4346
|
-
if (ENV.EPICSHOP_DEPLOYED || !progressItem)
|
|
4347
|
-
return null;
|
|
4308
|
+
if (ENV.EPICSHOP_DEPLOYED || !progressItem) return null;
|
|
4348
4309
|
return /* @__PURE__ */ jsxs(progressFetcher.Form, { method: "POST", action: "/progress", children: [
|
|
4349
4310
|
/* @__PURE__ */ jsx(
|
|
4350
4311
|
"input",
|
|
@@ -4502,8 +4463,7 @@ function FacePile({ isMenuOpened }) {
|
|
|
4502
4463
|
const { users } = usePresence();
|
|
4503
4464
|
const limit = isMenuOpened ? 17 : 0;
|
|
4504
4465
|
const numberOverLimit = users.length - limit;
|
|
4505
|
-
if (!users.length)
|
|
4506
|
-
return null;
|
|
4466
|
+
if (!users.length) return null;
|
|
4507
4467
|
const tiffany = isMenuOpened && users.length === 1 ? /* @__PURE__ */ jsx(
|
|
4508
4468
|
Link,
|
|
4509
4469
|
{
|
|
@@ -4591,32 +4551,41 @@ function FacePile({ isMenuOpened }) {
|
|
|
4591
4551
|
] }) : null
|
|
4592
4552
|
] }) });
|
|
4593
4553
|
}
|
|
4554
|
+
const useIsWide = makeMediaQueryStore("(min-width: 640px)", true);
|
|
4594
4555
|
function App() {
|
|
4595
4556
|
const user = useOptionalUser();
|
|
4557
|
+
const isWide = useIsWide();
|
|
4596
4558
|
const [isMenuOpened, setMenuOpened] = React.useState(false);
|
|
4597
4559
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
4598
4560
|
user ? null : /* @__PURE__ */ jsx(EpicWebBanner, {}),
|
|
4561
|
+
/* @__PURE__ */ jsx(
|
|
4562
|
+
MobileNavigation,
|
|
4563
|
+
{
|
|
4564
|
+
isMenuOpened,
|
|
4565
|
+
onMenuOpenChange: setMenuOpened
|
|
4566
|
+
}
|
|
4567
|
+
),
|
|
4599
4568
|
/* @__PURE__ */ jsxs(
|
|
4600
4569
|
"div",
|
|
4601
4570
|
{
|
|
4602
|
-
className: cn("flex flex-grow", {
|
|
4603
|
-
"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]": !user,
|
|
4604
|
-
"h-[calc(100vh-
|
|
4605
|
-
"h-[
|
|
4571
|
+
className: cn("flex flex-grow flex-col sm:flex-row", {
|
|
4572
|
+
"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))]": !user,
|
|
4573
|
+
"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))]": user,
|
|
4574
|
+
"h-[unset]": !isWide && isMenuOpened
|
|
4606
4575
|
}),
|
|
4607
4576
|
children: [
|
|
4608
|
-
/* @__PURE__ */ jsx(
|
|
4577
|
+
isWide ? /* @__PURE__ */ jsx(
|
|
4609
4578
|
Navigation,
|
|
4610
4579
|
{
|
|
4611
4580
|
isMenuOpened,
|
|
4612
4581
|
onMenuOpenChange: setMenuOpened
|
|
4613
4582
|
}
|
|
4614
|
-
),
|
|
4583
|
+
) : null,
|
|
4615
4584
|
/* @__PURE__ */ jsx(
|
|
4616
4585
|
"div",
|
|
4617
4586
|
{
|
|
4618
4587
|
className: cn(
|
|
4619
|
-
"h-full w-full max-w-[calc(100%-56px)]",
|
|
4588
|
+
"h-full w-full max-w-full sm:max-w-[calc(100%-56px)]",
|
|
4620
4589
|
isMenuOpened ? "hidden md:block" : ""
|
|
4621
4590
|
),
|
|
4622
4591
|
children: /* @__PURE__ */ jsx(Outlet, {})
|
|
@@ -4628,8 +4597,7 @@ function App() {
|
|
|
4628
4597
|
] });
|
|
4629
4598
|
}
|
|
4630
4599
|
function getLocationLabel(location) {
|
|
4631
|
-
if (!location)
|
|
4632
|
-
return null;
|
|
4600
|
+
if (!location) return null;
|
|
4633
4601
|
const { exercise } = location;
|
|
4634
4602
|
const exercisePortion = [
|
|
4635
4603
|
exercise ? [exercise.exerciseNumber, exercise.stepNumber].filter(Boolean).map((s) => s.toString().padStart(2, "0")).join("/") : null,
|
|
@@ -4638,118 +4606,438 @@ function getLocationLabel(location) {
|
|
|
4638
4606
|
return { line1: location.workshopTitle, line2: exercisePortion };
|
|
4639
4607
|
}
|
|
4640
4608
|
function EpicWebBanner() {
|
|
4641
|
-
|
|
4642
|
-
|
|
4609
|
+
const isWide = useIsWide();
|
|
4610
|
+
const details = /* @__PURE__ */ jsx("div", { children: ENV.EPICSHOP_DEPLOYED ? /* @__PURE__ */ jsxs("div", { children: [
|
|
4611
|
+
`This is the deployed version. `,
|
|
4612
|
+
ENV.EPICSHOP_GITHUB_ROOT ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4613
|
+
/* @__PURE__ */ jsx(
|
|
4614
|
+
Link,
|
|
4615
|
+
{
|
|
4616
|
+
className: "underline",
|
|
4617
|
+
target: "_blank",
|
|
4618
|
+
rel: "noopener noreferrer",
|
|
4619
|
+
to: ENV.EPICSHOP_GITHUB_ROOT,
|
|
4620
|
+
children: "Run locally"
|
|
4621
|
+
}
|
|
4622
|
+
),
|
|
4623
|
+
` for full experience.`
|
|
4624
|
+
] }) : null,
|
|
4625
|
+
" "
|
|
4626
|
+
] }) : /* @__PURE__ */ jsxs("div", { children: [
|
|
4627
|
+
/* @__PURE__ */ jsx(Link, { to: "/login", className: "underline", children: "Login" }),
|
|
4628
|
+
" ",
|
|
4629
|
+
"or",
|
|
4630
|
+
" ",
|
|
4631
|
+
/* @__PURE__ */ jsx("a", { href: "https://www.epicweb.dev/login", className: "underline", children: "join for free" }),
|
|
4632
|
+
" ",
|
|
4633
|
+
"for the full experience."
|
|
4634
|
+
] }) });
|
|
4635
|
+
return /* @__PURE__ */ 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: isWide ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4636
|
+
/* @__PURE__ */ jsxs("div", { className: "hidden flex-1 flex-wrap items-center gap-4 sm:flex", children: [
|
|
4637
|
+
/* @__PURE__ */ jsx(Icon, { name: "EpicWeb", size: "lg" }),
|
|
4638
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-wrap items-center", children: [
|
|
4639
|
+
/* @__PURE__ */ jsxs("p", { className: "mr-2", children: [
|
|
4640
|
+
"Welcome to the",
|
|
4641
|
+
" ",
|
|
4642
|
+
/* @__PURE__ */ jsx(
|
|
4643
|
+
Link,
|
|
4644
|
+
{
|
|
4645
|
+
to: "https://www.epicweb.dev",
|
|
4646
|
+
className: "underline",
|
|
4647
|
+
target: "_blank",
|
|
4648
|
+
children: "EpicWeb.dev"
|
|
4649
|
+
}
|
|
4650
|
+
),
|
|
4651
|
+
" ",
|
|
4652
|
+
"Workshop app!"
|
|
4653
|
+
] }),
|
|
4654
|
+
details
|
|
4655
|
+
] })
|
|
4656
|
+
] }),
|
|
4657
|
+
/* @__PURE__ */ jsxs("div", { className: "hidden h-full flex-col items-center sm:flex md:flex-row", children: [
|
|
4658
|
+
/* @__PURE__ */ jsxs(
|
|
4659
|
+
Link,
|
|
4660
|
+
{
|
|
4661
|
+
to: "https://www.epicweb.dev",
|
|
4662
|
+
target: "_blank",
|
|
4663
|
+
className: "flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",
|
|
4664
|
+
children: [
|
|
4665
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Join Epic Web" }),
|
|
4666
|
+
/* @__PURE__ */ jsx("span", { children: "↗︎" })
|
|
4667
|
+
]
|
|
4668
|
+
}
|
|
4669
|
+
),
|
|
4670
|
+
/* @__PURE__ */ jsxs(
|
|
4671
|
+
Link,
|
|
4672
|
+
{
|
|
4673
|
+
to: ENV.EPICSHOP_DEPLOYED ? "https://www.epicweb.dev/login" : "/login",
|
|
4674
|
+
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",
|
|
4675
|
+
children: [
|
|
4676
|
+
/* @__PURE__ */ jsx(Icon, { name: "User", size: "lg" }),
|
|
4677
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Login" })
|
|
4678
|
+
]
|
|
4679
|
+
}
|
|
4680
|
+
)
|
|
4681
|
+
] })
|
|
4682
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4683
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-4 sm:hidden", children: [
|
|
4684
|
+
/* @__PURE__ */ jsx("a", { href: "https://www.epicweb.dev", children: /* @__PURE__ */ jsx(Icon, { name: "EpicWeb", size: "lg" }) }),
|
|
4685
|
+
/* @__PURE__ */ jsxs(Dialog, { children: [
|
|
4686
|
+
/* @__PURE__ */ jsx(DialogTrigger, { children: /* @__PURE__ */ jsx(Icon, { name: "Question", size: "lg", className: "animate-pulse" }) }),
|
|
4687
|
+
/* @__PURE__ */ jsxs(DialogContent, { children: [
|
|
4688
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
4689
|
+
/* @__PURE__ */ jsx(Icon, { name: "EpicWeb", size: "lg" }),
|
|
4690
|
+
/* @__PURE__ */ jsx("span", { className: "text-lg font-semibold", children: "EpicWeb.dev" })
|
|
4691
|
+
] }),
|
|
4692
|
+
/* @__PURE__ */ jsxs(DialogDescription, { children: [
|
|
4693
|
+
"Welcome to the",
|
|
4694
|
+
" ",
|
|
4695
|
+
/* @__PURE__ */ jsx(Link, { to: "https://www.epicweb.dev", className: "underline", children: "EpicWeb.dev" }),
|
|
4696
|
+
" ",
|
|
4697
|
+
"Workshop app!"
|
|
4698
|
+
] }),
|
|
4699
|
+
details
|
|
4700
|
+
] })
|
|
4701
|
+
] })
|
|
4702
|
+
] }),
|
|
4703
|
+
/* @__PURE__ */ jsxs("div", { className: "flex h-full items-center", children: [
|
|
4704
|
+
/* @__PURE__ */ jsxs(
|
|
4705
|
+
Link,
|
|
4706
|
+
{
|
|
4707
|
+
to: "https://www.epicweb.dev",
|
|
4708
|
+
target: "_blank",
|
|
4709
|
+
className: "flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",
|
|
4710
|
+
children: [
|
|
4711
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Join" }),
|
|
4712
|
+
/* @__PURE__ */ jsx("span", { children: "↗︎" })
|
|
4713
|
+
]
|
|
4714
|
+
}
|
|
4715
|
+
),
|
|
4716
|
+
/* @__PURE__ */ jsxs(
|
|
4717
|
+
Link,
|
|
4718
|
+
{
|
|
4719
|
+
to: ENV.EPICSHOP_DEPLOYED ? "https://www.epicweb.dev/login" : "/login",
|
|
4720
|
+
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",
|
|
4721
|
+
children: [
|
|
4722
|
+
/* @__PURE__ */ jsx(Icon, { name: "User", size: "lg" }),
|
|
4723
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Login" })
|
|
4724
|
+
]
|
|
4725
|
+
}
|
|
4726
|
+
)
|
|
4727
|
+
] })
|
|
4728
|
+
] }) });
|
|
4729
|
+
}
|
|
4730
|
+
const itemVariants = {
|
|
4731
|
+
hidden: { opacity: 0, x: -20 },
|
|
4732
|
+
visible: { opacity: 1, x: 0 }
|
|
4733
|
+
};
|
|
4734
|
+
function NavigationExerciseListItem({
|
|
4735
|
+
exerciseNumber,
|
|
4736
|
+
children
|
|
4737
|
+
}) {
|
|
4738
|
+
const progressClassName = useExerciseProgressClassName(exerciseNumber);
|
|
4739
|
+
return /* @__PURE__ */ jsx(
|
|
4740
|
+
motion.li,
|
|
4643
4741
|
{
|
|
4742
|
+
variants: itemVariants,
|
|
4644
4743
|
className: cn(
|
|
4645
|
-
|
|
4646
|
-
|
|
4744
|
+
// add gap of 3 to children, but using padding so the progress extends through the whole height
|
|
4745
|
+
"py-[6px] first:pt-3 last:pb-3",
|
|
4746
|
+
progressClassName ? `${progressClassName} before:border-t` : null
|
|
4647
4747
|
),
|
|
4748
|
+
children: /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
4749
|
+
}
|
|
4750
|
+
);
|
|
4751
|
+
}
|
|
4752
|
+
function NavigationExerciseStepListItem({
|
|
4753
|
+
children,
|
|
4754
|
+
...progressItemSearch
|
|
4755
|
+
}) {
|
|
4756
|
+
const progressClassName = useProgressItemClassName(progressItemSearch);
|
|
4757
|
+
return /* @__PURE__ */ jsx(
|
|
4758
|
+
motion.li,
|
|
4759
|
+
{
|
|
4760
|
+
variants: itemVariants,
|
|
4761
|
+
className: cn(
|
|
4762
|
+
// add gap of 3 to children, but using padding so the progress extends through the whole height
|
|
4763
|
+
"py-[6px] first:pt-3 last:pb-3",
|
|
4764
|
+
progressClassName ? `${progressClassName} before:border-t` : null
|
|
4765
|
+
),
|
|
4766
|
+
children: /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
4767
|
+
}
|
|
4768
|
+
);
|
|
4769
|
+
}
|
|
4770
|
+
function MobileNavigation({
|
|
4771
|
+
isMenuOpened,
|
|
4772
|
+
onMenuOpenChange: setMenuOpened
|
|
4773
|
+
}) {
|
|
4774
|
+
const data = useLoaderData();
|
|
4775
|
+
const user = useOptionalUser();
|
|
4776
|
+
const nextExerciseRoute = useNextExerciseRoute();
|
|
4777
|
+
const params = useParams();
|
|
4778
|
+
const { users } = usePresence();
|
|
4779
|
+
const listVariants = {
|
|
4780
|
+
visible: {
|
|
4781
|
+
opacity: 1,
|
|
4782
|
+
transition: {
|
|
4783
|
+
duration: 0.05,
|
|
4784
|
+
when: "beforeChildren",
|
|
4785
|
+
staggerChildren: 0.03
|
|
4786
|
+
}
|
|
4787
|
+
},
|
|
4788
|
+
hidden: {
|
|
4789
|
+
opacity: 0
|
|
4790
|
+
}
|
|
4791
|
+
};
|
|
4792
|
+
return /* @__PURE__ */ jsx("nav", { className: "flex w-full border-b sm:hidden", children: /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsxs(
|
|
4793
|
+
"div",
|
|
4794
|
+
{
|
|
4795
|
+
className: cn("flex items-center", {
|
|
4796
|
+
"flex-col": isMenuOpened,
|
|
4797
|
+
"h-14": !isMenuOpened
|
|
4798
|
+
}),
|
|
4648
4799
|
children: [
|
|
4649
|
-
/* @__PURE__ */
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4800
|
+
/* @__PURE__ */ jsx(
|
|
4801
|
+
NavToggle,
|
|
4802
|
+
{
|
|
4803
|
+
title: data.workshopTitle,
|
|
4804
|
+
isMenuOpened,
|
|
4805
|
+
setMenuOpened
|
|
4806
|
+
}
|
|
4807
|
+
),
|
|
4808
|
+
isMenuOpened && /* @__PURE__ */ jsxs(
|
|
4809
|
+
motion.div,
|
|
4810
|
+
{
|
|
4811
|
+
className: "flex w-full flex-grow flex-col justify-between overflow-x-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",
|
|
4812
|
+
initial: { opacity: 0 },
|
|
4813
|
+
animate: { opacity: 1 },
|
|
4814
|
+
children: [
|
|
4655
4815
|
/* @__PURE__ */ jsx(
|
|
4656
|
-
|
|
4816
|
+
motion.ul,
|
|
4657
4817
|
{
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4818
|
+
variants: listVariants,
|
|
4819
|
+
initial: "hidden",
|
|
4820
|
+
animate: "visible",
|
|
4821
|
+
className: "flex flex-col",
|
|
4822
|
+
children: data.exercises.map(({ exerciseNumber, title, steps }) => {
|
|
4823
|
+
const isActive = Number(params.exerciseNumber) === exerciseNumber;
|
|
4824
|
+
const showPlayground = !isActive && data.playground.exerciseNumber === exerciseNumber;
|
|
4825
|
+
const exerciseNum = exerciseNumber.toString().padStart(2, "0");
|
|
4826
|
+
return /* @__PURE__ */ jsxs(
|
|
4827
|
+
NavigationExerciseListItem,
|
|
4828
|
+
{
|
|
4829
|
+
exerciseNumber,
|
|
4830
|
+
children: [
|
|
4831
|
+
/* @__PURE__ */ jsxs(
|
|
4832
|
+
Link,
|
|
4833
|
+
{
|
|
4834
|
+
prefetch: "intent",
|
|
4835
|
+
to: `/${exerciseNum}`,
|
|
4836
|
+
className: clsx(
|
|
4837
|
+
"relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",
|
|
4838
|
+
'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',
|
|
4839
|
+
{ "bg-foreground text-background": isActive }
|
|
4840
|
+
),
|
|
4841
|
+
children: [
|
|
4842
|
+
title,
|
|
4843
|
+
showPlayground ? " 🛝" : null
|
|
4844
|
+
]
|
|
4845
|
+
}
|
|
4846
|
+
),
|
|
4847
|
+
isActive ? /* @__PURE__ */ jsxs(
|
|
4848
|
+
motion.ul,
|
|
4849
|
+
{
|
|
4850
|
+
variants: listVariants,
|
|
4851
|
+
initial: "hidden",
|
|
4852
|
+
animate: "visible",
|
|
4853
|
+
className: "ml-4 mt-4 flex flex-col",
|
|
4854
|
+
children: [
|
|
4855
|
+
/* @__PURE__ */ jsx(
|
|
4856
|
+
NavigationExerciseStepListItem,
|
|
4857
|
+
{
|
|
4858
|
+
type: "instructions",
|
|
4859
|
+
exerciseNumber,
|
|
4860
|
+
children: /* @__PURE__ */ jsx(
|
|
4861
|
+
Link,
|
|
4862
|
+
{
|
|
4863
|
+
to: `/${exerciseNum}`,
|
|
4864
|
+
prefetch: "intent",
|
|
4865
|
+
className: clsx(
|
|
4866
|
+
'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',
|
|
4867
|
+
{
|
|
4868
|
+
"bg-foreground text-background": !params.stepNumber
|
|
4869
|
+
}
|
|
4870
|
+
),
|
|
4871
|
+
children: "Intro"
|
|
4872
|
+
}
|
|
4873
|
+
)
|
|
4874
|
+
},
|
|
4875
|
+
exerciseNumber
|
|
4876
|
+
),
|
|
4877
|
+
steps.filter(Boolean).map(({ name, stepNumber, title: title2 }) => {
|
|
4878
|
+
const isActive2 = Number(params.stepNumber) === stepNumber;
|
|
4879
|
+
const step = stepNumber.toString().padStart(2, "0");
|
|
4880
|
+
const isPlayground = name === data.playground.appName;
|
|
4881
|
+
return /* @__PURE__ */ jsx(
|
|
4882
|
+
NavigationExerciseStepListItem,
|
|
4883
|
+
{
|
|
4884
|
+
type: "step",
|
|
4885
|
+
stepNumber,
|
|
4886
|
+
exerciseNumber,
|
|
4887
|
+
children: /* @__PURE__ */ jsx(
|
|
4888
|
+
Link,
|
|
4889
|
+
{
|
|
4890
|
+
to: `/${exerciseNum}/${step}`,
|
|
4891
|
+
prefetch: "intent",
|
|
4892
|
+
className: clsx(
|
|
4893
|
+
'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',
|
|
4894
|
+
{
|
|
4895
|
+
"bg-foreground text-background": isActive2
|
|
4896
|
+
}
|
|
4897
|
+
),
|
|
4898
|
+
children: isPlayground ? `${step}. ${title2} 🛝` : `${step}. ${title2}`
|
|
4899
|
+
}
|
|
4900
|
+
)
|
|
4901
|
+
},
|
|
4902
|
+
stepNumber
|
|
4903
|
+
);
|
|
4904
|
+
}),
|
|
4905
|
+
/* @__PURE__ */ jsx(
|
|
4906
|
+
NavigationExerciseStepListItem,
|
|
4907
|
+
{
|
|
4908
|
+
type: "finished",
|
|
4909
|
+
exerciseNumber,
|
|
4910
|
+
children: /* @__PURE__ */ jsx(
|
|
4911
|
+
NavLink,
|
|
4912
|
+
{
|
|
4913
|
+
to: `/${exerciseNum}/finished`,
|
|
4914
|
+
prefetch: "intent",
|
|
4915
|
+
className: ({ isActive: isActive2 }) => clsx(
|
|
4916
|
+
'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',
|
|
4917
|
+
{
|
|
4918
|
+
"bg-foreground text-background": isActive2
|
|
4919
|
+
}
|
|
4920
|
+
),
|
|
4921
|
+
children: "📝 Elaboration"
|
|
4922
|
+
}
|
|
4923
|
+
)
|
|
4924
|
+
}
|
|
4925
|
+
)
|
|
4926
|
+
]
|
|
4927
|
+
}
|
|
4928
|
+
) : null
|
|
4929
|
+
]
|
|
4930
|
+
},
|
|
4931
|
+
exerciseNumber
|
|
4932
|
+
);
|
|
4933
|
+
})
|
|
4662
4934
|
}
|
|
4663
4935
|
),
|
|
4664
|
-
" ",
|
|
4665
|
-
|
|
4666
|
-
] }),
|
|
4667
|
-
ENV.EPICSHOP_DEPLOYED ? /* @__PURE__ */ jsxs("small", { className: "text-sm", children: [
|
|
4668
|
-
"This is the deployed version.",
|
|
4669
|
-
" ",
|
|
4670
|
-
ENV.EPICSHOP_GITHUB_ROOT ? /* @__PURE__ */ jsx(
|
|
4671
|
-
Link,
|
|
4936
|
+
/* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(
|
|
4937
|
+
NavLink,
|
|
4672
4938
|
{
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4939
|
+
to: "/finished",
|
|
4940
|
+
className: ({ isActive }) => clsx(
|
|
4941
|
+
"relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",
|
|
4942
|
+
{
|
|
4943
|
+
'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-[""]': isActive
|
|
4944
|
+
}
|
|
4945
|
+
),
|
|
4946
|
+
children: "📝 Workshop Feedback"
|
|
4678
4947
|
}
|
|
4679
|
-
)
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4948
|
+
) })
|
|
4949
|
+
]
|
|
4950
|
+
}
|
|
4951
|
+
),
|
|
4952
|
+
/* @__PURE__ */ jsx("div", { className: "flex-grow" }),
|
|
4953
|
+
/* @__PURE__ */ jsx(
|
|
4954
|
+
"div",
|
|
4955
|
+
{
|
|
4956
|
+
className: cn(
|
|
4957
|
+
"flex items-center justify-start p-4",
|
|
4958
|
+
isMenuOpened && users.length > 4 ? "min-h-14" : "h-14",
|
|
4959
|
+
{
|
|
4960
|
+
"w-full border-t": isMenuOpened,
|
|
4961
|
+
"border-l": !isMenuOpened
|
|
4962
|
+
}
|
|
4963
|
+
),
|
|
4964
|
+
children: /* @__PURE__ */ jsx(FacePile, { isMenuOpened })
|
|
4965
|
+
}
|
|
4966
|
+
),
|
|
4967
|
+
ENV.EPICSHOP_DEPLOYED ? null : user ? /* @__PURE__ */ jsx(SimpleTooltip, { content: isMenuOpened ? null : "Your account", children: /* @__PURE__ */ jsxs(
|
|
4968
|
+
Link,
|
|
4969
|
+
{
|
|
4970
|
+
className: cn(
|
|
4971
|
+
"flex h-14 items-center justify-start space-x-3 px-4 py-4 text-center no-underline hover:underline",
|
|
4972
|
+
{
|
|
4973
|
+
"border-l": !isMenuOpened,
|
|
4974
|
+
"w-full border-t": isMenuOpened
|
|
4975
|
+
}
|
|
4976
|
+
),
|
|
4977
|
+
to: "/account",
|
|
4978
|
+
children: [
|
|
4979
|
+
user.avatarUrl ? /* @__PURE__ */ jsx(
|
|
4980
|
+
"img",
|
|
4981
|
+
{
|
|
4982
|
+
alt: user.name ?? user.email,
|
|
4983
|
+
src: user.avatarUrl,
|
|
4984
|
+
className: "h-full rounded-full"
|
|
4985
|
+
}
|
|
4986
|
+
) : /* @__PURE__ */ jsx(Icon, { name: "User", className: "flex-shrink-0", size: "lg" }),
|
|
4987
|
+
isMenuOpened ? /* @__PURE__ */ jsx(
|
|
4988
|
+
motion.div,
|
|
4989
|
+
{
|
|
4990
|
+
className: "flex items-center whitespace-nowrap",
|
|
4991
|
+
initial: { opacity: 0 },
|
|
4992
|
+
animate: { opacity: 1 },
|
|
4993
|
+
children: "Your Account"
|
|
4994
|
+
}
|
|
4995
|
+
) : /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Your account" })
|
|
4996
|
+
]
|
|
4997
|
+
}
|
|
4998
|
+
) }) : null,
|
|
4999
|
+
ENV.EPICSHOP_DEPLOYED ? null : user && nextExerciseRoute ? /* @__PURE__ */ jsx(
|
|
5000
|
+
SimpleTooltip,
|
|
5001
|
+
{
|
|
5002
|
+
content: isMenuOpened ? null : "Continue to next lesson",
|
|
5003
|
+
children: /* @__PURE__ */ jsxs(
|
|
5004
|
+
Link,
|
|
5005
|
+
{
|
|
5006
|
+
to: nextExerciseRoute,
|
|
5007
|
+
prefetch: "intent",
|
|
5008
|
+
className: clsx(
|
|
5009
|
+
"flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"
|
|
5010
|
+
),
|
|
5011
|
+
state: { from: "continue next lesson button" },
|
|
5012
|
+
children: [
|
|
5013
|
+
/* @__PURE__ */ jsx(Icon, { name: "FastForward", className: "flex-shrink-0", size: "md" }),
|
|
5014
|
+
isMenuOpened ? /* @__PURE__ */ jsx(
|
|
5015
|
+
motion.div,
|
|
5016
|
+
{
|
|
5017
|
+
className: "flex items-center whitespace-nowrap",
|
|
5018
|
+
initial: { opacity: 0 },
|
|
5019
|
+
animate: { opacity: 1 },
|
|
5020
|
+
children: "Continue to next lesson"
|
|
5021
|
+
}
|
|
5022
|
+
) : /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Continue to next lesson" })
|
|
5023
|
+
]
|
|
5024
|
+
}
|
|
5025
|
+
)
|
|
5026
|
+
}
|
|
5027
|
+
) : null,
|
|
5028
|
+
/* @__PURE__ */ jsx(
|
|
5029
|
+
"div",
|
|
5030
|
+
{
|
|
5031
|
+
className: cn("h-14 self-start p-4 pt-[15px] sm:mb-4 sm:w-full", {
|
|
5032
|
+
"w-full border-t": isMenuOpened,
|
|
5033
|
+
"border-l": !isMenuOpened
|
|
5034
|
+
}),
|
|
5035
|
+
children: /* @__PURE__ */ jsx(ThemeSwitch, {})
|
|
5036
|
+
}
|
|
5037
|
+
)
|
|
4710
5038
|
]
|
|
4711
5039
|
}
|
|
4712
|
-
);
|
|
4713
|
-
}
|
|
4714
|
-
const itemVariants = {
|
|
4715
|
-
hidden: { opacity: 0, x: -20 },
|
|
4716
|
-
visible: { opacity: 1, x: 0 }
|
|
4717
|
-
};
|
|
4718
|
-
function NavigationExerciseListItem({
|
|
4719
|
-
exerciseNumber,
|
|
4720
|
-
children
|
|
4721
|
-
}) {
|
|
4722
|
-
const progressClassName = useExerciseProgressClassName(exerciseNumber);
|
|
4723
|
-
return /* @__PURE__ */ jsx(
|
|
4724
|
-
motion.li,
|
|
4725
|
-
{
|
|
4726
|
-
variants: itemVariants,
|
|
4727
|
-
className: cn(
|
|
4728
|
-
// add gap of 3 to children, but using padding so the progress extends through the whole height
|
|
4729
|
-
"py-[6px] first:pt-3 last:pb-3",
|
|
4730
|
-
progressClassName ? `${progressClassName} before:border-t` : null
|
|
4731
|
-
),
|
|
4732
|
-
children: /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
4733
|
-
}
|
|
4734
|
-
);
|
|
4735
|
-
}
|
|
4736
|
-
function NavigationExerciseStepListItem({
|
|
4737
|
-
children,
|
|
4738
|
-
...progressItemSearch
|
|
4739
|
-
}) {
|
|
4740
|
-
const progressClassName = useProgressItemClassName(progressItemSearch);
|
|
4741
|
-
return /* @__PURE__ */ jsx(
|
|
4742
|
-
motion.li,
|
|
4743
|
-
{
|
|
4744
|
-
variants: itemVariants,
|
|
4745
|
-
className: cn(
|
|
4746
|
-
// add gap of 3 to children, but using padding so the progress extends through the whole height
|
|
4747
|
-
"py-[6px] first:pt-3 last:pb-3",
|
|
4748
|
-
progressClassName ? `${progressClassName} before:border-t` : null
|
|
4749
|
-
),
|
|
4750
|
-
children: /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
4751
|
-
}
|
|
4752
|
-
);
|
|
5040
|
+
) }) });
|
|
4753
5041
|
}
|
|
4754
5042
|
const OPENED_MENU_WIDTH = 400;
|
|
4755
5043
|
function Navigation({
|
|
@@ -4788,7 +5076,7 @@ function Navigation({
|
|
|
4788
5076
|
}
|
|
4789
5077
|
};
|
|
4790
5078
|
const exNum = Number(params.exerciseNumber).toString().padStart(2, "0");
|
|
4791
|
-
return /* @__PURE__ */ jsx("nav", { className: "
|
|
5079
|
+
return /* @__PURE__ */ jsx("nav", { className: "hidden border-r sm:flex", children: /* @__PURE__ */ jsx(
|
|
4792
5080
|
motion.div,
|
|
4793
5081
|
{
|
|
4794
5082
|
initial: isMenuOpened ? "open" : "close",
|
|
@@ -5049,7 +5337,7 @@ function NavToggle({
|
|
|
5049
5337
|
const path01Controls = useAnimationControls();
|
|
5050
5338
|
const path02Controls = useAnimationControls();
|
|
5051
5339
|
async function toggleMenu() {
|
|
5052
|
-
void menuControls.start(isMenuOpened ? "close" : "open");
|
|
5340
|
+
void (menuControls == null ? void 0 : menuControls.start(isMenuOpened ? "close" : "open"));
|
|
5053
5341
|
setMenuOpened(!isMenuOpened);
|
|
5054
5342
|
if (isMenuOpened) {
|
|
5055
5343
|
void path01Controls.start(path01Variants.closed);
|
|
@@ -5066,8 +5354,7 @@ function NavToggle({
|
|
|
5066
5354
|
latestToggleMenu.current = toggleMenu;
|
|
5067
5355
|
});
|
|
5068
5356
|
React.useEffect(() => {
|
|
5069
|
-
if (!isMenuOpened)
|
|
5070
|
-
return;
|
|
5357
|
+
if (!isMenuOpened) return;
|
|
5071
5358
|
function handleKeyUp(event) {
|
|
5072
5359
|
if (event.key === "Escape") {
|
|
5073
5360
|
void latestToggleMenu.current();
|
|
@@ -5076,48 +5363,59 @@ function NavToggle({
|
|
|
5076
5363
|
document.addEventListener("keyup", handleKeyUp);
|
|
5077
5364
|
return () => document.removeEventListener("keyup", handleKeyUp);
|
|
5078
5365
|
}, [isMenuOpened]);
|
|
5079
|
-
return /* @__PURE__ */ jsxs(
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5090
|
-
|
|
5091
|
-
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
5099
|
-
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
|
|
5110
|
-
|
|
5111
|
-
|
|
5112
|
-
|
|
5113
|
-
|
|
5114
|
-
|
|
5115
|
-
|
|
5116
|
-
|
|
5117
|
-
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
|
|
5366
|
+
return /* @__PURE__ */ jsxs(
|
|
5367
|
+
"div",
|
|
5368
|
+
{
|
|
5369
|
+
className: cn(
|
|
5370
|
+
"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",
|
|
5371
|
+
{
|
|
5372
|
+
"w-full": isMenuOpened
|
|
5373
|
+
}
|
|
5374
|
+
),
|
|
5375
|
+
children: [
|
|
5376
|
+
/* @__PURE__ */ jsx(
|
|
5377
|
+
"button",
|
|
5378
|
+
{
|
|
5379
|
+
className: "flex h-14 w-14 items-center justify-center",
|
|
5380
|
+
"aria-label": "Open Navigation menu",
|
|
5381
|
+
onClick: toggleMenu,
|
|
5382
|
+
children: /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", children: [
|
|
5383
|
+
/* @__PURE__ */ jsx(
|
|
5384
|
+
motion.path,
|
|
5385
|
+
{
|
|
5386
|
+
...path01Variants.closed,
|
|
5387
|
+
animate: path01Controls,
|
|
5388
|
+
transition: { duration: 0.2 },
|
|
5389
|
+
stroke: "currentColor",
|
|
5390
|
+
strokeWidth: 1.5
|
|
5391
|
+
}
|
|
5392
|
+
),
|
|
5393
|
+
/* @__PURE__ */ jsx(
|
|
5394
|
+
motion.path,
|
|
5395
|
+
{
|
|
5396
|
+
...path02Variants.closed,
|
|
5397
|
+
animate: path02Controls,
|
|
5398
|
+
transition: { duration: 0.2 },
|
|
5399
|
+
stroke: "currentColor",
|
|
5400
|
+
strokeWidth: 1.5
|
|
5401
|
+
}
|
|
5402
|
+
)
|
|
5403
|
+
] })
|
|
5404
|
+
}
|
|
5405
|
+
),
|
|
5406
|
+
isMenuOpened && /* @__PURE__ */ jsx(
|
|
5407
|
+
motion.p,
|
|
5408
|
+
{
|
|
5409
|
+
transition: { delay: 0.2 },
|
|
5410
|
+
initial: { opacity: 0, y: 5 },
|
|
5411
|
+
animate: { opacity: 1, y: 0 },
|
|
5412
|
+
className: "absolute right-5 whitespace-nowrap font-mono text-sm uppercase",
|
|
5413
|
+
children: /* @__PURE__ */ jsx(Link, { to: "/", children: title })
|
|
5414
|
+
}
|
|
5415
|
+
)
|
|
5416
|
+
]
|
|
5417
|
+
}
|
|
5418
|
+
);
|
|
5121
5419
|
}
|
|
5122
5420
|
const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
5123
5421
|
__proto__: null,
|
|
@@ -5180,15 +5478,12 @@ function MuxPlayer({
|
|
|
5180
5478
|
const fetcherRef = useLatest(playerPreferencesFetcher);
|
|
5181
5479
|
const playerPreferencesRef = useLatest(playerPreferences);
|
|
5182
5480
|
React.useEffect(() => {
|
|
5183
|
-
if (typeof document === "undefined")
|
|
5184
|
-
return;
|
|
5481
|
+
if (typeof document === "undefined") return;
|
|
5185
5482
|
const stored = sessionStorage.getItem(currentTimeSessionKey);
|
|
5186
|
-
if (!stored)
|
|
5187
|
-
return;
|
|
5483
|
+
if (!stored) return;
|
|
5188
5484
|
try {
|
|
5189
5485
|
const { time: time2, expiresAt } = PlaybackTimeSchema.parse(JSON.parse(stored));
|
|
5190
|
-
if (expiresAt.getTime() < Date.now())
|
|
5191
|
-
throw new Error("Time expired");
|
|
5486
|
+
if (expiresAt.getTime() < Date.now()) throw new Error("Time expired");
|
|
5192
5487
|
setCurrentTime(time2);
|
|
5193
5488
|
} catch {
|
|
5194
5489
|
sessionStorage.removeItem(currentTimeSessionKey);
|
|
@@ -5196,8 +5491,7 @@ function MuxPlayer({
|
|
|
5196
5491
|
}, [currentTimeSessionKey]);
|
|
5197
5492
|
React.useEffect(() => {
|
|
5198
5493
|
function handleUserKeyPress(e) {
|
|
5199
|
-
if (!muxPlayerRef.current)
|
|
5200
|
-
return;
|
|
5494
|
+
if (!muxPlayerRef.current) return;
|
|
5201
5495
|
const activeElement = document.activeElement;
|
|
5202
5496
|
const isContentEditable = activeElement instanceof HTMLElement ? activeElement.contentEditable === "true" : false;
|
|
5203
5497
|
if (activeElement && !ignoredInputs.includes(activeElement.tagName.toLowerCase()) && !isContentEditable) {
|
|
@@ -5226,8 +5520,7 @@ function MuxPlayer({
|
|
|
5226
5520
|
}, [muxPlayerRef]);
|
|
5227
5521
|
const updatePreferences = useDebounce(() => {
|
|
5228
5522
|
const player = muxPlayerRef.current;
|
|
5229
|
-
if (!player)
|
|
5230
|
-
return;
|
|
5523
|
+
if (!player) return;
|
|
5231
5524
|
const subs = Array.from(player.textTracks ?? []).find(
|
|
5232
5525
|
(t) => t.kind === "subtitles"
|
|
5233
5526
|
);
|
|
@@ -5236,8 +5529,7 @@ function MuxPlayer({
|
|
|
5236
5529
|
volumeRate: player.volume,
|
|
5237
5530
|
subtitle: subs ? { id: subs.id, mode: subs.mode } : { id: null, mode: "disabled" }
|
|
5238
5531
|
};
|
|
5239
|
-
if (isDeepEqual(newPrefs, playerPreferencesRef.current))
|
|
5240
|
-
return;
|
|
5532
|
+
if (isDeepEqual(newPrefs, playerPreferencesRef.current)) return;
|
|
5241
5533
|
fetcherRef.current.submit(newPrefs, {
|
|
5242
5534
|
method: "POST",
|
|
5243
5535
|
action: "/video-player",
|
|
@@ -5246,11 +5538,9 @@ function MuxPlayer({
|
|
|
5246
5538
|
}, 300);
|
|
5247
5539
|
React.useEffect(() => {
|
|
5248
5540
|
var _a2, _b2;
|
|
5249
|
-
if (!metadataLoaded)
|
|
5250
|
-
return;
|
|
5541
|
+
if (!metadataLoaded) return;
|
|
5251
5542
|
const textTracks = (_a2 = muxPlayerRef.current) == null ? void 0 : _a2.textTracks;
|
|
5252
|
-
if (!textTracks)
|
|
5253
|
-
return;
|
|
5543
|
+
if (!textTracks) return;
|
|
5254
5544
|
const subtitlePref = (_b2 = playerPreferencesRef.current) == null ? void 0 : _b2.subtitle;
|
|
5255
5545
|
if (subtitlePref == null ? void 0 : subtitlePref.id) {
|
|
5256
5546
|
const preferredTextTrack = textTracks.getTrackById(subtitlePref.id);
|
|
@@ -5308,32 +5598,23 @@ function MuxPlayer({
|
|
|
5308
5598
|
) });
|
|
5309
5599
|
}
|
|
5310
5600
|
function isDeepEqual(obj1, obj2) {
|
|
5311
|
-
if (obj1 === obj2)
|
|
5312
|
-
|
|
5313
|
-
if (typeof obj1 !== typeof obj2)
|
|
5314
|
-
|
|
5315
|
-
if (
|
|
5316
|
-
return false;
|
|
5317
|
-
if (obj1 === null || obj2 === null)
|
|
5318
|
-
return false;
|
|
5319
|
-
if (Array.isArray(obj1) !== Array.isArray(obj2))
|
|
5320
|
-
return false;
|
|
5601
|
+
if (obj1 === obj2) return true;
|
|
5602
|
+
if (typeof obj1 !== typeof obj2) return false;
|
|
5603
|
+
if (typeof obj1 !== "object" || typeof obj2 !== "object") return false;
|
|
5604
|
+
if (obj1 === null || obj2 === null) return false;
|
|
5605
|
+
if (Array.isArray(obj1) !== Array.isArray(obj2)) return false;
|
|
5321
5606
|
if (Array.isArray(obj1) && Array.isArray(obj2)) {
|
|
5322
|
-
if (obj1.length !== obj2.length)
|
|
5323
|
-
return false;
|
|
5607
|
+
if (obj1.length !== obj2.length) return false;
|
|
5324
5608
|
for (let i = 0; i < obj1.length; i++) {
|
|
5325
|
-
if (!isDeepEqual(obj1[i], obj2[i]))
|
|
5326
|
-
return false;
|
|
5609
|
+
if (!isDeepEqual(obj1[i], obj2[i])) return false;
|
|
5327
5610
|
}
|
|
5328
5611
|
return true;
|
|
5329
5612
|
}
|
|
5330
5613
|
const keys1 = Object.keys(obj1);
|
|
5331
5614
|
const keys2 = Object.keys(obj2);
|
|
5332
|
-
if (keys1.length !== keys2.length)
|
|
5333
|
-
return false;
|
|
5615
|
+
if (keys1.length !== keys2.length) return false;
|
|
5334
5616
|
for (const key of keys1) {
|
|
5335
|
-
if (!isDeepEqual(obj1[key], obj2[key]))
|
|
5336
|
-
return false;
|
|
5617
|
+
if (!isDeepEqual(obj1[key], obj2[key])) return false;
|
|
5337
5618
|
}
|
|
5338
5619
|
return true;
|
|
5339
5620
|
}
|
|
@@ -5413,10 +5694,8 @@ function extractEpicTitle(urlString) {
|
|
|
5413
5694
|
let titleSegment = urlSegments.pop();
|
|
5414
5695
|
const nonTitles = ["problem", "solution", "embed", "exercise"];
|
|
5415
5696
|
const isTitleSegment = (str) => str && !nonTitles.includes(str);
|
|
5416
|
-
while (!isTitleSegment(titleSegment))
|
|
5417
|
-
|
|
5418
|
-
if (!titleSegment)
|
|
5419
|
-
return "EpicWeb.dev Video";
|
|
5697
|
+
while (!isTitleSegment(titleSegment)) titleSegment = urlSegments.pop();
|
|
5698
|
+
if (!titleSegment) return "EpicWeb.dev Video";
|
|
5420
5699
|
const titleWords = titleSegment.split("-");
|
|
5421
5700
|
const lowerCaseWords = [
|
|
5422
5701
|
"the",
|
|
@@ -5520,8 +5799,7 @@ function extractEpicTitle(urlString) {
|
|
|
5520
5799
|
const literalWord = literalWords.find(
|
|
5521
5800
|
(w) => w.toLowerCase() === lowerWord
|
|
5522
5801
|
);
|
|
5523
|
-
if (literalWord)
|
|
5524
|
-
return literalWord;
|
|
5802
|
+
if (literalWord) return literalWord;
|
|
5525
5803
|
if (lowerCaseWords.includes(lowerWord) && index > 0) {
|
|
5526
5804
|
return lowerWord;
|
|
5527
5805
|
}
|
|
@@ -5731,8 +6009,7 @@ function EpicVideo({
|
|
|
5731
6009
|
let prevIndex = 0;
|
|
5732
6010
|
while (match = timestampRegex.exec(transcript)) {
|
|
5733
6011
|
const timestamp = match[1];
|
|
5734
|
-
if (!timestampRegex.lastIndex || !timestamp)
|
|
5735
|
-
break;
|
|
6012
|
+
if (!timestampRegex.lastIndex || !timestamp) break;
|
|
5736
6013
|
const timestampIndexStart = match.index;
|
|
5737
6014
|
const timestampIndexEnd = timestampRegex.lastIndex;
|
|
5738
6015
|
const textBeforeTimestamp = transcript.slice(
|
|
@@ -6002,8 +6279,7 @@ function guessEditor() {
|
|
|
6002
6279
|
const runningProcesses = output.split("\r\n");
|
|
6003
6280
|
for (let i = 0; i < runningProcesses.length; i++) {
|
|
6004
6281
|
const processPath = (_a2 = runningProcesses[i]) == null ? void 0 : _a2.trim();
|
|
6005
|
-
if (!processPath)
|
|
6006
|
-
continue;
|
|
6282
|
+
if (!processPath) continue;
|
|
6007
6283
|
const processName = path.basename(processPath);
|
|
6008
6284
|
if (COMMON_EDITORS_WIN.includes(processName)) {
|
|
6009
6285
|
return [processPath];
|
|
@@ -6014,8 +6290,7 @@ function guessEditor() {
|
|
|
6014
6290
|
const processNames = Object.keys(COMMON_EDITORS_LINUX);
|
|
6015
6291
|
for (let i = 0; i < processNames.length; i++) {
|
|
6016
6292
|
const processName = processNames[i];
|
|
6017
|
-
if (!processName)
|
|
6018
|
-
continue;
|
|
6293
|
+
if (!processName) continue;
|
|
6019
6294
|
if (output.includes(processName)) {
|
|
6020
6295
|
return [COMMON_EDITORS_LINUX[processName]];
|
|
6021
6296
|
}
|
|
@@ -6240,8 +6515,7 @@ async function action$9({ request }) {
|
|
|
6240
6515
|
const originFiles = await getFiles(form.syncTo);
|
|
6241
6516
|
for (let index = 0; index < originFiles.length; index++) {
|
|
6242
6517
|
const originFile = originFiles[index];
|
|
6243
|
-
if (!originFile)
|
|
6244
|
-
continue;
|
|
6518
|
+
if (!originFile) continue;
|
|
6245
6519
|
const destFile = filesToOpen[index];
|
|
6246
6520
|
if (!destFile) {
|
|
6247
6521
|
throw new Response(
|
|
@@ -6384,8 +6658,7 @@ function EditFileOnGitHub({
|
|
|
6384
6658
|
}) {
|
|
6385
6659
|
const fetcher = useLaunchFetcher();
|
|
6386
6660
|
const handleClick = (e) => {
|
|
6387
|
-
if (!e.altKey || ENV.EPICSHOP_DEPLOYED)
|
|
6388
|
-
return;
|
|
6661
|
+
if (!e.altKey || ENV.EPICSHOP_DEPLOYED) return;
|
|
6389
6662
|
e.preventDefault();
|
|
6390
6663
|
const formData = new FormData();
|
|
6391
6664
|
const type = file ? "file" : "appFile";
|
|
@@ -6437,8 +6710,7 @@ function OpenInEditor({
|
|
|
6437
6710
|
}) {
|
|
6438
6711
|
var _a2;
|
|
6439
6712
|
const data = useLoaderData();
|
|
6440
|
-
if (type === "other" || !buttons || !filename || !fullPath)
|
|
6441
|
-
return null;
|
|
6713
|
+
if (type === "other" || !buttons || !filename || !fullPath) return null;
|
|
6442
6714
|
const currentAppFullPath = safePath(((_a2 = data[data.type]) == null ? void 0 : _a2.fullPath) ?? "");
|
|
6443
6715
|
const isFileFromDifferentApp = !fullPath.startsWith(currentAppFullPath);
|
|
6444
6716
|
const validButtons = ENV.EPICSHOP_DEPLOYED ? ["problem", "solution"] : ["problem", "solution", "playground"];
|
|
@@ -6607,8 +6879,7 @@ const meta$4 = ({
|
|
|
6607
6879
|
var _a2;
|
|
6608
6880
|
const number = data == null ? void 0 : data.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
6609
6881
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
6610
|
-
if (!data || !rootData)
|
|
6611
|
-
return [{ title: "🦉 | Error" }];
|
|
6882
|
+
if (!data || !rootData) return [{ title: "🦉 | Error" }];
|
|
6612
6883
|
return getSeoMetaTags({
|
|
6613
6884
|
title: `📝 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
6614
6885
|
description: `Introduction for ${number}. ${data.exercise.title}`,
|
|
@@ -6962,8 +7233,7 @@ function Diff({
|
|
|
6962
7233
|
});
|
|
6963
7234
|
const hiddenInputs = [];
|
|
6964
7235
|
for (const [key, value] of params.entries()) {
|
|
6965
|
-
if (key === "app1" || key === "app2")
|
|
6966
|
-
continue;
|
|
7236
|
+
if (key === "app1" || key === "app2") continue;
|
|
6967
7237
|
hiddenInputs.push(
|
|
6968
7238
|
/* @__PURE__ */ jsx("input", { type: "hidden", name: key, value }, key)
|
|
6969
7239
|
);
|
|
@@ -7279,10 +7549,8 @@ function getFileCodeblocks(file, filePathApp1, filePathApp2, type) {
|
|
|
7279
7549
|
for (const chunk of file.chunks) {
|
|
7280
7550
|
let launchEditor2 = function(appNum, line) {
|
|
7281
7551
|
if (isDeployed) {
|
|
7282
|
-
if (type === "DeletedFile" && appNum === 2)
|
|
7283
|
-
|
|
7284
|
-
if (type === "AddedFile" && appNum === 1)
|
|
7285
|
-
return "";
|
|
7552
|
+
if (type === "DeletedFile" && appNum === 2) return "";
|
|
7553
|
+
if (type === "AddedFile" && appNum === 1) return "";
|
|
7286
7554
|
}
|
|
7287
7555
|
const label = type === "AddedFile" && appNum === 1 || type === "DeletedFile" && appNum === 2 ? `CREATE in APP ${appNum}` : `OPEN in APP ${appNum}`;
|
|
7288
7556
|
const file2 = JSON.stringify(appNum === 1 ? filePathApp1 : filePathApp2);
|
|
@@ -7306,8 +7574,7 @@ function getFileCodeblocks(file, filePathApp1, filePathApp2, type) {
|
|
|
7306
7574
|
toStartLine = chunk.toFileRange.start;
|
|
7307
7575
|
for (let lineNumber = 0; lineNumber < chunk.changes.length; lineNumber++) {
|
|
7308
7576
|
const change = chunk.changes[lineNumber];
|
|
7309
|
-
if (!change)
|
|
7310
|
-
continue;
|
|
7577
|
+
if (!change) continue;
|
|
7311
7578
|
lines.push(change.content);
|
|
7312
7579
|
switch (change.type) {
|
|
7313
7580
|
case "AddedLine": {
|
|
@@ -7382,8 +7649,7 @@ async function copyUnignoredFiles(srcDir, destDir, ignoreList) {
|
|
|
7382
7649
|
await fsExtra.remove(destDir);
|
|
7383
7650
|
await fsExtra.copy(srcDir, destDir, {
|
|
7384
7651
|
filter: async (file) => {
|
|
7385
|
-
if (file === srcDir)
|
|
7386
|
-
return true;
|
|
7652
|
+
if (file === srcDir) return true;
|
|
7387
7653
|
return !ig.ignores(path.relative(srcDir, file));
|
|
7388
7654
|
}
|
|
7389
7655
|
});
|
|
@@ -7447,8 +7713,7 @@ async function getDiffIgnore(filePath) {
|
|
|
7447
7713
|
) : [];
|
|
7448
7714
|
}
|
|
7449
7715
|
function getForceFreshForDiff(app1, app2, cacheEntry) {
|
|
7450
|
-
if (!cacheEntry)
|
|
7451
|
-
return true;
|
|
7716
|
+
if (!cacheEntry) return true;
|
|
7452
7717
|
const app1Modified = modifiedTimes.get(app1.fullPath) ?? 0;
|
|
7453
7718
|
const app2Modified = modifiedTimes.get(app2.fullPath) ?? 0;
|
|
7454
7719
|
const cacheModified = cacheEntry.metadata.createdTime;
|
|
@@ -7568,13 +7833,11 @@ async function getDiffCodeImpl(app1, app2) {
|
|
|
7568
7833
|
for (const file of parsed.files) {
|
|
7569
7834
|
const pathToCopy = file.type === "RenamedFile" ? file.pathBefore : file.path;
|
|
7570
7835
|
const relativePath = diffPathToRelative(pathToCopy);
|
|
7571
|
-
if (app1TestFiles.includes(relativePath))
|
|
7572
|
-
continue;
|
|
7836
|
+
if (app1TestFiles.includes(relativePath)) continue;
|
|
7573
7837
|
const filePathApp1 = path.join(app1.fullPath, relativePath);
|
|
7574
7838
|
const pathToApp2 = file.type === "RenamedFile" ? file.pathAfter : file.path;
|
|
7575
7839
|
const relativePathApp2 = diffPathToRelative(pathToApp2);
|
|
7576
|
-
if (app2TestFiles.includes(relativePathApp2))
|
|
7577
|
-
continue;
|
|
7840
|
+
if (app2TestFiles.includes(relativePathApp2)) continue;
|
|
7578
7841
|
const filePathApp2 = path.join(app2.fullPath, relativePathApp2);
|
|
7579
7842
|
switch (file.type) {
|
|
7580
7843
|
case "ChangedFile": {
|
|
@@ -7790,8 +8053,7 @@ function SelectItem({
|
|
|
7790
8053
|
);
|
|
7791
8054
|
}
|
|
7792
8055
|
function SetAppToPlayground({ appName }) {
|
|
7793
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
7794
|
-
return null;
|
|
8056
|
+
if (ENV.EPICSHOP_DEPLOYED) return null;
|
|
7795
8057
|
return /* @__PURE__ */ jsx(
|
|
7796
8058
|
SetPlayground,
|
|
7797
8059
|
{
|
|
@@ -8508,13 +8770,11 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8508
8770
|
useEffect(() => {
|
|
8509
8771
|
function handleMessage(messageEvent) {
|
|
8510
8772
|
var _a2;
|
|
8511
|
-
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow))
|
|
8512
|
-
return;
|
|
8773
|
+
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow)) return;
|
|
8513
8774
|
const result = messageSchema.safeParse(messageEvent.data, {
|
|
8514
8775
|
path: ["messageEvent", "data"]
|
|
8515
8776
|
});
|
|
8516
|
-
if (!result.success)
|
|
8517
|
-
return;
|
|
8777
|
+
if (!result.success) return;
|
|
8518
8778
|
const { data } = result;
|
|
8519
8779
|
if (data.type === "epicshop:loaded") {
|
|
8520
8780
|
setIFrameContext((prevContext) => {
|
|
@@ -8526,8 +8786,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8526
8786
|
} else if (lastDirectionRef.current === "new") {
|
|
8527
8787
|
const currentPathname = prevContext.history[prevContext.index];
|
|
8528
8788
|
const newPathname = new URL(data.url).pathname;
|
|
8529
|
-
if (currentPathname === newPathname)
|
|
8530
|
-
return prevContext;
|
|
8789
|
+
if (currentPathname === newPathname) return prevContext;
|
|
8531
8790
|
const newHistory = [
|
|
8532
8791
|
...prevContext.history.slice(0, prevContext.index + 1),
|
|
8533
8792
|
newPathname
|
|
@@ -8597,8 +8856,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8597
8856
|
}, [setSearchParams]);
|
|
8598
8857
|
const iframePathname = iframeContext.history[iframeContext.index];
|
|
8599
8858
|
useEffect(() => {
|
|
8600
|
-
if (!iframePathname)
|
|
8601
|
-
return;
|
|
8859
|
+
if (!iframePathname) return;
|
|
8602
8860
|
setPathnameInputValue(iframePathname);
|
|
8603
8861
|
const newSearchParams = new URLSearchParams(window.location.search);
|
|
8604
8862
|
if (iframePathname === "/") {
|
|
@@ -8642,8 +8900,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8642
8900
|
const atStartOfHistory = iframeContext.index <= 0;
|
|
8643
8901
|
const existingSearchParamHiddenInputs = [];
|
|
8644
8902
|
for (const [key, value] of searchParams.entries()) {
|
|
8645
|
-
if (key === "pathname")
|
|
8646
|
-
continue;
|
|
8903
|
+
if (key === "pathname") continue;
|
|
8647
8904
|
existingSearchParamHiddenInputs.push(
|
|
8648
8905
|
/* @__PURE__ */ jsx("input", { type: "hidden", name: key, value }, key)
|
|
8649
8906
|
);
|
|
@@ -8656,7 +8913,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8656
8913
|
"button",
|
|
8657
8914
|
{
|
|
8658
8915
|
type: "button",
|
|
8659
|
-
className: "
|
|
8916
|
+
className: "hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",
|
|
8660
8917
|
disabled: atStartOfHistory,
|
|
8661
8918
|
onClick: () => navigateChild(-1),
|
|
8662
8919
|
children: /* @__PURE__ */ jsx(Icon, { name: "ArrowLeft", "aria-hidden": "true" })
|
|
@@ -8669,7 +8926,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8669
8926
|
"button",
|
|
8670
8927
|
{
|
|
8671
8928
|
type: "button",
|
|
8672
|
-
className: "
|
|
8929
|
+
className: "hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",
|
|
8673
8930
|
disabled: atEndOfHistory,
|
|
8674
8931
|
onClick: () => navigateChild(1),
|
|
8675
8932
|
children: /* @__PURE__ */ jsx(Icon, { name: "ArrowRight", "aria-hidden": "true" })
|
|
@@ -8712,7 +8969,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8712
8969
|
"input",
|
|
8713
8970
|
{
|
|
8714
8971
|
"aria-label": "pathname",
|
|
8715
|
-
className: "flex-1 bg-background focus-visible:outline-none",
|
|
8972
|
+
className: "w-full flex-1 bg-background focus-visible:outline-none",
|
|
8716
8973
|
value: pathnameInputValue,
|
|
8717
8974
|
name: "pathname",
|
|
8718
8975
|
onChange: (e) => setPathnameInputValue(e.currentTarget.value)
|
|
@@ -8757,8 +9014,7 @@ function Preview({
|
|
|
8757
9014
|
inBrowserBrowserRef
|
|
8758
9015
|
}) {
|
|
8759
9016
|
const requestInfo = useRequestInfo();
|
|
8760
|
-
if (!appInfo)
|
|
8761
|
-
return /* @__PURE__ */ jsx("p", { children: "No app here. Sorry." });
|
|
9017
|
+
if (!appInfo) return /* @__PURE__ */ jsx("p", { children: "No app here. Sorry." });
|
|
8762
9018
|
const { isRunning, dev, name, portIsAvailable, title } = appInfo;
|
|
8763
9019
|
if (dev.type === "script") {
|
|
8764
9020
|
const baseUrl = getBaseUrl({
|
|
@@ -8966,8 +9222,7 @@ function StepMdx({
|
|
|
8966
9222
|
inBrowserBrowserRef
|
|
8967
9223
|
}) {
|
|
8968
9224
|
const data = useLoaderData();
|
|
8969
|
-
if (!data.exerciseStepApp.instructionsCode)
|
|
8970
|
-
return null;
|
|
9225
|
+
if (!data.exerciseStepApp.instructionsCode) return null;
|
|
8971
9226
|
return /* @__PURE__ */ jsx(StepContextProvider, { inBrowserBrowserRef, children: /* @__PURE__ */ jsx(EpicVideoInfoProvider, { epicVideoInfosPromise: data.epicVideoInfosPromise, children: /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert sm:prose-lg", children: /* @__PURE__ */ jsx(
|
|
8972
9227
|
Mdx,
|
|
8973
9228
|
{
|
|
@@ -9019,8 +9274,7 @@ function DiffLink({
|
|
|
9019
9274
|
const stepIndex = data.exerciseIndex + input;
|
|
9020
9275
|
return (_a2 = data.allApps[stepIndex]) == null ? void 0 : _a2.name;
|
|
9021
9276
|
}
|
|
9022
|
-
if (!input)
|
|
9023
|
-
return null;
|
|
9277
|
+
if (!input) return null;
|
|
9024
9278
|
for (const { name, stepName } of data.allApps) {
|
|
9025
9279
|
if (input === name || input === stepName) {
|
|
9026
9280
|
return name;
|
|
@@ -9094,8 +9348,7 @@ function CodeFileNotification({
|
|
|
9094
9348
|
const data = useLoaderData();
|
|
9095
9349
|
const app = data[type];
|
|
9096
9350
|
const handleClick = () => {
|
|
9097
|
-
if (visibility !== "visible")
|
|
9098
|
-
return;
|
|
9351
|
+
if (visibility !== "visible") return;
|
|
9099
9352
|
setVisibility("collapse");
|
|
9100
9353
|
setTimeout(() => {
|
|
9101
9354
|
setVisibility("none");
|
|
@@ -9159,10 +9412,8 @@ function InlineFile({
|
|
|
9159
9412
|
) : /* @__PURE__ */ jsx(Fragment, { children: "children" });
|
|
9160
9413
|
}
|
|
9161
9414
|
function getPreviewType(preview) {
|
|
9162
|
-
if (preview === "problem")
|
|
9163
|
-
|
|
9164
|
-
if (preview === "solution")
|
|
9165
|
-
return "solution";
|
|
9415
|
+
if (preview === "problem") return "problem";
|
|
9416
|
+
if (preview === "solution") return "solution";
|
|
9166
9417
|
return "playground";
|
|
9167
9418
|
}
|
|
9168
9419
|
function LinkToApp({
|
|
@@ -9199,8 +9450,7 @@ function LinkToApp({
|
|
|
9199
9450
|
title: ENV.EPICSHOP_DEPLOYED ? "Cannot link to app in deployed version" : void 0,
|
|
9200
9451
|
onClick: (event) => {
|
|
9201
9452
|
var _a3, _b2;
|
|
9202
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
9203
|
-
event.preventDefault();
|
|
9453
|
+
if (ENV.EPICSHOP_DEPLOYED) event.preventDefault();
|
|
9204
9454
|
(_a3 = props.onClick) == null ? void 0 : _a3.call(props, event);
|
|
9205
9455
|
(_b2 = inBrowserBrowserRef.current) == null ? void 0 : _b2.handleExtrnalNavigation(appTo.toString());
|
|
9206
9456
|
},
|
|
@@ -9218,8 +9468,7 @@ function LinkToApp({
|
|
|
9218
9468
|
}),
|
|
9219
9469
|
title: ENV.EPICSHOP_DEPLOYED ? "Cannot link to app in deployed version" : "Open in new tab",
|
|
9220
9470
|
onClick: (event) => {
|
|
9221
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
9222
|
-
event.preventDefault();
|
|
9471
|
+
if (ENV.EPICSHOP_DEPLOYED) event.preventDefault();
|
|
9223
9472
|
},
|
|
9224
9473
|
children: /* @__PURE__ */ jsx(Icon, { name: "ExternalLink" })
|
|
9225
9474
|
}
|
|
@@ -9257,10 +9506,8 @@ function InBrowserTestRunner({
|
|
|
9257
9506
|
useEffect(() => {
|
|
9258
9507
|
function handleMessage(messageEvent) {
|
|
9259
9508
|
var _a2;
|
|
9260
|
-
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow))
|
|
9261
|
-
|
|
9262
|
-
if ("request" in messageEvent.data)
|
|
9263
|
-
return;
|
|
9509
|
+
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow)) return;
|
|
9510
|
+
if ("request" in messageEvent.data) return;
|
|
9264
9511
|
const result = testRunnerDataSchema.safeParse(messageEvent.data, {
|
|
9265
9512
|
path: ["messageEvent", "data"]
|
|
9266
9513
|
});
|
|
@@ -9537,8 +9784,7 @@ function TestOutput({ name }) {
|
|
|
9537
9784
|
`/test?${new URLSearchParams({ name })}&v=${version}`
|
|
9538
9785
|
);
|
|
9539
9786
|
useEffect(() => {
|
|
9540
|
-
if (!lastMessage)
|
|
9541
|
-
return;
|
|
9787
|
+
if (!lastMessage) return;
|
|
9542
9788
|
const parsed = JSON.parse(lastMessage);
|
|
9543
9789
|
const result = testEventQueueSchema.safeParse(parsed);
|
|
9544
9790
|
if (!result.success) {
|
|
@@ -9901,8 +10147,7 @@ const meta$3 = ({
|
|
|
9901
10147
|
}) => {
|
|
9902
10148
|
var _a2;
|
|
9903
10149
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
9904
|
-
if (!data || !rootData)
|
|
9905
|
-
return [{ title: "🦉 | Error" }];
|
|
10150
|
+
if (!data || !rootData) return [{ title: "🦉 | Error" }];
|
|
9906
10151
|
const { emoji: emoji2, stepNumber, title, exerciseNumber, exerciseTitle } = pageTitle(data);
|
|
9907
10152
|
return getSeoMetaTags({
|
|
9908
10153
|
title: `${emoji2} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${rootData.workshopTitle}`,
|
|
@@ -9977,12 +10222,9 @@ async function loader$k({ request, params }) {
|
|
|
9977
10222
|
...getStepNameAndId(a)
|
|
9978
10223
|
}));
|
|
9979
10224
|
allApps.sort((a, b) => {
|
|
9980
|
-
if (a.stepId > 0 && b.stepId > 0)
|
|
9981
|
-
|
|
9982
|
-
if (
|
|
9983
|
-
return -1;
|
|
9984
|
-
if (b.stepId > 0)
|
|
9985
|
-
return 1;
|
|
10225
|
+
if (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId;
|
|
10226
|
+
if (a.stepId > 0) return -1;
|
|
10227
|
+
if (b.stepId > 0) return 1;
|
|
9986
10228
|
return 0;
|
|
9987
10229
|
});
|
|
9988
10230
|
const exerciseId = getStepId(exerciseStepApp);
|
|
@@ -10120,14 +10362,12 @@ function ExercisePartRoute() {
|
|
|
10120
10362
|
return ENV.EPICSHOP_DEPLOYED || !data.playground || data.playground.test.type === "none";
|
|
10121
10363
|
}
|
|
10122
10364
|
if (tab === "problem" || tab === "solution") {
|
|
10123
|
-
if (((_a3 = data[tab]) == null ? void 0 : _a3.dev.type) === "none")
|
|
10124
|
-
return true;
|
|
10365
|
+
if (((_a3 = data[tab]) == null ? void 0 : _a3.dev.type) === "none") return true;
|
|
10125
10366
|
if (ENV.EPICSHOP_DEPLOYED) {
|
|
10126
10367
|
return ((_b3 = data[tab]) == null ? void 0 : _b3.dev.type) !== "browser";
|
|
10127
10368
|
}
|
|
10128
10369
|
}
|
|
10129
|
-
if (tab === "playground" && ENV.EPICSHOP_DEPLOYED)
|
|
10130
|
-
return true;
|
|
10370
|
+
if (tab === "playground" && ENV.EPICSHOP_DEPLOYED) return true;
|
|
10131
10371
|
return false;
|
|
10132
10372
|
}
|
|
10133
10373
|
const activeTab = isValidPreview(preview) ? preview : tabs.find((t) => !shouldHideTab(t));
|
|
@@ -10141,8 +10381,8 @@ function ExercisePartRoute() {
|
|
|
10141
10381
|
navigate(altDiffUrl);
|
|
10142
10382
|
}
|
|
10143
10383
|
}
|
|
10144
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-grow flex-col", children: /* @__PURE__ */ jsxs("main", { className: "grid h-full
|
|
10145
|
-
/* @__PURE__ */ jsxs("div", { className: "relative col-span-1 row-span-1
|
|
10384
|
+
return /* @__PURE__ */ jsx("div", { className: "flex max-w-full flex-grow flex-col", children: /* @__PURE__ */ 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: [
|
|
10385
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r", children: [
|
|
10146
10386
|
/* @__PURE__ */ jsx("h1", { className: "h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight", children: /* @__PURE__ */ jsxs("div", { className: "flex h-14 flex-wrap items-center justify-between gap-x-2 py-2", children: [
|
|
10147
10387
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-2 uppercase", children: [
|
|
10148
10388
|
/* @__PURE__ */ jsxs(
|
|
@@ -10169,14 +10409,14 @@ function ExercisePartRoute() {
|
|
|
10169
10409
|
")"
|
|
10170
10410
|
] })
|
|
10171
10411
|
] }),
|
|
10172
|
-
data.problem && ((_c = data.playground) == null ? void 0 : _c.appName) !== data.problem.name ? /* @__PURE__ */ jsx(SetAppToPlayground, { appName: data.problem.name }) : null
|
|
10412
|
+
data.problem && ((_c = data.playground) == null ? void 0 : _c.appName) !== data.problem.name ? /* @__PURE__ */ jsx("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx(SetAppToPlayground, { appName: data.problem.name }) }) : null
|
|
10173
10413
|
] }) }),
|
|
10174
10414
|
/* @__PURE__ */ jsx(
|
|
10175
10415
|
"article",
|
|
10176
10416
|
{
|
|
10177
10417
|
id: data.articleId,
|
|
10178
|
-
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-
|
|
10179
|
-
children: data.exerciseStepApp.instructionsCode ? /* @__PURE__ */ jsx(
|
|
10418
|
+
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",
|
|
10419
|
+
children: data.exerciseStepApp.instructionsCode ? /* @__PURE__ */ jsx(StepMdx, { inBrowserBrowserRef }) : /* @__PURE__ */ jsx("p", { children: "No instructions yet..." })
|
|
10180
10420
|
},
|
|
10181
10421
|
data.articleId
|
|
10182
10422
|
),
|
|
@@ -10223,7 +10463,7 @@ function ExercisePartRoute() {
|
|
|
10223
10463
|
/* @__PURE__ */ jsxs(
|
|
10224
10464
|
Tabs.Root,
|
|
10225
10465
|
{
|
|
10226
|
-
className: "relative col-span-1 row-span-1
|
|
10466
|
+
className: "relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1",
|
|
10227
10467
|
value: activeTab,
|
|
10228
10468
|
children: [
|
|
10229
10469
|
/* @__PURE__ */ jsx(Tabs.List, { className: "h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar", children: tabs.map((tab) => {
|
|
@@ -10248,12 +10488,12 @@ function ExercisePartRoute() {
|
|
|
10248
10488
|
}
|
|
10249
10489
|
) }, tab);
|
|
10250
10490
|
}) }),
|
|
10251
|
-
/* @__PURE__ */ jsxs("div", { className: "relative z-10 flex flex-grow flex-col overflow-y-auto", children: [
|
|
10491
|
+
/* @__PURE__ */ jsxs("div", { className: "relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto", children: [
|
|
10252
10492
|
/* @__PURE__ */ jsx(
|
|
10253
10493
|
Tabs.Content,
|
|
10254
10494
|
{
|
|
10255
10495
|
value: "playground",
|
|
10256
|
-
className: "flex flex-grow items-center justify-center radix-state-inactive:hidden",
|
|
10496
|
+
className: "flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",
|
|
10257
10497
|
children: /* @__PURE__ */ jsx(
|
|
10258
10498
|
Playground,
|
|
10259
10499
|
{
|
|
@@ -10270,7 +10510,7 @@ function ExercisePartRoute() {
|
|
|
10270
10510
|
Tabs.Content,
|
|
10271
10511
|
{
|
|
10272
10512
|
value: "problem",
|
|
10273
|
-
className: "flex flex-grow items-center justify-center radix-state-inactive:hidden",
|
|
10513
|
+
className: "flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",
|
|
10274
10514
|
children: /* @__PURE__ */ jsx(
|
|
10275
10515
|
Preview,
|
|
10276
10516
|
{
|
|
@@ -10284,7 +10524,7 @@ function ExercisePartRoute() {
|
|
|
10284
10524
|
Tabs.Content,
|
|
10285
10525
|
{
|
|
10286
10526
|
value: "solution",
|
|
10287
|
-
className: "flex flex-grow items-center justify-center radix-state-inactive:hidden",
|
|
10527
|
+
className: "flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",
|
|
10288
10528
|
children: /* @__PURE__ */ jsx(
|
|
10289
10529
|
Preview,
|
|
10290
10530
|
{
|
|
@@ -10298,7 +10538,7 @@ function ExercisePartRoute() {
|
|
|
10298
10538
|
Tabs.Content,
|
|
10299
10539
|
{
|
|
10300
10540
|
value: "tests",
|
|
10301
|
-
className: "flex flex-grow items-start justify-center overflow-hidden radix-state-inactive:hidden",
|
|
10541
|
+
className: "flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden",
|
|
10302
10542
|
children: /* @__PURE__ */ jsx(
|
|
10303
10543
|
Tests,
|
|
10304
10544
|
{
|
|
@@ -10314,7 +10554,7 @@ function ExercisePartRoute() {
|
|
|
10314
10554
|
Tabs.Content,
|
|
10315
10555
|
{
|
|
10316
10556
|
value: "diff",
|
|
10317
|
-
className: "flex h-full flex-grow items-start justify-center radix-state-inactive:hidden",
|
|
10557
|
+
className: "flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",
|
|
10318
10558
|
children: /* @__PURE__ */ jsx(Diff, { diff: data.diff, allApps: data.allApps })
|
|
10319
10559
|
}
|
|
10320
10560
|
),
|
|
@@ -10322,7 +10562,7 @@ function ExercisePartRoute() {
|
|
|
10322
10562
|
Tabs.Content,
|
|
10323
10563
|
{
|
|
10324
10564
|
value: "chat",
|
|
10325
|
-
className: "flex h-full flex-grow items-start justify-center radix-state-inactive:hidden",
|
|
10565
|
+
className: "flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",
|
|
10326
10566
|
children: /* @__PURE__ */ jsx(DiscordChat, {})
|
|
10327
10567
|
}
|
|
10328
10568
|
)
|
|
@@ -10377,8 +10617,7 @@ const meta$2 = ({
|
|
|
10377
10617
|
var _a2;
|
|
10378
10618
|
const number = data == null ? void 0 : data.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
10379
10619
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
10380
|
-
if (!data || !rootData)
|
|
10381
|
-
return [{ title: "🦉 | Error" }];
|
|
10620
|
+
if (!data || !rootData) return [{ title: "🦉 | Error" }];
|
|
10382
10621
|
return getSeoMetaTags({
|
|
10383
10622
|
title: `🦉 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
10384
10623
|
description: `Elaboration for ${number}. ${data.exercise.title}`,
|
|
@@ -10464,9 +10703,9 @@ const mdxComponents$2 = { h1: () => null };
|
|
|
10464
10703
|
function ExerciseFinished$1() {
|
|
10465
10704
|
const data = useLoaderData();
|
|
10466
10705
|
const exerciseNumber = data.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
10467
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-grow flex-col", children: /* @__PURE__ */ jsxs("main", { className: "grid h-full
|
|
10468
|
-
/* @__PURE__ */ jsxs("div", { className: "relative col-span-1 row-span-1
|
|
10469
|
-
/* @__PURE__ */ jsx("h1", { className: "h-14 border-b pl-10 pr-5 text-sm font-medium
|
|
10706
|
+
return /* @__PURE__ */ jsx("div", { className: "flex max-w-full flex-grow flex-col", children: /* @__PURE__ */ 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: [
|
|
10707
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r", children: [
|
|
10708
|
+
/* @__PURE__ */ jsx("h1", { className: "h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight", children: /* @__PURE__ */ jsx("div", { className: "flex h-14 flex-wrap items-center justify-between gap-x-2 py-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-2", children: [
|
|
10470
10709
|
/* @__PURE__ */ jsx(Link, { to: `/${exerciseNumber}`, className: "hover:underline", children: `${exerciseNumber}. ${data.exercise.title}` }),
|
|
10471
10710
|
/* @__PURE__ */ jsx("span", { children: "/" }),
|
|
10472
10711
|
/* @__PURE__ */ jsx("span", { children: "Elaboration" })
|
|
@@ -10474,7 +10713,7 @@ function ExerciseFinished$1() {
|
|
|
10474
10713
|
/* @__PURE__ */ jsx(
|
|
10475
10714
|
"article",
|
|
10476
10715
|
{
|
|
10477
|
-
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-
|
|
10716
|
+
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",
|
|
10478
10717
|
id: data.articleId,
|
|
10479
10718
|
children: data.exercise.finishedCode ? /* @__PURE__ */ jsx(
|
|
10480
10719
|
EpicVideoInfoProvider,
|
|
@@ -10529,7 +10768,7 @@ function Survey$1({
|
|
|
10529
10768
|
exerciseTitle
|
|
10530
10769
|
}) {
|
|
10531
10770
|
const [iframeLoaded, setIframeLoaded] = React.useState(false);
|
|
10532
|
-
return /* @__PURE__ */ jsxs("div", { className: "relative flex-shrink-0", children: [
|
|
10771
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative min-h-full sm:min-h-[unset] sm:flex-shrink-0", children: [
|
|
10533
10772
|
!iframeLoaded ? /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center", children: /* @__PURE__ */ jsx(Loading, { children: /* @__PURE__ */ jsxs("span", { children: [
|
|
10534
10773
|
"Loading ",
|
|
10535
10774
|
exerciseTitle,
|
|
@@ -10671,11 +10910,9 @@ const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
10671
10910
|
loader: loader$h
|
|
10672
10911
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
10673
10912
|
async function getForceFresh(filePath, cacheEntry) {
|
|
10674
|
-
if (!cacheEntry)
|
|
10675
|
-
return true;
|
|
10913
|
+
if (!cacheEntry) return true;
|
|
10676
10914
|
const app = await getAppFromFile(filePath);
|
|
10677
|
-
if (!app)
|
|
10678
|
-
return true;
|
|
10915
|
+
if (!app) return true;
|
|
10679
10916
|
const appModified = modifiedTimes.get(app.fullPath) ?? 0;
|
|
10680
10917
|
const cacheModified = cacheEntry.metadata.createdTime;
|
|
10681
10918
|
return !cacheModified || appModified > cacheModified || void 0;
|
|
@@ -11204,8 +11441,7 @@ const meta$1 = ({
|
|
|
11204
11441
|
}) => {
|
|
11205
11442
|
var _a2;
|
|
11206
11443
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
11207
|
-
if (!rootData)
|
|
11208
|
-
return [];
|
|
11444
|
+
if (!rootData) return [];
|
|
11209
11445
|
return getSeoMetaTags({
|
|
11210
11446
|
title: `🎉 ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
11211
11447
|
description: `Elaboration for ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
@@ -11280,7 +11516,7 @@ function ExerciseFinished() {
|
|
|
11280
11516
|
/* @__PURE__ */ jsx(
|
|
11281
11517
|
"article",
|
|
11282
11518
|
{
|
|
11283
|
-
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-
|
|
11519
|
+
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",
|
|
11284
11520
|
id: data.articleId,
|
|
11285
11521
|
children: data.finishedCode ? /* @__PURE__ */ jsx(
|
|
11286
11522
|
EpicVideoInfoProvider,
|
|
@@ -11589,8 +11825,7 @@ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
11589
11825
|
async function loader$8() {
|
|
11590
11826
|
ensureUndeployed();
|
|
11591
11827
|
const isAuthenticated = Boolean(await getAuthInfo());
|
|
11592
|
-
if (isAuthenticated)
|
|
11593
|
-
throw redirect("/account");
|
|
11828
|
+
if (isAuthenticated) throw redirect("/account");
|
|
11594
11829
|
return json({});
|
|
11595
11830
|
}
|
|
11596
11831
|
async function action$2() {
|
|
@@ -11608,8 +11843,7 @@ function Login() {
|
|
|
11608
11843
|
const revalidator = useRevalidator();
|
|
11609
11844
|
const lastMessage = useEventSource(`/login-sse`);
|
|
11610
11845
|
useEffect(() => {
|
|
11611
|
-
if (!lastMessage)
|
|
11612
|
-
return;
|
|
11846
|
+
if (!lastMessage) return;
|
|
11613
11847
|
const parsed = JSON.parse(lastMessage);
|
|
11614
11848
|
const result = EventSchema.safeParse(parsed);
|
|
11615
11849
|
if (!result.success) {
|
|
@@ -11773,8 +12007,7 @@ async function clearData() {
|
|
|
11773
12007
|
await deleteDb();
|
|
11774
12008
|
}
|
|
11775
12009
|
async function clearCaches() {
|
|
11776
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
11777
|
-
return;
|
|
12010
|
+
if (ENV.EPICSHOP_DEPLOYED) return;
|
|
11778
12011
|
const workshopRoot2 = getWorkshopRoot();
|
|
11779
12012
|
await fsExtra.remove(path$1.join(workshopRoot2, "node_modules", ".cache"));
|
|
11780
12013
|
await deleteCache();
|
|
@@ -12481,11 +12714,11 @@ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
12481
12714
|
__proto__: null,
|
|
12482
12715
|
loader
|
|
12483
12716
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
12484
|
-
const serverManifest = { "entry": { "module": "/assets/entry.client-0j1eoieD.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.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-BQ7V6fP4.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/error-boundary-Bcric_4t.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-r90CY6Wk.js", "/assets/index-Bg9MMnnf.js", "/assets/presence-BJPzwbUy.js", "/assets/seo-Bu3_n5my.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/_-COWH0sBh.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/error-boundary-Bcric_4t.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-CNgYirUN.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/user-73ocDYRe.js", "/assets/presence-BJPzwbUy.js", "/assets/progress-CF9Xwfxf.js", "/assets/index-Bg9MMnnf.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-BR-Qyofe.js", "imports": ["/assets/index-D6ygCrVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-wyz3vbhs.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.js", "/assets/seo-Bu3_n5my.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-C37pli7_.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-xu6a9He_.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/mdx-BYvGbvEr.js", "/assets/user-73ocDYRe.js", "/assets/index-9nNr0Zqr.js", "/assets/diff-BKsbFB6w.js", "/assets/error-boundary-Bcric_4t.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/progress-CF9Xwfxf.js", "/assets/seo-Bu3_n5my.js", "/assets/discord-0kv66Q6F.js", "/assets/index-r90CY6Wk.js", "/assets/button-BfWwrI9B.js", "/assets/use-event-source-aW6X9lN1.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$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+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-DNtyBHjg.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.js", "/assets/seo-Bu3_n5my.js"], "css": ["/assets/epic-video-DUnRvy1A.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-DesvwOeg.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/request-info-Dyls4H67.js", "/assets/button-BfWwrI9B.js", "/assets/misc-DNgC2Frq.js", "/assets/user-73ocDYRe.js", "/assets/presence-BJPzwbUy.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+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-Xp0X4-Fl.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/user-73ocDYRe.js", "/assets/discord-0kv66Q6F.js"], "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-Cu9PZd5Q.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/mdx-BYvGbvEr.js", "/assets/seo-Bu3_n5my.js", "/assets/progress-CF9Xwfxf.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-BQRtqn3g.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/error-boundary-Bcric_4t.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.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-D8zyjBAb.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/request-info-Dyls4H67.js", "/assets/client-hints-BKxdo5Js.js", "/assets/use-event-source-aW6X9lN1.js", "/assets/button-BfWwrI9B.js", "/assets/loading-C9f_vBoM.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-DUAHYT3r.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-D0zbQZjf.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/progress-CF9Xwfxf.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/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-KDzcgGYL.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/mdx-BYvGbvEr.js", "/assets/diff-BKsbFB6w.js", "/assets/nav-chevrons-DOYtx9XE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "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-euWyXpCL.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/button-BfWwrI9B.js", "/assets/epic-video-BwtXsHGU.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/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/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/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.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-b31ba37c.js", "version": "b31ba37c" };
|
|
12717
|
+
const serverManifest = { "entry": { "module": "/assets/entry.client-B0vV2fsa.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.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-bgHbi7rA.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-Doi37489.js", "/assets/index-90bzTYUX.js", "/assets/presence-DXXVJbaH.js", "/assets/seo-Bu3_n5my.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/_-Bd2gNcck.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/error-boundary-DxfVshQ5.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-DHBLG7Ti.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-4E9_Sx3m.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js", "/assets/progress-B_mReZVE.js", "/assets/index-90bzTYUX.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DaZNLfOL.js", "imports": ["/assets/index-Czg1ruVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-CFOo2dQj.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-Bu3_n5my.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-DCbWNWpZ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-Bdd3mpVx.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/user-C4QTtQw5.js", "/assets/index-D6ukHE4T.js", "/assets/diff-P5f7-8E4.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/progress-B_mReZVE.js", "/assets/seo-Bu3_n5my.js", "/assets/discord-COPE8EOZ.js", "/assets/index-Doi37489.js", "/assets/button-CyZl24U2.js", "/assets/use-event-source-ySol3hbz.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$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+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-P7xMAtl1.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-Bu3_n5my.js"], "css": ["/assets/epic-video-DUnRvy1A.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-CnLkZd_O.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/button-CyZl24U2.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.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+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-DIog7bBO.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/discord-COPE8EOZ.js"], "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-DP5ynR5u.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/seo-Bu3_n5my.js", "/assets/progress-B_mReZVE.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-BXefr1BB.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.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-DxG854vQ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/use-event-source-ySol3hbz.js", "/assets/button-CyZl24U2.js", "/assets/loading-CNWJVymJ.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-DrY-qRGh.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-rEQoj43V.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/progress-B_mReZVE.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/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-PfwTHr6-.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/diff-P5f7-8E4.js", "/assets/nav-chevrons-BYKwyIgG.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "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-b9lcdh4n.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/button-CyZl24U2.js", "/assets/epic-video-CYnG2ziQ.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/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/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-K6Dvbx-E.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.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-DP2rzg_V.js", "imports": [], "css": [] } }, "url": "/assets/manifest-805aa13a.js", "version": "805aa13a" };
|
|
12485
12718
|
const mode = "production";
|
|
12486
12719
|
const assetsBuildDirectory = "build/client";
|
|
12487
12720
|
const basename = "/";
|
|
12488
|
-
const future = { "v3_fetcherPersist": false, "v3_relativeSplatPath": false, "v3_throwAbortReason": false, "unstable_singleFetch": false };
|
|
12721
|
+
const future = { "v3_fetcherPersist": false, "v3_relativeSplatPath": false, "v3_throwAbortReason": false, "unstable_singleFetch": false, "unstable_fogOfWar": false };
|
|
12489
12722
|
const isSpaMode = false;
|
|
12490
12723
|
const publicPath = "/";
|
|
12491
12724
|
const entry = { module: entryServer };
|