@epic-web/workshop-app 5.1.1 → 5.2.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/{_-ZHCWB__B.js → _-CWSCXcBv.js} +2 -2
- package/build/client/assets/{_-ZHCWB__B.js.map → _-CWSCXcBv.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber-BFTlBdr4.js → _exerciseNumber-D6KsriIk.js} +2 -2
- package/build/client/assets/_exerciseNumber-D6KsriIk.js.map +1 -0
- package/build/client/assets/{_exerciseNumber_._stepNumber-_687iGFh.js → _exerciseNumber_._stepNumber-BA2Xhzqs.js} +2 -2
- package/build/client/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js.map +1 -0
- package/build/client/assets/{_exerciseNumber_.finished-BEfn-nJi.js → _exerciseNumber_.finished-DEzaS_Ji.js} +2 -2
- package/build/client/assets/_exerciseNumber_.finished-DEzaS_Ji.js.map +1 -0
- package/build/client/assets/{_layout-Cfbi6StB.js → _layout-88n0To1b.js} +2 -2
- package/build/client/assets/{_layout-Cfbi6StB.js.map → _layout-88n0To1b.js.map} +1 -1
- package/build/client/assets/{_layout-BriOqd2R.js → _layout-C5yGKUmm.js} +2 -2
- package/build/client/assets/_layout-C5yGKUmm.js.map +1 -0
- package/build/client/assets/{_layout-frPHZWgR.js → _layout-T2hZtl0D.js} +2 -2
- package/build/client/assets/_layout-T2hZtl0D.js.map +1 -0
- package/build/client/assets/{_layout-BLJr2x2F.js → _layout-gyrNluke.js} +2 -2
- package/build/client/assets/_layout-gyrNluke.js.map +1 -0
- package/build/client/assets/{accordion-DuE9VejZ.js → accordion-DC885Li1.js} +2 -2
- package/build/client/assets/{accordion-DuE9VejZ.js.map → accordion-DC885Li1.js.map} +1 -1
- package/build/client/assets/{account-DDuV9rZX.js → account-CPFwPYf1.js} +2 -2
- package/build/client/assets/account-CPFwPYf1.js.map +1 -0
- package/build/client/assets/app-CM8yuYni.js +2 -0
- package/build/client/assets/app-CM8yuYni.js.map +1 -0
- package/build/client/assets/{button-CMkJ8p0a.js → button-DQ001ob0.js} +2 -2
- package/build/client/assets/{button-CMkJ8p0a.js.map → button-DQ001ob0.js.map} +1 -1
- package/build/client/assets/components-9EGYHTc_.js +158 -0
- package/build/client/assets/components-9EGYHTc_.js.map +1 -0
- package/build/client/assets/{diff-B6thd_Sf.js → diff-assn_bSK.js} +2 -2
- package/build/client/assets/{diff-B6thd_Sf.js.map → diff-assn_bSK.js.map} +1 -1
- package/build/client/assets/diff-jlCv3hv0.js +2 -0
- package/build/client/assets/diff-jlCv3hv0.js.map +1 -0
- package/build/client/assets/{discord-C9bVfiZ6.js → discord-CHsbqaqM.js} +2 -2
- package/build/client/assets/discord-CHsbqaqM.js.map +1 -0
- package/build/client/assets/discord-DoeazikD.js +2 -0
- package/build/client/assets/discord-DoeazikD.js.map +1 -0
- package/build/client/assets/entry.client-BTYTUpFV.js +44 -0
- package/build/client/assets/entry.client-BTYTUpFV.js.map +1 -0
- package/build/client/assets/epic-video-GDpD7_Qt.js +3053 -0
- package/build/client/assets/epic-video-GDpD7_Qt.js.map +1 -0
- package/build/client/assets/{error-boundary-BcGxKpte.js → error-boundary-1-dmC941.js} +2 -2
- package/build/client/assets/{error-boundary-BcGxKpte.js.map → error-boundary-1-dmC941.js.map} +1 -1
- package/build/client/assets/{finished-C2dgX1d-.js → finished-DVV0zwmP.js} +2 -2
- package/build/client/assets/finished-DVV0zwmP.js.map +1 -0
- package/build/client/assets/{index-DBrRQJxF.js → index-BCxBKsqT.js} +2 -2
- package/build/client/assets/{index-DBrRQJxF.js.map → index-BCxBKsqT.js.map} +1 -1
- package/build/client/assets/index-BFGhCX_U.js +38 -0
- package/build/client/assets/index-BFGhCX_U.js.map +1 -0
- package/build/client/assets/index-BuA_RWlU.js +2 -0
- package/build/client/assets/index-BuA_RWlU.js.map +1 -0
- package/build/client/assets/index-BuoaxPEj.js +42 -0
- package/build/client/assets/index-BuoaxPEj.js.map +1 -0
- package/build/client/assets/index-CmmC-_8P.js +2 -0
- package/build/client/assets/index-CmmC-_8P.js.map +1 -0
- package/build/client/assets/{index-YtpQLUzj.js → index-DRH72MzK.js} +2 -2
- package/build/client/assets/{index-YtpQLUzj.js.map → index-DRH72MzK.js.map} +1 -1
- package/build/client/assets/{index-CuV1bRbu.js → index-KgMLc41c.js} +2 -2
- package/build/client/assets/index-KgMLc41c.js.map +1 -0
- package/build/client/assets/index-_J-F_Dnc.js +36 -0
- package/build/client/assets/index-_J-F_Dnc.js.map +1 -0
- package/build/client/assets/{loading-Br41_Pbf.js → loading-Dk0n07O3.js} +2 -2
- package/build/client/assets/{loading-Br41_Pbf.js.map → loading-Dk0n07O3.js.map} +1 -1
- package/build/client/assets/{login-kjV7hrVt.js → login-pZYDEC_l.js} +2 -2
- package/build/client/assets/login-pZYDEC_l.js.map +1 -0
- package/build/client/assets/{manifest-b22910a7.js → manifest-c9f53a94.js} +1 -1
- package/build/client/assets/mdx-hW1uYjc1.js +2 -0
- package/build/client/assets/mdx-hW1uYjc1.js.map +1 -0
- package/build/client/assets/misc-BJtHv_Jh.js +2 -0
- package/build/client/assets/misc-BJtHv_Jh.js.map +1 -0
- package/build/client/assets/{nav-chevrons-DYiI8EMU.js → nav-chevrons-CgbSMLeb.js} +2 -2
- package/build/client/assets/{nav-chevrons-DYiI8EMU.js.map → nav-chevrons-CgbSMLeb.js.map} +1 -1
- package/build/client/assets/{onboarding-B4Z_yevk.js → onboarding-DCuSqnkZ.js} +2 -2
- package/build/client/assets/onboarding-DCuSqnkZ.js.map +1 -0
- package/build/client/assets/{pe-CvPIToj6.js → pe-ChIwTk8v.js} +2 -2
- package/build/client/assets/pe-ChIwTk8v.js.map +1 -0
- package/build/client/assets/presence-CdyMdOKk.js +28 -0
- package/build/client/assets/presence-CdyMdOKk.js.map +1 -0
- package/build/client/assets/{preview-DZcdG4kw.js → preview-CW_12I0i.js} +2 -2
- package/build/client/assets/preview-CW_12I0i.js.map +1 -0
- package/build/client/assets/{product-mjsTrqXs.js → product-C1ynnrN_.js} +2 -2
- package/build/client/assets/{product-mjsTrqXs.js.map → product-C1ynnrN_.js.map} +1 -1
- package/build/client/assets/progress-DAB3nDa2.js +2 -0
- package/build/client/assets/progress-DAB3nDa2.js.map +1 -0
- package/build/client/assets/{progress-bar-F8_2mvYp.js → progress-bar-Cj5R4Zk7.js} +2 -2
- package/build/client/assets/{progress-bar-F8_2mvYp.js.map → progress-bar-Cj5R4Zk7.js.map} +1 -1
- package/build/client/assets/{request-info-DGnmXtfj.js → request-info-DCIQLE6H.js} +2 -2
- package/build/client/assets/{request-info-DGnmXtfj.js.map → request-info-DCIQLE6H.js.map} +1 -1
- package/build/client/assets/{revalidation-ws-DcvYvzyj.js → revalidation-ws-DU-PzW-_.js} +2 -2
- package/build/client/assets/{revalidation-ws-DcvYvzyj.js.map → revalidation-ws-DU-PzW-_.js.map} +1 -1
- package/build/client/assets/{root-Cl86OUog.js → root-DojjHZlY.js} +4 -4
- package/build/client/assets/root-DojjHZlY.js.map +1 -0
- package/build/client/assets/set-playground-S_rIwJAa.js +2 -0
- package/build/client/assets/set-playground-S_rIwJAa.js.map +1 -0
- package/build/client/assets/{support-B0E_F4Zh.js → support-BNS-kEhc.js} +2 -2
- package/build/client/assets/{support-B0E_F4Zh.js.map → support-BNS-kEhc.js.map} +1 -1
- package/build/client/assets/tailwind-B5AAMtGC.css +1 -0
- package/build/client/assets/test-CtH75Laz.js +2 -0
- package/build/client/assets/test-CtH75Laz.js.map +1 -0
- package/build/client/assets/{tests-BeAEgPAw.js → tests-CTs57UUU.js} +2 -2
- package/build/client/assets/tests-CTs57UUU.js.map +1 -0
- package/build/client/assets/tooltip-BgynKV2c.js +2 -0
- package/build/client/assets/tooltip-BgynKV2c.js.map +1 -0
- package/build/client/assets/use-event-source-x59d4R2Z.js +2 -0
- package/build/client/assets/use-event-source-x59d4R2Z.js.map +1 -0
- package/build/client/assets/{user-Boua6jiU.js → user-BBryXlM_.js} +2 -2
- package/build/client/assets/{user-Boua6jiU.js.map → user-BBryXlM_.js.map} +1 -1
- package/build/client/assets/{workshop-config-Ce9sSc3I.js → workshop-config-DJY2cXU_.js} +2 -2
- package/build/client/assets/{workshop-config-Ce9sSc3I.js.map → workshop-config-DJY2cXU_.js.map} +1 -1
- package/build/server/index.js +253 -238
- package/build/server/index.js.map +1 -1
- package/dist/server/index.js +7 -14
- package/package.json +68 -73
- package/build/client/assets/_exerciseNumber-BFTlBdr4.js.map +0 -1
- package/build/client/assets/_exerciseNumber_._stepNumber-_687iGFh.js.map +0 -1
- package/build/client/assets/_exerciseNumber_.finished-BEfn-nJi.js.map +0 -1
- package/build/client/assets/_layout-BLJr2x2F.js.map +0 -1
- package/build/client/assets/_layout-BriOqd2R.js.map +0 -1
- package/build/client/assets/_layout-frPHZWgR.js.map +0 -1
- package/build/client/assets/account-DDuV9rZX.js.map +0 -1
- package/build/client/assets/app-wbMCZEiv.js +0 -2
- package/build/client/assets/app-wbMCZEiv.js.map +0 -1
- package/build/client/assets/components-DZ8XIeZ3.js +0 -166
- package/build/client/assets/components-DZ8XIeZ3.js.map +0 -1
- package/build/client/assets/diff-BEk79KPK.js +0 -2
- package/build/client/assets/diff-BEk79KPK.js.map +0 -1
- package/build/client/assets/discord-C9bVfiZ6.js.map +0 -1
- package/build/client/assets/discord-DYeU0QX6.js +0 -2
- package/build/client/assets/discord-DYeU0QX6.js.map +0 -1
- package/build/client/assets/entry.client-CW5CUf_W.js +0 -43
- package/build/client/assets/entry.client-CW5CUf_W.js.map +0 -1
- package/build/client/assets/epic-video-bs7WmhbC.js +0 -2988
- package/build/client/assets/epic-video-bs7WmhbC.js.map +0 -1
- package/build/client/assets/finished-C2dgX1d-.js.map +0 -1
- package/build/client/assets/index-BczhSZ3e.js +0 -2
- package/build/client/assets/index-BczhSZ3e.js.map +0 -1
- package/build/client/assets/index-BjNhezSK.js +0 -42
- package/build/client/assets/index-BjNhezSK.js.map +0 -1
- package/build/client/assets/index-BvihEwfB.js +0 -36
- package/build/client/assets/index-BvihEwfB.js.map +0 -1
- package/build/client/assets/index-C2yr7Uiu.js +0 -2
- package/build/client/assets/index-C2yr7Uiu.js.map +0 -1
- package/build/client/assets/index-CuV1bRbu.js.map +0 -1
- package/build/client/assets/index-DF_XBInP.js +0 -37
- package/build/client/assets/index-DF_XBInP.js.map +0 -1
- package/build/client/assets/login-kjV7hrVt.js.map +0 -1
- package/build/client/assets/mdx-CRxPouxB.js +0 -2
- package/build/client/assets/mdx-CRxPouxB.js.map +0 -1
- package/build/client/assets/misc-BE75ioh8.js +0 -2
- package/build/client/assets/misc-BE75ioh8.js.map +0 -1
- package/build/client/assets/onboarding-B4Z_yevk.js.map +0 -1
- package/build/client/assets/pe-CvPIToj6.js.map +0 -1
- package/build/client/assets/presence-Dd98AJ_5.js +0 -28
- package/build/client/assets/presence-Dd98AJ_5.js.map +0 -1
- package/build/client/assets/preview-DZcdG4kw.js.map +0 -1
- package/build/client/assets/progress-Co-59mG2.js +0 -2
- package/build/client/assets/progress-Co-59mG2.js.map +0 -1
- package/build/client/assets/root-Cl86OUog.js.map +0 -1
- package/build/client/assets/set-playground-pMKmtPtz.js +0 -2
- package/build/client/assets/set-playground-pMKmtPtz.js.map +0 -1
- package/build/client/assets/tailwind-B9pSujyx.css +0 -1
- package/build/client/assets/test-B6zIK2V6.js +0 -2
- package/build/client/assets/test-B6zIK2V6.js.map +0 -1
- package/build/client/assets/tests-BeAEgPAw.js.map +0 -1
- package/build/client/assets/tooltip-6-WS-Xux.js +0 -2
- package/build/client/assets/tooltip-6-WS-Xux.js.map +0 -1
- package/build/client/assets/use-event-source-CCGBLG92.js +0 -2
- package/build/client/assets/use-event-source-CCGBLG92.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-CPFwPYf1.js","sources":["../../../app/routes/_app+/account.tsx"],"sourcesContent":["import { deleteCache } from '@epic-web/workshop-utils/cache.server'\nimport {\n\tdeleteDb,\n\tdeleteDiscordInfo,\n\trequireAuthInfo,\n\tsetPresencePreferences,\n} from '@epic-web/workshop-utils/db.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { redirect, type LoaderFunctionArgs } from '@remix-run/node'\nimport { Form, Link, useFetcher, useLoaderData } from '@remix-run/react'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.js'\nimport { useOptionalDiscordMember, useUser } from '#app/components/user.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { usePresencePreferences } from '#app/utils/presence.tsx'\nimport { redirectWithToast } from '#app/utils/toast.server.ts'\nimport { getDiscordAuthURL } from '../discord.callback.ts'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tawait requireAuthInfo({ request })\n\treturn { discordAuthUrl: getDiscordAuthURL() }\n}\n\nexport async function action({ request }: { request: Request }) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tif (intent === 'disconnect-discord') {\n\t\tawait deleteDiscordInfo()\n\t\treturn redirectWithToast('/account', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Disconnected',\n\t\t\tdescription: 'Local discord data has been deleted.',\n\t\t})\n\t} else if (intent === 'logout') {\n\t\tawait deleteDb()\n\t\tawait deleteCache()\n\t\treturn redirectWithToast('/login', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Logged out',\n\t\t\tdescription: 'Goodbye! Come back soon!',\n\t\t})\n\t} else if (intent === 'presence-opt-out') {\n\t\tconst optOut = formData.get('optOut') === 'true'\n\t\tawait setPresencePreferences({ optOut })\n\t\treturn redirectWithToast('/account', {\n\t\t\ttitle: optOut ? 'Opted out' : 'Opted in',\n\t\t\tdescription: `You are now ${optOut ? 'invisible' : 'visible'}.`,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\treturn redirect('/account')\n}\n\nexport default function Account() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst disconnectFetcher = useFetcher()\n\tconst user = useUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst presencePreferences = usePresencePreferences()\n\treturn (\n\t\t<main className=\"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4\">\n\t\t\t<img\n\t\t\t\tclassName=\"h-36 w-36 rounded-full\"\n\t\t\t\talt={discordMember?.displayName ?? user.name ?? user.email}\n\t\t\t\tsrc={user.avatarUrl}\n\t\t\t/>\n\t\t\t<h1 className=\"mb-1 text-2xl\">Your Account</h1>\n\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t{user.name\n\t\t\t\t\t? `Hi ${\n\t\t\t\t\t\t\tdiscordMember?.displayName ?? user.name\n\t\t\t\t\t\t}, your device is logged in with ${user.email}.`\n\t\t\t\t\t: `Your device is logged in with ${user.email}.`}\n\t\t\t</p>\n\t\t\t{discordMember ? (\n\t\t\t\t<>\n\t\t\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t\t\tAnd you are connected to discord as {discordMember.displayName} (\n\t\t\t\t\t\t{discordMember.id}).\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"flex justify-center gap-2\">\n\t\t\t\t\t\t<disconnectFetcher.Form method=\"post\">\n\t\t\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"disconnect-discord\">\n\t\t\t\t\t\t\t\tDisconnect Discord\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</disconnectFetcher.Form>\n\t\t\t\t\t\t<SimpleTooltip content=\"Your discord connection gives you access to the exclusive Discord channels for Epic Web\">\n\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Link\n\t\t\t\t\t\tto={data.discordAuthUrl}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-2 underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"Discord\" size=\"lg\" />\n\t\t\t\t\t\tConnect Discord\n\t\t\t\t\t</Link>\n\t\t\t\t\t<SimpleTooltip content=\"This will give you access to the exclusive Discord channels for Epic Web\">\n\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tname=\"optOut\"\n\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\tvalue={presencePreferences?.optOut ? 'false' : 'true'}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"presence-opt-out\">\n\t\t\t\t\t\t{presencePreferences?.optOut ? 'Opt in to' : 'Opt out of'} presence\n\t\t\t\t\t</Button>\n\t\t\t\t</Form>\n\t\t\t\t<SimpleTooltip content=\"This controls whether your name and avatar are displayed in the pile of faces in navigation\">\n\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t</SimpleTooltip>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"logout\">\n\t\t\t\t\t\tLog device out\n\t\t\t\t\t</Button>\n\t\t\t\t</Form>\n\t\t\t\t<SimpleTooltip\n\t\t\t\t\tcontent={\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\tNote: it is your <i className=\"italic\">device</i> that's logged\n\t\t\t\t\t\t\tin, not your browser.\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\tSo all browsers on this device will be logged in with the same\n\t\t\t\t\t\t\taccount on this device.\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t</SimpleTooltip>\n\t\t\t</div>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/onboarding\" className=\"underline\">\n\t\t\t\t\t/onboarding\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you'd like to review onboarding again.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/support\" className=\"underline\">\n\t\t\t\t\t/support\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you need support.\n\t\t\t</p>\n\t\t</main>\n\t)\n}\n"],"names":["handle","getSitemapEntries","Account","data","useLoaderData","disconnectFetcher","useFetcher","user","useUser","discordMember","useOptionalDiscordMember","presencePreferences","usePresencePreferences","jsxs","className","children","jsx","alt","displayName","name","email","src","avatarUrl","Fragment","id","Form","method","Button","varient","value","SimpleTooltip","content","Icon","tabIndex","Link","to","discordAuthUrl","size","type","optOut"],"mappings":"gWAmBO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAwCA,SAAwBC,GAAU,CACjC,MAAMC,EAAOC,IACPC,EAAoBC,IACpBC,EAAOC,IACPC,EAAgBC,IAChBC,EAAsBC,IAE3B,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,8FACfC,SAAA,CAAAC,EAAA,IAAC,MAAA,CACAF,UAAU,yBACVG,KAAKR,GAAAA,YAAAA,EAAeS,cAAeX,EAAKY,MAAQZ,EAAKa,MACrDC,IAAKd,EAAKe,SAAA,CACX,EACCN,EAAA,IAAA,KAAA,CAAGF,UAAU,gBAAgBC,SAAY,cAAA,CAAA,QACzC,IAAE,CAAAD,UAAU,+CACXC,SAAKR,EAAAY,KACH,OACAV,GAAAA,YAAAA,EAAeS,cAAeX,EAAKY,IACpC,mCAAmCZ,EAAKa,KAAK,IAC5C,iCAAiCb,EAAKa,KAAK,IAC/C,EACCX,EAECI,EAAA,KAAAU,WAAA,CAAAR,SAAA,CAACF,EAAA,KAAA,IAAA,CAAEC,UAAU,+CAA+CC,SAAA,CAAA,uCACtBN,EAAcS,YAAY,KAC9DT,EAAce,GAAG,IAAA,CACnB,CAAA,EACAX,EAAA,KAAC,MAAI,CAAAC,UAAU,4BACdC,SAAA,CAAAC,EAAAA,IAACX,EAAkBoB,KAAlB,CAAuBC,OAAO,OAC9BX,SAACC,EAAA,IAAAW,EAAA,CAAOC,QAAQ,OAAOT,KAAK,SAASU,MAAM,qBAAqBd,8BAEhE,CACD,CAAA,EACAC,EAAA,IAACc,EAAc,CAAAC,QAAQ,0FACtBhB,SAAAC,EAAA,IAACgB,GAAKb,KAAK,WAAWc,SAAU,EAAG,CACpC,CAAA,CAAA,CACD,CAAA,CAAA,CAAA,CACD,EAEApB,EAAA,KAAC,MAAI,CAAAC,UAAU,0BACdC,SAAA,CAAAF,EAAA,KAACqB,EAAA,CACAC,GAAIhC,EAAKiC,eACTtB,UAAU,2CAEVC,SAAA,CAAAC,EAAA,IAACgB,EAAK,CAAAb,KAAK,UAAUkB,KAAK,IAAK,CAAA,EAAE,iBAAA,CAAA,CAElC,EACArB,EAAA,IAACc,EAAc,CAAAC,QAAQ,2EACtBhB,SAAAC,EAAA,IAACgB,GAAKb,KAAK,WAAWc,SAAU,EAAG,CACpC,CAAA,CAAA,CACD,CAAA,EAEDpB,EAAA,KAAC,MAAI,CAAAC,UAAU,0BACdC,SAAA,CAACF,EAAA,KAAAY,EAAA,CAAKC,OAAO,OACZX,SAAA,CAAAC,EAAA,IAAC,QAAA,CACAG,KAAK,SACLmB,KAAK,SACLT,MAAOlB,GAAAA,MAAAA,EAAqB4B,OAAS,QAAU,MAAA,CAChD,SACCZ,EAAO,CAAAC,QAAQ,OAAOT,KAAK,SAASU,MAAM,mBACzCd,SAAA,CAAAJ,GAAAA,MAAAA,EAAqB4B,OAAS,YAAc,aAAa,WAAA,CAC3D,CAAA,CAAA,CACD,CAAA,EACAvB,EAAA,IAACc,EAAc,CAAAC,QAAQ,8FACtBhB,SAAAC,EAAA,IAACgB,GAAKb,KAAK,WAAWc,SAAU,EAAG,CACpC,CAAA,CAAA,CACD,CAAA,EACApB,EAAA,KAAC,MAAI,CAAAC,UAAU,0BACdC,SAAA,CAAAC,EAAA,IAACS,EAAK,CAAAC,OAAO,OACZX,SAAAC,EAAA,IAACW,EAAO,CAAAC,QAAQ,OAAOT,KAAK,SAASU,MAAM,SAASd,SAAA,iBAEpD,CACD,CAAA,EACAC,EAAA,IAACc,EAAA,CACAC,eACE,MAAI,CAAAhB,SAAA,CAAA,oBACcC,EAAA,IAAA,IAAA,CAAEF,UAAU,SAASC,SAAM,QAAA,CAAA,EAAI,6CAEhD,KAAG,CAAA,CAAA,EAAE,wFAAA,CAGP,CAAA,EAGDA,SAACC,EAAA,IAAAgB,EAAA,CAAKb,KAAK,WAAWc,SAAU,EAAG,CAAA,CACpC,CAAA,CACD,CAAA,SACC,IAAE,CAAAlB,SAAA,CAAA,QACI,UACLmB,EAAK,CAAAC,GAAG,cAAcrB,UAAU,YAAYC,SAE7C,aAAA,CAAA,EAAQ,IAAI,2CAAA,CAEb,CAAA,SACC,IAAE,CAAAA,SAAA,CAAA,QACI,UACLmB,EAAK,CAAAC,GAAG,WAAWrB,UAAU,YAAYC,SAE1C,UAAA,CAAA,EAAQ,IAAI,sBAAA,CAEb,CAAA,CAAA,CACD,CAAA,CAEF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,j as s}from"./index-BFGhCX_U.js";import{P as e}from"./preview-CW_12I0i.js";import{u as i}from"./components-9EGYHTc_.js";import"./misc-BJtHv_Jh.js";import"./request-info-DCIQLE6H.js";import"./button-DQ001ob0.js";import"./loading-Dk0n07O3.js";import"./index-_J-F_Dnc.js";import"./tooltip-BgynKV2c.js";import"./pe-ChIwTk8v.js";import"./progress-bar-Cj5R4Zk7.js";function R(){const{appInfo:r}=i(),o=t.useRef(null);return s.jsx(e,{appInfo:r,inBrowserBrowserRef:o})}export{R as default};
|
|
2
|
+
//# sourceMappingURL=app-CM8yuYni.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-CM8yuYni.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app.tsx"],"sourcesContent":["import { requireExerciseApp } from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tunstable_data as data,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n} from '@remix-run/node'\nimport { useLoaderData } from '@remix-run/react'\nimport { useRef } from 'react'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.js'\nimport { Preview } from './__shared/preview.tsx'\nimport { getAppRunningState } from './__shared/utils.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exercise-step-test')\n\tconst exerciseStepApp = await requireExerciseApp(params, { request, timings })\n\tconst { isRunning, portIsAvailable } =\n\t\tawait getAppRunningState(exerciseStepApp)\n\n\treturn data(\n\t\t{\n\t\t\tappInfo: {\n\t\t\t\tisRunning,\n\t\t\t\tname: exerciseStepApp.name,\n\t\t\t\ttitle: exerciseStepApp.title,\n\t\t\t\tportIsAvailable,\n\t\t\t\ttype: exerciseStepApp.type,\n\t\t\t\tfullPath: exerciseStepApp.fullPath,\n\t\t\t\tdev: exerciseStepApp.dev,\n\t\t\t\ttest: exerciseStepApp.test,\n\t\t\t\tstackBlitzUrl: exerciseStepApp.stackBlitzUrl,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': timings.toString(),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function TestsList() {\n\tconst { appInfo } = useLoaderData<typeof loader>()\n\tconst ref = useRef<InBrowserBrowserRef>(null)\n\n\treturn <Preview appInfo={appInfo} inBrowserBrowserRef={ref} />\n}\n"],"names":["TestsList","appInfo","useLoaderData","ref","useRef","jsx","Preview","inBrowserBrowserRef"],"mappings":"qXAmDA,SAAwBA,GAAY,CAC7B,KAAA,CAAEC,QAAAA,CAAQ,EAAIC,EAA6B,EAC3CC,EAAMC,SAA4B,IAAI,EAE5C,OAAQC,EAAAA,IAAAC,EAAA,CAAQL,QAAAA,EAAkBM,oBAAqBJ,CAAK,CAAA,CAC7D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as n}from"./index-
|
|
2
|
-
//# sourceMappingURL=button-
|
|
1
|
+
import{j as n}from"./index-BFGhCX_U.js";import{c as r}from"./misc-BJtHv_Jh.js";import{L as u}from"./components-9EGYHTc_.js";function l(){return n.jsx("span",{className:"inline-block animate-spin",children:"🌀"})}function d(){return n.jsx("span",{children:"✅"})}function m(){return n.jsx("span",{children:"❌"})}function a({varient:e,clip:o=!0}){const t="inline-flex bg-foreground text-background outline-none hover:bg-background hover:text-foreground focus:bg-background focus:text-foreground",s="px-8 py-4 font-bold",c="px-8 py-4 text-xl font-bold",i="px-8 py-4 font-mono text-sm uppercase";return r(t,{"clip-path-button":o,[s]:e==="primary",[c]:e==="big",[i]:e==="mono"})}function g({varient:e,status:o="idle",...t}){const s={pending:n.jsx(l,{}),success:n.jsx(d,{}),error:n.jsx(m,{}),idle:null}[o];return n.jsx("div",{className:"clip-path-button-outer w-fit border-2 border-foreground bg-foreground",children:n.jsxs("button",{...t,className:r(t.className,a({varient:e}),"flex justify-center gap-4"),children:[n.jsx("div",{children:t.children}),s]})})}function j({varient:e,...o}){return n.jsx("div",{className:"clip-path-button-outer w-fit border-2 border-foreground bg-foreground",children:n.jsx(u,{...o,className:r(o.className,a({varient:e}))})})}export{g as B,j as a};
|
|
2
|
+
//# sourceMappingURL=button-DQ001ob0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-
|
|
1
|
+
{"version":3,"file":"button-DQ001ob0.js","sources":["../../../app/components/button.tsx"],"sourcesContent":["import { Link } from '@remix-run/react'\nimport { clsx } from 'clsx'\n\nfunction PendingState() {\n\treturn <span className=\"inline-block animate-spin\">🌀</span>\n}\n\nfunction SuccessState() {\n\treturn <span>✅</span>\n}\n\nfunction ErrorState() {\n\treturn <span>❌</span>\n}\n\nexport function getButtonClassName({\n\tvarient,\n\tclip = true,\n}: {\n\tvarient: 'primary' | 'big' | 'mono'\n\tclip?: boolean\n}) {\n\tconst baseClassName =\n\t\t'inline-flex bg-foreground text-background outline-none hover:bg-background hover:text-foreground focus:bg-background focus:text-foreground'\n\tconst primaryClassName = 'px-8 py-4 font-bold'\n\tconst bigClassName = 'px-8 py-4 text-xl font-bold'\n\tconst monoClassName = 'px-8 py-4 font-mono text-sm uppercase'\n\tconst className = clsx(baseClassName, {\n\t\t'clip-path-button': clip,\n\t\t[primaryClassName]: varient === 'primary',\n\t\t[bigClassName]: varient === 'big',\n\t\t[monoClassName]: varient === 'mono',\n\t})\n\treturn className\n}\n\nexport function Button({\n\tvarient,\n\tstatus = 'idle',\n\t...props\n}: React.ComponentPropsWithoutRef<'button'> &\n\tParameters<typeof getButtonClassName>[0] & {\n\t\tstatus?: 'pending' | 'success' | 'error' | 'idle'\n\t}) {\n\tconst companion = {\n\t\tpending: <PendingState />,\n\t\tsuccess: <SuccessState />,\n\t\terror: <ErrorState />,\n\t\tidle: null,\n\t}[status]\n\treturn (\n\t\t<div className=\"clip-path-button-outer w-fit border-2 border-foreground bg-foreground\">\n\t\t\t<button\n\t\t\t\t{...props}\n\t\t\t\tclassName={clsx(\n\t\t\t\t\tprops.className,\n\t\t\t\t\tgetButtonClassName({ varient }),\n\t\t\t\t\t'flex justify-center gap-4',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div>{props.children}</div>\n\t\t\t\t{companion}\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n\nexport function ButtonLink({\n\tvarient,\n\t...props\n}: React.ComponentPropsWithoutRef<typeof Link> &\n\tParameters<typeof getButtonClassName>[0]) {\n\treturn (\n\t\t<div className=\"clip-path-button-outer w-fit border-2 border-foreground bg-foreground\">\n\t\t\t<Link\n\t\t\t\t{...props}\n\t\t\t\tclassName={clsx(props.className, getButtonClassName({ varient }))}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["PendingState","jsx","SuccessState","ErrorState","getButtonClassName","varient","clip","baseClassName","primaryClassName","bigClassName","monoClassName","clsx","Button","status","props","companion","jsxs","ButtonLink","Link"],"mappings":"4HAGA,SAASA,GAAe,CACvB,OAAQC,EAAAA,IAAA,OAAA,CAAK,UAAU,4BAA4B,SAAE,IAAA,CAAA,CACtD,CAEA,SAASC,GAAe,CAChB,OAAAD,EAAA,IAAC,QAAK,SAAC,GAAA,CAAA,CACf,CAEA,SAASE,GAAa,CACd,OAAAF,EAAA,IAAC,QAAK,SAAC,GAAA,CAAA,CACf,CAEO,SAASG,EAAmB,CAClC,QAAAC,EACA,KAAAC,EAAO,EACR,EAGG,CACF,MAAMC,EACL,6IACKC,EAAmB,sBACnBC,EAAe,8BACfC,EAAgB,wCAOf,OANWC,EAAKJ,EAAe,CACrC,mBAAoBD,EACpB,CAACE,CAAgB,EAAGH,IAAY,UAChC,CAACI,CAAY,EAAGJ,IAAY,MAC5B,CAACK,CAAa,EAAGL,IAAY,MAAA,CAC7B,CAEF,CAEO,SAASO,EAAO,CACtB,QAAAP,EACA,OAAAQ,EAAS,OACT,GAAGC,CACJ,EAGI,CACH,MAAMC,EAAY,CACjB,cAAUf,EAAa,EAAA,EACvB,cAAUE,EAAa,EAAA,EACvB,YAAQC,EAAW,EAAA,EACnB,KAAM,MACLU,CAAM,EAEP,OAAAZ,EAAAA,IAAC,MAAI,CAAA,UAAU,wEACd,SAAAe,EAAA,KAAC,SAAA,CACC,GAAGF,EACJ,UAAWH,EACVG,EAAM,UACNV,EAAmB,CAAE,QAAAC,EAAS,EAC9B,2BACD,EAEA,SAAA,CAACJ,EAAAA,IAAA,MAAA,CAAK,WAAM,QAAS,CAAA,EACpBc,CAAA,CAAA,CAEH,CAAA,CAAA,CAEF,CAEO,SAASE,EAAW,CAC1B,QAAAZ,EACA,GAAGS,CACJ,EAC2C,CAEzC,OAAAb,EAAAA,IAAC,MAAI,CAAA,UAAU,wEACd,SAAAA,EAAA,IAACiB,EAAA,CACC,GAAGJ,EACJ,UAAWH,EAAKG,EAAM,UAAWV,EAAmB,CAAE,QAAAC,CAAA,CAAS,CAAC,CAAA,CAElE,CAAA,CAAA,CAEF"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
var At=Object.defineProperty;var Dt=(e,t,r)=>t in e?At(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var X=(e,t,r)=>Dt(e,typeof t!="symbol"?t+"":t,r);import{r as o,l as Nt,u as M,e as Ge,D as _e,o as ie,p as Ft,q as It,N as K,s as U,t as xe,v as oe,w as we,x as jt,y as Qe,z as $,A as $t,I as Ut,B as Ze,C as $e,k as Mt,c as Ht,F as zt,G as Bt,H as Jt,i as qe,J as Yt,K as et,E as ne,a as Vt,m as tt,L as Kt,M as Xt,P as Wt,Q as Gt}from"./index-BFGhCX_U.js";function Qt(e,t){for(var r=0;r<t.length;r++){const n=t[r];if(typeof n!="string"&&!Array.isArray(n)){for(const a in n)if(a!=="default"&&!(a in e)){const i=Object.getOwnPropertyDescriptor(n,a);i&&Object.defineProperty(e,a,i.get?i:{enumerable:!0,get:()=>n[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var rt={exports:{}},k={};/**
|
|
2
|
+
* @license React
|
|
3
|
+
* react-dom.production.js
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/var Zt=o;function nt(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var r=2;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function j(){}var C={d:{f:j,r:function(){throw Error(nt(522))},D:j,C:j,L:j,m:j,X:j,S:j,M:j},p:0,findDOMNode:null},qt=Symbol.for("react.portal");function er(e,t,r){var n=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:qt,key:n==null?null:""+n,children:e,containerInfo:t,implementation:r}}var Y=Zt.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function le(e,t){if(e==="font")return"";if(typeof t=="string")return t==="use-credentials"?t:""}k.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=C;k.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(nt(299));return er(e,t,null,r)};k.flushSync=function(e){var t=Y.T,r=C.p;try{if(Y.T=null,C.p=2,e)return e()}finally{Y.T=t,C.p=r,C.d.f()}};k.preconnect=function(e,t){typeof e=="string"&&(t?(t=t.crossOrigin,t=typeof t=="string"?t==="use-credentials"?t:"":void 0):t=null,C.d.C(e,t))};k.prefetchDNS=function(e){typeof e=="string"&&C.d.D(e)};k.preinit=function(e,t){if(typeof e=="string"&&t&&typeof t.as=="string"){var r=t.as,n=le(r,t.crossOrigin),a=typeof t.integrity=="string"?t.integrity:void 0,i=typeof t.fetchPriority=="string"?t.fetchPriority:void 0;r==="style"?C.d.S(e,typeof t.precedence=="string"?t.precedence:void 0,{crossOrigin:n,integrity:a,fetchPriority:i}):r==="script"&&C.d.X(e,{crossOrigin:n,integrity:a,fetchPriority:i,nonce:typeof t.nonce=="string"?t.nonce:void 0})}};k.preinitModule=function(e,t){if(typeof e=="string")if(typeof t=="object"&&t!==null){if(t.as==null||t.as==="script"){var r=le(t.as,t.crossOrigin);C.d.M(e,{crossOrigin:r,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0})}}else t==null&&C.d.M(e)};k.preload=function(e,t){if(typeof e=="string"&&typeof t=="object"&&t!==null&&typeof t.as=="string"){var r=t.as,n=le(r,t.crossOrigin);C.d.L(e,r,{crossOrigin:n,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0,type:typeof t.type=="string"?t.type:void 0,fetchPriority:typeof t.fetchPriority=="string"?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy=="string"?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet=="string"?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes=="string"?t.imageSizes:void 0,media:typeof t.media=="string"?t.media:void 0})}};k.preloadModule=function(e,t){if(typeof e=="string")if(t){var r=le(t.as,t.crossOrigin);C.d.m(e,{as:typeof t.as=="string"&&t.as!=="script"?t.as:void 0,crossOrigin:r,integrity:typeof t.integrity=="string"?t.integrity:void 0})}else C.d.m(e)};k.requestFormReset=function(e){C.d.r(e)};k.unstable_batchedUpdates=function(e,t){return e(t)};k.useFormState=function(e,t,r){return Y.H.useFormState(e,t,r)};k.useFormStatus=function(){return Y.H.useHostTransitionStatus()};k.version="19.0.0-rc-1460d67c-20241003";function at(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(at)}catch(e){console.error(e)}}at(),rt.exports=k;var it=rt.exports;const tr=Nt(it),rr=Qt({__proto__:null,default:tr},[it]);/**
|
|
10
|
+
* React Router DOM v6.26.2
|
|
11
|
+
*
|
|
12
|
+
* Copyright (c) Remix Software Inc.
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the MIT license found in the
|
|
15
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
16
|
+
*
|
|
17
|
+
* @license MIT
|
|
18
|
+
*/function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},D.apply(this,arguments)}function Le(e,t){if(e==null)return{};var r={},n=Object.keys(e),a,i;for(i=0;i<n.length;i++)a=n[i],!(t.indexOf(a)>=0)&&(r[a]=e[a]);return r}const ee="get",ye="application/x-www-form-urlencoded";function se(e){return e!=null&&typeof e.tagName=="string"}function nr(e){return se(e)&&e.tagName.toLowerCase()==="button"}function ar(e){return se(e)&&e.tagName.toLowerCase()==="form"}function ir(e){return se(e)&&e.tagName.toLowerCase()==="input"}function or(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function lr(e,t){return e.button===0&&(!t||t==="_self")&&!or(e)}function Ee(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map(a=>[r,a]):[[r,n]])},[]))}function sr(e,t){let r=Ee(e);return t&&t.forEach((n,a)=>{r.has(a)||t.getAll(a).forEach(i=>{r.append(a,i)})}),r}let W=null;function ur(){if(W===null)try{new FormData(document.createElement("form"),0),W=!1}catch{W=!0}return W}const cr=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function pe(e){return e!=null&&!cr.has(e)?null:e}function dr(e,t){let r,n,a,i,u;if(ar(e)){let l=e.getAttribute("action");n=l?U(l,t):null,r=e.getAttribute("method")||ee,a=pe(e.getAttribute("enctype"))||ye,i=new FormData(e)}else if(nr(e)||ir(e)&&(e.type==="submit"||e.type==="image")){let l=e.form;if(l==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let s=e.getAttribute("formaction")||l.getAttribute("action");if(n=s?U(s,t):null,r=e.getAttribute("formmethod")||l.getAttribute("method")||ee,a=pe(e.getAttribute("formenctype"))||pe(l.getAttribute("enctype"))||ye,i=new FormData(l,e),!ur()){let{name:c,type:m,value:f}=e;if(m==="image"){let h=c?c+".":"";i.append(h+"x","0"),i.append(h+"y","0")}else c&&i.append(c,f)}}else{if(se(e))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');r=ee,n=null,a=ye,u=e}return i&&a==="text/plain"&&(u=i,i=void 0),{action:n,method:r.toLowerCase(),encType:a,formData:i,body:u}}const fr=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],hr=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],mr=["fetcherKey","navigate","reloadDocument","replace","state","method","action","onSubmit","relative","preventScrollReset","unstable_viewTransition"],yr="6";try{window.__reactRouterVersion=yr}catch{}const ot=o.createContext({isTransitioning:!1}),lt=o.createContext(new Map),pr="startTransition",Ue=Ze[pr],vr="flushSync",Me=rr[vr],gr="useId",He=Ze[gr];function wr(e){Ue?Ue(e):e()}function B(e){Me?Me(e):e()}let Er=class{constructor(){this.status="pending",this.promise=new Promise((t,r)=>{this.resolve=n=>{this.status==="pending"&&(this.status="resolved",t(n))},this.reject=n=>{this.status==="pending"&&(this.status="rejected",r(n))}})}};function Wn(e){let{fallbackElement:t,router:r,future:n}=e,[a,i]=o.useState(r.state),[u,l]=o.useState(),[s,c]=o.useState({isTransitioning:!1}),[m,f]=o.useState(),[h,p]=o.useState(),[d,E]=o.useState(),R=o.useRef(new Map),{v7_startTransition:S}=n||{},v=o.useCallback(b=>{S?wr(b):b()},[S]),w=o.useCallback((b,L)=>{let{deletedFetchers:T,unstable_flushSync:A,unstable_viewTransitionOpts:P}=L;T.forEach(F=>R.current.delete(F)),b.fetchers.forEach((F,N)=>{F.data!==void 0&&R.current.set(N,F.data)});let he=r.window==null||r.window.document==null||typeof r.window.document.startViewTransition!="function";if(!P||he){A?B(()=>i(b)):v(()=>i(b));return}if(A){B(()=>{h&&(m&&m.resolve(),h.skipTransition()),c({isTransitioning:!0,flushSync:!0,currentLocation:P.currentLocation,nextLocation:P.nextLocation})});let F=r.window.document.startViewTransition(()=>{B(()=>i(b))});F.finished.finally(()=>{B(()=>{f(void 0),p(void 0),l(void 0),c({isTransitioning:!1})})}),B(()=>p(F));return}h?(m&&m.resolve(),h.skipTransition(),E({state:b,currentLocation:P.currentLocation,nextLocation:P.nextLocation})):(l(b),c({isTransitioning:!0,flushSync:!1,currentLocation:P.currentLocation,nextLocation:P.nextLocation}))},[r.window,h,m,R,v]);o.useLayoutEffect(()=>r.subscribe(w),[r,w]),o.useEffect(()=>{s.isTransitioning&&!s.flushSync&&f(new Er)},[s]),o.useEffect(()=>{if(m&&u&&r.window){let b=u,L=m.promise,T=r.window.document.startViewTransition(async()=>{v(()=>i(b)),await L});T.finished.finally(()=>{f(void 0),p(void 0),l(void 0),c({isTransitioning:!1})}),p(T)}},[v,u,m,r.window]),o.useEffect(()=>{m&&u&&a.location.key===u.location.key&&m.resolve()},[m,h,a.location,u]),o.useEffect(()=>{!s.isTransitioning&&d&&(l(d.state),c({isTransitioning:!0,flushSync:!1,currentLocation:d.currentLocation,nextLocation:d.nextLocation}),E(void 0))},[s.isTransitioning,d]),o.useEffect(()=>{},[]);let y=o.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:b=>r.navigate(b),push:(b,L,T)=>r.navigate(b,{state:L,preventScrollReset:T==null?void 0:T.preventScrollReset}),replace:(b,L,T)=>r.navigate(b,{replace:!0,state:L,preventScrollReset:T==null?void 0:T.preventScrollReset})}),[r]),_=r.basename||"/",g=o.useMemo(()=>({router:r,navigator:y,static:!1,basename:_}),[r,y,_]),x=o.useMemo(()=>({v7_relativeSplatPath:r.future.v7_relativeSplatPath}),[r.future.v7_relativeSplatPath]);return o.createElement(o.Fragment,null,o.createElement(_e.Provider,{value:g},o.createElement(ie.Provider,{value:a},o.createElement(lt.Provider,{value:R.current},o.createElement(ot.Provider,{value:s},o.createElement(Ft,{basename:_,location:a.location,navigationType:a.historyAction,navigator:y,future:x},a.initialized||r.future.v7_partialHydration?o.createElement(Sr,{routes:r.routes,future:r.future,state:a}):t))))),null)}const Sr=o.memo(Rr);function Rr(e){let{routes:t,future:r,state:n}=e;return It(t,void 0,n,r)}const br=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",_r=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,st=o.forwardRef(function(t,r){let{onClick:n,relative:a,reloadDocument:i,replace:u,state:l,target:s,to:c,preventScrollReset:m,unstable_viewTransition:f}=t,h=Le(t,fr),{basename:p}=o.useContext(K),d,E=!1;if(typeof c=="string"&&_r.test(c)&&(d=c,br))try{let w=new URL(window.location.href),y=c.startsWith("//")?new URL(w.protocol+c):new URL(c),_=U(y.pathname,p);y.origin===w.origin&&_!=null?c=_+y.search+y.hash:E=!0}catch{}let R=xe(c,{relative:a}),S=Lr(c,{replace:u,state:l,target:s,preventScrollReset:m,relative:a,unstable_viewTransition:f});function v(w){n&&n(w),w.defaultPrevented||S(w)}return o.createElement("a",D({},h,{href:d||R,onClick:E||i?n:v,ref:r,target:s}))}),xr=o.forwardRef(function(t,r){let{"aria-current":n="page",caseSensitive:a=!1,className:i="",end:u=!1,style:l,to:s,unstable_viewTransition:c,children:m}=t,f=Le(t,hr),h=oe(s,{relative:f.relative}),p=M(),d=o.useContext(ie),{navigator:E,basename:R}=o.useContext(K),S=d!=null&&Ar(h)&&c===!0,v=E.encodeLocation?E.encodeLocation(h).pathname:h.pathname,w=p.pathname,y=d&&d.navigation&&d.navigation.location?d.navigation.location.pathname:null;a||(w=w.toLowerCase(),y=y?y.toLowerCase():null,v=v.toLowerCase()),y&&R&&(y=U(y,R)||y);const _=v!=="/"&&v.endsWith("/")?v.length-1:v.length;let g=w===v||!u&&w.startsWith(v)&&w.charAt(_)==="/",x=y!=null&&(y===v||!u&&y.startsWith(v)&&y.charAt(v.length)==="/"),b={isActive:g,isPending:x,isTransitioning:S},L=g?n:void 0,T;typeof i=="function"?T=i(b):T=[i,g?"active":null,x?"pending":null,S?"transitioning":null].filter(Boolean).join(" ");let A=typeof l=="function"?l(b):l;return o.createElement(st,D({},f,{"aria-current":L,className:T,ref:r,style:A,to:s,unstable_viewTransition:c}),typeof m=="function"?m(b):m)}),ut=o.forwardRef((e,t)=>{let{fetcherKey:r,navigate:n,reloadDocument:a,replace:i,state:u,method:l=ee,action:s,onSubmit:c,relative:m,preventScrollReset:f,unstable_viewTransition:h}=e,p=Le(e,mr),d=dt(),E=Pr(s,{relative:m}),R=l.toLowerCase()==="get"?"get":"post",S=v=>{if(c&&c(v),v.defaultPrevented)return;v.preventDefault();let w=v.nativeEvent.submitter,y=(w==null?void 0:w.getAttribute("formmethod"))||l;d(w||v.currentTarget,{fetcherKey:r,method:y,navigate:n,replace:i,state:u,relative:m,preventScrollReset:f,unstable_viewTransition:h})};return o.createElement("form",D({ref:t,method:R,action:E,onSubmit:a?c:S},p))});var H;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(H||(H={}));var V;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(V||(V={}));function ue(e){let t=o.useContext(_e);return t||$(!1),t}function Te(e){let t=o.useContext(ie);return t||$(!1),t}function Lr(e,t){let{target:r,replace:n,state:a,preventScrollReset:i,relative:u,unstable_viewTransition:l}=t===void 0?{}:t,s=Ge(),c=M(),m=oe(e,{relative:u});return o.useCallback(f=>{if(lr(f,r)){f.preventDefault();let h=n!==void 0?n:we(c)===we(m);s(e,{replace:h,state:a,preventScrollReset:i,relative:u,unstable_viewTransition:l})}},[c,s,m,n,a,r,e,i,u,l])}function Gn(e){let t=o.useRef(Ee(e)),r=o.useRef(!1),n=M(),a=o.useMemo(()=>sr(n.search,r.current?null:t.current),[n.search]),i=Ge(),u=o.useCallback((l,s)=>{const c=Ee(typeof l=="function"?l(a):l);r.current=!0,i("?"+c,s)},[i,a]);return[a,u]}function Tr(){if(typeof document>"u")throw new Error("You are calling submit during the server render. Try calling submit within a `useEffect` or callback instead.")}let Or=0,ct=()=>"__"+String(++Or)+"__";function dt(){let{router:e}=ue(H.UseSubmit),{basename:t}=o.useContext(K),r=jt();return o.useCallback(function(n,a){a===void 0&&(a={}),Tr();let{action:i,method:u,encType:l,formData:s,body:c}=dr(n,t);if(a.navigate===!1){let m=a.fetcherKey||ct();e.fetch(m,r,a.action||i,{preventScrollReset:a.preventScrollReset,formData:s,body:c,formMethod:a.method||u,formEncType:a.encType||l,unstable_flushSync:a.unstable_flushSync})}else e.navigate(a.action||i,{preventScrollReset:a.preventScrollReset,formData:s,body:c,formMethod:a.method||u,formEncType:a.encType||l,replace:a.replace,state:a.state,fromRouteId:r,unstable_flushSync:a.unstable_flushSync,unstable_viewTransition:a.unstable_viewTransition})},[e,t,r])}function Pr(e,t){let{relative:r}=t===void 0?{}:t,{basename:n}=o.useContext(K),a=o.useContext(Qe);a||$(!1);let[i]=a.matches.slice(-1),u=D({},oe(e||".",{relative:r})),l=M();if(e==null){u.search=l.search;let s=new URLSearchParams(u.search);s.has("index")&&s.get("index")===""&&(s.delete("index"),u.search=s.toString()?"?"+s.toString():"")}return(!e||e===".")&&i.route.index&&(u.search=u.search?u.search.replace(/^\?/,"?index&"):"?index"),n!=="/"&&(u.pathname=u.pathname==="/"?n:$t([n,u.pathname])),we(u)}function Cr(e){var t;let{key:r}=e===void 0?{}:e,{router:n}=ue(H.UseFetcher),a=Te(V.UseFetcher),i=o.useContext(lt),u=o.useContext(Qe),l=(t=u.matches[u.matches.length-1])==null?void 0:t.route.id;i||$(!1),u||$(!1),l==null&&$(!1);let s=He?He():"",[c,m]=o.useState(r||s);r&&r!==c?m(r):c||m(ct()),o.useEffect(()=>(n.getFetcher(c),()=>{n.deleteFetcher(c)}),[n,c]);let f=o.useCallback((v,w)=>{l||$(!1),n.fetch(c,l,v,w)},[c,l,n]),h=dt(),p=o.useCallback((v,w)=>{h(v,D({},w,{navigate:!1,fetcherKey:c}))},[c,h]),d=o.useMemo(()=>o.forwardRef((w,y)=>o.createElement(ut,D({},w,{navigate:!1,fetcherKey:c,ref:y}))),[c]),E=a.fetchers.get(c)||Ut,R=i.get(c);return o.useMemo(()=>D({Form:d,submit:p,load:f},E,{data:R}),[d,p,f,E,R])}function Qn(){let e=Te(V.UseFetchers);return Array.from(e.fetchers.entries()).map(t=>{let[r,n]=t;return D({},n,{key:r})})}const ze="react-router-scroll-positions";let G={};function Zn(e){let{getKey:t,storageKey:r}=e===void 0?{}:e,{router:n}=ue(H.UseScrollRestoration),{restoreScrollPosition:a,preventScrollReset:i}=Te(V.UseScrollRestoration),{basename:u}=o.useContext(K),l=M(),s=Mt(),c=Ht();o.useEffect(()=>(window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration="auto"}),[]),kr(o.useCallback(()=>{if(c.state==="idle"){let m=(t?t(l,s):null)||l.key;G[m]=window.scrollY}try{sessionStorage.setItem(r||ze,JSON.stringify(G))}catch{}window.history.scrollRestoration="auto"},[r,t,c.state,l,s])),typeof document<"u"&&(o.useLayoutEffect(()=>{try{let m=sessionStorage.getItem(r||ze);m&&(G=JSON.parse(m))}catch{}},[r]),o.useLayoutEffect(()=>{let m=t&&u!=="/"?(h,p)=>t(D({},h,{pathname:U(h.pathname,u)||h.pathname}),p):t,f=n==null?void 0:n.enableScrollRestoration(G,()=>window.scrollY,m);return()=>f&&f()},[n,u,t]),o.useLayoutEffect(()=>{if(a!==!1){if(typeof a=="number"){window.scrollTo(0,a);return}if(l.hash){let m=document.getElementById(decodeURIComponent(l.hash.slice(1)));if(m){m.scrollIntoView();return}}i!==!0&&window.scrollTo(0,0)}},[l,a,i]))}function kr(e,t){let{capture:r}={};o.useEffect(()=>{let n=r!=null?{capture:r}:void 0;return window.addEventListener("pagehide",e,n),()=>{window.removeEventListener("pagehide",e,n)}},[e,r])}function Ar(e,t){t===void 0&&(t={});let r=o.useContext(ot);r==null&&$(!1);let{basename:n}=ue(H.useViewTransitionState),a=oe(e,{relative:t.relative});if(!r.isTransitioning)return!1;let i=U(r.currentLocation.pathname,n)||r.currentLocation.pathname,u=U(r.nextLocation.pathname,n)||r.nextLocation.pathname;return $e(a.pathname,u)!=null||$e(a.pathname,i)!=null}var Dr=-1,Nr=-2,Fr=-3,Ir=-4,jr=-5,$r=-6,Ur=-7,Mr="B",Hr="D",ft="E",zr="M",Br="N",ht="P",Jr="R",Yr="S",Vr="Y",Kr="U",Xr="Z",mt=class{constructor(){X(this,"promise");X(this,"resolve");X(this,"reject");this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}};function Wr(){const e=new TextDecoder;let t="";return new TransformStream({transform(r,n){const a=e.decode(r,{stream:!0}),i=(t+a).split(`
|
|
19
|
+
`);t=i.pop()||"";for(const u of i)n.enqueue(u)},flush(r){t&&r.enqueue(t)}})}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var ve=typeof window<"u"?window:typeof globalThis<"u"?globalThis:void 0;function Se(e){const{hydrated:t,values:r}=this;if(typeof e=="number")return Be.call(this,e);if(!Array.isArray(e)||!e.length)throw new SyntaxError;const n=r.length;for(const a of e)r.push(a);return t.length=r.length,Be.call(this,n)}function Be(e){const{hydrated:t,values:r,deferred:n,plugins:a}=this;let i;const u=[[e,s=>{i=s}]];let l=[];for(;u.length>0;){const[s,c]=u.pop();switch(s){case Ur:c(void 0);continue;case jr:c(null);continue;case Nr:c(NaN);continue;case $r:c(1/0);continue;case Fr:c(-1/0);continue;case Ir:c(-0);continue}if(t[s]){c(t[s]);continue}const m=r[s];if(!m||typeof m!="object"){t[s]=m,c(m);continue}if(Array.isArray(m))if(typeof m[0]=="string"){const[f,h,p]=m;switch(f){case Hr:c(t[s]=new Date(h));continue;case Kr:c(t[s]=new URL(h));continue;case Mr:c(t[s]=BigInt(h));continue;case Jr:c(t[s]=new RegExp(h,p));continue;case Vr:c(t[s]=Symbol.for(h));continue;case Yr:const d=new Set;t[s]=d;for(let y=1;y<m.length;y++)u.push([m[y],_=>{d.add(_)}]);c(d);continue;case zr:const E=new Map;t[s]=E;for(let y=1;y<m.length;y+=2){const _=[];u.push([m[y+1],g=>{_[1]=g}]),u.push([m[y],g=>{_[0]=g}]),l.push(()=>{E.set(_[0],_[1])})}c(E);continue;case Br:const R=Object.create(null);t[s]=R;for(const y of Object.keys(h).reverse()){const _=[];u.push([h[y],g=>{_[1]=g}]),u.push([Number(y.slice(1)),g=>{_[0]=g}]),l.push(()=>{R[_[0]]=_[1]})}c(R);continue;case ht:if(t[h])c(t[s]=t[h]);else{const y=new mt;n[h]=y,c(t[s]=y.promise)}continue;case ft:const[,S,v]=m;let w=v&&ve&&ve[v]?new ve[v](S):new Error(S);t[s]=w,c(w);continue;case Xr:c(t[s]=t[h]);continue;default:if(Array.isArray(a)){const y=[],_=m.slice(1);for(let g=0;g<_.length;g++){const x=_[g];u.push([x,b=>{y[g]=b}])}l.push(()=>{for(const g of a){const x=g(m[0],...y);if(x){c(t[s]=x.value);return}}throw new SyntaxError});continue}throw new SyntaxError}}else{const f=[];t[s]=f;for(let h=0;h<m.length;h++){const p=m[h];p!==Dr&&u.push([p,d=>{f[h]=d}])}c(f);continue}else{const f={};t[s]=f;for(const h of Object.keys(m).reverse()){const p=[];u.push([m[h],d=>{p[1]=d}]),u.push([Number(h.slice(1)),d=>{p[0]=d}]),l.push(()=>{f[p[0]]=p[1]})}c(f);continue}}for(;l.length>0;)l.pop()();return i}async function Gr(e,t){const{plugins:r}=t??{},n=new mt,a=e.pipeThrough(Wr()).getReader(),i={values:[],hydrated:[],deferred:{},plugins:r},u=await Qr.call(i,a);let l=n.promise;return u.done?n.resolve():l=Zr.call(i,a).then(n.resolve).catch(s=>{for(const c of Object.values(i.deferred))c.reject(s);n.reject(s)}),{done:l.then(()=>a.closed),value:u.value}}async function Qr(e){const t=await e.read();if(!t.value)throw new SyntaxError;let r;try{r=JSON.parse(t.value)}catch{throw new SyntaxError}return{done:t.done,value:Se.call(this,r)}}async function Zr(e){let t=await e.read();for(;!t.done;){if(!t.value)continue;const r=t.value;switch(r[0]){case ht:{const n=r.indexOf(":"),a=Number(r.slice(1,n)),i=this.deferred[a];if(!i)throw new Error(`Deferred ID ${a} not found in stream`);const u=r.slice(n+1);let l;try{l=JSON.parse(u)}catch{throw new SyntaxError}const s=Se.call(this,l);i.resolve(s);break}case ft:{const n=r.indexOf(":"),a=Number(r.slice(1,n)),i=this.deferred[a];if(!i)throw new Error(`Deferred ID ${a} not found in stream`);const u=r.slice(n+1);let l;try{l=JSON.parse(u)}catch{throw new SyntaxError}const s=Se.call(this,l);i.reject(s);break}default:throw new SyntaxError}t=await e.read()}}/**
|
|
20
|
+
* @remix-run/server-runtime v2.12.1
|
|
21
|
+
*
|
|
22
|
+
* Copyright (c) Remix Software Inc.
|
|
23
|
+
*
|
|
24
|
+
* This source code is licensed under the MIT license found in the
|
|
25
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
26
|
+
*
|
|
27
|
+
* @license MIT
|
|
28
|
+
*/const yt=Symbol("SingleFetchRedirect");/**
|
|
29
|
+
* @remix-run/react v2.12.1
|
|
30
|
+
*
|
|
31
|
+
* Copyright (c) Remix Software Inc.
|
|
32
|
+
*
|
|
33
|
+
* This source code is licensed under the MIT license found in the
|
|
34
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
35
|
+
*
|
|
36
|
+
* @license MIT
|
|
37
|
+
*/function O(){return O=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},O.apply(this,arguments)}/**
|
|
38
|
+
* @remix-run/react v2.12.1
|
|
39
|
+
*
|
|
40
|
+
* Copyright (c) Remix Software Inc.
|
|
41
|
+
*
|
|
42
|
+
* This source code is licensed under the MIT license found in the
|
|
43
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
44
|
+
*
|
|
45
|
+
* @license MIT
|
|
46
|
+
*/function I(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}/**
|
|
47
|
+
* @remix-run/react v2.12.1
|
|
48
|
+
*
|
|
49
|
+
* Copyright (c) Remix Software Inc.
|
|
50
|
+
*
|
|
51
|
+
* This source code is licensed under the MIT license found in the
|
|
52
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
53
|
+
*
|
|
54
|
+
* @license MIT
|
|
55
|
+
*/async function pt(e,t){if(e.id in t)return t[e.id];try{let r=await import(e.module);return t[e.id]=r,r}catch(r){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(r),window.__remixContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}/**
|
|
56
|
+
* @remix-run/react v2.12.1
|
|
57
|
+
*
|
|
58
|
+
* Copyright (c) Remix Software Inc.
|
|
59
|
+
*
|
|
60
|
+
* This source code is licensed under the MIT license found in the
|
|
61
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
62
|
+
*
|
|
63
|
+
* @license MIT
|
|
64
|
+
*/function qr(e,t,r){let n=e.map(i=>{var u;let l=t[i.route.id],s=r.routes[i.route.id];return[s.css?s.css.map(c=>({rel:"stylesheet",href:c})):[],(l==null||(u=l.links)===null||u===void 0?void 0:u.call(l))||[]]}).flat(2),a=on(e,r);return gt(n,a)}async function vt(e,t){var r,n;if(!e.css&&!t.links||!sn())return;let a=[((r=e.css)===null||r===void 0?void 0:r.map(l=>({rel:"stylesheet",href:l})))??[],((n=t.links)===null||n===void 0?void 0:n.call(t))??[]].flat(1);if(a.length===0)return;let i=[];for(let l of a)!Oe(l)&&l.rel==="stylesheet"&&i.push({...l,rel:"preload",as:"style"});let u=i.filter(l=>(!l.media||window.matchMedia(l.media).matches)&&!document.querySelector(`link[rel="stylesheet"][href="${l.href}"]`));await Promise.all(u.map(en))}async function en(e){return new Promise(t=>{let r=document.createElement("link");Object.assign(r,e);function n(){document.head.contains(r)&&document.head.removeChild(r)}r.onload=()=>{n(),t()},r.onerror=()=>{n(),t()},document.head.appendChild(r)})}function Oe(e){return e!=null&&typeof e.page=="string"}function tn(e){return e==null?!1:e.href==null?e.rel==="preload"&&typeof e.imageSrcSet=="string"&&typeof e.imageSizes=="string":typeof e.rel=="string"&&typeof e.href=="string"}async function rn(e,t,r){let n=await Promise.all(e.map(async a=>{let i=await pt(t.routes[a.route.id],r);return i.links?i.links():[]}));return gt(n.flat(1).filter(tn).filter(a=>a.rel==="stylesheet"||a.rel==="preload").map(a=>a.rel==="stylesheet"?{...a,rel:"prefetch",as:"style"}:{...a,rel:"prefetch"}))}function Je(e,t,r,n,a,i){let u=wt(e),l=(m,f)=>r[f]?m.route.id!==r[f].route.id:!0,s=(m,f)=>{var h;return r[f].pathname!==m.pathname||((h=r[f].route.path)===null||h===void 0?void 0:h.endsWith("*"))&&r[f].params["*"]!==m.params["*"]};return i==="data"&&a.search!==u.search?t.filter((m,f)=>{if(!n.routes[m.route.id].hasLoader)return!1;if(l(m,f)||s(m,f))return!0;if(m.route.shouldRevalidate){var p;let d=m.route.shouldRevalidate({currentUrl:new URL(a.pathname+a.search+a.hash,window.origin),currentParams:((p=r[0])===null||p===void 0?void 0:p.params)||{},nextUrl:new URL(e,window.origin),nextParams:m.params,defaultShouldRevalidate:!0});if(typeof d=="boolean")return d}return!0}):t.filter((m,f)=>{let h=n.routes[m.route.id];return(i==="assets"||h.hasLoader)&&(l(m,f)||s(m,f))})}function nn(e,t,r){let n=wt(e);return Pe(t.filter(a=>r.routes[a.route.id].hasLoader&&!r.routes[a.route.id].hasClientLoader).map(a=>{let{pathname:i,search:u}=n,l=new URLSearchParams(u);return l.set("_data",a.route.id),`${i}?${l}`}))}function an(e,t){return Pe(e.map(r=>{let n=t.routes[r.route.id],a=[n.module];return n.imports&&(a=a.concat(n.imports)),a}).flat(1))}function on(e,t){return Pe(e.map(r=>{let n=t.routes[r.route.id],a=[n.module];return n.imports&&(a=a.concat(n.imports)),a}).flat(1))}function Pe(e){return[...new Set(e)]}function ln(e){let t={},r=Object.keys(e).sort();for(let n of r)t[n]=e[n];return t}function gt(e,t){let r=new Set,n=new Set(t);return e.reduce((a,i)=>{if(t&&!Oe(i)&&i.as==="script"&&i.href&&n.has(i.href))return a;let l=JSON.stringify(ln(i));return r.has(l)||(r.add(l),a.push({key:l,link:i})),a},[])}function wt(e){let t=zt(e);return t.search===void 0&&(t.search=""),t}let Q;function sn(){if(Q!==void 0)return Q;let e=document.createElement("link");return Q=e.relList.supports("preload"),e=null,Q}/**
|
|
65
|
+
* @remix-run/react v2.12.1
|
|
66
|
+
*
|
|
67
|
+
* Copyright (c) Remix Software Inc.
|
|
68
|
+
*
|
|
69
|
+
* This source code is licensed under the MIT license found in the
|
|
70
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
71
|
+
*
|
|
72
|
+
* @license MIT
|
|
73
|
+
*/const un={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},cn=/[&><\u2028\u2029]/g;function Z(e){return e.replace(cn,t=>un[t])}function Ye(e){return{__html:e}}/**
|
|
74
|
+
* @remix-run/react v2.12.1
|
|
75
|
+
*
|
|
76
|
+
* Copyright (c) Remix Software Inc.
|
|
77
|
+
*
|
|
78
|
+
* This source code is licensed under the MIT license found in the
|
|
79
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
80
|
+
*
|
|
81
|
+
* @license MIT
|
|
82
|
+
*/function dn(e){return e.headers.get("X-Remix-Catch")!=null}function fn(e){return e.headers.get("X-Remix-Error")!=null}function hn(e){return Ce(e)&&e.status>=400&&e.headers.get("X-Remix-Error")==null&&e.headers.get("X-Remix-Catch")==null&&e.headers.get("X-Remix-Response")==null}function mn(e){return e.headers.get("X-Remix-Redirect")!=null}function yn(e){var t;return!!((t=e.headers.get("Content-Type"))!==null&&t!==void 0&&t.match(/text\/remix-deferred/))}function Ce(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function pn(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}async function Et(e,t,r=0){let n=new URL(e.url);n.searchParams.set("_data",t),r>0&&await new Promise(l=>setTimeout(l,5**r*10));let a=await ce(e),i=window.__remixRevalidation,u=await fetch(n.href,a).catch(l=>{if(typeof i=="number"&&i===window.__remixRevalidation&&(l==null?void 0:l.name)==="TypeError"&&r<3)return Et(e,t,r+1);throw l});if(fn(u)){let l=await u.json(),s=new Error(l.message);return s.stack=l.stack,s}if(hn(u)){let l=await u.text(),s=new Error(l);return s.stack=void 0,s}return u}async function ce(e){let t={signal:e.signal};if(e.method!=="GET"){t.method=e.method;let r=e.headers.get("Content-Type");r&&/\bapplication\/json\b/.test(r)?(t.headers={"Content-Type":r},t.body=JSON.stringify(await e.json())):r&&/\btext\/plain\b/.test(r)?(t.headers={"Content-Type":r},t.body=await e.text()):r&&/\bapplication\/x-www-form-urlencoded\b/.test(r)?t.body=new URLSearchParams(await e.text()):t.body=await e.formData()}return t}const vn="__deferred_promise:";async function gn(e){if(!e)throw new Error("parseDeferredReadableStream requires stream argument");let t,r={};try{let n=wn(e),i=(await n.next()).value;if(!i)throw new Error("no critical data");let u=JSON.parse(i);if(typeof u=="object"&&u!==null)for(let[l,s]of Object.entries(u))typeof s!="string"||!s.startsWith(vn)||(t=t||{},t[l]=new Promise((c,m)=>{r[l]={resolve:f=>{c(f),delete r[l]},reject:f=>{m(f),delete r[l]}}}));return(async()=>{try{for await(let l of n){let[s,...c]=l.split(":"),m=c.join(":"),f=JSON.parse(m);if(s==="data")for(let[h,p]of Object.entries(f))r[h]&&r[h].resolve(p);else if(s==="error")for(let[h,p]of Object.entries(f)){let d=new Error(p.message);d.stack=p.stack,r[h]&&r[h].reject(d)}}for(let[l,s]of Object.entries(r))s.reject(new Bt(`Deferred ${l} will never be resolved`))}catch(l){for(let s of Object.values(r))s.reject(l)}})(),new Jt({...u,...t})}catch(n){for(let a of Object.values(r))a.reject(n);throw n}}async function*wn(e){let t=e.getReader(),r=[],n=[],a=!1,i=new TextEncoder,u=new TextDecoder,l=async()=>{if(n.length>0)return n.shift();for(;!a&&n.length===0;){let c=await t.read();if(c.done){a=!0;break}r.push(c.value);try{let f=u.decode(Ve(...r)).split(`
|
|
83
|
+
|
|
84
|
+
`);if(f.length>=2&&(n.push(...f.slice(0,-1)),r=[i.encode(f.slice(-1).join(`
|
|
85
|
+
|
|
86
|
+
`))]),n.length>0)break}catch{continue}}return n.length>0||r.length>0&&(n=u.decode(Ve(...r)).split(`
|
|
87
|
+
|
|
88
|
+
`).filter(m=>m),r=[]),n.shift()},s=await l();for(;s;)yield s,s=await l()}function Ve(...e){let t=new Uint8Array(e.reduce((n,a)=>n+a.length,0)),r=0;for(let n of e)t.set(n,r),r+=n.length;return t}/**
|
|
89
|
+
* @remix-run/react v2.12.1
|
|
90
|
+
*
|
|
91
|
+
* Copyright (c) Remix Software Inc.
|
|
92
|
+
*
|
|
93
|
+
* This source code is licensed under the MIT license found in the
|
|
94
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
95
|
+
*
|
|
96
|
+
* @license MIT
|
|
97
|
+
*/function qn(e,t,r){return async({request:n,matches:a,fetcherKey:i})=>n.method!=="GET"?En(n,a):i?Rn(n,a):Sn(e,t,r(),n,a)}async function En(e,t){let r=t.find(i=>i.shouldLoad);I(r,"No action match found");let n,a=await r.resolve(async i=>await i(async()=>{let l=de(e.url),s=await ce(e),{data:c,status:m}=await ke(l,s);return n=m,Re(c,r.route.id)}));return Ce(a.result)||qe(a.result)?{[r.route.id]:a}:{[r.route.id]:{type:a.type,result:Yt(a.result,n)}}}async function Sn(e,t,r,n,a){let i=new Set,u=!1,l=a.map(()=>Ke()),s=Promise.all(l.map(d=>d.promise)),c=Ke(),m=Rt(de(n.url)),f=await ce(n),h={},p=Promise.all(a.map(async(d,E)=>d.resolve(async R=>{if(l[E].resolve(),!d.shouldLoad){var S;if(!r.state.initialized)return;if(d.route.id in r.state.loaderData&&e.routes[d.route.id].hasLoader&&(S=t[d.route.id])!==null&&S!==void 0&&S.shouldRevalidate){u=!0;return}}if(e.routes[d.route.id].hasClientLoader){e.routes[d.route.id].hasLoader&&(u=!0);try{let v=await St(R,m,f,d.route.id);h[d.route.id]={type:"data",result:v}}catch(v){h[d.route.id]={type:"error",result:v}}return}e.routes[d.route.id].hasLoader&&i.add(d.route.id);try{let v=await R(async()=>{let w=await c.promise;return bt(w,d.route.id)});h[d.route.id]={type:"data",result:v}}catch(v){h[d.route.id]={type:"error",result:v}}})));if(await s,(!r.state.initialized||i.size===0)&&!window.__remixHdrActive)c.resolve({});else try{u&&i.size>0&&m.searchParams.set("_routes",a.filter(E=>i.has(E.route.id)).map(E=>E.route.id).join(","));let d=await ke(m,f);c.resolve(d.data)}catch(d){c.reject(d)}return await p,h}async function Rn(e,t){let r=t.find(a=>a.shouldLoad);I(r,"No fetcher match found");let n=await r.resolve(async a=>{let i=Rt(de(e.url)),u=await ce(e);return St(a,i,u,r.route.id)});return{[r.route.id]:n}}function St(e,t,r,n){return e(async()=>{let a=new URL(t);a.searchParams.set("_routes",n);let{data:i}=await ke(a,r);return bt(i,n)})}function Rt(e){let t=e.searchParams.getAll("index");e.searchParams.delete("index");let r=[];for(let n of t)n&&r.push(n);for(let n of r)e.searchParams.append("index",n);return e}function de(e){let t=typeof e=="string"?new URL(e,window.location.origin):e;return t.pathname==="/"?t.pathname="_root.data":t.pathname=`${t.pathname.replace(/\/$/,"")}.data`,t}async function ke(e,t){let r=await fetch(e,t);I(r.body,"No response body to decode");try{let n=await bn(r.body,window);return{status:r.status,data:n.value}}catch(n){throw console.error(n),new Error(`Unable to decode turbo-stream response from URL: ${e.toString()}`)}}function bn(e,t){return Gr(e,{plugins:[(r,...n)=>{if(r==="SanitizedError"){let[a,i,u]=n,l=Error;a&&a in t&&typeof t[a]=="function"&&(l=t[a]);let s=new l(i);return s.stack=u,{value:s}}if(r==="ErrorResponse"){let[a,i,u]=n;return{value:new ne(i,u,a)}}if(r==="SingleFetchRedirect")return{value:{[yt]:n[0]}}},(r,n)=>{if(r==="SingleFetchFallback")return{value:void 0};if(r==="SingleFetchClassInstance")return{value:n}}]})}function bt(e,t){let r=e[yt];return r?Re(r,t):e[t]!==void 0?Re(e[t],t):null}function Re(e,t){if("error"in e)throw e.error;if("redirect"in e){let r={};return e.revalidate&&(r["X-Remix-Revalidate"]="yes"),e.reload&&(r["X-Remix-Reload-Document"]="yes"),e.replace&&(r["X-Remix-Replace"]="yes"),et(e.redirect,{status:e.status,headers:r})}else{if("data"in e)return e.data;throw new Error(`No response found for routeId "${t}"`)}}function Ke(){let e,t,r=new Promise((n,a)=>{e=async i=>{n(i);try{await r}catch{}},t=async i=>{a(i);try{await r}catch{}}});return{promise:r,resolve:e,reject:t}}/**
|
|
98
|
+
* @remix-run/react v2.12.1
|
|
99
|
+
*
|
|
100
|
+
* Copyright (c) Remix Software Inc.
|
|
101
|
+
*
|
|
102
|
+
* This source code is licensed under the MIT license found in the
|
|
103
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
104
|
+
*
|
|
105
|
+
* @license MIT
|
|
106
|
+
*/class ea extends o.Component{constructor(t){super(t),this.state={error:t.error||null,location:t.location}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location?{error:t.error||null,location:t.location}:{error:t.error||r.error,location:r.location}}render(){return this.state.error?o.createElement(_t,{error:this.state.error,isOutsideRemixApp:!0}):this.props.children}}function _t({error:e,isOutsideRemixApp:t}){console.error(e);let r=o.createElement("script",{dangerouslySetInnerHTML:{__html:`
|
|
107
|
+
console.log(
|
|
108
|
+
"💿 Hey developer 👋. You can provide a way better UX than this when your app throws errors. Check out https://remix.run/guides/errors for more information."
|
|
109
|
+
);
|
|
110
|
+
`}});if(qe(e))return o.createElement(be,{title:"Unhandled Thrown Response!"},o.createElement("h1",{style:{fontSize:"24px"}},e.status," ",e.statusText),r);let n;if(e instanceof Error)n=e;else{let a=e==null?"Unknown Error":typeof e=="object"&&"toString"in e?e.toString():JSON.stringify(e);n=new Error(a)}return o.createElement(be,{title:"Application Error!",isOutsideRemixApp:t},o.createElement("h1",{style:{fontSize:"24px"}},"Application Error"),o.createElement("pre",{style:{padding:"2rem",background:"hsla(10, 50%, 50%, 0.1)",color:"red",overflow:"auto"}},n.stack),r)}function be({title:e,renderScripts:t,isOutsideRemixApp:r,children:n}){var a;let{routeModules:i}=z();return(a=i.root)!==null&&a!==void 0&&a.Layout&&!r?n:o.createElement("html",{lang:"en"},o.createElement("head",null,o.createElement("meta",{charSet:"utf-8"}),o.createElement("meta",{name:"viewport",content:"width=device-width,initial-scale=1,viewport-fit=cover"}),o.createElement("title",null,e)),o.createElement("body",null,o.createElement("main",{style:{fontFamily:"system-ui, sans-serif",padding:"2rem"}},n,t?o.createElement(Bn,null):null)))}/**
|
|
111
|
+
* @remix-run/react v2.12.1
|
|
112
|
+
*
|
|
113
|
+
* Copyright (c) Remix Software Inc.
|
|
114
|
+
*
|
|
115
|
+
* This source code is licensed under the MIT license found in the
|
|
116
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
117
|
+
*
|
|
118
|
+
* @license MIT
|
|
119
|
+
*/function _n(){return o.createElement(be,{title:"Loading...",renderScripts:!0},o.createElement("script",{dangerouslySetInnerHTML:{__html:`
|
|
120
|
+
console.log(
|
|
121
|
+
"💿 Hey developer 👋. You can provide a way better UX than this " +
|
|
122
|
+
"when your app is loading JS modules and/or running \`clientLoader\` " +
|
|
123
|
+
"functions. Check out https://remix.run/route/hydrate-fallback " +
|
|
124
|
+
"for more information."
|
|
125
|
+
);
|
|
126
|
+
`}}))}/**
|
|
127
|
+
* @remix-run/react v2.12.1
|
|
128
|
+
*
|
|
129
|
+
* Copyright (c) Remix Software Inc.
|
|
130
|
+
*
|
|
131
|
+
* This source code is licensed under the MIT license found in the
|
|
132
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
133
|
+
*
|
|
134
|
+
* @license MIT
|
|
135
|
+
*/function xt(e){let t={};return Object.values(e).forEach(r=>{let n=r.parentId||"";t[n]||(t[n]=[]),t[n].push(r)}),t}function xn(e,t,r){let n=Lt(t),a=t.HydrateFallback&&(!r||e.id==="root")?t.HydrateFallback:e.id==="root"?_n:void 0,i=t.ErrorBoundary?t.ErrorBoundary:e.id==="root"?()=>o.createElement(_t,{error:Vt()}):void 0;return e.id==="root"&&t.Layout?{...n?{element:o.createElement(t.Layout,null,o.createElement(n,null))}:{Component:n},...i?{errorElement:o.createElement(t.Layout,null,o.createElement(i,null))}:{ErrorBoundary:i},...a?{hydrateFallbackElement:o.createElement(t.Layout,null,o.createElement(a,null))}:{HydrateFallback:a}}:{Component:n,ErrorBoundary:i,HydrateFallback:a}}function ta(e,t,r,n,a,i){return Ae(t,r,n,a,i,"",xt(t),e)}function q(e,t,r){if(r){let u=`You cannot call ${e==="action"?"serverAction()":"serverLoader()"} in SPA Mode (routeId: "${t.id}")`;throw console.error(u),new ne(400,"Bad Request",new Error(u),!0)}let a=`You are trying to call ${e==="action"?"serverAction()":"serverLoader()"} on a route that does not have a server ${e} (routeId: "${t.id}")`;if(e==="loader"&&!t.hasLoader||e==="action"&&!t.hasAction)throw console.error(a),new ne(400,"Bad Request",new Error(a),!0)}function ge(e,t){let r=e==="clientAction"?"a":"an",n=`Route "${t}" does not have ${r} ${e}, but you are trying to submit to it. To fix this, please add ${r} \`${e}\` function to the route`;throw console.error(n),new ne(405,"Method Not Allowed",new Error(n),!0)}function Ae(e,t,r,n,a,i="",u=xt(e),l){return(u[i]||[]).map(s=>{let c=t[s.id];async function m(w,y,_){if(typeof _=="function")return await _();let g=await Tn(w,s);return y?On(g):g}function f(w,y,_){return s.hasLoader?m(w,y,_):Promise.resolve(null)}function h(w,y,_){if(!s.hasAction)throw ge("action",s.id);return m(w,y,_)}async function p(w){let y=t[s.id],_=y?vt(s,y):Promise.resolve();try{return w()}finally{await _}}let d={id:s.id,index:s.index,path:s.path};if(c){var E,R,S;Object.assign(d,{...d,...xn(s,c,a),handle:c.handle,shouldRevalidate:l?Xe(s.id,c.shouldRevalidate,l):c.shouldRevalidate});let w=r==null||(E=r.loaderData)===null||E===void 0?void 0:E[s.id],y=r==null||(R=r.errors)===null||R===void 0?void 0:R[s.id],_=l==null&&(((S=c.clientLoader)===null||S===void 0?void 0:S.hydrate)===!0||!s.hasLoader);d.loader=async({request:g,params:x},b)=>{try{return await p(async()=>(I(c,"No `routeModule` available for critical-route loader"),c.clientLoader?c.clientLoader({request:g,params:x,async serverLoader(){if(q("loader",s,a),_){if(y!==void 0)throw y;return w}return f(g,!0,b)}}):a?null:f(g,!1,b)))}finally{_=!1}},d.loader.hydrate=Cn(s,c,a),d.action=({request:g,params:x},b)=>p(async()=>{if(I(c,"No `routeModule` available for critical-route action"),!c.clientAction){if(a)throw ge("clientAction",s.id);return h(g,!1,b)}return c.clientAction({request:g,params:x,async serverAction(){return q("action",s,a),h(g,!0,b)}})})}else s.hasClientLoader||(d.loader=({request:w},y)=>p(()=>a?Promise.resolve(null):f(w,!1,y))),s.hasClientAction||(d.action=({request:w},y)=>p(()=>{if(a)throw ge("clientAction",s.id);return h(w,!1,y)})),d.lazy=async()=>{let w=await Ln(s,t),y={...w};if(w.clientLoader){let _=w.clientLoader;y.loader=(g,x)=>_({...g,async serverLoader(){return q("loader",s,a),f(g.request,!0,x)}})}if(w.clientAction){let _=w.clientAction;y.action=(g,x)=>_({...g,async serverAction(){return q("action",s,a),h(g.request,!0,x)}})}return l&&(y.shouldRevalidate=Xe(s.id,w.shouldRevalidate,l)),{...y.loader?{loader:y.loader}:{},...y.action?{action:y.action}:{},hasErrorBoundary:y.hasErrorBoundary,shouldRevalidate:y.shouldRevalidate,handle:y.handle,Component:y.Component,ErrorBoundary:y.ErrorBoundary}};let v=Ae(e,t,r,n,a,s.id,u,l);return v.length>0&&(d.children=v),d})}function Xe(e,t,r){let n=!1;return a=>n?t?t(a):a.defaultShouldRevalidate:(n=!0,r.has(e))}async function Ln(e,t){let r=await pt(e,t);return await vt(e,r),{Component:Lt(r),ErrorBoundary:r.ErrorBoundary,clientAction:r.clientAction,clientLoader:r.clientLoader,handle:r.handle,links:r.links,meta:r.meta,shouldRevalidate:r.shouldRevalidate}}async function Tn(e,t){let r=await Et(e,t.id);if(r instanceof Error)throw r;if(mn(r))throw Pn(r);if(dn(r))throw r;return yn(r)&&r.body?await gn(r.body):r}function On(e){if(pn(e))return e.data;if(Ce(e)){let t=e.headers.get("Content-Type");return t&&/\bapplication\/json\b/.test(t)?e.json():e.text()}return e}function Pn(e){let t=parseInt(e.headers.get("X-Remix-Status"),10)||302,r=e.headers.get("X-Remix-Redirect"),n={},a=e.headers.get("X-Remix-Revalidate");a&&(n["X-Remix-Revalidate"]=a);let i=e.headers.get("X-Remix-Reload-Document");i&&(n["X-Remix-Reload-Document"]=i);let u=e.headers.get("X-Remix-Replace");return u&&(n["X-Remix-Replace"]=u),et(r,{status:t,headers:n})}function Lt(e){if(e.default==null)return;if(!(typeof e.default=="object"&&Object.keys(e.default).length===0))return e.default}function Cn(e,t,r){return r&&e.id!=="root"||t.clientLoader!=null&&(t.clientLoader.hydrate===!0||e.hasLoader!==!0)}/**
|
|
136
|
+
* @remix-run/react v2.12.1
|
|
137
|
+
*
|
|
138
|
+
* Copyright (c) Remix Software Inc.
|
|
139
|
+
*
|
|
140
|
+
* This source code is licensed under the MIT license found in the
|
|
141
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
142
|
+
*
|
|
143
|
+
* @license MIT
|
|
144
|
+
*/const te=new Set,kn=1e3,ae=new Set,An=7680;function De(e,t){return e.unstable_lazyRouteDiscovery===!0&&!t}function Dn(e,t){let r=new Set(t.state.matches.map(u=>u.route.id)),n=t.state.location.pathname.split("/").filter(Boolean),a=["/"];for(n.pop();n.length>0;)a.push(`/${n.join("/")}`),n.pop();a.forEach(u=>{let l=tt(t.routes,u,t.basename);l&&l.forEach(s=>r.add(s.route.id))});let i=[...r].reduce((u,l)=>Object.assign(u,{[l]:e.routes[l]}),{});return{...e,routes:i}}function ra(e,t,r,n,a){if(De(r,n))return async({path:i,patch:u})=>{ae.has(i)||await Tt([i],e,t,r,n,a,u)}}function na(e,t,r,n,a){o.useEffect(()=>{var i;if(!De(n,a)||((i=navigator.connection)===null||i===void 0?void 0:i.saveData)===!0)return;function u(f){let h=f.tagName==="FORM"?f.getAttribute("action"):f.getAttribute("href");if(!h)return;let p=new URL(h,window.location.origin);ae.has(p.pathname)||te.add(p.pathname)}async function l(){let f=Array.from(te.keys()).filter(h=>ae.has(h)?(te.delete(h),!1):!0);if(f.length!==0)try{await Tt(f,t,r,n,a,e.basename,e.patchRoutes)}catch(h){console.error("Failed to fetch manifest patches",h)}}document.body.querySelectorAll("a[data-discover], form[data-discover]").forEach(f=>u(f)),l();let s=Fn(l,100);function c(f){return f.nodeType===Node.ELEMENT_NODE}let m=new MutationObserver(f=>{let h=new Set;f.forEach(p=>{[p.target,...p.addedNodes].forEach(d=>{c(d)&&((d.tagName==="A"&&d.getAttribute("data-discover")||d.tagName==="FORM"&&d.getAttribute("data-discover"))&&h.add(d),d.tagName!=="A"&&d.querySelectorAll("a[data-discover], form[data-discover]").forEach(E=>h.add(E)))})}),h.forEach(p=>u(p)),s()});return m.observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["data-discover","href","action"]}),()=>m.disconnect()},[n,a,t,r,e])}async function Tt(e,t,r,n,a,i,u){let l=`${i??"/"}/__manifest`.replace(/\/+/g,"/"),s=new URL(l,window.location.origin);if(e.sort().forEach(d=>s.searchParams.append("p",d)),s.searchParams.set("version",t.version),s.toString().length>An){te.clear();return}let c=await fetch(s);if(c.ok){if(c.status>=400)throw new Error(await c.text())}else throw new Error(`${c.status} ${c.statusText}`);let m=await c.json(),f=new Set(Object.keys(t.routes)),h=Object.values(m).reduce((d,E)=>f.has(E.id)?d:Object.assign(d,{[E.id]:E}),{});Object.assign(t.routes,h),e.forEach(d=>Nn(d,ae));let p=new Set;Object.values(h).forEach(d=>{(!d.parentId||!h[d.parentId])&&p.add(d.parentId)}),p.forEach(d=>u(d||null,Ae(h,r,null,n,a,d)))}function Nn(e,t){if(t.size>=kn){let r=t.values().next().value;t.delete(r)}t.add(e)}function Fn(e,t){let r;return(...n)=>{window.clearTimeout(r),r=window.setTimeout(()=>e(...n),t)}}function Ot(){let e=o.useContext(_e);return I(e,"You must render this element inside a <DataRouterContext.Provider> element"),e}function fe(){let e=o.useContext(ie);return I(e,"You must render this element inside a <DataRouterStateContext.Provider> element"),e}const Pt=o.createContext(void 0);Pt.displayName="Remix";function z(){let e=o.useContext(Pt);return I(e,"You must render this element inside a <Remix> element"),e}function Ct(e,t){let[r,n]=o.useState(!1),[a,i]=o.useState(!1),{onFocus:u,onBlur:l,onMouseEnter:s,onMouseLeave:c,onTouchStart:m}=t,f=o.useRef(null);o.useEffect(()=>{if(e==="render"&&i(!0),e==="viewport"){let d=R=>{R.forEach(S=>{i(S.isIntersecting)})},E=new IntersectionObserver(d,{threshold:.5});return f.current&&E.observe(f.current),()=>{E.disconnect()}}},[e]);let h=()=>{e==="intent"&&n(!0)},p=()=>{e==="intent"&&(n(!1),i(!1))};return o.useEffect(()=>{if(r){let d=setTimeout(()=>{i(!0)},100);return()=>{clearTimeout(d)}}},[r]),[a,f,{onFocus:J(u,h),onBlur:J(l,p),onMouseEnter:J(s,h),onMouseLeave:J(c,p),onTouchStart:J(m,h)}]}const Ne=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function Fe(e,t,r){return e==="render"&&!t&&!r?"true":void 0}let In=o.forwardRef(({to:e,prefetch:t="none",discover:r="render",...n},a)=>{let i=typeof e=="string"&&Ne.test(e),u=xe(e),[l,s,c]=Ct(t,n);return o.createElement(o.Fragment,null,o.createElement(xr,O({},n,c,{ref:kt(a,s),to:e,"data-discover":Fe(r,i,n.reloadDocument)})),l&&!i?o.createElement(je,{page:u}):null)});In.displayName="NavLink";let jn=o.forwardRef(({to:e,prefetch:t="none",discover:r="render",...n},a)=>{let i=typeof e=="string"&&Ne.test(e),u=xe(e),[l,s,c]=Ct(t,n);return o.createElement(o.Fragment,null,o.createElement(st,O({},n,c,{ref:kt(a,s),to:e,"data-discover":Fe(r,i,n.reloadDocument)})),l&&!i?o.createElement(je,{page:u}):null)});jn.displayName="Link";let $n=o.forwardRef(({discover:e="render",...t},r)=>{let n=typeof t.action=="string"&&Ne.test(t.action);return o.createElement(ut,O({},t,{ref:r,"data-discover":Fe(e,n,t.reloadDocument)}))});$n.displayName="Form";function J(e,t){return r=>{e&&e(r),r.defaultPrevented||t(r)}}function Ie(e,t,r){if(r&&!re)return[e[0]];if(t){let n=e.findIndex(a=>t[a.route.id]!==void 0);return e.slice(0,n+1)}return e}function aa(){let{isSpaMode:e,manifest:t,routeModules:r,criticalCss:n}=z(),{errors:a,matches:i}=fe(),u=Ie(i,a,e),l=o.useMemo(()=>qr(u,r,t),[u,r,t]);return o.createElement(o.Fragment,null,n?o.createElement("style",{dangerouslySetInnerHTML:{__html:n}}):null,l.map(({key:s,link:c})=>Oe(c)?o.createElement(je,O({key:s},c)):o.createElement("link",O({key:s},c))))}function je({page:e,...t}){let{router:r}=Ot(),n=o.useMemo(()=>tt(r.routes,e,r.basename),[r.routes,e,r.basename]);return n?o.createElement(Mn,O({page:e,matches:n},t)):(console.warn(`Tried to prefetch ${e} but no routes matched.`),null)}function Un(e){let{manifest:t,routeModules:r}=z(),[n,a]=o.useState([]);return o.useEffect(()=>{let i=!1;return rn(e,t,r).then(u=>{i||a(u)}),()=>{i=!0}},[e,t,r]),n}function Mn({page:e,matches:t,...r}){let n=M(),{future:a,manifest:i,routeModules:u}=z(),{loaderData:l,matches:s}=fe(),c=o.useMemo(()=>Je(e,t,s,i,n,"data"),[e,t,s,i,n]),m=o.useMemo(()=>{if(!a.unstable_singleFetch)return nn(e,c,i);if(e===n.pathname+n.search+n.hash)return[];let d=new Set,E=!1;if(t.forEach(S=>{var v;i.routes[S.route.id].hasLoader&&(!c.some(w=>w.route.id===S.route.id)&&S.route.id in l&&(v=u[S.route.id])!==null&&v!==void 0&&v.shouldRevalidate||i.routes[S.route.id].hasClientLoader?E=!0:d.add(S.route.id))}),d.size===0)return[];let R=de(e);return E&&d.size>0&&R.searchParams.set("_routes",t.filter(S=>d.has(S.route.id)).map(S=>S.route.id).join(",")),[R.pathname+R.search]},[a.unstable_singleFetch,l,n,i,c,t,e,u]),f=o.useMemo(()=>Je(e,t,s,i,n,"assets"),[e,t,s,i,n]),h=o.useMemo(()=>an(f,i),[f,i]),p=Un(f);return o.createElement(o.Fragment,null,m.map(d=>o.createElement("link",O({key:d,rel:"prefetch",as:"fetch",href:d},r))),h.map(d=>o.createElement("link",O({key:d,rel:"modulepreload",href:d},r))),p.map(({key:d,link:E})=>o.createElement("link",O({key:d},E))))}function ia(){let{isSpaMode:e,routeModules:t}=z(),{errors:r,matches:n,loaderData:a}=fe(),i=M(),u=Ie(n,r,e),l=null;r&&(l=r[u[u.length-1].route.id]);let s=[],c=null,m=[];for(let f=0;f<u.length;f++){let h=u[f],p=h.route.id,d=a[p],E=h.params,R=t[p],S=[],v={id:p,data:d,meta:[],params:h.params,pathname:h.pathname,handle:h.route.handle,error:l};if(m[f]=v,R!=null&&R.meta?S=typeof R.meta=="function"?R.meta({data:d,params:E,location:i,matches:m,error:l}):Array.isArray(R.meta)?[...R.meta]:R.meta:c&&(S=[...c]),S=S||[],!Array.isArray(S))throw new Error("The route at "+h.route.path+` returns an invalid value. All route meta functions must return an array of meta objects.
|
|
145
|
+
|
|
146
|
+
To reference the meta function API, see https://remix.run/route/meta`);v.meta=S,m[f]=v,s=[...S],c=s}return o.createElement(o.Fragment,null,s.flat().map(f=>{if(!f)return null;if("tagName"in f){let{tagName:h,...p}=f;if(!Hn(h))return console.warn(`A meta object uses an invalid tagName: ${h}. Expected either 'link' or 'meta'`),null;let d=h;return o.createElement(d,O({key:JSON.stringify(p)},p))}if("title"in f)return o.createElement("title",{key:"title"},String(f.title));if("charset"in f&&(f.charSet??(f.charSet=f.charset),delete f.charset),"charSet"in f&&f.charSet!=null)return typeof f.charSet=="string"?o.createElement("meta",{key:"charSet",charSet:f.charSet}):null;if("script:ld+json"in f)try{let h=JSON.stringify(f["script:ld+json"]);return o.createElement("script",{key:`script:ld+json:${h}`,type:"application/ld+json",dangerouslySetInnerHTML:{__html:h}})}catch{return null}return o.createElement("meta",O({key:JSON.stringify(f)},f))}))}function Hn(e){return typeof e=="string"&&/^(meta|link)$/.test(e)}function zn(e){return o.createElement(Xt,e)}let re=!1;function Bn(e){let{manifest:t,serverHandoffString:r,abortDelay:n,serializeError:a,isSpaMode:i,future:u,renderMeta:l}=z(),{router:s,static:c,staticContext:m}=Ot(),{matches:f}=fe(),h=De(u,i);l&&(l.didRenderScripts=!0);let p=Ie(f,null,i);o.useEffect(()=>{re=!0},[]);let d=(g,x)=>{let b;return a&&x instanceof Error?b=a(x):b=x,`${JSON.stringify(g)}:__remixContext.p(!1, ${Z(JSON.stringify(b))})`},E=(g,x,b)=>{let L;try{L=JSON.stringify(b)}catch(T){return d(x,T)}return`${JSON.stringify(x)}:__remixContext.p(${Z(L)})`},R=(g,x,b)=>{let L;return a&&b instanceof Error?L=a(b):L=b,`__remixContext.r(${JSON.stringify(g)}, ${JSON.stringify(x)}, !1, ${Z(JSON.stringify(L))})`},S=(g,x,b)=>{let L;try{L=JSON.stringify(b)}catch(T){return R(g,x,T)}return`__remixContext.r(${JSON.stringify(g)}, ${JSON.stringify(x)}, ${Z(L)})`},v=[],w=o.useMemo(()=>{var g;let x=u.unstable_singleFetch?"window.__remixContext.stream = new ReadableStream({start(controller){window.__remixContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());":"",b=m?`window.__remixContext = ${r};${x}`:" ",L=u.unstable_singleFetch||m==null?void 0:m.activeDeferreds;b+=L?["__remixContext.p = function(v,e,p,x) {"," if (typeof e !== 'undefined') {",` x=new Error("Unexpected Server Error");
|
|
147
|
+
x.stack=undefined;`," p=Promise.reject(x);"," } else {"," p=Promise.resolve(v);"," }"," return p;","};","__remixContext.n = function(i,k) {"," __remixContext.t = __remixContext.t || {};"," __remixContext.t[i] = __remixContext.t[i] || {};"," let p = new Promise((r, e) => {__remixContext.t[i][k] = {r:(v)=>{r(v);},e:(v)=>{e(v);}};});",typeof n=="number"?`setTimeout(() => {if(typeof p._error !== "undefined" || typeof p._data !== "undefined"){return;} __remixContext.t[i][k].e(new Error("Server timeout."))}, ${n});`:""," return p;","};","__remixContext.r = function(i,k,v,e,p,x) {"," p = __remixContext.t[i][k];"," if (typeof e !== 'undefined') {",` x=new Error("Unexpected Server Error");
|
|
148
|
+
x.stack=undefined;`," p.e(x);"," } else {"," p.r(v);"," }","};"].join(`
|
|
149
|
+
`)+Object.entries(L).map(([A,P])=>{let he=new Set(P.pendingKeys),F=P.deferredKeys.map(N=>{if(he.has(N))return v.push(o.createElement(We,{key:`${A} | ${N}`,deferredData:P,routeId:A,dataKey:N,scriptProps:e,serializeData:S,serializeError:R})),`${JSON.stringify(N)}:__remixContext.n(${JSON.stringify(A)}, ${JSON.stringify(N)})`;{let me=P.data[N];return typeof me._error<"u"?d(N,me._error):E(A,N,me._data)}}).join(`,
|
|
150
|
+
`);return`Object.assign(__remixContext.state.loaderData[${JSON.stringify(A)}], {${F}});`}).join(`
|
|
151
|
+
`)+(v.length>0?`__remixContext.a=${v.length};`:""):"";let T=c?`${(g=t.hmr)!==null&&g!==void 0&&g.runtime?`import ${JSON.stringify(t.hmr.runtime)};`:""}${h?"":`import ${JSON.stringify(t.url)}`};
|
|
152
|
+
${p.map((A,P)=>`import * as route${P} from ${JSON.stringify(t.routes[A.route.id].module)};`).join(`
|
|
153
|
+
`)}
|
|
154
|
+
${h?`window.__remixManifest = ${JSON.stringify(Dn(t,s),null,2)};`:""}
|
|
155
|
+
window.__remixRouteModules = {${p.map((A,P)=>`${JSON.stringify(A.route.id)}:route${P}`).join(",")}};
|
|
156
|
+
|
|
157
|
+
import(${JSON.stringify(t.entry.module)});`:" ";return o.createElement(o.Fragment,null,o.createElement("script",O({},e,{suppressHydrationWarning:!0,dangerouslySetInnerHTML:Ye(b),type:void 0})),o.createElement("script",O({},e,{suppressHydrationWarning:!0,dangerouslySetInnerHTML:Ye(T),type:"module",async:!0})))},[]);if(!c&&typeof __remixContext=="object"&&__remixContext.a)for(let g=0;g<__remixContext.a;g++)v.push(o.createElement(We,{key:g,scriptProps:e,serializeData:S,serializeError:R}));let y=p.map(g=>{let x=t.routes[g.route.id];return(x.imports||[]).concat([x.module])}).flat(1),_=re?[]:t.entry.imports.concat(y);return re?null:o.createElement(o.Fragment,null,h?null:o.createElement("link",{rel:"modulepreload",href:t.url,crossOrigin:e.crossOrigin}),o.createElement("link",{rel:"modulepreload",href:t.entry.module,crossOrigin:e.crossOrigin}),Yn(_).map(g=>o.createElement("link",{key:g,rel:"modulepreload",href:g,crossOrigin:e.crossOrigin})),w,v)}function We({dataKey:e,deferredData:t,routeId:r,scriptProps:n,serializeData:a,serializeError:i}){return typeof document>"u"&&t&&e&&r&&I(t.pendingKeys.includes(e),`Deferred data for route ${r} with key ${e} was not pending but tried to render a script for it.`),o.createElement(o.Suspense,{fallback:typeof document>"u"&&t&&e&&r?null:o.createElement("script",O({},n,{async:!0,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:" "}}))},typeof document>"u"&&t&&e&&r?o.createElement(zn,{resolve:t.data[e],errorElement:o.createElement(Jn,{dataKey:e,routeId:r,scriptProps:n,serializeError:i}),children:u=>o.createElement("script",O({},n,{async:!0,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:a(r,e,u)}}))}):o.createElement("script",O({},n,{async:!0,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:" "}})))}function Jn({dataKey:e,routeId:t,scriptProps:r,serializeError:n}){let a=Wt();return o.createElement("script",O({},r,{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:n(t,e,a)}}))}function Yn(e){return[...new Set(e)]}function oa(){return Kt()}function la(e){return Gt(e)}function sa(e={}){return Cr(e)}function kt(...e){return t=>{e.forEach(r=>{typeof r=="function"?r(t):r!=null&&(r.current=t)})}}export{zn as A,$n as F,jn as L,ia as M,In as N,tr as R,Bn as S,O as _,sa as a,Gn as b,dt as c,Qn as d,la as e,ta as f,bn as g,Ae as h,I as i,qn as j,ra as k,na as l,Pt as m,ea as n,Wn as o,z as p,Zn as q,it as r,Cn as s,aa as t,oa as u};
|
|
158
|
+
//# sourceMappingURL=components-9EGYHTc_.js.map
|