react-router 6.4.4 → 6.4.5-pre.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.
@@ -1 +1 @@
1
- {"version":3,"file":"react-router.production.min.js","sources":["../lib/use-sync-external-store-shim/useSyncExternalStoreShimClient.ts","../lib/use-sync-external-store-shim/index.ts","../lib/use-sync-external-store-shim/useSyncExternalStoreShimServer.ts","../lib/context.ts","../lib/hooks.tsx","../lib/components.tsx","../index.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport * as React from \"react\";\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction isPolyfill(x: any, y: any) {\n return (\n (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y) // eslint-disable-line no-self-compare\n );\n}\n\nconst is: (x: any, y: any) => boolean =\n typeof Object.is === \"function\" ? Object.is : isPolyfill;\n\n// Intentionally not using named imports because Rollup uses dynamic\n// dispatch for CommonJS interop named imports.\nconst { useState, useEffect, useLayoutEffect, useDebugValue } = React;\n\nlet didWarnOld18Alpha = false;\nlet didWarnUncachedGetSnapshot = false;\n\n// Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\nexport function useSyncExternalStore<T>(\n subscribe: (fn: () => void) => () => void,\n getSnapshot: () => T,\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n getServerSnapshot?: () => T\n): T {\n if (__DEV__) {\n if (!didWarnOld18Alpha) {\n if (\"startTransition\" in React) {\n didWarnOld18Alpha = true;\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that \" +\n \"does not support useSyncExternalStore. The \" +\n \"use-sync-external-store shim will not work correctly. Upgrade \" +\n \"to a newer pre-release.\"\n );\n }\n }\n }\n\n // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n const value = getSnapshot();\n if (__DEV__) {\n if (!didWarnUncachedGetSnapshot) {\n const cachedValue = getSnapshot();\n if (!is(value, cachedValue)) {\n console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n );\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n\n // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n const [{ inst }, forceUpdate] = useState({ inst: { value, getSnapshot } });\n\n // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n useLayoutEffect(() => {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n\n // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribe, value, getSnapshot]);\n\n useEffect(() => {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n const handleStoreChange = () => {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n };\n // Subscribe to the store and return a clean-up function.\n return subscribe(handleStoreChange);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribe]);\n\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst: any) {\n const latestGetSnapshot = inst.getSnapshot;\n const prevValue = inst.value;\n try {\n const nextValue = latestGetSnapshot();\n return !is(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n","/**\n * Inlined into the react-router repo since use-sync-external-store does not\n * provide a UMD-compatible package, so we need this to be able to distribute\n * UMD react-router bundles\n */\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n */\n\nimport * as React from \"react\";\n\nimport { useSyncExternalStore as client } from \"./useSyncExternalStoreShimClient\";\nimport { useSyncExternalStore as server } from \"./useSyncExternalStoreShimServer\";\n\nconst canUseDOM: boolean = !!(\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\"\n);\nconst isServerEnvironment = !canUseDOM;\nconst shim = isServerEnvironment ? server : client;\n\nexport const useSyncExternalStore =\n \"useSyncExternalStore\" in React\n ? ((module) => module.useSyncExternalStore)(React)\n : shim;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n */\n\nexport function useSyncExternalStore<T>(\n subscribe: (fn: () => void) => () => void,\n getSnapshot: () => T,\n getServerSnapshot?: () => T\n): T {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n","import * as React from \"react\";\nimport type {\n AgnosticRouteMatch,\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n History,\n Location,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport type { Action as NavigationType } from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\n// Contexts for data routers\nexport const DataStaticRouterContext =\n React.createContext<StaticHandlerContext | null>(null);\nif (__DEV__) {\n DataStaticRouterContext.displayName = \"DataStaticRouterContext\";\n}\n\nexport interface DataRouterContextObject extends NavigationContextObject {\n router: Router;\n}\n\nexport const DataRouterContext =\n React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level <Router> API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n outlet: null,\n matches: [],\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n Router as RemixRouter,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n warning,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n} from \"@remix-run/router\";\n\nimport type {\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n DataRouteMatch,\n RelativeRoutingType,\n} from \"./context\";\nimport {\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n AwaitContext,\n DataStaticRouterContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a <Router>.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * <NavLink>.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath<ParamKey, Path>(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\n/**\n * Returns an imperative method for changing the location. Used by <Link>s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n React.useEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(\n activeRef.current,\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`\n );\n\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history. If this is a root navigation, then we\n // navigate to the raw basename which allows the basename to have full\n // control over the presence of a trailing slash on root links\n if (basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [basename, navigator, routePathnamesJson, locationPathname]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by <Outlet> to render child routes.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an <Outlet> to render their child route's\n * element.\n *\n * @see https://reactrouter.com/docs/en/v6/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let dataRouterStateContext = React.useContext(DataRouterStateContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element. ` +\n `This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterStateContext || undefined\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n <LocationContext.Provider\n value={{\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location,\n },\n navigationType: NavigationType.Pop,\n }}\n >\n {renderedMatches}\n </LocationContext.Provider>\n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorElement() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n return (\n <>\n <h2>Unhandled Thrown Error!</h2>\n <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n {stack ? <pre style={preStyles}>{stack}</pre> : null}\n <p>💿 Hey developer 👋</p>\n <p>\n You can provide a way better UX than this when your app throws errors by\n providing your own&nbsp;\n <code style={codeStyles}>errorElement</code> props on&nbsp;\n <code style={codeStyles}>&lt;Route&gt;</code>\n </p>\n </>\n );\n}\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n error: any;\n component: React.ReactNode;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (state.location !== props.location) {\n return {\n error: props.error,\n location: props.location,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error || state.error,\n location: state.location,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error ? (\n <RouteErrorContext.Provider\n value={this.state.error}\n children={this.props.component}\n />\n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch<string, RouteObject>;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataStaticRouterContext = React.useContext(DataStaticRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (dataStaticRouterContext && match.route.errorElement) {\n dataStaticRouterContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n <RouteContext.Provider value={routeContext}>\n {children}\n </RouteContext.Provider>\n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState?: RemixRouter[\"state\"]\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for the current errors: ${errors}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error = match.route.id ? errors?.[match.route.id] : null;\n // Only data routers handle errors\n let errorElement = dataRouterState\n ? match.route.errorElement || <DefaultErrorElement />\n : null;\n let getChildren = () => (\n <RenderedRoute\n match={match}\n routeContext={{\n outlet,\n matches: parentMatches.concat(renderedMatches.slice(0, index + 1)),\n }}\n >\n {error\n ? errorElement\n : match.route.element !== undefined\n ? match.route.element\n : outlet}\n </RenderedRoute>\n );\n // Only wrap in an error boundary within data router usages when we have an\n // errorElement on this route. Otherwise let it bubble up to an ancestor\n // errorElement\n return dataRouterState && (match.route.errorElement || index === 0) ? (\n <RenderErrorBoundary\n location={dataRouterState.location}\n component={errorElement}\n error={error}\n children={getChildren()}\n />\n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseRevalidator = \"useRevalidator\",\n}\n\nenum DataRouterStateHook {\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return {\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n };\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches() {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () =>\n matches.map((match) => {\n let { pathname, params } = match;\n // Note: This structure matches that created by createUseMatchesMatch\n // in the @remix-run/router , so if you change this please also change\n // that :) Eventually we'll DRY this up\n return {\n id: match.route.id,\n pathname,\n params,\n data: loaderData[match.route.id] as unknown,\n handle: match.route.handle as unknown,\n };\n }),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useLoaderData must be used inside a RouteContext`);\n\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `useLoaderData can only be used on routes that contain a unique \"id\"`\n );\n\n return state.loaderData[thisRoute.route.id];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useActionData must be used inside a RouteContext`);\n\n return Object.values(state?.actionData || {})[0];\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let route = React.useContext(RouteContext);\n let thisRoute = route.matches[route.matches.length - 1];\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error) {\n return error;\n }\n\n invariant(route, `useRouteError must be used inside a RouteContext`);\n invariant(\n thisRoute.route.id,\n `useRouteError can only be used on routes that contain a unique \"id\"`\n );\n\n // Otherwise look for errors from our data router state\n return state.errors?.[thisRoute.route.id];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor <Await /> value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor <Await /> value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import * as React from \"react\";\nimport type {\n TrackedPromise,\n InitialEntry,\n Location,\n MemoryHistory,\n Router as RemixRouter,\n RouterState,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n AbortedDeferredError,\n createMemoryHistory,\n invariant,\n parsePath,\n stripBasename,\n warning,\n} from \"@remix-run/router\";\nimport { useSyncExternalStore as useSyncExternalStoreShim } from \"./use-sync-external-store-shim\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n RouteMatch,\n RouteObject,\n Navigator,\n NonIndexRouteObject,\n RelativeRoutingType,\n} from \"./context\";\nimport {\n LocationContext,\n NavigationContext,\n DataRouterContext,\n DataRouterStateContext,\n AwaitContext,\n} from \"./context\";\nimport {\n useAsyncValue,\n useInRouterContext,\n useNavigate,\n useOutlet,\n useRoutes,\n _renderMatches,\n} from \"./hooks\";\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n}: RouterProviderProps): React.ReactElement {\n // Sync router state to our component state to force re-renders\n let state: RouterState = useSyncExternalStoreShim(\n router.subscribe,\n () => router.state,\n // We have to provide this so React@18 doesn't complain during hydration,\n // but we pass our serialized hydration data into the router so state here\n // is already synced with what the server saw\n () => router.state\n );\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n return (\n <DataRouterContext.Provider\n value={{\n router,\n navigator,\n static: false,\n // Do we need this?\n basename,\n }}\n >\n <DataRouterStateContext.Provider value={state}>\n <Router\n basename={router.basename}\n location={router.state.location}\n navigationType={router.state.historyAction}\n navigator={navigator}\n >\n {router.state.initialized ? <Routes /> : fallbackElement}\n </Router>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n );\n}\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n}\n\n/**\n * A <Router> that stores all entries in memory.\n *\n * @see https://reactrouter.com/docs/en/v6/routers/memory-router\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef<MemoryHistory>();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true,\n });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location,\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/docs/en/v6/components/navigate\n */\nexport function Navigate({\n to,\n replace,\n state,\n relative,\n}: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n\n warning(\n !React.useContext(NavigationContext).static,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n `This is a no-op, but you should modify your code so the <Navigate> is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let dataRouterState = React.useContext(DataRouterStateContext);\n let navigate = useNavigate();\n\n React.useEffect(() => {\n // Avoid kicking off multiple navigations if we're in the middle of a\n // data-router navigation, since components get re-rendered when we enter\n // a submitting/loading state\n if (dataRouterState && dataRouterState.navigation.state !== \"idle\") {\n return;\n }\n navigate(to, { replace, state, relative });\n });\n\n return null;\n}\n\nexport interface OutletProps {\n context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/docs/en/v6/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n path?: NonIndexRouteObject[\"path\"];\n id?: NonIndexRouteObject[\"id\"];\n loader?: NonIndexRouteObject[\"loader\"];\n action?: NonIndexRouteObject[\"action\"];\n hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n handle?: NonIndexRouteObject[\"handle\"];\n index?: false;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n path?: IndexRouteObject[\"path\"];\n id?: IndexRouteObject[\"id\"];\n loader?: IndexRouteObject[\"loader\"];\n action?: IndexRouteObject[\"action\"];\n hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n handle?: IndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/docs/en/v6/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, ` +\n `never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial<Location> | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a <Router> directly. Instead, you'll render a\n * router that is more specific to your environment such as a <BrowserRouter>\n * in web browsers or a <StaticRouter> for server rendering.\n *\n * @see https://reactrouter.com/docs/en/v6/routers/router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false,\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>.` +\n ` You should never have more than one in your app.`\n );\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(\n () => ({ basename, navigator, static: staticProp }),\n [basename, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\",\n } = locationProp;\n\n let location = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n };\n }, [basename, pathname, search, hash, state, key]);\n\n warning(\n location != null,\n `<Router basename=\"${basename}\"> is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the <Router> won't render anything.`\n );\n\n if (location == null) {\n return null;\n }\n\n return (\n <NavigationContext.Provider value={navigationContext}>\n <LocationContext.Provider\n children={children}\n value={{ location, navigationType }}\n />\n </NavigationContext.Provider>\n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of <Route> elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/components/routes\n */\nexport function Routes({\n children,\n location,\n}: RoutesProps): React.ReactElement | null {\n let dataRouterContext = React.useContext(DataRouterContext);\n // When in a DataRouterContext _without_ children, we use the router routes\n // directly. If we have children, then we're in a descendant tree and we\n // need to use child routes.\n let routes =\n dataRouterContext && !children\n ? (dataRouterContext.router.routes as DataRouteObject[])\n : createRoutesFromChildren(children);\n return useRoutes(routes, location);\n}\n\nexport interface AwaitResolveRenderFunction {\n (data: Awaited<any>): React.ReactElement;\n}\n\nexport interface AwaitProps {\n children: React.ReactNode | AwaitResolveRenderFunction;\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n return (\n <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n <ResolveAwait>{children}</ResolveAwait>\n </AwaitErrorBoundary>\n );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n error: any;\n};\n\nenum AwaitRenderStatus {\n pending,\n success,\n error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n AwaitErrorBoundaryProps,\n AwaitErrorBoundaryState\n> {\n constructor(props: AwaitErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n let { children, errorElement, resolve } = this.props;\n\n let promise: TrackedPromise | null = null;\n let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if ((resolve as TrackedPromise)._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status =\n promise._error !== undefined\n ? AwaitRenderStatus.error\n : promise._data !== undefined\n ? AwaitRenderStatus.success\n : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data: any) =>\n Object.defineProperty(resolve, \"_data\", { get: () => data }),\n (error: any) =>\n Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n\n if (\n status === AwaitRenderStatus.error &&\n promise._error instanceof AbortedDeferredError\n ) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return <AwaitContext.Provider value={promise} children={errorElement} />;\n }\n\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return <AwaitContext.Provider value={promise} children={children} />;\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on <Await>\n */\nfunction ResolveAwait({\n children,\n}: {\n children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n let data = useAsyncValue();\n if (typeof children === \"function\") {\n return children(data);\n }\n return <>{children}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/docs/en/v6/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode,\n parentPath: number[] = []\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, (element, index) => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, parentPath)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n\n let treePath = [...parentPath, index];\n let route: RouteObject = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n hasErrorBoundary: element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n\n/**\n * @private\n * Walk the route tree and add hasErrorBoundary if it's not provided, so that\n * users providing manual route arrays can just specify errorElement\n */\nexport function enhanceManualRouteObjects(\n routes: RouteObject[]\n): RouteObject[] {\n return routes.map((route) => {\n let routeClone = { ...route };\n if (routeClone.hasErrorBoundary == null) {\n routeClone.hasErrorBoundary = routeClone.errorElement != null;\n }\n if (routeClone.children) {\n routeClone.children = enhanceManualRouteObjects(routeClone.children);\n }\n return routeClone;\n });\n}\n","import type {\n ActionFunction,\n ActionFunctionArgs,\n Fetcher,\n HydrationState,\n JsonFunction,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n Navigation,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n PathPattern,\n RedirectFunction,\n Router as RemixRouter,\n ShouldRevalidateFunction,\n To,\n InitialEntry,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n createPath,\n createRouter,\n defer,\n generatePath,\n isRouteErrorResponse,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n resolvePath,\n} from \"@remix-run/router\";\n\nimport type {\n AwaitProps,\n MemoryRouterProps,\n NavigateProps,\n OutletProps,\n RouteProps,\n PathRouteProps,\n LayoutRouteProps,\n IndexRouteProps,\n RouterProps,\n RoutesProps,\n RouterProviderProps,\n} from \"./lib/components\";\nimport {\n enhanceManualRouteObjects,\n createRoutesFromChildren,\n renderMatches,\n Await,\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n RouterProvider,\n Routes,\n} from \"./lib/components\";\nimport type {\n DataRouteMatch,\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NavigateOptions,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n RelativeRoutingType,\n} from \"./lib/context\";\nimport {\n DataRouterContext,\n DataRouterStateContext,\n DataStaticRouterContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./lib/context\";\nimport type { NavigateFunction } from \"./lib/hooks\";\nimport {\n useHref,\n useInRouterContext,\n useLocation,\n useMatch,\n useNavigationType,\n useNavigate,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRoutes,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useLoaderData,\n useMatches,\n useNavigation,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n} from \"./lib/hooks\";\n\n// Exported for backwards compatibility, but not being used internally anymore\ntype Hash = string;\ntype Pathname = string;\ntype Search = string;\n\n// Expose react-router public API\nexport type {\n ActionFunction,\n ActionFunctionArgs,\n AwaitProps,\n DataRouteMatch,\n DataRouteObject,\n Fetcher,\n Hash,\n IndexRouteObject,\n IndexRouteProps,\n JsonFunction,\n LayoutRouteProps,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigation,\n Navigator,\n NonIndexRouteObject,\n OutletProps,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n Pathname,\n PathPattern,\n PathRouteProps,\n RedirectFunction,\n RelativeRoutingType,\n RouteMatch,\n RouteObject,\n RouteProps,\n RouterProps,\n RouterProviderProps,\n RoutesProps,\n Search,\n ShouldRevalidateFunction,\n To,\n};\nexport {\n AbortedDeferredError,\n Await,\n MemoryRouter,\n Navigate,\n NavigationType,\n Outlet,\n Route,\n Router,\n RouterProvider,\n Routes,\n createPath,\n createRoutesFromChildren,\n createRoutesFromChildren as createRoutesFromElements,\n defer,\n isRouteErrorResponse,\n generatePath,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n renderMatches,\n resolvePath,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useHref,\n useInRouterContext,\n useLoaderData,\n useLocation,\n useMatch,\n useMatches,\n useNavigate,\n useNavigation,\n useNavigationType,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n useRoutes,\n};\n\nexport function createMemoryRouter(\n routes: RouteObject[],\n opts?: {\n basename?: string;\n hydrationData?: HydrationState;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n }\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n history: createMemoryHistory({\n initialEntries: opts?.initialEntries,\n initialIndex: opts?.initialIndex,\n }),\n hydrationData: opts?.hydrationData,\n routes: enhanceManualRouteObjects(routes),\n }).initialize();\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n NavigationContext as UNSAFE_NavigationContext,\n LocationContext as UNSAFE_LocationContext,\n RouteContext as UNSAFE_RouteContext,\n DataRouterContext as UNSAFE_DataRouterContext,\n DataRouterStateContext as UNSAFE_DataRouterStateContext,\n DataStaticRouterContext as UNSAFE_DataStaticRouterContext,\n enhanceManualRouteObjects as UNSAFE_enhanceManualRouteObjects,\n};\n"],"names":["is","Object","x","y","useState","useEffect","useLayoutEffect","useDebugValue","React","checkIfSnapshotChanged","inst","latestGetSnapshot","getSnapshot","prevValue","value","nextValue","error","shim","window","document","createElement","subscribe","getServerSnapshot","forceUpdate","useSyncExternalStore","DataStaticRouterContext","createContext","DataRouterContext","DataRouterStateContext","AwaitContext","NavigationContext","LocationContext","RouteContext","outlet","matches","RouteErrorContext","useHref","to","relative","useInRouterContext","invariant","basename","navigator","useContext","hash","pathname","search","useResolvedPath","joinedPathname","joinPaths","createHref","useLocation","location","useNavigationType","navigationType","useMatch","pattern","useMemo","matchPath","useNavigate","locationPathname","routePathnamesJson","JSON","stringify","getPathContributingMatches","map","match","pathnameBase","activeRef","useRef","current","useCallback","options","go","path","resolveTo","parse","replace","push","state","OutletContext","useOutletContext","useOutlet","context","Provider","useParams","routeMatch","length","params","useRoutes","routes","locationArg","dataRouterStateContext","parentMatches","parentParams","parentPathnameBase","route","locationFromContext","parsedLocationArg","parsePath","startsWith","remainingPathname","slice","matchRoutes","renderedMatches","_renderMatches","assign","encodeLocation","undefined","key","NavigationType","Pop","DefaultErrorElement","useRouteError","message","isRouteErrorResponse","status","statusText","Error","stack","lightgrey","preStyles","padding","backgroundColor","codeStyles","Fragment","style","fontStyle","RenderErrorBoundary","Component","constructor","props","super","this","static","componentDidCatch","errorInfo","console","render","children","component","RenderedRoute","routeContext","dataStaticRouterContext","errorElement","_deepestRenderedBoundaryId","id","dataRouterState","errors","errorIndex","findIndex","m","Math","min","reduceRight","index","getChildren","concat","element","DataRouterHook","DataRouterStateHook","AwaitRenderStatus","useDataRouterState","hookName","useNavigation","UseNavigation","navigation","useRevalidator","dataRouterContext","ctx","useDataRouterContext","UseRevalidator","revalidate","router","revalidation","useMatches","loaderData","UseMatches","data","handle","useLoaderData","UseLoaderData","thisRoute","useRouteLoaderData","routeId","UseRouteLoaderData","useActionData","UseActionData","values","actionData","UseRouteError","useAsyncValue","_data","useAsyncError","_error","RouterProvider","fallbackElement","useSyncExternalStoreShim","n","navigate","opts","preventScrollReset","Router","historyAction","initialized","Routes","MemoryRouter","initialEntries","initialIndex","historyRef","createMemoryHistory","v5Compat","history","setState","action","listen","Navigate","Outlet","Route","_props","basenameProp","locationProp","staticProp","navigationContext","trailingPathname","stripBasename","createRoutesFromChildren","Await","resolve","AwaitErrorBoundary","ResolveAwait","neverSettledPromise","Promise","promise","pending","renderError","reject","catch","defineProperty","get","_tracked","success","then","AbortedDeferredError","parentPath","Children","forEach","isValidElement","type","apply","treePath","join","caseSensitive","loader","hasErrorBoundary","shouldRevalidate","renderMatches","enhanceManualRouteObjects","routeClone","createMemoryRouter","createRouter","hydrationData","initialize"],"mappings":"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"}
1
+ {"version":3,"file":"react-router.production.min.js","sources":["../lib/use-sync-external-store-shim/useSyncExternalStoreShimClient.ts","../lib/use-sync-external-store-shim/index.ts","../lib/use-sync-external-store-shim/useSyncExternalStoreShimServer.ts","../lib/context.ts","../lib/hooks.tsx","../lib/components.tsx","../index.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport * as React from \"react\";\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction isPolyfill(x: any, y: any) {\n return (\n (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y) // eslint-disable-line no-self-compare\n );\n}\n\nconst is: (x: any, y: any) => boolean =\n typeof Object.is === \"function\" ? Object.is : isPolyfill;\n\n// Intentionally not using named imports because Rollup uses dynamic\n// dispatch for CommonJS interop named imports.\nconst { useState, useEffect, useLayoutEffect, useDebugValue } = React;\n\nlet didWarnOld18Alpha = false;\nlet didWarnUncachedGetSnapshot = false;\n\n// Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\nexport function useSyncExternalStore<T>(\n subscribe: (fn: () => void) => () => void,\n getSnapshot: () => T,\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n getServerSnapshot?: () => T\n): T {\n if (__DEV__) {\n if (!didWarnOld18Alpha) {\n if (\"startTransition\" in React) {\n didWarnOld18Alpha = true;\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that \" +\n \"does not support useSyncExternalStore. The \" +\n \"use-sync-external-store shim will not work correctly. Upgrade \" +\n \"to a newer pre-release.\"\n );\n }\n }\n }\n\n // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n const value = getSnapshot();\n if (__DEV__) {\n if (!didWarnUncachedGetSnapshot) {\n const cachedValue = getSnapshot();\n if (!is(value, cachedValue)) {\n console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n );\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n\n // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n const [{ inst }, forceUpdate] = useState({ inst: { value, getSnapshot } });\n\n // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n useLayoutEffect(() => {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n\n // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribe, value, getSnapshot]);\n\n useEffect(() => {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n const handleStoreChange = () => {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n };\n // Subscribe to the store and return a clean-up function.\n return subscribe(handleStoreChange);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribe]);\n\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst: any) {\n const latestGetSnapshot = inst.getSnapshot;\n const prevValue = inst.value;\n try {\n const nextValue = latestGetSnapshot();\n return !is(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n","/**\n * Inlined into the react-router repo since use-sync-external-store does not\n * provide a UMD-compatible package, so we need this to be able to distribute\n * UMD react-router bundles\n */\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n */\n\nimport * as React from \"react\";\n\nimport { useSyncExternalStore as client } from \"./useSyncExternalStoreShimClient\";\nimport { useSyncExternalStore as server } from \"./useSyncExternalStoreShimServer\";\n\nconst canUseDOM: boolean = !!(\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\"\n);\nconst isServerEnvironment = !canUseDOM;\nconst shim = isServerEnvironment ? server : client;\n\nexport const useSyncExternalStore =\n \"useSyncExternalStore\" in React\n ? ((module) => module.useSyncExternalStore)(React)\n : shim;\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n */\n\nexport function useSyncExternalStore<T>(\n subscribe: (fn: () => void) => () => void,\n getSnapshot: () => T,\n getServerSnapshot?: () => T\n): T {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n","import * as React from \"react\";\nimport type {\n AgnosticRouteMatch,\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n History,\n Location,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport type { Action as NavigationType } from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\n// Contexts for data routers\nexport const DataStaticRouterContext =\n React.createContext<StaticHandlerContext | null>(null);\nif (__DEV__) {\n DataStaticRouterContext.displayName = \"DataStaticRouterContext\";\n}\n\nexport interface DataRouterContextObject extends NavigationContextObject {\n router: Router;\n}\n\nexport const DataRouterContext =\n React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level <Router> API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n outlet: null,\n matches: [],\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n Router as RemixRouter,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n warning,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n} from \"@remix-run/router\";\n\nimport type {\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n DataRouteMatch,\n RelativeRoutingType,\n} from \"./context\";\nimport {\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n AwaitContext,\n DataStaticRouterContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a <Router>.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * <NavLink>.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath<ParamKey, Path>(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\n/**\n * Returns an imperative method for changing the location. Used by <Link>s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n React.useEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(\n activeRef.current,\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`\n );\n\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history. If this is a root navigation, then we\n // navigate to the raw basename which allows the basename to have full\n // control over the presence of a trailing slash on root links\n if (basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [basename, navigator, routePathnamesJson, locationPathname]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by <Outlet> to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an <Outlet> to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let dataRouterStateContext = React.useContext(DataRouterStateContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element. ` +\n `This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterStateContext || undefined\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n <LocationContext.Provider\n value={{\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location,\n },\n navigationType: NavigationType.Pop,\n }}\n >\n {renderedMatches}\n </LocationContext.Provider>\n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorElement() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n return (\n <>\n <h2>Unhandled Thrown Error!</h2>\n <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n {stack ? <pre style={preStyles}>{stack}</pre> : null}\n <p>💿 Hey developer 👋</p>\n <p>\n You can provide a way better UX than this when your app throws errors by\n providing your own&nbsp;\n <code style={codeStyles}>errorElement</code> props on&nbsp;\n <code style={codeStyles}>&lt;Route&gt;</code>\n </p>\n </>\n );\n}\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n error: any;\n component: React.ReactNode;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (state.location !== props.location) {\n return {\n error: props.error,\n location: props.location,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error || state.error,\n location: state.location,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error ? (\n <RouteErrorContext.Provider\n value={this.state.error}\n children={this.props.component}\n />\n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch<string, RouteObject>;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataStaticRouterContext = React.useContext(DataStaticRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (dataStaticRouterContext && match.route.errorElement) {\n dataStaticRouterContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n <RouteContext.Provider value={routeContext}>\n {children}\n </RouteContext.Provider>\n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState?: RemixRouter[\"state\"]\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for the current errors: ${errors}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error = match.route.id ? errors?.[match.route.id] : null;\n // Only data routers handle errors\n let errorElement = dataRouterState\n ? match.route.errorElement || <DefaultErrorElement />\n : null;\n let getChildren = () => (\n <RenderedRoute\n match={match}\n routeContext={{\n outlet,\n matches: parentMatches.concat(renderedMatches.slice(0, index + 1)),\n }}\n >\n {error\n ? errorElement\n : match.route.element !== undefined\n ? match.route.element\n : outlet}\n </RenderedRoute>\n );\n // Only wrap in an error boundary within data router usages when we have an\n // errorElement on this route. Otherwise let it bubble up to an ancestor\n // errorElement\n return dataRouterState && (match.route.errorElement || index === 0) ? (\n <RenderErrorBoundary\n location={dataRouterState.location}\n component={errorElement}\n error={error}\n children={getChildren()}\n />\n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseRevalidator = \"useRevalidator\",\n}\n\nenum DataRouterStateHook {\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return {\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n };\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches() {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () =>\n matches.map((match) => {\n let { pathname, params } = match;\n // Note: This structure matches that created by createUseMatchesMatch\n // in the @remix-run/router , so if you change this please also change\n // that :) Eventually we'll DRY this up\n return {\n id: match.route.id,\n pathname,\n params,\n data: loaderData[match.route.id] as unknown,\n handle: match.route.handle as unknown,\n };\n }),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useLoaderData must be used inside a RouteContext`);\n\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `useLoaderData can only be used on routes that contain a unique \"id\"`\n );\n\n return state.loaderData[thisRoute.route.id];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useActionData must be used inside a RouteContext`);\n\n return Object.values(state?.actionData || {})[0];\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let route = React.useContext(RouteContext);\n let thisRoute = route.matches[route.matches.length - 1];\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error) {\n return error;\n }\n\n invariant(route, `useRouteError must be used inside a RouteContext`);\n invariant(\n thisRoute.route.id,\n `useRouteError can only be used on routes that contain a unique \"id\"`\n );\n\n // Otherwise look for errors from our data router state\n return state.errors?.[thisRoute.route.id];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor <Await /> value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor <Await /> value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import * as React from \"react\";\nimport type {\n TrackedPromise,\n InitialEntry,\n Location,\n MemoryHistory,\n Router as RemixRouter,\n RouterState,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n AbortedDeferredError,\n createMemoryHistory,\n invariant,\n parsePath,\n stripBasename,\n warning,\n} from \"@remix-run/router\";\nimport { useSyncExternalStore as useSyncExternalStoreShim } from \"./use-sync-external-store-shim\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n RouteMatch,\n RouteObject,\n Navigator,\n NonIndexRouteObject,\n RelativeRoutingType,\n} from \"./context\";\nimport {\n LocationContext,\n NavigationContext,\n DataRouterContext,\n DataRouterStateContext,\n AwaitContext,\n} from \"./context\";\nimport {\n useAsyncValue,\n useInRouterContext,\n useNavigate,\n useOutlet,\n useRoutes,\n _renderMatches,\n} from \"./hooks\";\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n}: RouterProviderProps): React.ReactElement {\n // Sync router state to our component state to force re-renders\n let state: RouterState = useSyncExternalStoreShim(\n router.subscribe,\n () => router.state,\n // We have to provide this so React@18 doesn't complain during hydration,\n // but we pass our serialized hydration data into the router so state here\n // is already synced with what the server saw\n () => router.state\n );\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n return (\n <DataRouterContext.Provider\n value={{\n router,\n navigator,\n static: false,\n // Do we need this?\n basename,\n }}\n >\n <DataRouterStateContext.Provider value={state}>\n <Router\n basename={router.basename}\n location={router.state.location}\n navigationType={router.state.historyAction}\n navigator={navigator}\n >\n {router.state.initialized ? <Routes /> : fallbackElement}\n </Router>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n );\n}\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n}\n\n/**\n * A <Router> that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef<MemoryHistory>();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true,\n });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location,\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nexport function Navigate({\n to,\n replace,\n state,\n relative,\n}: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n\n warning(\n !React.useContext(NavigationContext).static,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n `This is a no-op, but you should modify your code so the <Navigate> is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let dataRouterState = React.useContext(DataRouterStateContext);\n let navigate = useNavigate();\n\n React.useEffect(() => {\n // Avoid kicking off multiple navigations if we're in the middle of a\n // data-router navigation, since components get re-rendered when we enter\n // a submitting/loading state\n if (dataRouterState && dataRouterState.navigation.state !== \"idle\") {\n return;\n }\n navigate(to, { replace, state, relative });\n });\n\n return null;\n}\n\nexport interface OutletProps {\n context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n path?: NonIndexRouteObject[\"path\"];\n id?: NonIndexRouteObject[\"id\"];\n loader?: NonIndexRouteObject[\"loader\"];\n action?: NonIndexRouteObject[\"action\"];\n hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n handle?: NonIndexRouteObject[\"handle\"];\n index?: false;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n path?: IndexRouteObject[\"path\"];\n id?: IndexRouteObject[\"id\"];\n loader?: IndexRouteObject[\"loader\"];\n action?: IndexRouteObject[\"action\"];\n hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n handle?: IndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, ` +\n `never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial<Location> | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a <Router> directly. Instead, you'll render a\n * router that is more specific to your environment such as a <BrowserRouter>\n * in web browsers or a <StaticRouter> for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false,\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>.` +\n ` You should never have more than one in your app.`\n );\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(\n () => ({ basename, navigator, static: staticProp }),\n [basename, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\",\n } = locationProp;\n\n let location = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n };\n }, [basename, pathname, search, hash, state, key]);\n\n warning(\n location != null,\n `<Router basename=\"${basename}\"> is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the <Router> won't render anything.`\n );\n\n if (location == null) {\n return null;\n }\n\n return (\n <NavigationContext.Provider value={navigationContext}>\n <LocationContext.Provider\n children={children}\n value={{ location, navigationType }}\n />\n </NavigationContext.Provider>\n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of <Route> elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nexport function Routes({\n children,\n location,\n}: RoutesProps): React.ReactElement | null {\n let dataRouterContext = React.useContext(DataRouterContext);\n // When in a DataRouterContext _without_ children, we use the router routes\n // directly. If we have children, then we're in a descendant tree and we\n // need to use child routes.\n let routes =\n dataRouterContext && !children\n ? (dataRouterContext.router.routes as DataRouteObject[])\n : createRoutesFromChildren(children);\n return useRoutes(routes, location);\n}\n\nexport interface AwaitResolveRenderFunction {\n (data: Awaited<any>): React.ReactElement;\n}\n\nexport interface AwaitProps {\n children: React.ReactNode | AwaitResolveRenderFunction;\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n return (\n <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n <ResolveAwait>{children}</ResolveAwait>\n </AwaitErrorBoundary>\n );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n error: any;\n};\n\nenum AwaitRenderStatus {\n pending,\n success,\n error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n AwaitErrorBoundaryProps,\n AwaitErrorBoundaryState\n> {\n constructor(props: AwaitErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n let { children, errorElement, resolve } = this.props;\n\n let promise: TrackedPromise | null = null;\n let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if ((resolve as TrackedPromise)._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status =\n promise._error !== undefined\n ? AwaitRenderStatus.error\n : promise._data !== undefined\n ? AwaitRenderStatus.success\n : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data: any) =>\n Object.defineProperty(resolve, \"_data\", { get: () => data }),\n (error: any) =>\n Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n\n if (\n status === AwaitRenderStatus.error &&\n promise._error instanceof AbortedDeferredError\n ) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return <AwaitContext.Provider value={promise} children={errorElement} />;\n }\n\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return <AwaitContext.Provider value={promise} children={children} />;\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on <Await>\n */\nfunction ResolveAwait({\n children,\n}: {\n children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n let data = useAsyncValue();\n if (typeof children === \"function\") {\n return children(data);\n }\n return <>{children}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode,\n parentPath: number[] = []\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, (element, index) => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, parentPath)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n\n let treePath = [...parentPath, index];\n let route: RouteObject = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n hasErrorBoundary: element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n\n/**\n * @private\n * Walk the route tree and add hasErrorBoundary if it's not provided, so that\n * users providing manual route arrays can just specify errorElement\n */\nexport function enhanceManualRouteObjects(\n routes: RouteObject[]\n): RouteObject[] {\n return routes.map((route) => {\n let routeClone = { ...route };\n if (routeClone.hasErrorBoundary == null) {\n routeClone.hasErrorBoundary = routeClone.errorElement != null;\n }\n if (routeClone.children) {\n routeClone.children = enhanceManualRouteObjects(routeClone.children);\n }\n return routeClone;\n });\n}\n","import type {\n ActionFunction,\n ActionFunctionArgs,\n Fetcher,\n HydrationState,\n JsonFunction,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n Navigation,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n PathPattern,\n RedirectFunction,\n Router as RemixRouter,\n ShouldRevalidateFunction,\n To,\n InitialEntry,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n createPath,\n createRouter,\n defer,\n generatePath,\n isRouteErrorResponse,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n resolvePath,\n} from \"@remix-run/router\";\n\nimport type {\n AwaitProps,\n MemoryRouterProps,\n NavigateProps,\n OutletProps,\n RouteProps,\n PathRouteProps,\n LayoutRouteProps,\n IndexRouteProps,\n RouterProps,\n RoutesProps,\n RouterProviderProps,\n} from \"./lib/components\";\nimport {\n enhanceManualRouteObjects,\n createRoutesFromChildren,\n renderMatches,\n Await,\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n RouterProvider,\n Routes,\n} from \"./lib/components\";\nimport type {\n DataRouteMatch,\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NavigateOptions,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n RelativeRoutingType,\n} from \"./lib/context\";\nimport {\n DataRouterContext,\n DataRouterStateContext,\n DataStaticRouterContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./lib/context\";\nimport type { NavigateFunction } from \"./lib/hooks\";\nimport {\n useHref,\n useInRouterContext,\n useLocation,\n useMatch,\n useNavigationType,\n useNavigate,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRoutes,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useLoaderData,\n useMatches,\n useNavigation,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n} from \"./lib/hooks\";\n\n// Exported for backwards compatibility, but not being used internally anymore\ntype Hash = string;\ntype Pathname = string;\ntype Search = string;\n\n// Expose react-router public API\nexport type {\n ActionFunction,\n ActionFunctionArgs,\n AwaitProps,\n DataRouteMatch,\n DataRouteObject,\n Fetcher,\n Hash,\n IndexRouteObject,\n IndexRouteProps,\n JsonFunction,\n LayoutRouteProps,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigation,\n Navigator,\n NonIndexRouteObject,\n OutletProps,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n Pathname,\n PathPattern,\n PathRouteProps,\n RedirectFunction,\n RelativeRoutingType,\n RouteMatch,\n RouteObject,\n RouteProps,\n RouterProps,\n RouterProviderProps,\n RoutesProps,\n Search,\n ShouldRevalidateFunction,\n To,\n};\nexport {\n AbortedDeferredError,\n Await,\n MemoryRouter,\n Navigate,\n NavigationType,\n Outlet,\n Route,\n Router,\n RouterProvider,\n Routes,\n createPath,\n createRoutesFromChildren,\n createRoutesFromChildren as createRoutesFromElements,\n defer,\n isRouteErrorResponse,\n generatePath,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n renderMatches,\n resolvePath,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useHref,\n useInRouterContext,\n useLoaderData,\n useLocation,\n useMatch,\n useMatches,\n useNavigate,\n useNavigation,\n useNavigationType,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n useRoutes,\n};\n\nexport function createMemoryRouter(\n routes: RouteObject[],\n opts?: {\n basename?: string;\n hydrationData?: HydrationState;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n }\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n history: createMemoryHistory({\n initialEntries: opts?.initialEntries,\n initialIndex: opts?.initialIndex,\n }),\n hydrationData: opts?.hydrationData,\n routes: enhanceManualRouteObjects(routes),\n }).initialize();\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n NavigationContext as UNSAFE_NavigationContext,\n LocationContext as UNSAFE_LocationContext,\n RouteContext as UNSAFE_RouteContext,\n DataRouterContext as UNSAFE_DataRouterContext,\n DataRouterStateContext as UNSAFE_DataRouterStateContext,\n DataStaticRouterContext as UNSAFE_DataStaticRouterContext,\n enhanceManualRouteObjects as UNSAFE_enhanceManualRouteObjects,\n};\n"],"names":["is","Object","x","y","useState","useEffect","useLayoutEffect","useDebugValue","React","checkIfSnapshotChanged","inst","latestGetSnapshot","getSnapshot","prevValue","value","nextValue","error","shim","window","document","createElement","subscribe","getServerSnapshot","forceUpdate","useSyncExternalStore","DataStaticRouterContext","createContext","DataRouterContext","DataRouterStateContext","AwaitContext","NavigationContext","LocationContext","RouteContext","outlet","matches","RouteErrorContext","useHref","to","relative","useInRouterContext","invariant","basename","navigator","useContext","hash","pathname","search","useResolvedPath","joinedPathname","joinPaths","createHref","useLocation","location","useNavigationType","navigationType","useMatch","pattern","useMemo","matchPath","useNavigate","locationPathname","routePathnamesJson","JSON","stringify","getPathContributingMatches","map","match","pathnameBase","activeRef","useRef","current","useCallback","options","go","path","resolveTo","parse","replace","push","state","OutletContext","useOutletContext","useOutlet","context","Provider","useParams","routeMatch","length","params","useRoutes","routes","locationArg","dataRouterStateContext","parentMatches","parentParams","parentPathnameBase","route","locationFromContext","parsedLocationArg","parsePath","startsWith","remainingPathname","slice","matchRoutes","renderedMatches","_renderMatches","assign","encodeLocation","undefined","key","NavigationType","Pop","DefaultErrorElement","useRouteError","message","isRouteErrorResponse","status","statusText","Error","stack","lightgrey","preStyles","padding","backgroundColor","codeStyles","Fragment","style","fontStyle","RenderErrorBoundary","Component","constructor","props","super","this","static","componentDidCatch","errorInfo","console","render","children","component","RenderedRoute","routeContext","dataStaticRouterContext","errorElement","_deepestRenderedBoundaryId","id","dataRouterState","errors","errorIndex","findIndex","m","Math","min","reduceRight","index","getChildren","concat","element","DataRouterHook","DataRouterStateHook","AwaitRenderStatus","useDataRouterState","hookName","useNavigation","UseNavigation","navigation","useRevalidator","dataRouterContext","ctx","useDataRouterContext","UseRevalidator","revalidate","router","revalidation","useMatches","loaderData","UseMatches","data","handle","useLoaderData","UseLoaderData","thisRoute","useRouteLoaderData","routeId","UseRouteLoaderData","useActionData","UseActionData","values","actionData","UseRouteError","useAsyncValue","_data","useAsyncError","_error","RouterProvider","fallbackElement","useSyncExternalStoreShim","n","navigate","opts","preventScrollReset","Router","historyAction","initialized","Routes","MemoryRouter","initialEntries","initialIndex","historyRef","createMemoryHistory","v5Compat","history","setState","action","listen","Navigate","Outlet","Route","_props","basenameProp","locationProp","staticProp","navigationContext","trailingPathname","stripBasename","createRoutesFromChildren","Await","resolve","AwaitErrorBoundary","ResolveAwait","neverSettledPromise","Promise","promise","pending","renderError","reject","catch","defineProperty","get","_tracked","success","then","AbortedDeferredError","parentPath","Children","forEach","isValidElement","type","apply","treePath","join","caseSensitive","loader","hasErrorBoundary","shouldRevalidate","renderMatches","enhanceManualRouteObjects","routeClone","createMemoryRouter","createRouter","hydrationData","initialize"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * React Router v6.4.4
2
+ * React Router v6.4.5-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -285,7 +285,7 @@
285
285
  * Returns the full href for the given "to" value. This is useful for building
286
286
  * custom links that are also accessible and preserve right-click behavior.
287
287
  *
288
- * @see https://reactrouter.com/docs/en/v6/hooks/use-href
288
+ * @see https://reactrouter.com/hooks/use-href
289
289
  */
290
290
 
291
291
  function useHref(to, _temp) {
@@ -324,7 +324,7 @@
324
324
  /**
325
325
  * Returns true if this component is a descendant of a <Router>.
326
326
  *
327
- * @see https://reactrouter.com/docs/en/v6/hooks/use-in-router-context
327
+ * @see https://reactrouter.com/hooks/use-in-router-context
328
328
  */
329
329
 
330
330
  function useInRouterContext() {
@@ -338,7 +338,7 @@
338
338
  * "routing" in your app, and we'd like to know what your use case is. We may
339
339
  * be able to provide something higher-level to better suit your needs.
340
340
  *
341
- * @see https://reactrouter.com/docs/en/v6/hooks/use-location
341
+ * @see https://reactrouter.com/hooks/use-location
342
342
  */
343
343
 
344
344
  function useLocation() {
@@ -351,7 +351,7 @@
351
351
  * Returns the current navigation action which describes how the router came to
352
352
  * the current location, either by a pop, push, or replace on the history stack.
353
353
  *
354
- * @see https://reactrouter.com/docs/en/v6/hooks/use-navigation-type
354
+ * @see https://reactrouter.com/hooks/use-navigation-type
355
355
  */
356
356
 
357
357
  function useNavigationType() {
@@ -362,7 +362,7 @@
362
362
  * This is useful for components that need to know "active" state, e.g.
363
363
  * <NavLink>.
364
364
  *
365
- * @see https://reactrouter.com/docs/en/v6/hooks/use-match
365
+ * @see https://reactrouter.com/hooks/use-match
366
366
  */
367
367
 
368
368
  function useMatch(pattern) {
@@ -382,7 +382,7 @@
382
382
  * Returns an imperative method for changing the location. Used by <Link>s, but
383
383
  * may also be used by other elements to change the location.
384
384
  *
385
- * @see https://reactrouter.com/docs/en/v6/hooks/use-navigate
385
+ * @see https://reactrouter.com/hooks/use-navigate
386
386
  */
387
387
  function useNavigate() {
388
388
  !useInRouterContext() ? router.invariant(false, // TODO: This error is probably because they somehow have 2 versions of the
@@ -433,7 +433,7 @@
433
433
  /**
434
434
  * Returns the context (if provided) for the child route at this level of the route
435
435
  * hierarchy.
436
- * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet-context
436
+ * @see https://reactrouter.com/hooks/use-outlet-context
437
437
  */
438
438
 
439
439
  function useOutletContext() {
@@ -443,7 +443,7 @@
443
443
  * Returns the element for the child route at this level of the route
444
444
  * hierarchy. Used internally by <Outlet> to render child routes.
445
445
  *
446
- * @see https://reactrouter.com/docs/en/v6/hooks/use-outlet
446
+ * @see https://reactrouter.com/hooks/use-outlet
447
447
  */
448
448
 
449
449
  function useOutlet(context) {
@@ -461,7 +461,7 @@
461
461
  * Returns an object of key/value pairs of the dynamic params from the current
462
462
  * URL that were matched by the route path.
463
463
  *
464
- * @see https://reactrouter.com/docs/en/v6/hooks/use-params
464
+ * @see https://reactrouter.com/hooks/use-params
465
465
  */
466
466
 
467
467
  function useParams() {
@@ -474,7 +474,7 @@
474
474
  /**
475
475
  * Resolves the pathname of the given `to` value against the current location.
476
476
  *
477
- * @see https://reactrouter.com/docs/en/v6/hooks/use-resolved-path
477
+ * @see https://reactrouter.com/hooks/use-resolved-path
478
478
  */
479
479
 
480
480
  function useResolvedPath(to, _temp2) {
@@ -496,7 +496,7 @@
496
496
  * elements in the tree must render an <Outlet> to render their child route's
497
497
  * element.
498
498
  *
499
- * @see https://reactrouter.com/docs/en/v6/hooks/use-routes
499
+ * @see https://reactrouter.com/hooks/use-routes
500
500
  */
501
501
 
502
502
  function useRoutes(routes, locationArg) {
@@ -760,7 +760,7 @@
760
760
  })(DataRouterStateHook || (DataRouterStateHook = {}));
761
761
 
762
762
  function getDataRouterConsoleError(hookName) {
763
- return hookName + " must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.";
763
+ return hookName + " must be used within a data router. See https://reactrouter.com/routers/picking-a-router.";
764
764
  }
765
765
 
766
766
  function useDataRouterContext(hookName) {
@@ -954,7 +954,7 @@
954
954
  /**
955
955
  * A <Router> that stores all entries in memory.
956
956
  *
957
- * @see https://reactrouter.com/docs/en/v6/routers/memory-router
957
+ * @see https://reactrouter.com/router-components/memory-router
958
958
  */
959
959
  function MemoryRouter(_ref2) {
960
960
  let {
@@ -995,7 +995,7 @@
995
995
  * able to use hooks. In functional components, we recommend you use the
996
996
  * `useNavigate` hook instead.
997
997
  *
998
- * @see https://reactrouter.com/docs/en/v6/components/navigate
998
+ * @see https://reactrouter.com/components/navigate
999
999
  */
1000
1000
  function Navigate(_ref3) {
1001
1001
  let {
@@ -1030,7 +1030,7 @@
1030
1030
  /**
1031
1031
  * Renders the child route's element, if there is one.
1032
1032
  *
1033
- * @see https://reactrouter.com/docs/en/v6/components/outlet
1033
+ * @see https://reactrouter.com/components/outlet
1034
1034
  */
1035
1035
  function Outlet(props) {
1036
1036
  return useOutlet(props.context);
@@ -1039,7 +1039,7 @@
1039
1039
  /**
1040
1040
  * Declares an element that should be rendered at a certain URL path.
1041
1041
  *
1042
- * @see https://reactrouter.com/docs/en/v6/components/route
1042
+ * @see https://reactrouter.com/components/route
1043
1043
  */
1044
1044
  function Route(_props) {
1045
1045
  router.invariant(false, "A <Route> is only ever to be used as the child of <Routes> element, " + "never rendered directly. Please wrap your <Route> in a <Routes>.") ;
@@ -1052,7 +1052,7 @@
1052
1052
  * router that is more specific to your environment such as a <BrowserRouter>
1053
1053
  * in web browsers or a <StaticRouter> for server rendering.
1054
1054
  *
1055
- * @see https://reactrouter.com/docs/en/v6/routers/router
1055
+ * @see https://reactrouter.com/router-components/router
1056
1056
  */
1057
1057
  function Router(_ref4) {
1058
1058
  let {
@@ -1120,7 +1120,7 @@
1120
1120
  * A container for a nested tree of <Route> elements that renders the branch
1121
1121
  * that best matches the current location.
1122
1122
  *
1123
- * @see https://reactrouter.com/docs/en/v6/components/routes
1123
+ * @see https://reactrouter.com/components/routes
1124
1124
  */
1125
1125
  function Routes(_ref5) {
1126
1126
  let {
@@ -1283,7 +1283,7 @@
1283
1283
  * either a `<Route>` element or an array of them. Used internally by
1284
1284
  * `<Routes>` to create a route config from its children.
1285
1285
  *
1286
- * @see https://reactrouter.com/docs/en/v6/utils/create-routes-from-children
1286
+ * @see https://reactrouter.com/utils/create-routes-from-children
1287
1287
  */
1288
1288
 
1289
1289