@epic-web/workshop-app 4.6.6 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-a1fde59b.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 +841 -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
|
+
}, 350)
|
|
2556
2467
|
)
|
|
2557
2468
|
]);
|
|
2558
2469
|
if (response.statusText === "Timeout") {
|
|
@@ -2571,8 +2482,9 @@ 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;
|
|
2487
|
+
console.log("aaaaaaaaaaaaaaaaa", error);
|
|
2576
2488
|
return [];
|
|
2577
2489
|
}
|
|
2578
2490
|
}
|
|
@@ -2580,7 +2492,7 @@ async function getPresentUsers(user, { timings, request } = {}) {
|
|
|
2580
2492
|
}
|
|
2581
2493
|
function uniqueUsers(users) {
|
|
2582
2494
|
const seen = /* @__PURE__ */ new Set();
|
|
2583
|
-
return users.filter((user) => {
|
|
2495
|
+
return users.filter(Boolean).filter((user) => {
|
|
2584
2496
|
if (seen.has(user.id)) {
|
|
2585
2497
|
return false;
|
|
2586
2498
|
}
|
|
@@ -2589,8 +2501,7 @@ function uniqueUsers(users) {
|
|
|
2589
2501
|
});
|
|
2590
2502
|
}
|
|
2591
2503
|
function Confetti({ id }) {
|
|
2592
|
-
if (!id)
|
|
2593
|
-
return null;
|
|
2504
|
+
if (!id) return null;
|
|
2594
2505
|
return /* @__PURE__ */ jsx(ClientOnly, { children: () => /* @__PURE__ */ jsx(
|
|
2595
2506
|
Index$1,
|
|
2596
2507
|
{
|
|
@@ -2902,8 +2813,7 @@ const Heading = React.forwardRef(function Heading2({ id, children, as: asProp, c
|
|
|
2902
2813
|
);
|
|
2903
2814
|
});
|
|
2904
2815
|
function getErrorMessage(error) {
|
|
2905
|
-
if (typeof error === "string")
|
|
2906
|
-
return error;
|
|
2816
|
+
if (typeof error === "string") return error;
|
|
2907
2817
|
if (error && typeof error === "object" && "message" in error && typeof error.message === "string") {
|
|
2908
2818
|
return error.message;
|
|
2909
2819
|
}
|
|
@@ -2957,8 +2867,7 @@ function getBaseUrl({
|
|
|
2957
2867
|
function combineHeaders(...headers2) {
|
|
2958
2868
|
const combined = new Headers();
|
|
2959
2869
|
for (const header of headers2) {
|
|
2960
|
-
if (!header)
|
|
2961
|
-
continue;
|
|
2870
|
+
if (!header) continue;
|
|
2962
2871
|
for (const [key, value] of new Headers(header).entries()) {
|
|
2963
2872
|
combined.append(key, value);
|
|
2964
2873
|
}
|
|
@@ -2968,8 +2877,7 @@ function combineHeaders(...headers2) {
|
|
|
2968
2877
|
function debounce(fn, delay) {
|
|
2969
2878
|
let timer = null;
|
|
2970
2879
|
return (...args) => {
|
|
2971
|
-
if (timer)
|
|
2972
|
-
clearTimeout(timer);
|
|
2880
|
+
if (timer) clearTimeout(timer);
|
|
2973
2881
|
timer = setTimeout(() => {
|
|
2974
2882
|
fn(...args);
|
|
2975
2883
|
}, delay);
|
|
@@ -3028,14 +2936,11 @@ function EpicProgress() {
|
|
|
3028
2936
|
const isSubmitting = states.some((s) => s === "submitting");
|
|
3029
2937
|
const isLoading = states.some((s) => s === "loading");
|
|
3030
2938
|
useEffect(() => {
|
|
3031
|
-
if (!ref.current)
|
|
3032
|
-
|
|
3033
|
-
if (delayedPending)
|
|
3034
|
-
setAnimationComplete(false);
|
|
2939
|
+
if (!ref.current) return;
|
|
2940
|
+
if (delayedPending) setAnimationComplete(false);
|
|
3035
2941
|
const animationPromises = ref.current.getAnimations().map(({ finished }) => finished);
|
|
3036
2942
|
void Promise.allSettled(animationPromises).then(() => {
|
|
3037
|
-
if (!delayedPending)
|
|
3038
|
-
setAnimationComplete(true);
|
|
2943
|
+
if (!delayedPending) setAnimationComplete(true);
|
|
3039
2944
|
});
|
|
3040
2945
|
}, [delayedPending]);
|
|
3041
2946
|
return /* @__PURE__ */ jsx(
|
|
@@ -3078,25 +2983,31 @@ function ShowToast({ toast: toast$1 }) {
|
|
|
3078
2983
|
const TooltipProvider = TooltipPrimitive.Provider;
|
|
3079
2984
|
const Tooltip = TooltipPrimitive.Root;
|
|
3080
2985
|
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
2986
|
+
function TooltipContent({
|
|
2987
|
+
className,
|
|
2988
|
+
sideOffset = 4,
|
|
2989
|
+
ref,
|
|
2990
|
+
...props
|
|
2991
|
+
}) {
|
|
2992
|
+
return /* @__PURE__ */ jsx(
|
|
2993
|
+
TooltipPrimitive.Content,
|
|
2994
|
+
{
|
|
2995
|
+
ref,
|
|
2996
|
+
sideOffset,
|
|
2997
|
+
className: cn(
|
|
2998
|
+
"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",
|
|
2999
|
+
className
|
|
3000
|
+
),
|
|
3001
|
+
...props
|
|
3002
|
+
}
|
|
3003
|
+
);
|
|
3004
|
+
}
|
|
3093
3005
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
3094
3006
|
function SimpleTooltip({
|
|
3095
3007
|
content,
|
|
3096
3008
|
children
|
|
3097
3009
|
}) {
|
|
3098
|
-
if (!content)
|
|
3099
|
-
return children;
|
|
3010
|
+
if (!content) return children;
|
|
3100
3011
|
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
3101
3012
|
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children }),
|
|
3102
3013
|
/* @__PURE__ */ jsx(TooltipContent, { children: content })
|
|
@@ -3152,16 +3063,14 @@ function ErrorList({
|
|
|
3152
3063
|
errors
|
|
3153
3064
|
}) {
|
|
3154
3065
|
const errorsToRender = errors == null ? void 0 : errors.filter(Boolean);
|
|
3155
|
-
if (!(errorsToRender == null ? void 0 : errorsToRender.length))
|
|
3156
|
-
return null;
|
|
3066
|
+
if (!(errorsToRender == null ? void 0 : errorsToRender.length)) return null;
|
|
3157
3067
|
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
3068
|
}
|
|
3159
3069
|
const cookieName$1 = "EpicShop_theme";
|
|
3160
3070
|
function getTheme(request) {
|
|
3161
3071
|
const cookieHeader = request.headers.get("cookie");
|
|
3162
3072
|
const parsed = cookieHeader ? cookie.parse(cookieHeader)[cookieName$1] : null;
|
|
3163
|
-
if (parsed === "light" || parsed === "dark")
|
|
3164
|
-
return parsed;
|
|
3073
|
+
if (parsed === "light" || parsed === "dark") return parsed;
|
|
3165
3074
|
return null;
|
|
3166
3075
|
}
|
|
3167
3076
|
function setTheme(theme) {
|
|
@@ -3204,7 +3113,7 @@ function ThemeSwitch() {
|
|
|
3204
3113
|
setIsHydrated(true);
|
|
3205
3114
|
}, []);
|
|
3206
3115
|
const [form] = useForm({
|
|
3207
|
-
id: "
|
|
3116
|
+
id: "theme-switcher",
|
|
3208
3117
|
lastResult: fetcher.data,
|
|
3209
3118
|
onValidate({ formData }) {
|
|
3210
3119
|
return parseWithZod(formData, { schema: ThemeFormSchema });
|
|
@@ -3247,8 +3156,7 @@ function useTheme() {
|
|
|
3247
3156
|
}
|
|
3248
3157
|
);
|
|
3249
3158
|
const optimisticTheme = (_a2 = fetcher == null ? void 0 : fetcher.formData) == null ? void 0 : _a2.get("theme");
|
|
3250
|
-
if (optimisticTheme === "system")
|
|
3251
|
-
return hints.theme;
|
|
3159
|
+
if (optimisticTheme === "system") return hints.theme;
|
|
3252
3160
|
if (optimisticTheme === "light" || optimisticTheme === "dark") {
|
|
3253
3161
|
return optimisticTheme;
|
|
3254
3162
|
}
|
|
@@ -3261,7 +3169,7 @@ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
3261
3169
|
useTheme
|
|
3262
3170
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3263
3171
|
const appStylesheetUrl = "/assets/app-BKC4z3M_.css";
|
|
3264
|
-
const tailwindStylesheetUrl = "/assets/tailwind-
|
|
3172
|
+
const tailwindStylesheetUrl = "/assets/tailwind-D2vjZZFL.css";
|
|
3265
3173
|
const cookieName = "EpicShop_confetti";
|
|
3266
3174
|
function getConfetti(request) {
|
|
3267
3175
|
const cookieHeader = request.headers.get("cookie");
|
|
@@ -3313,11 +3221,9 @@ const CachedEpicVideoInfoSchema = z$1.object({
|
|
|
3313
3221
|
})
|
|
3314
3222
|
).or(z$1.null());
|
|
3315
3223
|
async function getEpicVideoInfos(epicWebUrls, { request, timings } = {}) {
|
|
3316
|
-
if (!epicWebUrls)
|
|
3317
|
-
return {};
|
|
3224
|
+
if (!epicWebUrls) return {};
|
|
3318
3225
|
const authInfo = await getAuthInfo();
|
|
3319
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3320
|
-
return {};
|
|
3226
|
+
if (ENV.EPICSHOP_DEPLOYED) return {};
|
|
3321
3227
|
const epicVideoInfos = {};
|
|
3322
3228
|
for (const epicVideoEmbed of epicWebUrls) {
|
|
3323
3229
|
const epicVideoInfo = await getEpicVideoInfo({
|
|
@@ -3350,8 +3256,7 @@ async function getEpicVideoInfo({
|
|
|
3350
3256
|
checkValue: CachedEpicVideoInfoSchema,
|
|
3351
3257
|
async getFreshValue(context) {
|
|
3352
3258
|
const epicWebUrl = new URL(epicVideoEmbed);
|
|
3353
|
-
if (epicWebUrl.host !== "www.epicweb.dev")
|
|
3354
|
-
return null;
|
|
3259
|
+
if (epicWebUrl.host !== "www.epicweb.dev") return null;
|
|
3355
3260
|
const infoResponse = await fetch(
|
|
3356
3261
|
`https://www.epicweb.dev/api${epicWebUrl.pathname}`,
|
|
3357
3262
|
accessToken ? { headers: { authorization: `Bearer ${accessToken}` } } : void 0
|
|
@@ -3413,11 +3318,9 @@ async function getEpicProgress({
|
|
|
3413
3318
|
request,
|
|
3414
3319
|
forceFresh
|
|
3415
3320
|
} = {}) {
|
|
3416
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3417
|
-
return [];
|
|
3321
|
+
if (ENV.EPICSHOP_DEPLOYED) return [];
|
|
3418
3322
|
const authInfo = await getAuthInfo();
|
|
3419
|
-
if (!authInfo)
|
|
3420
|
-
return [];
|
|
3323
|
+
if (!authInfo) return [];
|
|
3421
3324
|
const tokenPart = md5(authInfo.tokenSet.access_token);
|
|
3422
3325
|
const EpicProgressSchema = z$1.array(
|
|
3423
3326
|
z$1.object({
|
|
@@ -3456,14 +3359,11 @@ async function getProgress({
|
|
|
3456
3359
|
timings,
|
|
3457
3360
|
request
|
|
3458
3361
|
} = {}) {
|
|
3459
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3460
|
-
return [];
|
|
3362
|
+
if (ENV.EPICSHOP_DEPLOYED) return [];
|
|
3461
3363
|
const authInfo = await getAuthInfo();
|
|
3462
|
-
if (!authInfo)
|
|
3463
|
-
return [];
|
|
3364
|
+
if (!authInfo) return [];
|
|
3464
3365
|
const epicWorkshopSlug = await getEpicWorkshopSlug();
|
|
3465
|
-
if (!epicWorkshopSlug)
|
|
3466
|
-
return [];
|
|
3366
|
+
if (!epicWorkshopSlug) return [];
|
|
3467
3367
|
const [
|
|
3468
3368
|
workshopData,
|
|
3469
3369
|
epicProgress,
|
|
@@ -3595,11 +3495,9 @@ async function getWorkshopData(epicWorkshopSlug, {
|
|
|
3595
3495
|
request,
|
|
3596
3496
|
forceFresh
|
|
3597
3497
|
} = {}) {
|
|
3598
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
3599
|
-
return { sections: [] };
|
|
3498
|
+
if (ENV.EPICSHOP_DEPLOYED) return { sections: [] };
|
|
3600
3499
|
const authInfo = await getAuthInfo();
|
|
3601
|
-
if (!authInfo)
|
|
3602
|
-
return { sections: [] };
|
|
3500
|
+
if (!authInfo) return { sections: [] };
|
|
3603
3501
|
return cachified({
|
|
3604
3502
|
key: `epic-workshop-data:${epicWorkshopSlug}`,
|
|
3605
3503
|
cache: fsCache,
|
|
@@ -3646,13 +3544,10 @@ function usePresenceSocket(user) {
|
|
|
3646
3544
|
const data = useRouteLoaderData("root");
|
|
3647
3545
|
const [users, setUsers] = useState((data == null ? void 0 : data.presence.users) ?? []);
|
|
3648
3546
|
const [clientId] = useState(() => {
|
|
3649
|
-
if (typeof document === "undefined")
|
|
3650
|
-
|
|
3651
|
-
if (user)
|
|
3652
|
-
return user.id;
|
|
3547
|
+
if (typeof document === "undefined") return null;
|
|
3548
|
+
if (user) return user.id;
|
|
3653
3549
|
const clientId2 = sessionStorage.getItem("clientId");
|
|
3654
|
-
if (clientId2)
|
|
3655
|
-
return clientId2;
|
|
3550
|
+
if (clientId2) return clientId2;
|
|
3656
3551
|
const newClientId = createId();
|
|
3657
3552
|
sessionStorage.setItem("clientId", newClientId);
|
|
3658
3553
|
return newClientId;
|
|
@@ -3664,8 +3559,7 @@ function usePresenceSocket(user) {
|
|
|
3664
3559
|
const messageResult = MessageSchema.safeParse(
|
|
3665
3560
|
JSON.parse(String(evt.data))
|
|
3666
3561
|
);
|
|
3667
|
-
if (!messageResult.success)
|
|
3668
|
-
return;
|
|
3562
|
+
if (!messageResult.success) return;
|
|
3669
3563
|
if (messageResult.data.type === "presence") {
|
|
3670
3564
|
setUsers(messageResult.data.payload.users);
|
|
3671
3565
|
}
|
|
@@ -3703,8 +3597,7 @@ function usePresenceSocket(user) {
|
|
|
3703
3597
|
}
|
|
3704
3598
|
const messageJson = message ? JSON.stringify(message) : null;
|
|
3705
3599
|
useEffect(() => {
|
|
3706
|
-
if (messageJson)
|
|
3707
|
-
socket.send(messageJson);
|
|
3600
|
+
if (messageJson) socket.send(messageJson);
|
|
3708
3601
|
}, [messageJson, socket]);
|
|
3709
3602
|
const scoredUsers = scoreUsers(location, users);
|
|
3710
3603
|
return { users: scoredUsers };
|
|
@@ -3729,8 +3622,7 @@ function scoreUsers(location, users) {
|
|
|
3729
3622
|
return { user, score: Math.floor(score / available * 10) / 10 };
|
|
3730
3623
|
});
|
|
3731
3624
|
return scoredUsers.sort((a, b) => {
|
|
3732
|
-
if (a.score === b.score)
|
|
3733
|
-
return 0;
|
|
3625
|
+
if (a.score === b.score) return 0;
|
|
3734
3626
|
return a.score > b.score ? -1 : 1;
|
|
3735
3627
|
});
|
|
3736
3628
|
}
|
|
@@ -3845,8 +3737,7 @@ const links = () => {
|
|
|
3845
3737
|
];
|
|
3846
3738
|
};
|
|
3847
3739
|
const meta$5 = ({ data }) => {
|
|
3848
|
-
if (!data)
|
|
3849
|
-
return [];
|
|
3740
|
+
if (!data) return [];
|
|
3850
3741
|
return getSeoMetaTags({
|
|
3851
3742
|
instructor: data.instructor,
|
|
3852
3743
|
title: data.workshopTitle,
|
|
@@ -4104,6 +3995,103 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
4104
3995
|
default: NotFound,
|
|
4105
3996
|
loader: loader$r
|
|
4106
3997
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3998
|
+
function makeMediaQueryStore(mediaQuery, serverSnapshot) {
|
|
3999
|
+
function getSnapshot() {
|
|
4000
|
+
return window.matchMedia(mediaQuery).matches;
|
|
4001
|
+
}
|
|
4002
|
+
function subscribe(callback) {
|
|
4003
|
+
const mediaQueryList = window.matchMedia(mediaQuery);
|
|
4004
|
+
mediaQueryList.addEventListener("change", callback);
|
|
4005
|
+
return () => {
|
|
4006
|
+
mediaQueryList.removeEventListener("change", callback);
|
|
4007
|
+
};
|
|
4008
|
+
}
|
|
4009
|
+
return function useMediaQuery() {
|
|
4010
|
+
return useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot);
|
|
4011
|
+
};
|
|
4012
|
+
}
|
|
4013
|
+
const Dialog = DialogPrimitive.Root;
|
|
4014
|
+
const DialogTrigger = DialogPrimitive.Trigger;
|
|
4015
|
+
const DialogPortal = DialogPrimitive.Portal;
|
|
4016
|
+
function DialogOverlay({
|
|
4017
|
+
className,
|
|
4018
|
+
ref,
|
|
4019
|
+
...props
|
|
4020
|
+
}) {
|
|
4021
|
+
return /* @__PURE__ */ jsx(
|
|
4022
|
+
DialogPrimitive.Overlay,
|
|
4023
|
+
{
|
|
4024
|
+
ref,
|
|
4025
|
+
className: cn(
|
|
4026
|
+
"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",
|
|
4027
|
+
className
|
|
4028
|
+
),
|
|
4029
|
+
...props
|
|
4030
|
+
}
|
|
4031
|
+
);
|
|
4032
|
+
}
|
|
4033
|
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
4034
|
+
function DialogContent({
|
|
4035
|
+
className,
|
|
4036
|
+
children,
|
|
4037
|
+
ref,
|
|
4038
|
+
...props
|
|
4039
|
+
}) {
|
|
4040
|
+
return /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
4041
|
+
/* @__PURE__ */ jsx(DialogOverlay, {}),
|
|
4042
|
+
/* @__PURE__ */ jsxs(
|
|
4043
|
+
DialogPrimitive.Content,
|
|
4044
|
+
{
|
|
4045
|
+
ref,
|
|
4046
|
+
className: cn(
|
|
4047
|
+
"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",
|
|
4048
|
+
className
|
|
4049
|
+
),
|
|
4050
|
+
...props,
|
|
4051
|
+
children: [
|
|
4052
|
+
children,
|
|
4053
|
+
/* @__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: [
|
|
4054
|
+
/* @__PURE__ */ jsx(Icon, { name: "Close" }),
|
|
4055
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
4056
|
+
] })
|
|
4057
|
+
]
|
|
4058
|
+
}
|
|
4059
|
+
)
|
|
4060
|
+
] });
|
|
4061
|
+
}
|
|
4062
|
+
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
4063
|
+
function DialogHeader({
|
|
4064
|
+
className,
|
|
4065
|
+
...props
|
|
4066
|
+
}) {
|
|
4067
|
+
return /* @__PURE__ */ jsx(
|
|
4068
|
+
"div",
|
|
4069
|
+
{
|
|
4070
|
+
className: cn(
|
|
4071
|
+
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
4072
|
+
className
|
|
4073
|
+
),
|
|
4074
|
+
...props
|
|
4075
|
+
}
|
|
4076
|
+
);
|
|
4077
|
+
}
|
|
4078
|
+
DialogHeader.displayName = "DialogHeader";
|
|
4079
|
+
DialogPrimitive.Title.displayName;
|
|
4080
|
+
function DialogDescription({
|
|
4081
|
+
className,
|
|
4082
|
+
ref,
|
|
4083
|
+
...props
|
|
4084
|
+
}) {
|
|
4085
|
+
return /* @__PURE__ */ jsx(
|
|
4086
|
+
DialogPrimitive.Description,
|
|
4087
|
+
{
|
|
4088
|
+
ref,
|
|
4089
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
4090
|
+
...props
|
|
4091
|
+
}
|
|
4092
|
+
);
|
|
4093
|
+
}
|
|
4094
|
+
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
4107
4095
|
function useOptionalUser() {
|
|
4108
4096
|
const data = useRouteLoaderData("root");
|
|
4109
4097
|
return data == null ? void 0 : data.user;
|
|
@@ -4129,8 +4117,7 @@ function useEpicProgress() {
|
|
|
4129
4117
|
return f.formAction === "/progress" && ((_a2 = f.formData) == null ? void 0 : _a2.has("complete"));
|
|
4130
4118
|
}
|
|
4131
4119
|
);
|
|
4132
|
-
if (!progressFetcher || !(data == null ? void 0 : data.progress))
|
|
4133
|
-
return (data == null ? void 0 : data.progress) ?? null;
|
|
4120
|
+
if (!progressFetcher || !(data == null ? void 0 : data.progress)) return (data == null ? void 0 : data.progress) ?? null;
|
|
4134
4121
|
return data.progress.map((p) => {
|
|
4135
4122
|
var _a2, _b2;
|
|
4136
4123
|
const optimisticCompleted = ((_a2 = progressFetcher.formData) == null ? void 0 : _a2.get("complete")) === "true";
|
|
@@ -4147,49 +4134,34 @@ function useEpicProgress() {
|
|
|
4147
4134
|
}
|
|
4148
4135
|
function useRequireEpicProgress() {
|
|
4149
4136
|
const progress = useEpicProgress();
|
|
4150
|
-
if (!progress)
|
|
4151
|
-
return [];
|
|
4137
|
+
if (!progress) return [];
|
|
4152
4138
|
return progress;
|
|
4153
4139
|
}
|
|
4154
4140
|
function useNextExerciseRoute() {
|
|
4155
4141
|
const progress = useEpicProgress();
|
|
4156
|
-
if (!progress)
|
|
4157
|
-
return null;
|
|
4142
|
+
if (!progress) return null;
|
|
4158
4143
|
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;
|
|
4144
|
+
if (a.type === "workshop-instructions") return 0;
|
|
4145
|
+
if (a.type === "workshop-finished") return 1e4;
|
|
4146
|
+
if (a.type === "instructions") return a.exerciseNumber * 100;
|
|
4147
|
+
if (a.type === "step") return a.exerciseNumber * 100 + a.stepNumber;
|
|
4148
|
+
if (a.type === "finished") return a.exerciseNumber * 100 + 100;
|
|
4149
|
+
if (a.type === "unknown") return 1e5;
|
|
4171
4150
|
return -1;
|
|
4172
4151
|
};
|
|
4173
4152
|
const sortedProgress = progress.sort((a, b) => {
|
|
4174
4153
|
return scoreProgress(a) - scoreProgress(b);
|
|
4175
4154
|
});
|
|
4176
4155
|
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";
|
|
4156
|
+
if (!nextProgress) return null;
|
|
4157
|
+
if (nextProgress.type === "unknown") return null;
|
|
4158
|
+
if (nextProgress.type === "workshop-instructions") return "/";
|
|
4159
|
+
if (nextProgress.type === "workshop-finished") return "/finished";
|
|
4185
4160
|
const ex = nextProgress.exerciseNumber.toString().padStart(2, "0");
|
|
4186
|
-
if (nextProgress.type === "instructions")
|
|
4187
|
-
|
|
4188
|
-
if (nextProgress.type === "finished")
|
|
4189
|
-
return `/${ex}/finished`;
|
|
4161
|
+
if (nextProgress.type === "instructions") return `/${ex}`;
|
|
4162
|
+
if (nextProgress.type === "finished") return `/${ex}/finished`;
|
|
4190
4163
|
const st = nextProgress.stepNumber.toString().padStart(2, "0");
|
|
4191
|
-
if (nextProgress.type === "step")
|
|
4192
|
-
return `/${ex}/${st}/problem`;
|
|
4164
|
+
if (nextProgress.type === "step") return `/${ex}/${st}/problem`;
|
|
4193
4165
|
return null;
|
|
4194
4166
|
}
|
|
4195
4167
|
const percentageClassNames = {
|
|
@@ -4207,13 +4179,11 @@ const percentageClassNames = {
|
|
|
4207
4179
|
};
|
|
4208
4180
|
function useExerciseProgressClassName(exerciseNumber) {
|
|
4209
4181
|
const progress = useEpicProgress();
|
|
4210
|
-
if (!(progress == null ? void 0 : progress.length))
|
|
4211
|
-
return null;
|
|
4182
|
+
if (!(progress == null ? void 0 : progress.length)) return null;
|
|
4212
4183
|
const exerciseProgress = progress.filter(
|
|
4213
4184
|
(p) => (p.type === "instructions" || p.type === "step" || p.type === "finished") && p.exerciseNumber === exerciseNumber
|
|
4214
4185
|
);
|
|
4215
|
-
if (!exerciseProgress.length)
|
|
4216
|
-
return null;
|
|
4186
|
+
if (!exerciseProgress.length) return null;
|
|
4217
4187
|
const percentComlete = exerciseProgress.reduce(
|
|
4218
4188
|
(acc, p) => p.epicCompletedAt ? acc + 1 : acc,
|
|
4219
4189
|
0
|
|
@@ -4225,8 +4195,7 @@ function useExerciseProgressClassName(exerciseNumber) {
|
|
|
4225
4195
|
}
|
|
4226
4196
|
function useProgressItemClassName(progressItemSearch) {
|
|
4227
4197
|
const progressItem = useProgressItem(progressItemSearch);
|
|
4228
|
-
if (!(progressItem == null ? void 0 : progressItem.epicCompletedAt))
|
|
4229
|
-
return null;
|
|
4198
|
+
if (!(progressItem == null ? void 0 : progressItem.epicCompletedAt)) return null;
|
|
4230
4199
|
return `relative before:h-[100%] before:bg-highlight before:absolute before:left-0 before:top-0 before:w-[4px]`;
|
|
4231
4200
|
}
|
|
4232
4201
|
function useProgressItem({
|
|
@@ -4235,8 +4204,7 @@ function useProgressItem({
|
|
|
4235
4204
|
type
|
|
4236
4205
|
}) {
|
|
4237
4206
|
const progress = useEpicProgress();
|
|
4238
|
-
if (!(progress == null ? void 0 : progress.length))
|
|
4239
|
-
return null;
|
|
4207
|
+
if (!(progress == null ? void 0 : progress.length)) return null;
|
|
4240
4208
|
if (type === "workshop-finished" || type === "workshop-instructions") {
|
|
4241
4209
|
return progress.find((p) => p.type === type) ?? null;
|
|
4242
4210
|
} else if (type === "instructions" || type === "finished") {
|
|
@@ -4270,15 +4238,12 @@ async function action$b({ request }) {
|
|
|
4270
4238
|
(p) => p.epicLessonSlug === lessonSlug
|
|
4271
4239
|
);
|
|
4272
4240
|
function getCompletionAnnouncement() {
|
|
4273
|
-
if (!complete)
|
|
4274
|
-
|
|
4275
|
-
if (!lessonProgress)
|
|
4276
|
-
return null;
|
|
4241
|
+
if (!complete) return null;
|
|
4242
|
+
if (!lessonProgress) return null;
|
|
4277
4243
|
const allOtherAreFinished = beforeProgress.every(
|
|
4278
4244
|
(p) => p.epicCompletedAt || p.epicLessonSlug === lessonProgress.epicLessonSlug
|
|
4279
4245
|
);
|
|
4280
|
-
if (allOtherAreFinished)
|
|
4281
|
-
return "You completed the workshop!";
|
|
4246
|
+
if (allOtherAreFinished) return "You completed the workshop!";
|
|
4282
4247
|
if (lessonProgress.type === "workshop-instructions" || lessonProgress.type === "unknown" || lessonProgress.type === "workshop-finished") {
|
|
4283
4248
|
return null;
|
|
4284
4249
|
}
|
|
@@ -4334,17 +4299,14 @@ function ProgressToggle({
|
|
|
4334
4299
|
navigationLocationStateFrom
|
|
4335
4300
|
]);
|
|
4336
4301
|
React.useEffect(() => {
|
|
4337
|
-
if (!animationRef.current)
|
|
4338
|
-
|
|
4339
|
-
if (!startAnimation)
|
|
4340
|
-
return;
|
|
4302
|
+
if (!animationRef.current) return;
|
|
4303
|
+
if (!startAnimation) return;
|
|
4341
4304
|
const animationPromises = animationRef.current.getAnimations().map(({ finished }) => finished);
|
|
4342
4305
|
void Promise.allSettled(animationPromises).then(() => {
|
|
4343
4306
|
setStartAnimation(false);
|
|
4344
4307
|
});
|
|
4345
4308
|
}, [startAnimation]);
|
|
4346
|
-
if (ENV.EPICSHOP_DEPLOYED || !progressItem)
|
|
4347
|
-
return null;
|
|
4309
|
+
if (ENV.EPICSHOP_DEPLOYED || !progressItem) return null;
|
|
4348
4310
|
return /* @__PURE__ */ jsxs(progressFetcher.Form, { method: "POST", action: "/progress", children: [
|
|
4349
4311
|
/* @__PURE__ */ jsx(
|
|
4350
4312
|
"input",
|
|
@@ -4502,8 +4464,7 @@ function FacePile({ isMenuOpened }) {
|
|
|
4502
4464
|
const { users } = usePresence();
|
|
4503
4465
|
const limit = isMenuOpened ? 17 : 0;
|
|
4504
4466
|
const numberOverLimit = users.length - limit;
|
|
4505
|
-
if (!users.length)
|
|
4506
|
-
return null;
|
|
4467
|
+
if (!users.length) return null;
|
|
4507
4468
|
const tiffany = isMenuOpened && users.length === 1 ? /* @__PURE__ */ jsx(
|
|
4508
4469
|
Link,
|
|
4509
4470
|
{
|
|
@@ -4591,32 +4552,41 @@ function FacePile({ isMenuOpened }) {
|
|
|
4591
4552
|
] }) : null
|
|
4592
4553
|
] }) });
|
|
4593
4554
|
}
|
|
4555
|
+
const useIsWide = makeMediaQueryStore("(min-width: 640px)", true);
|
|
4594
4556
|
function App() {
|
|
4595
4557
|
const user = useOptionalUser();
|
|
4558
|
+
const isWide = useIsWide();
|
|
4596
4559
|
const [isMenuOpened, setMenuOpened] = React.useState(false);
|
|
4597
4560
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
4598
4561
|
user ? null : /* @__PURE__ */ jsx(EpicWebBanner, {}),
|
|
4562
|
+
/* @__PURE__ */ jsx(
|
|
4563
|
+
MobileNavigation,
|
|
4564
|
+
{
|
|
4565
|
+
isMenuOpened,
|
|
4566
|
+
onMenuOpenChange: setMenuOpened
|
|
4567
|
+
}
|
|
4568
|
+
),
|
|
4599
4569
|
/* @__PURE__ */ jsxs(
|
|
4600
4570
|
"div",
|
|
4601
4571
|
{
|
|
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-[
|
|
4572
|
+
className: cn("flex flex-grow flex-col sm:flex-row", {
|
|
4573
|
+
"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,
|
|
4574
|
+
"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,
|
|
4575
|
+
"h-[unset]": !isWide && isMenuOpened
|
|
4606
4576
|
}),
|
|
4607
4577
|
children: [
|
|
4608
|
-
/* @__PURE__ */ jsx(
|
|
4578
|
+
isWide ? /* @__PURE__ */ jsx(
|
|
4609
4579
|
Navigation,
|
|
4610
4580
|
{
|
|
4611
4581
|
isMenuOpened,
|
|
4612
4582
|
onMenuOpenChange: setMenuOpened
|
|
4613
4583
|
}
|
|
4614
|
-
),
|
|
4584
|
+
) : null,
|
|
4615
4585
|
/* @__PURE__ */ jsx(
|
|
4616
4586
|
"div",
|
|
4617
4587
|
{
|
|
4618
4588
|
className: cn(
|
|
4619
|
-
"h-full w-full max-w-[calc(100%-56px)]",
|
|
4589
|
+
"h-full w-full max-w-full sm:max-w-[calc(100%-56px)]",
|
|
4620
4590
|
isMenuOpened ? "hidden md:block" : ""
|
|
4621
4591
|
),
|
|
4622
4592
|
children: /* @__PURE__ */ jsx(Outlet, {})
|
|
@@ -4628,8 +4598,7 @@ function App() {
|
|
|
4628
4598
|
] });
|
|
4629
4599
|
}
|
|
4630
4600
|
function getLocationLabel(location) {
|
|
4631
|
-
if (!location)
|
|
4632
|
-
return null;
|
|
4601
|
+
if (!location) return null;
|
|
4633
4602
|
const { exercise } = location;
|
|
4634
4603
|
const exercisePortion = [
|
|
4635
4604
|
exercise ? [exercise.exerciseNumber, exercise.stepNumber].filter(Boolean).map((s) => s.toString().padStart(2, "0")).join("/") : null,
|
|
@@ -4638,118 +4607,438 @@ function getLocationLabel(location) {
|
|
|
4638
4607
|
return { line1: location.workshopTitle, line2: exercisePortion };
|
|
4639
4608
|
}
|
|
4640
4609
|
function EpicWebBanner() {
|
|
4641
|
-
|
|
4642
|
-
|
|
4610
|
+
const isWide = useIsWide();
|
|
4611
|
+
const details = /* @__PURE__ */ jsx("div", { children: ENV.EPICSHOP_DEPLOYED ? /* @__PURE__ */ jsxs("div", { children: [
|
|
4612
|
+
`This is the deployed version. `,
|
|
4613
|
+
ENV.EPICSHOP_GITHUB_ROOT ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4614
|
+
/* @__PURE__ */ jsx(
|
|
4615
|
+
Link,
|
|
4616
|
+
{
|
|
4617
|
+
className: "underline",
|
|
4618
|
+
target: "_blank",
|
|
4619
|
+
rel: "noopener noreferrer",
|
|
4620
|
+
to: ENV.EPICSHOP_GITHUB_ROOT,
|
|
4621
|
+
children: "Run locally"
|
|
4622
|
+
}
|
|
4623
|
+
),
|
|
4624
|
+
` for full experience.`
|
|
4625
|
+
] }) : null,
|
|
4626
|
+
" "
|
|
4627
|
+
] }) : /* @__PURE__ */ jsxs("div", { children: [
|
|
4628
|
+
/* @__PURE__ */ jsx(Link, { to: "/login", className: "underline", children: "Login" }),
|
|
4629
|
+
" ",
|
|
4630
|
+
"or",
|
|
4631
|
+
" ",
|
|
4632
|
+
/* @__PURE__ */ jsx("a", { href: "https://www.epicweb.dev/login", className: "underline", children: "join for free" }),
|
|
4633
|
+
" ",
|
|
4634
|
+
"for the full experience."
|
|
4635
|
+
] }) });
|
|
4636
|
+
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: [
|
|
4637
|
+
/* @__PURE__ */ jsxs("div", { className: "hidden flex-1 flex-wrap items-center gap-4 sm:flex", children: [
|
|
4638
|
+
/* @__PURE__ */ jsx(Icon, { name: "EpicWeb", size: "lg" }),
|
|
4639
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-wrap items-center", children: [
|
|
4640
|
+
/* @__PURE__ */ jsxs("p", { className: "mr-2", children: [
|
|
4641
|
+
"Welcome to the",
|
|
4642
|
+
" ",
|
|
4643
|
+
/* @__PURE__ */ jsx(
|
|
4644
|
+
Link,
|
|
4645
|
+
{
|
|
4646
|
+
to: "https://www.epicweb.dev",
|
|
4647
|
+
className: "underline",
|
|
4648
|
+
target: "_blank",
|
|
4649
|
+
children: "EpicWeb.dev"
|
|
4650
|
+
}
|
|
4651
|
+
),
|
|
4652
|
+
" ",
|
|
4653
|
+
"Workshop app!"
|
|
4654
|
+
] }),
|
|
4655
|
+
details
|
|
4656
|
+
] })
|
|
4657
|
+
] }),
|
|
4658
|
+
/* @__PURE__ */ jsxs("div", { className: "hidden h-full flex-col items-center sm:flex md:flex-row", children: [
|
|
4659
|
+
/* @__PURE__ */ jsxs(
|
|
4660
|
+
Link,
|
|
4661
|
+
{
|
|
4662
|
+
to: "https://www.epicweb.dev",
|
|
4663
|
+
target: "_blank",
|
|
4664
|
+
className: "flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",
|
|
4665
|
+
children: [
|
|
4666
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Join Epic Web" }),
|
|
4667
|
+
/* @__PURE__ */ jsx("span", { children: "↗︎" })
|
|
4668
|
+
]
|
|
4669
|
+
}
|
|
4670
|
+
),
|
|
4671
|
+
/* @__PURE__ */ jsxs(
|
|
4672
|
+
Link,
|
|
4673
|
+
{
|
|
4674
|
+
to: ENV.EPICSHOP_DEPLOYED ? "https://www.epicweb.dev/login" : "/login",
|
|
4675
|
+
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",
|
|
4676
|
+
children: [
|
|
4677
|
+
/* @__PURE__ */ jsx(Icon, { name: "User", size: "lg" }),
|
|
4678
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Login" })
|
|
4679
|
+
]
|
|
4680
|
+
}
|
|
4681
|
+
)
|
|
4682
|
+
] })
|
|
4683
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4684
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-4 sm:hidden", children: [
|
|
4685
|
+
/* @__PURE__ */ jsx("a", { href: "https://www.epicweb.dev", children: /* @__PURE__ */ jsx(Icon, { name: "EpicWeb", size: "lg" }) }),
|
|
4686
|
+
/* @__PURE__ */ jsxs(Dialog, { children: [
|
|
4687
|
+
/* @__PURE__ */ jsx(DialogTrigger, { children: /* @__PURE__ */ jsx(Icon, { name: "Question", size: "lg", className: "animate-pulse" }) }),
|
|
4688
|
+
/* @__PURE__ */ jsxs(DialogContent, { children: [
|
|
4689
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
4690
|
+
/* @__PURE__ */ jsx(Icon, { name: "EpicWeb", size: "lg" }),
|
|
4691
|
+
/* @__PURE__ */ jsx("span", { className: "text-lg font-semibold", children: "EpicWeb.dev" })
|
|
4692
|
+
] }),
|
|
4693
|
+
/* @__PURE__ */ jsxs(DialogDescription, { children: [
|
|
4694
|
+
"Welcome to the",
|
|
4695
|
+
" ",
|
|
4696
|
+
/* @__PURE__ */ jsx(Link, { to: "https://www.epicweb.dev", className: "underline", children: "EpicWeb.dev" }),
|
|
4697
|
+
" ",
|
|
4698
|
+
"Workshop app!"
|
|
4699
|
+
] }),
|
|
4700
|
+
details
|
|
4701
|
+
] })
|
|
4702
|
+
] })
|
|
4703
|
+
] }),
|
|
4704
|
+
/* @__PURE__ */ jsxs("div", { className: "flex h-full items-center", children: [
|
|
4705
|
+
/* @__PURE__ */ jsxs(
|
|
4706
|
+
Link,
|
|
4707
|
+
{
|
|
4708
|
+
to: "https://www.epicweb.dev",
|
|
4709
|
+
target: "_blank",
|
|
4710
|
+
className: "flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",
|
|
4711
|
+
children: [
|
|
4712
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Join" }),
|
|
4713
|
+
/* @__PURE__ */ jsx("span", { children: "↗︎" })
|
|
4714
|
+
]
|
|
4715
|
+
}
|
|
4716
|
+
),
|
|
4717
|
+
/* @__PURE__ */ jsxs(
|
|
4718
|
+
Link,
|
|
4719
|
+
{
|
|
4720
|
+
to: ENV.EPICSHOP_DEPLOYED ? "https://www.epicweb.dev/login" : "/login",
|
|
4721
|
+
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",
|
|
4722
|
+
children: [
|
|
4723
|
+
/* @__PURE__ */ jsx(Icon, { name: "User", size: "lg" }),
|
|
4724
|
+
/* @__PURE__ */ jsx("span", { className: "drop-shadow-sm", children: "Login" })
|
|
4725
|
+
]
|
|
4726
|
+
}
|
|
4727
|
+
)
|
|
4728
|
+
] })
|
|
4729
|
+
] }) });
|
|
4730
|
+
}
|
|
4731
|
+
const itemVariants = {
|
|
4732
|
+
hidden: { opacity: 0, x: -20 },
|
|
4733
|
+
visible: { opacity: 1, x: 0 }
|
|
4734
|
+
};
|
|
4735
|
+
function NavigationExerciseListItem({
|
|
4736
|
+
exerciseNumber,
|
|
4737
|
+
children
|
|
4738
|
+
}) {
|
|
4739
|
+
const progressClassName = useExerciseProgressClassName(exerciseNumber);
|
|
4740
|
+
return /* @__PURE__ */ jsx(
|
|
4741
|
+
motion.li,
|
|
4643
4742
|
{
|
|
4743
|
+
variants: itemVariants,
|
|
4644
4744
|
className: cn(
|
|
4645
|
-
|
|
4646
|
-
|
|
4745
|
+
// add gap of 3 to children, but using padding so the progress extends through the whole height
|
|
4746
|
+
"py-[6px] first:pt-3 last:pb-3",
|
|
4747
|
+
progressClassName ? `${progressClassName} before:border-t` : null
|
|
4647
4748
|
),
|
|
4749
|
+
children: /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
4750
|
+
}
|
|
4751
|
+
);
|
|
4752
|
+
}
|
|
4753
|
+
function NavigationExerciseStepListItem({
|
|
4754
|
+
children,
|
|
4755
|
+
...progressItemSearch
|
|
4756
|
+
}) {
|
|
4757
|
+
const progressClassName = useProgressItemClassName(progressItemSearch);
|
|
4758
|
+
return /* @__PURE__ */ jsx(
|
|
4759
|
+
motion.li,
|
|
4760
|
+
{
|
|
4761
|
+
variants: itemVariants,
|
|
4762
|
+
className: cn(
|
|
4763
|
+
// add gap of 3 to children, but using padding so the progress extends through the whole height
|
|
4764
|
+
"py-[6px] first:pt-3 last:pb-3",
|
|
4765
|
+
progressClassName ? `${progressClassName} before:border-t` : null
|
|
4766
|
+
),
|
|
4767
|
+
children: /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
4768
|
+
}
|
|
4769
|
+
);
|
|
4770
|
+
}
|
|
4771
|
+
function MobileNavigation({
|
|
4772
|
+
isMenuOpened,
|
|
4773
|
+
onMenuOpenChange: setMenuOpened
|
|
4774
|
+
}) {
|
|
4775
|
+
const data = useLoaderData();
|
|
4776
|
+
const user = useOptionalUser();
|
|
4777
|
+
const nextExerciseRoute = useNextExerciseRoute();
|
|
4778
|
+
const params = useParams();
|
|
4779
|
+
const { users } = usePresence();
|
|
4780
|
+
const listVariants = {
|
|
4781
|
+
visible: {
|
|
4782
|
+
opacity: 1,
|
|
4783
|
+
transition: {
|
|
4784
|
+
duration: 0.05,
|
|
4785
|
+
when: "beforeChildren",
|
|
4786
|
+
staggerChildren: 0.03
|
|
4787
|
+
}
|
|
4788
|
+
},
|
|
4789
|
+
hidden: {
|
|
4790
|
+
opacity: 0
|
|
4791
|
+
}
|
|
4792
|
+
};
|
|
4793
|
+
return /* @__PURE__ */ jsx("nav", { className: "flex w-full border-b sm:hidden", children: /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsxs(
|
|
4794
|
+
"div",
|
|
4795
|
+
{
|
|
4796
|
+
className: cn("flex items-center", {
|
|
4797
|
+
"flex-col": isMenuOpened,
|
|
4798
|
+
"h-14": !isMenuOpened
|
|
4799
|
+
}),
|
|
4648
4800
|
children: [
|
|
4649
|
-
/* @__PURE__ */
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4801
|
+
/* @__PURE__ */ jsx(
|
|
4802
|
+
NavToggle,
|
|
4803
|
+
{
|
|
4804
|
+
title: data.workshopTitle,
|
|
4805
|
+
isMenuOpened,
|
|
4806
|
+
setMenuOpened
|
|
4807
|
+
}
|
|
4808
|
+
),
|
|
4809
|
+
isMenuOpened && /* @__PURE__ */ jsxs(
|
|
4810
|
+
motion.div,
|
|
4811
|
+
{
|
|
4812
|
+
className: "flex w-full flex-grow flex-col justify-between overflow-x-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",
|
|
4813
|
+
initial: { opacity: 0 },
|
|
4814
|
+
animate: { opacity: 1 },
|
|
4815
|
+
children: [
|
|
4655
4816
|
/* @__PURE__ */ jsx(
|
|
4656
|
-
|
|
4817
|
+
motion.ul,
|
|
4657
4818
|
{
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4819
|
+
variants: listVariants,
|
|
4820
|
+
initial: "hidden",
|
|
4821
|
+
animate: "visible",
|
|
4822
|
+
className: "flex flex-col",
|
|
4823
|
+
children: data.exercises.map(({ exerciseNumber, title, steps }) => {
|
|
4824
|
+
const isActive = Number(params.exerciseNumber) === exerciseNumber;
|
|
4825
|
+
const showPlayground = !isActive && data.playground.exerciseNumber === exerciseNumber;
|
|
4826
|
+
const exerciseNum = exerciseNumber.toString().padStart(2, "0");
|
|
4827
|
+
return /* @__PURE__ */ jsxs(
|
|
4828
|
+
NavigationExerciseListItem,
|
|
4829
|
+
{
|
|
4830
|
+
exerciseNumber,
|
|
4831
|
+
children: [
|
|
4832
|
+
/* @__PURE__ */ jsxs(
|
|
4833
|
+
Link,
|
|
4834
|
+
{
|
|
4835
|
+
prefetch: "intent",
|
|
4836
|
+
to: `/${exerciseNum}`,
|
|
4837
|
+
className: clsx(
|
|
4838
|
+
"relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",
|
|
4839
|
+
'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',
|
|
4840
|
+
{ "bg-foreground text-background": isActive }
|
|
4841
|
+
),
|
|
4842
|
+
children: [
|
|
4843
|
+
title,
|
|
4844
|
+
showPlayground ? " 🛝" : null
|
|
4845
|
+
]
|
|
4846
|
+
}
|
|
4847
|
+
),
|
|
4848
|
+
isActive ? /* @__PURE__ */ jsxs(
|
|
4849
|
+
motion.ul,
|
|
4850
|
+
{
|
|
4851
|
+
variants: listVariants,
|
|
4852
|
+
initial: "hidden",
|
|
4853
|
+
animate: "visible",
|
|
4854
|
+
className: "ml-4 mt-4 flex flex-col",
|
|
4855
|
+
children: [
|
|
4856
|
+
/* @__PURE__ */ jsx(
|
|
4857
|
+
NavigationExerciseStepListItem,
|
|
4858
|
+
{
|
|
4859
|
+
type: "instructions",
|
|
4860
|
+
exerciseNumber,
|
|
4861
|
+
children: /* @__PURE__ */ jsx(
|
|
4862
|
+
Link,
|
|
4863
|
+
{
|
|
4864
|
+
to: `/${exerciseNum}`,
|
|
4865
|
+
prefetch: "intent",
|
|
4866
|
+
className: clsx(
|
|
4867
|
+
'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',
|
|
4868
|
+
{
|
|
4869
|
+
"bg-foreground text-background": !params.stepNumber
|
|
4870
|
+
}
|
|
4871
|
+
),
|
|
4872
|
+
children: "Intro"
|
|
4873
|
+
}
|
|
4874
|
+
)
|
|
4875
|
+
},
|
|
4876
|
+
exerciseNumber
|
|
4877
|
+
),
|
|
4878
|
+
steps.filter(Boolean).map(({ name, stepNumber, title: title2 }) => {
|
|
4879
|
+
const isActive2 = Number(params.stepNumber) === stepNumber;
|
|
4880
|
+
const step = stepNumber.toString().padStart(2, "0");
|
|
4881
|
+
const isPlayground = name === data.playground.appName;
|
|
4882
|
+
return /* @__PURE__ */ jsx(
|
|
4883
|
+
NavigationExerciseStepListItem,
|
|
4884
|
+
{
|
|
4885
|
+
type: "step",
|
|
4886
|
+
stepNumber,
|
|
4887
|
+
exerciseNumber,
|
|
4888
|
+
children: /* @__PURE__ */ jsx(
|
|
4889
|
+
Link,
|
|
4890
|
+
{
|
|
4891
|
+
to: `/${exerciseNum}/${step}`,
|
|
4892
|
+
prefetch: "intent",
|
|
4893
|
+
className: clsx(
|
|
4894
|
+
'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',
|
|
4895
|
+
{
|
|
4896
|
+
"bg-foreground text-background": isActive2
|
|
4897
|
+
}
|
|
4898
|
+
),
|
|
4899
|
+
children: isPlayground ? `${step}. ${title2} 🛝` : `${step}. ${title2}`
|
|
4900
|
+
}
|
|
4901
|
+
)
|
|
4902
|
+
},
|
|
4903
|
+
stepNumber
|
|
4904
|
+
);
|
|
4905
|
+
}),
|
|
4906
|
+
/* @__PURE__ */ jsx(
|
|
4907
|
+
NavigationExerciseStepListItem,
|
|
4908
|
+
{
|
|
4909
|
+
type: "finished",
|
|
4910
|
+
exerciseNumber,
|
|
4911
|
+
children: /* @__PURE__ */ jsx(
|
|
4912
|
+
NavLink,
|
|
4913
|
+
{
|
|
4914
|
+
to: `/${exerciseNum}/finished`,
|
|
4915
|
+
prefetch: "intent",
|
|
4916
|
+
className: ({ isActive: isActive2 }) => clsx(
|
|
4917
|
+
'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',
|
|
4918
|
+
{
|
|
4919
|
+
"bg-foreground text-background": isActive2
|
|
4920
|
+
}
|
|
4921
|
+
),
|
|
4922
|
+
children: "📝 Elaboration"
|
|
4923
|
+
}
|
|
4924
|
+
)
|
|
4925
|
+
}
|
|
4926
|
+
)
|
|
4927
|
+
]
|
|
4928
|
+
}
|
|
4929
|
+
) : null
|
|
4930
|
+
]
|
|
4931
|
+
},
|
|
4932
|
+
exerciseNumber
|
|
4933
|
+
);
|
|
4934
|
+
})
|
|
4662
4935
|
}
|
|
4663
4936
|
),
|
|
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,
|
|
4937
|
+
/* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(
|
|
4938
|
+
NavLink,
|
|
4672
4939
|
{
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4940
|
+
to: "/finished",
|
|
4941
|
+
className: ({ isActive }) => clsx(
|
|
4942
|
+
"relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",
|
|
4943
|
+
{
|
|
4944
|
+
'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
|
|
4945
|
+
}
|
|
4946
|
+
),
|
|
4947
|
+
children: "📝 Workshop Feedback"
|
|
4678
4948
|
}
|
|
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
|
-
|
|
4949
|
+
) })
|
|
4950
|
+
]
|
|
4951
|
+
}
|
|
4952
|
+
),
|
|
4953
|
+
/* @__PURE__ */ jsx("div", { className: "flex-grow" }),
|
|
4954
|
+
/* @__PURE__ */ jsx(
|
|
4955
|
+
"div",
|
|
4956
|
+
{
|
|
4957
|
+
className: cn(
|
|
4958
|
+
"flex items-center justify-start p-4",
|
|
4959
|
+
isMenuOpened && users.length > 4 ? "min-h-14" : "h-14",
|
|
4960
|
+
{
|
|
4961
|
+
"w-full border-t": isMenuOpened,
|
|
4962
|
+
"border-l": !isMenuOpened
|
|
4963
|
+
}
|
|
4964
|
+
),
|
|
4965
|
+
children: /* @__PURE__ */ jsx(FacePile, { isMenuOpened })
|
|
4966
|
+
}
|
|
4967
|
+
),
|
|
4968
|
+
ENV.EPICSHOP_DEPLOYED ? null : user ? /* @__PURE__ */ jsx(SimpleTooltip, { content: isMenuOpened ? null : "Your account", children: /* @__PURE__ */ jsxs(
|
|
4969
|
+
Link,
|
|
4970
|
+
{
|
|
4971
|
+
className: cn(
|
|
4972
|
+
"flex h-14 items-center justify-start space-x-3 px-4 py-4 text-center no-underline hover:underline",
|
|
4973
|
+
{
|
|
4974
|
+
"border-l": !isMenuOpened,
|
|
4975
|
+
"w-full border-t": isMenuOpened
|
|
4976
|
+
}
|
|
4977
|
+
),
|
|
4978
|
+
to: "/account",
|
|
4979
|
+
children: [
|
|
4980
|
+
user.avatarUrl ? /* @__PURE__ */ jsx(
|
|
4981
|
+
"img",
|
|
4982
|
+
{
|
|
4983
|
+
alt: user.name ?? user.email,
|
|
4984
|
+
src: user.avatarUrl,
|
|
4985
|
+
className: "h-full rounded-full"
|
|
4986
|
+
}
|
|
4987
|
+
) : /* @__PURE__ */ jsx(Icon, { name: "User", className: "flex-shrink-0", size: "lg" }),
|
|
4988
|
+
isMenuOpened ? /* @__PURE__ */ jsx(
|
|
4989
|
+
motion.div,
|
|
4990
|
+
{
|
|
4991
|
+
className: "flex items-center whitespace-nowrap",
|
|
4992
|
+
initial: { opacity: 0 },
|
|
4993
|
+
animate: { opacity: 1 },
|
|
4994
|
+
children: "Your Account"
|
|
4995
|
+
}
|
|
4996
|
+
) : /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Your account" })
|
|
4997
|
+
]
|
|
4998
|
+
}
|
|
4999
|
+
) }) : null,
|
|
5000
|
+
ENV.EPICSHOP_DEPLOYED ? null : user && nextExerciseRoute ? /* @__PURE__ */ jsx(
|
|
5001
|
+
SimpleTooltip,
|
|
5002
|
+
{
|
|
5003
|
+
content: isMenuOpened ? null : "Continue to next lesson",
|
|
5004
|
+
children: /* @__PURE__ */ jsxs(
|
|
5005
|
+
Link,
|
|
5006
|
+
{
|
|
5007
|
+
to: nextExerciseRoute,
|
|
5008
|
+
prefetch: "intent",
|
|
5009
|
+
className: clsx(
|
|
5010
|
+
"flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"
|
|
5011
|
+
),
|
|
5012
|
+
state: { from: "continue next lesson button" },
|
|
5013
|
+
children: [
|
|
5014
|
+
/* @__PURE__ */ jsx(Icon, { name: "FastForward", className: "flex-shrink-0", size: "md" }),
|
|
5015
|
+
isMenuOpened ? /* @__PURE__ */ jsx(
|
|
5016
|
+
motion.div,
|
|
5017
|
+
{
|
|
5018
|
+
className: "flex items-center whitespace-nowrap",
|
|
5019
|
+
initial: { opacity: 0 },
|
|
5020
|
+
animate: { opacity: 1 },
|
|
5021
|
+
children: "Continue to next lesson"
|
|
5022
|
+
}
|
|
5023
|
+
) : /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Continue to next lesson" })
|
|
5024
|
+
]
|
|
5025
|
+
}
|
|
5026
|
+
)
|
|
5027
|
+
}
|
|
5028
|
+
) : null,
|
|
5029
|
+
/* @__PURE__ */ jsx(
|
|
5030
|
+
"div",
|
|
5031
|
+
{
|
|
5032
|
+
className: cn("h-14 self-start p-4 pt-[15px] sm:mb-4 sm:w-full", {
|
|
5033
|
+
"w-full border-t": isMenuOpened,
|
|
5034
|
+
"border-l": !isMenuOpened
|
|
5035
|
+
}),
|
|
5036
|
+
children: /* @__PURE__ */ jsx(ThemeSwitch, {})
|
|
5037
|
+
}
|
|
5038
|
+
)
|
|
4710
5039
|
]
|
|
4711
5040
|
}
|
|
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
|
-
);
|
|
5041
|
+
) }) });
|
|
4753
5042
|
}
|
|
4754
5043
|
const OPENED_MENU_WIDTH = 400;
|
|
4755
5044
|
function Navigation({
|
|
@@ -4788,7 +5077,7 @@ function Navigation({
|
|
|
4788
5077
|
}
|
|
4789
5078
|
};
|
|
4790
5079
|
const exNum = Number(params.exerciseNumber).toString().padStart(2, "0");
|
|
4791
|
-
return /* @__PURE__ */ jsx("nav", { className: "
|
|
5080
|
+
return /* @__PURE__ */ jsx("nav", { className: "hidden border-r sm:flex", children: /* @__PURE__ */ jsx(
|
|
4792
5081
|
motion.div,
|
|
4793
5082
|
{
|
|
4794
5083
|
initial: isMenuOpened ? "open" : "close",
|
|
@@ -5049,7 +5338,7 @@ function NavToggle({
|
|
|
5049
5338
|
const path01Controls = useAnimationControls();
|
|
5050
5339
|
const path02Controls = useAnimationControls();
|
|
5051
5340
|
async function toggleMenu() {
|
|
5052
|
-
void menuControls.start(isMenuOpened ? "close" : "open");
|
|
5341
|
+
void (menuControls == null ? void 0 : menuControls.start(isMenuOpened ? "close" : "open"));
|
|
5053
5342
|
setMenuOpened(!isMenuOpened);
|
|
5054
5343
|
if (isMenuOpened) {
|
|
5055
5344
|
void path01Controls.start(path01Variants.closed);
|
|
@@ -5066,8 +5355,7 @@ function NavToggle({
|
|
|
5066
5355
|
latestToggleMenu.current = toggleMenu;
|
|
5067
5356
|
});
|
|
5068
5357
|
React.useEffect(() => {
|
|
5069
|
-
if (!isMenuOpened)
|
|
5070
|
-
return;
|
|
5358
|
+
if (!isMenuOpened) return;
|
|
5071
5359
|
function handleKeyUp(event) {
|
|
5072
5360
|
if (event.key === "Escape") {
|
|
5073
5361
|
void latestToggleMenu.current();
|
|
@@ -5076,48 +5364,59 @@ function NavToggle({
|
|
|
5076
5364
|
document.addEventListener("keyup", handleKeyUp);
|
|
5077
5365
|
return () => document.removeEventListener("keyup", handleKeyUp);
|
|
5078
5366
|
}, [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
|
-
|
|
5367
|
+
return /* @__PURE__ */ jsxs(
|
|
5368
|
+
"div",
|
|
5369
|
+
{
|
|
5370
|
+
className: cn(
|
|
5371
|
+
"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",
|
|
5372
|
+
{
|
|
5373
|
+
"w-full": isMenuOpened
|
|
5374
|
+
}
|
|
5375
|
+
),
|
|
5376
|
+
children: [
|
|
5377
|
+
/* @__PURE__ */ jsx(
|
|
5378
|
+
"button",
|
|
5379
|
+
{
|
|
5380
|
+
className: "flex h-14 w-14 items-center justify-center",
|
|
5381
|
+
"aria-label": "Open Navigation menu",
|
|
5382
|
+
onClick: toggleMenu,
|
|
5383
|
+
children: /* @__PURE__ */ jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", children: [
|
|
5384
|
+
/* @__PURE__ */ jsx(
|
|
5385
|
+
motion.path,
|
|
5386
|
+
{
|
|
5387
|
+
...path01Variants.closed,
|
|
5388
|
+
animate: path01Controls,
|
|
5389
|
+
transition: { duration: 0.2 },
|
|
5390
|
+
stroke: "currentColor",
|
|
5391
|
+
strokeWidth: 1.5
|
|
5392
|
+
}
|
|
5393
|
+
),
|
|
5394
|
+
/* @__PURE__ */ jsx(
|
|
5395
|
+
motion.path,
|
|
5396
|
+
{
|
|
5397
|
+
...path02Variants.closed,
|
|
5398
|
+
animate: path02Controls,
|
|
5399
|
+
transition: { duration: 0.2 },
|
|
5400
|
+
stroke: "currentColor",
|
|
5401
|
+
strokeWidth: 1.5
|
|
5402
|
+
}
|
|
5403
|
+
)
|
|
5404
|
+
] })
|
|
5405
|
+
}
|
|
5406
|
+
),
|
|
5407
|
+
isMenuOpened && /* @__PURE__ */ jsx(
|
|
5408
|
+
motion.p,
|
|
5409
|
+
{
|
|
5410
|
+
transition: { delay: 0.2 },
|
|
5411
|
+
initial: { opacity: 0, y: 5 },
|
|
5412
|
+
animate: { opacity: 1, y: 0 },
|
|
5413
|
+
className: "absolute right-5 whitespace-nowrap font-mono text-sm uppercase",
|
|
5414
|
+
children: /* @__PURE__ */ jsx(Link, { to: "/", children: title })
|
|
5415
|
+
}
|
|
5416
|
+
)
|
|
5417
|
+
]
|
|
5418
|
+
}
|
|
5419
|
+
);
|
|
5121
5420
|
}
|
|
5122
5421
|
const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
5123
5422
|
__proto__: null,
|
|
@@ -5180,15 +5479,12 @@ function MuxPlayer({
|
|
|
5180
5479
|
const fetcherRef = useLatest(playerPreferencesFetcher);
|
|
5181
5480
|
const playerPreferencesRef = useLatest(playerPreferences);
|
|
5182
5481
|
React.useEffect(() => {
|
|
5183
|
-
if (typeof document === "undefined")
|
|
5184
|
-
return;
|
|
5482
|
+
if (typeof document === "undefined") return;
|
|
5185
5483
|
const stored = sessionStorage.getItem(currentTimeSessionKey);
|
|
5186
|
-
if (!stored)
|
|
5187
|
-
return;
|
|
5484
|
+
if (!stored) return;
|
|
5188
5485
|
try {
|
|
5189
5486
|
const { time: time2, expiresAt } = PlaybackTimeSchema.parse(JSON.parse(stored));
|
|
5190
|
-
if (expiresAt.getTime() < Date.now())
|
|
5191
|
-
throw new Error("Time expired");
|
|
5487
|
+
if (expiresAt.getTime() < Date.now()) throw new Error("Time expired");
|
|
5192
5488
|
setCurrentTime(time2);
|
|
5193
5489
|
} catch {
|
|
5194
5490
|
sessionStorage.removeItem(currentTimeSessionKey);
|
|
@@ -5196,8 +5492,7 @@ function MuxPlayer({
|
|
|
5196
5492
|
}, [currentTimeSessionKey]);
|
|
5197
5493
|
React.useEffect(() => {
|
|
5198
5494
|
function handleUserKeyPress(e) {
|
|
5199
|
-
if (!muxPlayerRef.current)
|
|
5200
|
-
return;
|
|
5495
|
+
if (!muxPlayerRef.current) return;
|
|
5201
5496
|
const activeElement = document.activeElement;
|
|
5202
5497
|
const isContentEditable = activeElement instanceof HTMLElement ? activeElement.contentEditable === "true" : false;
|
|
5203
5498
|
if (activeElement && !ignoredInputs.includes(activeElement.tagName.toLowerCase()) && !isContentEditable) {
|
|
@@ -5226,8 +5521,7 @@ function MuxPlayer({
|
|
|
5226
5521
|
}, [muxPlayerRef]);
|
|
5227
5522
|
const updatePreferences = useDebounce(() => {
|
|
5228
5523
|
const player = muxPlayerRef.current;
|
|
5229
|
-
if (!player)
|
|
5230
|
-
return;
|
|
5524
|
+
if (!player) return;
|
|
5231
5525
|
const subs = Array.from(player.textTracks ?? []).find(
|
|
5232
5526
|
(t) => t.kind === "subtitles"
|
|
5233
5527
|
);
|
|
@@ -5236,8 +5530,7 @@ function MuxPlayer({
|
|
|
5236
5530
|
volumeRate: player.volume,
|
|
5237
5531
|
subtitle: subs ? { id: subs.id, mode: subs.mode } : { id: null, mode: "disabled" }
|
|
5238
5532
|
};
|
|
5239
|
-
if (isDeepEqual(newPrefs, playerPreferencesRef.current))
|
|
5240
|
-
return;
|
|
5533
|
+
if (isDeepEqual(newPrefs, playerPreferencesRef.current)) return;
|
|
5241
5534
|
fetcherRef.current.submit(newPrefs, {
|
|
5242
5535
|
method: "POST",
|
|
5243
5536
|
action: "/video-player",
|
|
@@ -5246,11 +5539,9 @@ function MuxPlayer({
|
|
|
5246
5539
|
}, 300);
|
|
5247
5540
|
React.useEffect(() => {
|
|
5248
5541
|
var _a2, _b2;
|
|
5249
|
-
if (!metadataLoaded)
|
|
5250
|
-
return;
|
|
5542
|
+
if (!metadataLoaded) return;
|
|
5251
5543
|
const textTracks = (_a2 = muxPlayerRef.current) == null ? void 0 : _a2.textTracks;
|
|
5252
|
-
if (!textTracks)
|
|
5253
|
-
return;
|
|
5544
|
+
if (!textTracks) return;
|
|
5254
5545
|
const subtitlePref = (_b2 = playerPreferencesRef.current) == null ? void 0 : _b2.subtitle;
|
|
5255
5546
|
if (subtitlePref == null ? void 0 : subtitlePref.id) {
|
|
5256
5547
|
const preferredTextTrack = textTracks.getTrackById(subtitlePref.id);
|
|
@@ -5308,32 +5599,23 @@ function MuxPlayer({
|
|
|
5308
5599
|
) });
|
|
5309
5600
|
}
|
|
5310
5601
|
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;
|
|
5602
|
+
if (obj1 === obj2) return true;
|
|
5603
|
+
if (typeof obj1 !== typeof obj2) return false;
|
|
5604
|
+
if (typeof obj1 !== "object" || typeof obj2 !== "object") return false;
|
|
5605
|
+
if (obj1 === null || obj2 === null) return false;
|
|
5606
|
+
if (Array.isArray(obj1) !== Array.isArray(obj2)) return false;
|
|
5321
5607
|
if (Array.isArray(obj1) && Array.isArray(obj2)) {
|
|
5322
|
-
if (obj1.length !== obj2.length)
|
|
5323
|
-
return false;
|
|
5608
|
+
if (obj1.length !== obj2.length) return false;
|
|
5324
5609
|
for (let i = 0; i < obj1.length; i++) {
|
|
5325
|
-
if (!isDeepEqual(obj1[i], obj2[i]))
|
|
5326
|
-
return false;
|
|
5610
|
+
if (!isDeepEqual(obj1[i], obj2[i])) return false;
|
|
5327
5611
|
}
|
|
5328
5612
|
return true;
|
|
5329
5613
|
}
|
|
5330
5614
|
const keys1 = Object.keys(obj1);
|
|
5331
5615
|
const keys2 = Object.keys(obj2);
|
|
5332
|
-
if (keys1.length !== keys2.length)
|
|
5333
|
-
return false;
|
|
5616
|
+
if (keys1.length !== keys2.length) return false;
|
|
5334
5617
|
for (const key of keys1) {
|
|
5335
|
-
if (!isDeepEqual(obj1[key], obj2[key]))
|
|
5336
|
-
return false;
|
|
5618
|
+
if (!isDeepEqual(obj1[key], obj2[key])) return false;
|
|
5337
5619
|
}
|
|
5338
5620
|
return true;
|
|
5339
5621
|
}
|
|
@@ -5413,10 +5695,8 @@ function extractEpicTitle(urlString) {
|
|
|
5413
5695
|
let titleSegment = urlSegments.pop();
|
|
5414
5696
|
const nonTitles = ["problem", "solution", "embed", "exercise"];
|
|
5415
5697
|
const isTitleSegment = (str) => str && !nonTitles.includes(str);
|
|
5416
|
-
while (!isTitleSegment(titleSegment))
|
|
5417
|
-
|
|
5418
|
-
if (!titleSegment)
|
|
5419
|
-
return "EpicWeb.dev Video";
|
|
5698
|
+
while (!isTitleSegment(titleSegment)) titleSegment = urlSegments.pop();
|
|
5699
|
+
if (!titleSegment) return "EpicWeb.dev Video";
|
|
5420
5700
|
const titleWords = titleSegment.split("-");
|
|
5421
5701
|
const lowerCaseWords = [
|
|
5422
5702
|
"the",
|
|
@@ -5520,8 +5800,7 @@ function extractEpicTitle(urlString) {
|
|
|
5520
5800
|
const literalWord = literalWords.find(
|
|
5521
5801
|
(w) => w.toLowerCase() === lowerWord
|
|
5522
5802
|
);
|
|
5523
|
-
if (literalWord)
|
|
5524
|
-
return literalWord;
|
|
5803
|
+
if (literalWord) return literalWord;
|
|
5525
5804
|
if (lowerCaseWords.includes(lowerWord) && index > 0) {
|
|
5526
5805
|
return lowerWord;
|
|
5527
5806
|
}
|
|
@@ -5731,8 +6010,7 @@ function EpicVideo({
|
|
|
5731
6010
|
let prevIndex = 0;
|
|
5732
6011
|
while (match = timestampRegex.exec(transcript)) {
|
|
5733
6012
|
const timestamp = match[1];
|
|
5734
|
-
if (!timestampRegex.lastIndex || !timestamp)
|
|
5735
|
-
break;
|
|
6013
|
+
if (!timestampRegex.lastIndex || !timestamp) break;
|
|
5736
6014
|
const timestampIndexStart = match.index;
|
|
5737
6015
|
const timestampIndexEnd = timestampRegex.lastIndex;
|
|
5738
6016
|
const textBeforeTimestamp = transcript.slice(
|
|
@@ -6002,8 +6280,7 @@ function guessEditor() {
|
|
|
6002
6280
|
const runningProcesses = output.split("\r\n");
|
|
6003
6281
|
for (let i = 0; i < runningProcesses.length; i++) {
|
|
6004
6282
|
const processPath = (_a2 = runningProcesses[i]) == null ? void 0 : _a2.trim();
|
|
6005
|
-
if (!processPath)
|
|
6006
|
-
continue;
|
|
6283
|
+
if (!processPath) continue;
|
|
6007
6284
|
const processName = path.basename(processPath);
|
|
6008
6285
|
if (COMMON_EDITORS_WIN.includes(processName)) {
|
|
6009
6286
|
return [processPath];
|
|
@@ -6014,8 +6291,7 @@ function guessEditor() {
|
|
|
6014
6291
|
const processNames = Object.keys(COMMON_EDITORS_LINUX);
|
|
6015
6292
|
for (let i = 0; i < processNames.length; i++) {
|
|
6016
6293
|
const processName = processNames[i];
|
|
6017
|
-
if (!processName)
|
|
6018
|
-
continue;
|
|
6294
|
+
if (!processName) continue;
|
|
6019
6295
|
if (output.includes(processName)) {
|
|
6020
6296
|
return [COMMON_EDITORS_LINUX[processName]];
|
|
6021
6297
|
}
|
|
@@ -6240,8 +6516,7 @@ async function action$9({ request }) {
|
|
|
6240
6516
|
const originFiles = await getFiles(form.syncTo);
|
|
6241
6517
|
for (let index = 0; index < originFiles.length; index++) {
|
|
6242
6518
|
const originFile = originFiles[index];
|
|
6243
|
-
if (!originFile)
|
|
6244
|
-
continue;
|
|
6519
|
+
if (!originFile) continue;
|
|
6245
6520
|
const destFile = filesToOpen[index];
|
|
6246
6521
|
if (!destFile) {
|
|
6247
6522
|
throw new Response(
|
|
@@ -6384,8 +6659,7 @@ function EditFileOnGitHub({
|
|
|
6384
6659
|
}) {
|
|
6385
6660
|
const fetcher = useLaunchFetcher();
|
|
6386
6661
|
const handleClick = (e) => {
|
|
6387
|
-
if (!e.altKey || ENV.EPICSHOP_DEPLOYED)
|
|
6388
|
-
return;
|
|
6662
|
+
if (!e.altKey || ENV.EPICSHOP_DEPLOYED) return;
|
|
6389
6663
|
e.preventDefault();
|
|
6390
6664
|
const formData = new FormData();
|
|
6391
6665
|
const type = file ? "file" : "appFile";
|
|
@@ -6437,8 +6711,7 @@ function OpenInEditor({
|
|
|
6437
6711
|
}) {
|
|
6438
6712
|
var _a2;
|
|
6439
6713
|
const data = useLoaderData();
|
|
6440
|
-
if (type === "other" || !buttons || !filename || !fullPath)
|
|
6441
|
-
return null;
|
|
6714
|
+
if (type === "other" || !buttons || !filename || !fullPath) return null;
|
|
6442
6715
|
const currentAppFullPath = safePath(((_a2 = data[data.type]) == null ? void 0 : _a2.fullPath) ?? "");
|
|
6443
6716
|
const isFileFromDifferentApp = !fullPath.startsWith(currentAppFullPath);
|
|
6444
6717
|
const validButtons = ENV.EPICSHOP_DEPLOYED ? ["problem", "solution"] : ["problem", "solution", "playground"];
|
|
@@ -6607,8 +6880,7 @@ const meta$4 = ({
|
|
|
6607
6880
|
var _a2;
|
|
6608
6881
|
const number = data == null ? void 0 : data.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
6609
6882
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
6610
|
-
if (!data || !rootData)
|
|
6611
|
-
return [{ title: "🦉 | Error" }];
|
|
6883
|
+
if (!data || !rootData) return [{ title: "🦉 | Error" }];
|
|
6612
6884
|
return getSeoMetaTags({
|
|
6613
6885
|
title: `📝 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
6614
6886
|
description: `Introduction for ${number}. ${data.exercise.title}`,
|
|
@@ -6962,8 +7234,7 @@ function Diff({
|
|
|
6962
7234
|
});
|
|
6963
7235
|
const hiddenInputs = [];
|
|
6964
7236
|
for (const [key, value] of params.entries()) {
|
|
6965
|
-
if (key === "app1" || key === "app2")
|
|
6966
|
-
continue;
|
|
7237
|
+
if (key === "app1" || key === "app2") continue;
|
|
6967
7238
|
hiddenInputs.push(
|
|
6968
7239
|
/* @__PURE__ */ jsx("input", { type: "hidden", name: key, value }, key)
|
|
6969
7240
|
);
|
|
@@ -7279,10 +7550,8 @@ function getFileCodeblocks(file, filePathApp1, filePathApp2, type) {
|
|
|
7279
7550
|
for (const chunk of file.chunks) {
|
|
7280
7551
|
let launchEditor2 = function(appNum, line) {
|
|
7281
7552
|
if (isDeployed) {
|
|
7282
|
-
if (type === "DeletedFile" && appNum === 2)
|
|
7283
|
-
|
|
7284
|
-
if (type === "AddedFile" && appNum === 1)
|
|
7285
|
-
return "";
|
|
7553
|
+
if (type === "DeletedFile" && appNum === 2) return "";
|
|
7554
|
+
if (type === "AddedFile" && appNum === 1) return "";
|
|
7286
7555
|
}
|
|
7287
7556
|
const label = type === "AddedFile" && appNum === 1 || type === "DeletedFile" && appNum === 2 ? `CREATE in APP ${appNum}` : `OPEN in APP ${appNum}`;
|
|
7288
7557
|
const file2 = JSON.stringify(appNum === 1 ? filePathApp1 : filePathApp2);
|
|
@@ -7306,8 +7575,7 @@ function getFileCodeblocks(file, filePathApp1, filePathApp2, type) {
|
|
|
7306
7575
|
toStartLine = chunk.toFileRange.start;
|
|
7307
7576
|
for (let lineNumber = 0; lineNumber < chunk.changes.length; lineNumber++) {
|
|
7308
7577
|
const change = chunk.changes[lineNumber];
|
|
7309
|
-
if (!change)
|
|
7310
|
-
continue;
|
|
7578
|
+
if (!change) continue;
|
|
7311
7579
|
lines.push(change.content);
|
|
7312
7580
|
switch (change.type) {
|
|
7313
7581
|
case "AddedLine": {
|
|
@@ -7382,8 +7650,7 @@ async function copyUnignoredFiles(srcDir, destDir, ignoreList) {
|
|
|
7382
7650
|
await fsExtra.remove(destDir);
|
|
7383
7651
|
await fsExtra.copy(srcDir, destDir, {
|
|
7384
7652
|
filter: async (file) => {
|
|
7385
|
-
if (file === srcDir)
|
|
7386
|
-
return true;
|
|
7653
|
+
if (file === srcDir) return true;
|
|
7387
7654
|
return !ig.ignores(path.relative(srcDir, file));
|
|
7388
7655
|
}
|
|
7389
7656
|
});
|
|
@@ -7447,8 +7714,7 @@ async function getDiffIgnore(filePath) {
|
|
|
7447
7714
|
) : [];
|
|
7448
7715
|
}
|
|
7449
7716
|
function getForceFreshForDiff(app1, app2, cacheEntry) {
|
|
7450
|
-
if (!cacheEntry)
|
|
7451
|
-
return true;
|
|
7717
|
+
if (!cacheEntry) return true;
|
|
7452
7718
|
const app1Modified = modifiedTimes.get(app1.fullPath) ?? 0;
|
|
7453
7719
|
const app2Modified = modifiedTimes.get(app2.fullPath) ?? 0;
|
|
7454
7720
|
const cacheModified = cacheEntry.metadata.createdTime;
|
|
@@ -7568,13 +7834,11 @@ async function getDiffCodeImpl(app1, app2) {
|
|
|
7568
7834
|
for (const file of parsed.files) {
|
|
7569
7835
|
const pathToCopy = file.type === "RenamedFile" ? file.pathBefore : file.path;
|
|
7570
7836
|
const relativePath = diffPathToRelative(pathToCopy);
|
|
7571
|
-
if (app1TestFiles.includes(relativePath))
|
|
7572
|
-
continue;
|
|
7837
|
+
if (app1TestFiles.includes(relativePath)) continue;
|
|
7573
7838
|
const filePathApp1 = path.join(app1.fullPath, relativePath);
|
|
7574
7839
|
const pathToApp2 = file.type === "RenamedFile" ? file.pathAfter : file.path;
|
|
7575
7840
|
const relativePathApp2 = diffPathToRelative(pathToApp2);
|
|
7576
|
-
if (app2TestFiles.includes(relativePathApp2))
|
|
7577
|
-
continue;
|
|
7841
|
+
if (app2TestFiles.includes(relativePathApp2)) continue;
|
|
7578
7842
|
const filePathApp2 = path.join(app2.fullPath, relativePathApp2);
|
|
7579
7843
|
switch (file.type) {
|
|
7580
7844
|
case "ChangedFile": {
|
|
@@ -7790,8 +8054,7 @@ function SelectItem({
|
|
|
7790
8054
|
);
|
|
7791
8055
|
}
|
|
7792
8056
|
function SetAppToPlayground({ appName }) {
|
|
7793
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
7794
|
-
return null;
|
|
8057
|
+
if (ENV.EPICSHOP_DEPLOYED) return null;
|
|
7795
8058
|
return /* @__PURE__ */ jsx(
|
|
7796
8059
|
SetPlayground,
|
|
7797
8060
|
{
|
|
@@ -8508,13 +8771,11 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8508
8771
|
useEffect(() => {
|
|
8509
8772
|
function handleMessage(messageEvent) {
|
|
8510
8773
|
var _a2;
|
|
8511
|
-
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow))
|
|
8512
|
-
return;
|
|
8774
|
+
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow)) return;
|
|
8513
8775
|
const result = messageSchema.safeParse(messageEvent.data, {
|
|
8514
8776
|
path: ["messageEvent", "data"]
|
|
8515
8777
|
});
|
|
8516
|
-
if (!result.success)
|
|
8517
|
-
return;
|
|
8778
|
+
if (!result.success) return;
|
|
8518
8779
|
const { data } = result;
|
|
8519
8780
|
if (data.type === "epicshop:loaded") {
|
|
8520
8781
|
setIFrameContext((prevContext) => {
|
|
@@ -8526,8 +8787,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8526
8787
|
} else if (lastDirectionRef.current === "new") {
|
|
8527
8788
|
const currentPathname = prevContext.history[prevContext.index];
|
|
8528
8789
|
const newPathname = new URL(data.url).pathname;
|
|
8529
|
-
if (currentPathname === newPathname)
|
|
8530
|
-
return prevContext;
|
|
8790
|
+
if (currentPathname === newPathname) return prevContext;
|
|
8531
8791
|
const newHistory = [
|
|
8532
8792
|
...prevContext.history.slice(0, prevContext.index + 1),
|
|
8533
8793
|
newPathname
|
|
@@ -8597,8 +8857,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8597
8857
|
}, [setSearchParams]);
|
|
8598
8858
|
const iframePathname = iframeContext.history[iframeContext.index];
|
|
8599
8859
|
useEffect(() => {
|
|
8600
|
-
if (!iframePathname)
|
|
8601
|
-
return;
|
|
8860
|
+
if (!iframePathname) return;
|
|
8602
8861
|
setPathnameInputValue(iframePathname);
|
|
8603
8862
|
const newSearchParams = new URLSearchParams(window.location.search);
|
|
8604
8863
|
if (iframePathname === "/") {
|
|
@@ -8642,8 +8901,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8642
8901
|
const atStartOfHistory = iframeContext.index <= 0;
|
|
8643
8902
|
const existingSearchParamHiddenInputs = [];
|
|
8644
8903
|
for (const [key, value] of searchParams.entries()) {
|
|
8645
|
-
if (key === "pathname")
|
|
8646
|
-
continue;
|
|
8904
|
+
if (key === "pathname") continue;
|
|
8647
8905
|
existingSearchParamHiddenInputs.push(
|
|
8648
8906
|
/* @__PURE__ */ jsx("input", { type: "hidden", name: key, value }, key)
|
|
8649
8907
|
);
|
|
@@ -8656,7 +8914,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8656
8914
|
"button",
|
|
8657
8915
|
{
|
|
8658
8916
|
type: "button",
|
|
8659
|
-
className: "
|
|
8917
|
+
className: "hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",
|
|
8660
8918
|
disabled: atStartOfHistory,
|
|
8661
8919
|
onClick: () => navigateChild(-1),
|
|
8662
8920
|
children: /* @__PURE__ */ jsx(Icon, { name: "ArrowLeft", "aria-hidden": "true" })
|
|
@@ -8669,7 +8927,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8669
8927
|
"button",
|
|
8670
8928
|
{
|
|
8671
8929
|
type: "button",
|
|
8672
|
-
className: "
|
|
8930
|
+
className: "hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",
|
|
8673
8931
|
disabled: atEndOfHistory,
|
|
8674
8932
|
onClick: () => navigateChild(1),
|
|
8675
8933
|
children: /* @__PURE__ */ jsx(Icon, { name: "ArrowRight", "aria-hidden": "true" })
|
|
@@ -8712,7 +8970,7 @@ function InBrowserBrowserForRealzImpl({ baseUrl, id, name, initialRoute }, ref)
|
|
|
8712
8970
|
"input",
|
|
8713
8971
|
{
|
|
8714
8972
|
"aria-label": "pathname",
|
|
8715
|
-
className: "flex-1 bg-background focus-visible:outline-none",
|
|
8973
|
+
className: "w-full flex-1 bg-background focus-visible:outline-none",
|
|
8716
8974
|
value: pathnameInputValue,
|
|
8717
8975
|
name: "pathname",
|
|
8718
8976
|
onChange: (e) => setPathnameInputValue(e.currentTarget.value)
|
|
@@ -8757,8 +9015,7 @@ function Preview({
|
|
|
8757
9015
|
inBrowserBrowserRef
|
|
8758
9016
|
}) {
|
|
8759
9017
|
const requestInfo = useRequestInfo();
|
|
8760
|
-
if (!appInfo)
|
|
8761
|
-
return /* @__PURE__ */ jsx("p", { children: "No app here. Sorry." });
|
|
9018
|
+
if (!appInfo) return /* @__PURE__ */ jsx("p", { children: "No app here. Sorry." });
|
|
8762
9019
|
const { isRunning, dev, name, portIsAvailable, title } = appInfo;
|
|
8763
9020
|
if (dev.type === "script") {
|
|
8764
9021
|
const baseUrl = getBaseUrl({
|
|
@@ -8966,8 +9223,7 @@ function StepMdx({
|
|
|
8966
9223
|
inBrowserBrowserRef
|
|
8967
9224
|
}) {
|
|
8968
9225
|
const data = useLoaderData();
|
|
8969
|
-
if (!data.exerciseStepApp.instructionsCode)
|
|
8970
|
-
return null;
|
|
9226
|
+
if (!data.exerciseStepApp.instructionsCode) return null;
|
|
8971
9227
|
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
9228
|
Mdx,
|
|
8973
9229
|
{
|
|
@@ -9019,8 +9275,7 @@ function DiffLink({
|
|
|
9019
9275
|
const stepIndex = data.exerciseIndex + input;
|
|
9020
9276
|
return (_a2 = data.allApps[stepIndex]) == null ? void 0 : _a2.name;
|
|
9021
9277
|
}
|
|
9022
|
-
if (!input)
|
|
9023
|
-
return null;
|
|
9278
|
+
if (!input) return null;
|
|
9024
9279
|
for (const { name, stepName } of data.allApps) {
|
|
9025
9280
|
if (input === name || input === stepName) {
|
|
9026
9281
|
return name;
|
|
@@ -9094,8 +9349,7 @@ function CodeFileNotification({
|
|
|
9094
9349
|
const data = useLoaderData();
|
|
9095
9350
|
const app = data[type];
|
|
9096
9351
|
const handleClick = () => {
|
|
9097
|
-
if (visibility !== "visible")
|
|
9098
|
-
return;
|
|
9352
|
+
if (visibility !== "visible") return;
|
|
9099
9353
|
setVisibility("collapse");
|
|
9100
9354
|
setTimeout(() => {
|
|
9101
9355
|
setVisibility("none");
|
|
@@ -9159,10 +9413,8 @@ function InlineFile({
|
|
|
9159
9413
|
) : /* @__PURE__ */ jsx(Fragment, { children: "children" });
|
|
9160
9414
|
}
|
|
9161
9415
|
function getPreviewType(preview) {
|
|
9162
|
-
if (preview === "problem")
|
|
9163
|
-
|
|
9164
|
-
if (preview === "solution")
|
|
9165
|
-
return "solution";
|
|
9416
|
+
if (preview === "problem") return "problem";
|
|
9417
|
+
if (preview === "solution") return "solution";
|
|
9166
9418
|
return "playground";
|
|
9167
9419
|
}
|
|
9168
9420
|
function LinkToApp({
|
|
@@ -9199,8 +9451,7 @@ function LinkToApp({
|
|
|
9199
9451
|
title: ENV.EPICSHOP_DEPLOYED ? "Cannot link to app in deployed version" : void 0,
|
|
9200
9452
|
onClick: (event) => {
|
|
9201
9453
|
var _a3, _b2;
|
|
9202
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
9203
|
-
event.preventDefault();
|
|
9454
|
+
if (ENV.EPICSHOP_DEPLOYED) event.preventDefault();
|
|
9204
9455
|
(_a3 = props.onClick) == null ? void 0 : _a3.call(props, event);
|
|
9205
9456
|
(_b2 = inBrowserBrowserRef.current) == null ? void 0 : _b2.handleExtrnalNavigation(appTo.toString());
|
|
9206
9457
|
},
|
|
@@ -9218,8 +9469,7 @@ function LinkToApp({
|
|
|
9218
9469
|
}),
|
|
9219
9470
|
title: ENV.EPICSHOP_DEPLOYED ? "Cannot link to app in deployed version" : "Open in new tab",
|
|
9220
9471
|
onClick: (event) => {
|
|
9221
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
9222
|
-
event.preventDefault();
|
|
9472
|
+
if (ENV.EPICSHOP_DEPLOYED) event.preventDefault();
|
|
9223
9473
|
},
|
|
9224
9474
|
children: /* @__PURE__ */ jsx(Icon, { name: "ExternalLink" })
|
|
9225
9475
|
}
|
|
@@ -9257,10 +9507,8 @@ function InBrowserTestRunner({
|
|
|
9257
9507
|
useEffect(() => {
|
|
9258
9508
|
function handleMessage(messageEvent) {
|
|
9259
9509
|
var _a2;
|
|
9260
|
-
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow))
|
|
9261
|
-
|
|
9262
|
-
if ("request" in messageEvent.data)
|
|
9263
|
-
return;
|
|
9510
|
+
if (messageEvent.source !== ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow)) return;
|
|
9511
|
+
if ("request" in messageEvent.data) return;
|
|
9264
9512
|
const result = testRunnerDataSchema.safeParse(messageEvent.data, {
|
|
9265
9513
|
path: ["messageEvent", "data"]
|
|
9266
9514
|
});
|
|
@@ -9537,8 +9785,7 @@ function TestOutput({ name }) {
|
|
|
9537
9785
|
`/test?${new URLSearchParams({ name })}&v=${version}`
|
|
9538
9786
|
);
|
|
9539
9787
|
useEffect(() => {
|
|
9540
|
-
if (!lastMessage)
|
|
9541
|
-
return;
|
|
9788
|
+
if (!lastMessage) return;
|
|
9542
9789
|
const parsed = JSON.parse(lastMessage);
|
|
9543
9790
|
const result = testEventQueueSchema.safeParse(parsed);
|
|
9544
9791
|
if (!result.success) {
|
|
@@ -9901,8 +10148,7 @@ const meta$3 = ({
|
|
|
9901
10148
|
}) => {
|
|
9902
10149
|
var _a2;
|
|
9903
10150
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
9904
|
-
if (!data || !rootData)
|
|
9905
|
-
return [{ title: "🦉 | Error" }];
|
|
10151
|
+
if (!data || !rootData) return [{ title: "🦉 | Error" }];
|
|
9906
10152
|
const { emoji: emoji2, stepNumber, title, exerciseNumber, exerciseTitle } = pageTitle(data);
|
|
9907
10153
|
return getSeoMetaTags({
|
|
9908
10154
|
title: `${emoji2} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${rootData.workshopTitle}`,
|
|
@@ -9977,12 +10223,9 @@ async function loader$k({ request, params }) {
|
|
|
9977
10223
|
...getStepNameAndId(a)
|
|
9978
10224
|
}));
|
|
9979
10225
|
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;
|
|
10226
|
+
if (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId;
|
|
10227
|
+
if (a.stepId > 0) return -1;
|
|
10228
|
+
if (b.stepId > 0) return 1;
|
|
9986
10229
|
return 0;
|
|
9987
10230
|
});
|
|
9988
10231
|
const exerciseId = getStepId(exerciseStepApp);
|
|
@@ -10120,14 +10363,12 @@ function ExercisePartRoute() {
|
|
|
10120
10363
|
return ENV.EPICSHOP_DEPLOYED || !data.playground || data.playground.test.type === "none";
|
|
10121
10364
|
}
|
|
10122
10365
|
if (tab === "problem" || tab === "solution") {
|
|
10123
|
-
if (((_a3 = data[tab]) == null ? void 0 : _a3.dev.type) === "none")
|
|
10124
|
-
return true;
|
|
10366
|
+
if (((_a3 = data[tab]) == null ? void 0 : _a3.dev.type) === "none") return true;
|
|
10125
10367
|
if (ENV.EPICSHOP_DEPLOYED) {
|
|
10126
10368
|
return ((_b3 = data[tab]) == null ? void 0 : _b3.dev.type) !== "browser";
|
|
10127
10369
|
}
|
|
10128
10370
|
}
|
|
10129
|
-
if (tab === "playground" && ENV.EPICSHOP_DEPLOYED)
|
|
10130
|
-
return true;
|
|
10371
|
+
if (tab === "playground" && ENV.EPICSHOP_DEPLOYED) return true;
|
|
10131
10372
|
return false;
|
|
10132
10373
|
}
|
|
10133
10374
|
const activeTab = isValidPreview(preview) ? preview : tabs.find((t) => !shouldHideTab(t));
|
|
@@ -10141,8 +10382,8 @@ function ExercisePartRoute() {
|
|
|
10141
10382
|
navigate(altDiffUrl);
|
|
10142
10383
|
}
|
|
10143
10384
|
}
|
|
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
|
|
10385
|
+
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: [
|
|
10386
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r", children: [
|
|
10146
10387
|
/* @__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
10388
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-2 uppercase", children: [
|
|
10148
10389
|
/* @__PURE__ */ jsxs(
|
|
@@ -10169,14 +10410,14 @@ function ExercisePartRoute() {
|
|
|
10169
10410
|
")"
|
|
10170
10411
|
] })
|
|
10171
10412
|
] }),
|
|
10172
|
-
data.problem && ((_c = data.playground) == null ? void 0 : _c.appName) !== data.problem.name ? /* @__PURE__ */ jsx(SetAppToPlayground, { appName: data.problem.name }) : null
|
|
10413
|
+
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
10414
|
] }) }),
|
|
10174
10415
|
/* @__PURE__ */ jsx(
|
|
10175
10416
|
"article",
|
|
10176
10417
|
{
|
|
10177
10418
|
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(
|
|
10419
|
+
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",
|
|
10420
|
+
children: data.exerciseStepApp.instructionsCode ? /* @__PURE__ */ jsx(StepMdx, { inBrowserBrowserRef }) : /* @__PURE__ */ jsx("p", { children: "No instructions yet..." })
|
|
10180
10421
|
},
|
|
10181
10422
|
data.articleId
|
|
10182
10423
|
),
|
|
@@ -10223,7 +10464,7 @@ function ExercisePartRoute() {
|
|
|
10223
10464
|
/* @__PURE__ */ jsxs(
|
|
10224
10465
|
Tabs.Root,
|
|
10225
10466
|
{
|
|
10226
|
-
className: "relative col-span-1 row-span-1
|
|
10467
|
+
className: "relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1",
|
|
10227
10468
|
value: activeTab,
|
|
10228
10469
|
children: [
|
|
10229
10470
|
/* @__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 +10489,12 @@ function ExercisePartRoute() {
|
|
|
10248
10489
|
}
|
|
10249
10490
|
) }, tab);
|
|
10250
10491
|
}) }),
|
|
10251
|
-
/* @__PURE__ */ jsxs("div", { className: "relative z-10 flex flex-grow flex-col overflow-y-auto", children: [
|
|
10492
|
+
/* @__PURE__ */ jsxs("div", { className: "relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto", children: [
|
|
10252
10493
|
/* @__PURE__ */ jsx(
|
|
10253
10494
|
Tabs.Content,
|
|
10254
10495
|
{
|
|
10255
10496
|
value: "playground",
|
|
10256
|
-
className: "flex flex-grow items-center justify-center radix-state-inactive:hidden",
|
|
10497
|
+
className: "flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",
|
|
10257
10498
|
children: /* @__PURE__ */ jsx(
|
|
10258
10499
|
Playground,
|
|
10259
10500
|
{
|
|
@@ -10270,7 +10511,7 @@ function ExercisePartRoute() {
|
|
|
10270
10511
|
Tabs.Content,
|
|
10271
10512
|
{
|
|
10272
10513
|
value: "problem",
|
|
10273
|
-
className: "flex flex-grow items-center justify-center radix-state-inactive:hidden",
|
|
10514
|
+
className: "flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",
|
|
10274
10515
|
children: /* @__PURE__ */ jsx(
|
|
10275
10516
|
Preview,
|
|
10276
10517
|
{
|
|
@@ -10284,7 +10525,7 @@ function ExercisePartRoute() {
|
|
|
10284
10525
|
Tabs.Content,
|
|
10285
10526
|
{
|
|
10286
10527
|
value: "solution",
|
|
10287
|
-
className: "flex flex-grow items-center justify-center radix-state-inactive:hidden",
|
|
10528
|
+
className: "flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",
|
|
10288
10529
|
children: /* @__PURE__ */ jsx(
|
|
10289
10530
|
Preview,
|
|
10290
10531
|
{
|
|
@@ -10298,7 +10539,7 @@ function ExercisePartRoute() {
|
|
|
10298
10539
|
Tabs.Content,
|
|
10299
10540
|
{
|
|
10300
10541
|
value: "tests",
|
|
10301
|
-
className: "flex flex-grow items-start justify-center overflow-hidden radix-state-inactive:hidden",
|
|
10542
|
+
className: "flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden",
|
|
10302
10543
|
children: /* @__PURE__ */ jsx(
|
|
10303
10544
|
Tests,
|
|
10304
10545
|
{
|
|
@@ -10314,7 +10555,7 @@ function ExercisePartRoute() {
|
|
|
10314
10555
|
Tabs.Content,
|
|
10315
10556
|
{
|
|
10316
10557
|
value: "diff",
|
|
10317
|
-
className: "flex h-full flex-grow items-start justify-center radix-state-inactive:hidden",
|
|
10558
|
+
className: "flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",
|
|
10318
10559
|
children: /* @__PURE__ */ jsx(Diff, { diff: data.diff, allApps: data.allApps })
|
|
10319
10560
|
}
|
|
10320
10561
|
),
|
|
@@ -10322,7 +10563,7 @@ function ExercisePartRoute() {
|
|
|
10322
10563
|
Tabs.Content,
|
|
10323
10564
|
{
|
|
10324
10565
|
value: "chat",
|
|
10325
|
-
className: "flex h-full flex-grow items-start justify-center radix-state-inactive:hidden",
|
|
10566
|
+
className: "flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",
|
|
10326
10567
|
children: /* @__PURE__ */ jsx(DiscordChat, {})
|
|
10327
10568
|
}
|
|
10328
10569
|
)
|
|
@@ -10377,8 +10618,7 @@ const meta$2 = ({
|
|
|
10377
10618
|
var _a2;
|
|
10378
10619
|
const number = data == null ? void 0 : data.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
10379
10620
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
10380
|
-
if (!data || !rootData)
|
|
10381
|
-
return [{ title: "🦉 | Error" }];
|
|
10621
|
+
if (!data || !rootData) return [{ title: "🦉 | Error" }];
|
|
10382
10622
|
return getSeoMetaTags({
|
|
10383
10623
|
title: `🦉 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
10384
10624
|
description: `Elaboration for ${number}. ${data.exercise.title}`,
|
|
@@ -10464,9 +10704,9 @@ const mdxComponents$2 = { h1: () => null };
|
|
|
10464
10704
|
function ExerciseFinished$1() {
|
|
10465
10705
|
const data = useLoaderData();
|
|
10466
10706
|
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
|
|
10707
|
+
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: [
|
|
10708
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r", children: [
|
|
10709
|
+
/* @__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
10710
|
/* @__PURE__ */ jsx(Link, { to: `/${exerciseNumber}`, className: "hover:underline", children: `${exerciseNumber}. ${data.exercise.title}` }),
|
|
10471
10711
|
/* @__PURE__ */ jsx("span", { children: "/" }),
|
|
10472
10712
|
/* @__PURE__ */ jsx("span", { children: "Elaboration" })
|
|
@@ -10474,7 +10714,7 @@ function ExerciseFinished$1() {
|
|
|
10474
10714
|
/* @__PURE__ */ jsx(
|
|
10475
10715
|
"article",
|
|
10476
10716
|
{
|
|
10477
|
-
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-
|
|
10717
|
+
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
10718
|
id: data.articleId,
|
|
10479
10719
|
children: data.exercise.finishedCode ? /* @__PURE__ */ jsx(
|
|
10480
10720
|
EpicVideoInfoProvider,
|
|
@@ -10529,7 +10769,7 @@ function Survey$1({
|
|
|
10529
10769
|
exerciseTitle
|
|
10530
10770
|
}) {
|
|
10531
10771
|
const [iframeLoaded, setIframeLoaded] = React.useState(false);
|
|
10532
|
-
return /* @__PURE__ */ jsxs("div", { className: "relative flex-shrink-0", children: [
|
|
10772
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative min-h-full sm:min-h-[unset] sm:flex-shrink-0", children: [
|
|
10533
10773
|
!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
10774
|
"Loading ",
|
|
10535
10775
|
exerciseTitle,
|
|
@@ -10671,11 +10911,9 @@ const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
10671
10911
|
loader: loader$h
|
|
10672
10912
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
10673
10913
|
async function getForceFresh(filePath, cacheEntry) {
|
|
10674
|
-
if (!cacheEntry)
|
|
10675
|
-
return true;
|
|
10914
|
+
if (!cacheEntry) return true;
|
|
10676
10915
|
const app = await getAppFromFile(filePath);
|
|
10677
|
-
if (!app)
|
|
10678
|
-
return true;
|
|
10916
|
+
if (!app) return true;
|
|
10679
10917
|
const appModified = modifiedTimes.get(app.fullPath) ?? 0;
|
|
10680
10918
|
const cacheModified = cacheEntry.metadata.createdTime;
|
|
10681
10919
|
return !cacheModified || appModified > cacheModified || void 0;
|
|
@@ -11204,8 +11442,7 @@ const meta$1 = ({
|
|
|
11204
11442
|
}) => {
|
|
11205
11443
|
var _a2;
|
|
11206
11444
|
const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
|
|
11207
|
-
if (!rootData)
|
|
11208
|
-
return [];
|
|
11445
|
+
if (!rootData) return [];
|
|
11209
11446
|
return getSeoMetaTags({
|
|
11210
11447
|
title: `🎉 ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
11211
11448
|
description: `Elaboration for ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
@@ -11280,7 +11517,7 @@ function ExerciseFinished() {
|
|
|
11280
11517
|
/* @__PURE__ */ jsx(
|
|
11281
11518
|
"article",
|
|
11282
11519
|
{
|
|
11283
|
-
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-
|
|
11520
|
+
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
11521
|
id: data.articleId,
|
|
11285
11522
|
children: data.finishedCode ? /* @__PURE__ */ jsx(
|
|
11286
11523
|
EpicVideoInfoProvider,
|
|
@@ -11589,8 +11826,7 @@ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
11589
11826
|
async function loader$8() {
|
|
11590
11827
|
ensureUndeployed();
|
|
11591
11828
|
const isAuthenticated = Boolean(await getAuthInfo());
|
|
11592
|
-
if (isAuthenticated)
|
|
11593
|
-
throw redirect("/account");
|
|
11829
|
+
if (isAuthenticated) throw redirect("/account");
|
|
11594
11830
|
return json({});
|
|
11595
11831
|
}
|
|
11596
11832
|
async function action$2() {
|
|
@@ -11608,8 +11844,7 @@ function Login() {
|
|
|
11608
11844
|
const revalidator = useRevalidator();
|
|
11609
11845
|
const lastMessage = useEventSource(`/login-sse`);
|
|
11610
11846
|
useEffect(() => {
|
|
11611
|
-
if (!lastMessage)
|
|
11612
|
-
return;
|
|
11847
|
+
if (!lastMessage) return;
|
|
11613
11848
|
const parsed = JSON.parse(lastMessage);
|
|
11614
11849
|
const result = EventSchema.safeParse(parsed);
|
|
11615
11850
|
if (!result.success) {
|
|
@@ -11773,8 +12008,7 @@ async function clearData() {
|
|
|
11773
12008
|
await deleteDb();
|
|
11774
12009
|
}
|
|
11775
12010
|
async function clearCaches() {
|
|
11776
|
-
if (ENV.EPICSHOP_DEPLOYED)
|
|
11777
|
-
return;
|
|
12011
|
+
if (ENV.EPICSHOP_DEPLOYED) return;
|
|
11778
12012
|
const workshopRoot2 = getWorkshopRoot();
|
|
11779
12013
|
await fsExtra.remove(path$1.join(workshopRoot2, "node_modules", ".cache"));
|
|
11780
12014
|
await deleteCache();
|
|
@@ -12481,11 +12715,11 @@ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
12481
12715
|
__proto__: null,
|
|
12482
12716
|
loader
|
|
12483
12717
|
}, 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" };
|
|
12718
|
+
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-K6Dvbx-E.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-l0sNRNKZ.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-a1fde59b.js", "version": "a1fde59b" };
|
|
12485
12719
|
const mode = "production";
|
|
12486
12720
|
const assetsBuildDirectory = "build/client";
|
|
12487
12721
|
const basename = "/";
|
|
12488
|
-
const future = { "v3_fetcherPersist": false, "v3_relativeSplatPath": false, "v3_throwAbortReason": false, "unstable_singleFetch": false };
|
|
12722
|
+
const future = { "v3_fetcherPersist": false, "v3_relativeSplatPath": false, "v3_throwAbortReason": false, "unstable_singleFetch": false, "unstable_fogOfWar": false };
|
|
12489
12723
|
const isSpaMode = false;
|
|
12490
12724
|
const publicPath = "/";
|
|
12491
12725
|
const entry = { module: entryServer };
|