{"version":3,"file":"static/js/lib-router.bda08261.js","sources":["webpack://mw-mypage2/./node_modules/@remix-run/router/dist/router.js","webpack://mw-mypage2/./node_modules/react-router-dom/dist/index.js","webpack://mw-mypage2/./node_modules/react-router/dist/index.js"],"sourcesContent":["/**\n * @remix-run/router v1.21.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Action[\"Pop\"] = \"POP\";\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Action[\"Push\"] = \"PUSH\";\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    initialEntries = [\"/\"],\n    initialIndex,\n    v5Compat = false\n  } = options;\n  let entries; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n  let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n  let action = Action.Pop;\n  let listener = null;\n  function clampIndex(n) {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation() {\n    return entries[index];\n  }\n  function createMemoryLocation(to, state, key) {\n    if (state === void 0) {\n      state = null;\n    }\n    let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n    return location;\n  }\n  function createHref(to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  let history = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\"\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 1\n        });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 0\n        });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta\n        });\n      }\n    },\n    listen(fn) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    }\n  };\n  return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createBrowserLocation(window, globalHistory) {\n    let {\n      pathname,\n      search,\n      hash\n    } = window.location;\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createBrowserHref(window, to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createHashLocation(window, globalHistory) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\"\n    } = parsePath(window.location.hash.substr(1));\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createHashHref(window, to) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n  function validateHashLocation(location, to) {\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n  }\n  return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\nfunction warning(cond, message) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index\n  };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n  if (state === void 0) {\n    state = null;\n  }\n  let location = _extends({\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\"\n  }, typeof to === \"string\" ? parsePath(to) : to, {\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: to && to.key || key || createKey()\n  });\n  return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\"\n  } = _ref;\n  if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n  let parsedPath = {};\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n  return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    window = document.defaultView,\n    v5Compat = false\n  } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener = null;\n  let index = getIndex();\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), \"\");\n  }\n  function getIndex() {\n    let state = globalHistory.state || {\n      idx: null\n    };\n    return state.idx;\n  }\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({\n        action,\n        location: history.location,\n        delta\n      });\n    }\n  }\n  function push(to, state) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 1\n      });\n    }\n  }\n  function replace(to, state) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 0\n      });\n    }\n  }\n  function createURL(to) {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n    return new URL(href, base);\n  }\n  let history = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    }\n  };\n  return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n  ResultType[\"data\"] = \"data\";\n  ResultType[\"deferred\"] = \"deferred\";\n  ResultType[\"redirect\"] = \"redirect\";\n  ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n  return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  if (manifest === void 0) {\n    manifest = {};\n  }\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, String(index)];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n    invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\".  Route \" + \"id's must be globally unique within Data Router usages\");\n    if (isIndexRoute(route)) {\n      let indexRoute = _extends({}, route, mapRouteProperties(route), {\n        id\n      });\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n        id,\n        children: undefined\n      });\n      manifest[id] = pathOrLayoutRoute;\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n      }\n      return pathOrLayoutRoute;\n    }\n  });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n  if (basename === void 0) {\n    basename = \"/\";\n  }\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n  let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n  if (pathname == null) {\n    return null;\n  }\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch(branches[i], decoded, allowPartial);\n  }\n  return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n  let {\n    route,\n    pathname,\n    params\n  } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle\n  };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n  if (branches === void 0) {\n    branches = [];\n  }\n  if (parentsMeta === void 0) {\n    parentsMeta = [];\n  }\n  if (parentPath === void 0) {\n    parentPath = \"\";\n  }\n  let flattenRoute = (route, index, relativePath) => {\n    let meta = {\n      relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route\n    };\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n      // Our types know better, but runtime JS may not!\n      // @ts-expect-error\n      route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta\n    });\n  };\n  routes.forEach((route, index) => {\n    var _route$path;\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n  return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n  let [first, ...rest] = segments;\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n  let result = [];\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n  branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n  : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n  return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n  let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n  return siblings ?\n  // If two routes are siblings, we should try to match the earlier sibling\n  // first. This allows people to have fine-grained control over the matching\n  // behavior by simply putting routes with identical paths in the order they\n  // want them tried.\n  a[a.length - 1] - b[b.length - 1] :\n  // Otherwise, it doesn't really make sense to rank non-siblings by index,\n  // so they sort equally.\n  0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n  if (allowPartial === void 0) {\n    allowPartial = false;\n  }\n  let {\n    routesMeta\n  } = branch;\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath({\n      path: meta.relativePath,\n      caseSensitive: meta.caseSensitive,\n      end\n    }, remainingPathname);\n    let route = meta.route;\n    if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n      match = matchPath({\n        path: meta.relativePath,\n        caseSensitive: meta.caseSensitive,\n        end: false\n      }, remainingPathname);\n    }\n    if (!match) {\n      return null;\n    }\n    Object.assign(matchedParams, match.params);\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n      route\n    });\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n  return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n  if (params === void 0) {\n    params = {};\n  }\n  let path = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n    path = path.replace(/\\*$/, \"/*\");\n  }\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n  const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n  const segments = path.split(/\\/+/).map((segment, index, array) => {\n    const isLastSegment = index === array.length - 1;\n    // only apply the splat if it's the last segment\n    if (isLastSegment && segment === \"*\") {\n      const star = \"*\";\n      // Apply the splat\n      return stringify(params[star]);\n    }\n    const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n    if (keyMatch) {\n      const [, key, optional] = keyMatch;\n      let param = params[key];\n      invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n      return stringify(param);\n    }\n    // Remove any optional markers from optional static segments\n    return segment.replace(/\\?$/g, \"\");\n  })\n  // Remove empty segments\n  .filter(segment => !!segment);\n  return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n  if (typeof pattern === \"string\") {\n    pattern = {\n      path: pattern,\n      caseSensitive: false,\n      end: true\n    };\n  }\n  let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n  let match = pathname.match(matcher);\n  if (!match) return null;\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params = compiledParams.reduce((memo, _ref, index) => {\n    let {\n      paramName,\n      isOptional\n    } = _ref;\n    // We need to compute the pathnameBase here using the raw splat value\n    // instead of using params[\"*\"] later because it will be decoded then\n    if (paramName === \"*\") {\n      let splatValue = captureGroups[index] || \"\";\n      pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n    }\n    const value = captureGroups[index];\n    if (isOptional && !value) {\n      memo[paramName] = undefined;\n    } else {\n      memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n    }\n    return memo;\n  }, {});\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern\n  };\n}\nfunction compilePath(path, caseSensitive, end) {\n  if (caseSensitive === void 0) {\n    caseSensitive = false;\n  }\n  if (end === void 0) {\n    end = true;\n  }\n  warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n  let params = [];\n  let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n  .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n  .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n  .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n    params.push({\n      paramName,\n      isOptional: isOptional != null\n    });\n    return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n  });\n  if (path.endsWith(\"*\")) {\n    params.push({\n      paramName: \"*\"\n    });\n    regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n    : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else ;\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n  return [matcher, params];\n}\nfunction decodePath(value) {\n  try {\n    return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n  } catch (error) {\n    warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n    return value;\n  }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n  if (basename === \"/\") return pathname;\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n  return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n  if (fromPathname === void 0) {\n    fromPathname = \"/\";\n  }\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\"\n  } = typeof to === \"string\" ? parsePath(to) : to;\n  let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash)\n  };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n  relativeSegments.forEach(segment => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n  return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"].  Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nfunction getPathContributingMatches(matches) {\n  return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n  let pathMatches = getPathContributingMatches(matches);\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n  }\n  return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n  if (isPathRelative === void 0) {\n    isPathRelative = false;\n  }\n  let to;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = _extends({}, toArg);\n    invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n    invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n    invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n  }\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n  let from;\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n      to.pathname = toSegments.join(\"/\");\n    }\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n  let path = resolvePath(to, from);\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n    path.pathname += \"/\";\n  }\n  return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nconst json = function json(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(data), _extends({}, responseInit, {\n    headers\n  }));\n};\nclass DataWithResponseInit {\n  constructor(data, init) {\n    this.type = \"DataWithResponseInit\";\n    this.data = data;\n    this.init = init || null;\n  }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n  return new DataWithResponseInit(data, typeof init === \"number\" ? {\n    status: init\n  } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n  constructor(data, responseInit) {\n    this.pendingKeysSet = new Set();\n    this.subscribers = new Set();\n    this.deferredKeys = [];\n    invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject;\n    this.abortPromise = new Promise((_, r) => reject = r);\n    this.controller = new AbortController();\n    let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n    this.data = Object.entries(data).reduce((acc, _ref2) => {\n      let [key, value] = _ref2;\n      return Object.assign(acc, {\n        [key]: this.trackPromise(key, value)\n      });\n    }, {});\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n    this.init = responseInit;\n  }\n  trackPromise(key, value) {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n    Object.defineProperty(promise, \"_tracked\", {\n      get: () => true\n    });\n    return promise;\n  }\n  onSettle(promise, key, error, data) {\n    if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      return Promise.reject(error);\n    }\n    this.pendingKeysSet.delete(key);\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n      Object.defineProperty(promise, \"_error\", {\n        get: () => undefinedError\n      });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n    Object.defineProperty(promise, \"_data\", {\n      get: () => data\n    });\n    this.emit(false, key);\n    return data;\n  }\n  emit(aborted, settledKey) {\n    this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n  }\n  subscribe(fn) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n  async resolveData(signal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise(resolve => {\n        this.subscribe(aborted => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n  get unwrappedData() {\n    invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n    return Object.entries(this.data).reduce((acc, _ref3) => {\n      let [key, value] = _ref3;\n      return Object.assign(acc, {\n        [key]: unwrapTrackedPromise(value)\n      });\n    }, {});\n  }\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\nfunction isTrackedPromise(value) {\n  return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nconst defer = function defer(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n  if (init === void 0) {\n    init = 302;\n  }\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = {\n      status: responseInit\n    };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n  return new Response(null, _extends({}, responseInit, {\n    headers\n  }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n  constructor(status, statusText, data, internal) {\n    if (internal === void 0) {\n      internal = false;\n    }\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n  return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_FETCHER = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_BLOCKER = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n  const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n  const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n  invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n  let mapRouteProperties;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Routes keyed by ID\n  let manifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n  let inFlightDataRoutes;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n  // Config driven behavior flags\n  let future = _extends({\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    v7_skipActionErrorRevalidation: false\n  }, init.future);\n  // Cleanup function for history\n  let unlistenHistory = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialErrors = null;\n  if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname\n    });\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = {\n      [route.id]: error\n    };\n  }\n  // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n  // our initial match is a splat route, clear them out so we run through lazy\n  // discovery on hydration in case there's a more accurate lazy route match.\n  // In SSR apps (with `hydrationData`), we expect that the server will send\n  // up the proper matched routes so we don't want to run lazy discovery on\n  // initial hydration and want to hydrate into the splat route.\n  if (initialMatches && !init.hydrationData) {\n    let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n    if (fogOfWar.active) {\n      initialMatches = null;\n    }\n  }\n  let initialized;\n  if (!initialMatches) {\n    initialized = false;\n    initialMatches = [];\n    // If partial hydration and fog of war is enabled, we will be running\n    // `patchRoutesOnNavigation` during hydration so include any partial matches as\n    // the initial matches so we can properly render `HydrateFallback`'s\n    if (future.v7_partialHydration) {\n      let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatches = fogOfWar.matches;\n      }\n    }\n  } else if (initialMatches.some(m => m.route.lazy)) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!initialMatches.some(m => m.route.loader)) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n      initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    } else {\n      initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n  let router;\n  let state = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n    actionData: init.hydrationData && init.hydrationData.actionData || null,\n    errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map()\n  };\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction = Action.Pop;\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n  // AbortController for the active navigation\n  let pendingNavigationController;\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions = new Map();\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener = null;\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes = [];\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads = new Set();\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map();\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map();\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set();\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map();\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map();\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set();\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map();\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map();\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let unblockBlockerHistoryUpdate = undefined;\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(_ref => {\n      let {\n        action: historyAction,\n        location,\n        delta\n      } = _ref;\n      // Ignore this event if it was just us resetting the URL from a\n      // blocked POP navigation\n      if (unblockBlockerHistoryUpdate) {\n        unblockBlockerHistoryUpdate();\n        unblockBlockerHistoryUpdate = undefined;\n        return;\n      }\n      warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs.  This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n      let blockerKey = shouldBlockNavigation({\n        currentLocation: state.location,\n        nextLocation: location,\n        historyAction\n      });\n      if (blockerKey && delta != null) {\n        // Restore the URL to match the current UI, but don't update router state\n        let nextHistoryUpdatePromise = new Promise(resolve => {\n          unblockBlockerHistoryUpdate = resolve;\n        });\n        init.history.go(delta * -1);\n        // Put the blocker into a blocked state\n        updateBlocker(blockerKey, {\n          state: \"blocked\",\n          location,\n          proceed() {\n            updateBlocker(blockerKey, {\n              state: \"proceeding\",\n              proceed: undefined,\n              reset: undefined,\n              location\n            });\n            // Re-do the same POP navigation we just blocked, after the url\n            // restoration is also complete.  See:\n            // https://github.com/remix-run/react-router/issues/11613\n            nextHistoryUpdatePromise.then(() => init.history.go(delta));\n          },\n          reset() {\n            let blockers = new Map(state.blockers);\n            blockers.set(blockerKey, IDLE_BLOCKER);\n            updateState({\n              blockers\n            });\n          }\n        });\n        return;\n      }\n      return startNavigation(historyAction, location);\n    });\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(Action.Pop, state.location, {\n        initialHydration: true\n      });\n    }\n    return router;\n  }\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n  // Subscribe to state updates for the router\n  function subscribe(fn) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n  // Update our state and notify the calling context of the change\n  function updateState(newState, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state = _extends({}, state, newState);\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers = [];\n    let deletedFetchersKeys = [];\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach(subscriber => subscriber(state, {\n      deletedFetchers: deletedFetchersKeys,\n      viewTransitionOpts: opts.viewTransitionOpts,\n      flushSync: opts.flushSync === true\n    }));\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach(key => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach(key => deleteFetcher(key));\n    }\n  }\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(location, newState, _temp) {\n    var _location$state, _location$state2;\n    let {\n      flushSync\n    } = _temp === void 0 ? {} : _temp;\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n    let actionData;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n    // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n    if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === Action.Replace) {\n      init.history.replace(location, location.state);\n    }\n    let viewTransitionOpts;\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === Action.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location\n      };\n    }\n    updateState(_extends({}, newState, {\n      actionData,\n      loaderData,\n      historyAction: pendingAction,\n      location,\n      initialized: true,\n      navigation: IDLE_NAVIGATION,\n      revalidation: \"idle\",\n      restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n      preventScrollReset,\n      blockers\n    }), {\n      viewTransitionOpts,\n      flushSync: flushSync === true\n    });\n    // Reset stateful navigation vars\n    pendingAction = Action.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n  }\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(to, opts) {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n    let historyAction = Action.Push;\n    if (userReplace === true) {\n      historyAction = Action.Replace;\n    } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = Action.Replace;\n    }\n    let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n    let flushSync = (opts && opts.flushSync) === true;\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction\n    });\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey, IDLE_BLOCKER);\n          updateState({\n            blockers\n          });\n        }\n      });\n      return;\n    }\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.viewTransition,\n      flushSync\n    });\n  }\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({\n      revalidation: \"loading\"\n    });\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true\n      });\n      return;\n    }\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n      overrideNavigation: state.navigation,\n      // Proxy through any rending view transition\n      enableViewTransition: pendingViewTransitionEnabled === true\n    });\n  }\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(historyAction, location, opts) {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches = matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let {\n        error,\n        notFoundMatches,\n        route\n      } = handleNavigational404(location.pathname);\n      completeNavigation(location, {\n        matches: notFoundMatches,\n        loaderData: {},\n        errors: {\n          [route.id]: error\n        }\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial hydration will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n      completeNavigation(location, {\n        matches\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n    let pendingActionResult;\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [findNearestBoundary(matches).route.id, {\n        type: ResultType.error,\n        error: opts.pendingError\n      }];\n    } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n        replace: opts.replace,\n        flushSync\n      });\n      if (actionResult.shortCircuited) {\n        return;\n      }\n      // If we received a 404 from handleAction, it's because we couldn't lazily\n      // discover the destination route so we don't want to call loaders\n      if (actionResult.pendingActionResult) {\n        let [routeId, result] = actionResult.pendingActionResult;\n        if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n          pendingNavigationController = null;\n          completeNavigation(location, {\n            matches: actionResult.matches,\n            loaderData: {},\n            errors: {\n              [routeId]: result.error\n            }\n          });\n          return;\n        }\n      }\n      matches = actionResult.matches || matches;\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // No need to do fog of war matching again on loader execution\n      fogOfWar.active = false;\n      // Create a GET request for the loaders\n      request = createClientSideRequest(init.history, request.url, request.signal);\n    }\n    // Call loaders\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors\n    } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n    if (shortCircuited) {\n      return;\n    }\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n    completeNavigation(location, _extends({\n      matches: updatedMatches || matches\n    }, getActionDataForCommit(pendingActionResult), {\n      loaderData,\n      errors\n    }));\n  }\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    interruptActiveLoads();\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({\n      navigation\n    }, {\n      flushSync: opts.flushSync === true\n    });\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [boundaryId, {\n            type: ResultType.error,\n            error: discoverResult.error\n          }]\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          notFoundMatches,\n          error,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [route.id, {\n            type: ResultType.error,\n            error\n          }]\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    // Call our action and get the result\n    let result;\n    let actionMatch = getTargetMatch(matches, location);\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id\n        })\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", state, request, [actionMatch], matches, null);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        return {\n          shortCircuited: true\n        };\n      }\n    }\n    if (isRedirectResult(result)) {\n      let replace;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename);\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      // By default, all submissions to the current location are REPLACE\n      // navigations, but if the action threw an error that'll be rendered in\n      // an errorElement, we fall back to PUSH so that the user can use the\n      // back button to get back to the pre-submission form location to try\n      // again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = Action.Push;\n      }\n      return {\n        matches,\n        pendingActionResult: [boundaryMatch.route.id, result]\n      };\n    }\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result]\n    };\n  }\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n    // When fog of war is enabled, we enter our `loading` state earlier so we\n    // can discover new routes during the `loading` state.  We skip this if\n    // we've already run actions since we would have done our matching already.\n    // If the children() function threw then, we want to proceed with the\n    // partial matches it discovered.\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(_extends({\n          navigation: loadingNavigation\n        }, actionData !== undefined ? {\n          actionData\n        } : {}), {\n          flushSync\n        });\n      }\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          loaderData: {},\n          errors: {\n            [boundaryId]: discoverResult.error\n          }\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          error,\n          notFoundMatches,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error\n          }\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n    pendingNavigationLoadId = ++incrementingLoadId;\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(location, _extends({\n        matches,\n        loaderData: {},\n        // Commit pending error if we're short circuiting\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null\n      }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n        fetchers: new Map(state.fetchers)\n      } : {}), {\n        flushSync\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (shouldUpdateNavigationState) {\n      let updates = {};\n      if (!isFogOfWar) {\n        // Only update navigation/actionNData if we didn't already do it above\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== undefined) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, {\n        flushSync\n      });\n    }\n    revalidatingFetchers.forEach(rf => {\n      abortFetcher(rf.key);\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);\n    if (request.signal.aborted) {\n      return {\n        shortCircuited: true\n      };\n    }\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe(aborted => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n    // Preserve SSR errors during partial hydration\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      errors = _extends({}, state.errors, errors);\n    }\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n    return _extends({\n      matches,\n      loaderData,\n      errors\n    }, shouldUpdateFetchers ? {\n      fetchers: new Map(state.fetchers)\n    } : {});\n  }\n  function getUpdatedActionData(pendingActionResult) {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n      // This is cast to `any` currently because `RouteData`uses any and it\n      // would be a breaking change to use any.\n      // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n      return {\n        [pendingActionResult[0]]: pendingActionResult[1].data\n      };\n    } else if (state.actionData) {\n      if (Object.keys(state.actionData).length === 0) {\n        return null;\n      } else {\n        return state.actionData;\n      }\n    }\n  }\n  function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n    revalidatingFetchers.forEach(rf => {\n      let fetcher = state.fetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n      state.fetchers.set(rf.key, revalidatingFetcher);\n    });\n    return new Map(state.fetchers);\n  }\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(key, routeId, href, opts) {\n    if (isServer) {\n      throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n    }\n    abortFetcher(key);\n    let flushSync = (opts && opts.flushSync) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    if (!matches) {\n      setFetcherError(key, routeId, getInternalRouterError(404, {\n        pathname: normalizedPath\n      }), {\n        flushSync\n      });\n      return;\n    }\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n    if (error) {\n      setFetcherError(key, routeId, error, {\n        flushSync\n      });\n      return;\n    }\n    let match = getTargetMatch(matches, path);\n    let preventScrollReset = (opts && opts.preventScrollReset) === true;\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n      return;\n    }\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, {\n      routeId,\n      path\n    });\n    handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n  }\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n    function detectAndHandle405Error(m) {\n      if (!m.route.action && !m.route.lazy) {\n        let error = getInternalRouterError(405, {\n          method: submission.formMethod,\n          pathname: path,\n          routeId: routeId\n        });\n        setFetcherError(key, routeId, error, {\n          flushSync\n        });\n        return true;\n      }\n      return false;\n    }\n    if (!isFogOfWar && detectAndHandle405Error(match)) {\n      return;\n    }\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(requestMatches, path, fetchRequest.signal);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n        match = getTargetMatch(requestMatches, path);\n        if (detectAndHandle405Error(match)) {\n          return;\n        }\n      }\n    }\n    // Call the action for the fetcher\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\"action\", state, fetchRequest, [match], requestMatches, key);\n    let actionResult = actionResults[match.route.id];\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, false, {\n            fetcherSubmission: submission,\n            preventScrollReset\n          });\n        }\n      }\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n      let staleKey = rf.key;\n      let existingFetcher = state.fetchers.get(staleKey);\n      let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n      state.fetchers.set(staleKey, revalidatingFetcher);\n      abortFetcher(staleKey);\n      if (rf.controller) {\n        fetchControllers.set(staleKey, rf.controller);\n      }\n    });\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n    abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n    if (abortController.signal.aborted) {\n      return;\n    }\n    abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n        preventScrollReset\n      });\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n        preventScrollReset\n      });\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n    abortStaleFetchLoads(loadId);\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers)\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n        fetchers: new Map(state.fetchers)\n      });\n      isRevalidationRequired = false;\n    }\n  }\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, path, fetchRequest.signal);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        matches = discoverResult.matches;\n        match = getTargetMatch(matches, path);\n      }\n    }\n    // Call the loader for this fetcher route match\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\"loader\", state, fetchRequest, [match], matches, key);\n    let result = results[match.route.id];\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n    }\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false, {\n          preventScrollReset\n        });\n        return;\n      }\n    }\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {\n    let {\n      submission,\n      fetcherSubmission,\n      preventScrollReset,\n      replace\n    } = _temp2 === void 0 ? {} : _temp2;\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(location, new URL(request.url), basename);\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true\n    });\n    if (isBrowser) {\n      let isDocumentReload = false;\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n        // Hard reload if it's an absolute URL to a new origin\n        url.origin !== routerWindow.location.origin ||\n        // Hard reload if it's an absolute URL that does not match our basename\n        stripBasename(url.pathname, basename) == null;\n      }\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n    let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let {\n      formMethod,\n      formAction,\n      formEncType\n    } = state.navigation;\n    if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: _extends({}, activeSubmission, {\n          formAction: location\n        }),\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    }\n  }\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {\n    let results;\n    let dataResults = {};\n    try {\n      results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      matchesToLoad.forEach(m => {\n        dataResults[m.route.id] = {\n          type: ResultType.error,\n          error: e\n        };\n      });\n      return dataResults;\n    }\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        dataResults[routeId] = {\n          type: ResultType.redirect,\n          response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n      }\n    }\n    return dataResults;\n  }\n  async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {\n    let currentMatches = state.matches;\n    // Kick off loaders and fetchers in parallel\n    let loaderResultsPromise = callDataStrategy(\"loader\", state, request, matchesToLoad, matches, null);\n    let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {\n      if (f.matches && f.match && f.controller) {\n        let results = await callDataStrategy(\"loader\", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);\n        let result = results[f.match.route.id];\n        // Fetcher results are keyed by fetcher key from here on out, not routeId\n        return {\n          [f.key]: result\n        };\n      } else {\n        return Promise.resolve({\n          [f.key]: {\n            type: ResultType.error,\n            error: getInternalRouterError(404, {\n              pathname: f.path\n            })\n          }\n        });\n      }\n    }));\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});\n    await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);\n    return {\n      loaderResults,\n      fetcherResults\n    };\n  }\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.add(key);\n      }\n      abortFetcher(key);\n    });\n  }\n  function updateFetcherState(key, fetcher, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state.fetchers.set(key, fetcher);\n    updateState({\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function setFetcherError(key, routeId, error, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState({\n      errors: {\n        [boundaryMatch.route.id]: error\n      },\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function getFetcher(key) {\n    if (future.v7_fetcherPersist) {\n      activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n      // If this fetcher was previously marked for deletion, unmark it since we\n      // have a new instance\n      if (deletedFetchers.has(key)) {\n        deletedFetchers.delete(key);\n      }\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n  function deleteFetcher(key) {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n    deletedFetchers.delete(key);\n    cancelledFetcherLoads.delete(key);\n    state.fetchers.delete(key);\n  }\n  function deleteFetcherAndUpdateState(key) {\n    if (future.v7_fetcherPersist) {\n      let count = (activeFetchers.get(key) || 0) - 1;\n      if (count <= 0) {\n        activeFetchers.delete(key);\n        deletedFetchers.add(key);\n      } else {\n        activeFetchers.set(key, count);\n      }\n    } else {\n      deleteFetcher(key);\n    }\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n  }\n  function abortFetcher(key) {\n    let controller = fetchControllers.get(key);\n    if (controller) {\n      controller.abort();\n      fetchControllers.delete(key);\n    }\n  }\n  function markFetchersDone(keys) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n  function markFetchRedirectsDone() {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, \"Expected fetcher: \" + key);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n  function abortStaleFetchLoads(landedId) {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, \"Expected fetcher: \" + key);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n  function getBlocker(key, fn) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n    return blocker;\n  }\n  function deleteBlocker(key) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key, newBlocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({\n      blockers\n    });\n  }\n  function shouldBlockNavigation(_ref2) {\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = _ref2;\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({\n      currentLocation,\n      nextLocation,\n      historyAction\n    })) {\n      return blockerKey;\n    }\n  }\n  function handleNavigational404(pathname) {\n    let error = getInternalRouterError(404, {\n      pathname\n    });\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(routesToUse);\n    // Cancel all pending deferred on 404s since we don't keep any routes\n    cancelActiveDeferreds();\n    return {\n      notFoundMatches: matches,\n      route,\n      error\n    };\n  }\n  function cancelActiveDeferreds(predicate) {\n    let cancelledRouteIds = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(positions, getPosition, getKey) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({\n          restoreScrollPosition: y\n        });\n      }\n    }\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n  function getScrollKey(location, matches) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n      return key || location.key;\n    }\n    return location.key;\n  }\n  function saveScrollPosition(location, matches) {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n  function getSavedScrollPosition(location, matches) {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n  function checkFogOfWar(matches, routesToUse, pathname) {\n    if (patchRoutesOnNavigationImpl) {\n      if (!matches) {\n        let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n        return {\n          active: true,\n          matches: fogMatches || []\n        };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          // If we matched a dynamic param or a splat, it might only be because\n          // we haven't yet discovered other routes that would match with a\n          // higher score.  Call patchRoutesOnNavigation just to be sure\n          let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n          return {\n            active: true,\n            matches: partialMatches\n          };\n        }\n      }\n    }\n    return {\n      active: false,\n      matches: null\n    };\n  }\n  async function discoverRoutes(matches, pathname, signal) {\n    if (!patchRoutesOnNavigationImpl) {\n      return {\n        type: \"success\",\n        matches\n      };\n    }\n    let partialMatches = matches;\n    while (true) {\n      let isNonHMR = inFlightDataRoutes == null;\n      let routesToUse = inFlightDataRoutes || dataRoutes;\n      let localManifest = manifest;\n      try {\n        await patchRoutesOnNavigationImpl({\n          path: pathname,\n          matches: partialMatches,\n          patch: (routeId, children) => {\n            if (signal.aborted) return;\n            patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties);\n          }\n        });\n      } catch (e) {\n        return {\n          type: \"error\",\n          error: e,\n          partialMatches\n        };\n      } finally {\n        // If we are not in the middle of an HMR revalidation and we changed the\n        // routes, provide a new identity so when we `updateState` at the end of\n        // this navigation/fetch `router.routes` will be a new identity and\n        // trigger a re-run of memoized `router.routes` dependencies.\n        // HMR will already update the identity and reflow when it lands\n        // `inFlightDataRoutes` in `completeNavigation`\n        if (isNonHMR && !signal.aborted) {\n          dataRoutes = [...dataRoutes];\n        }\n      }\n      if (signal.aborted) {\n        return {\n          type: \"aborted\"\n        };\n      }\n      let newMatches = matchRoutes(routesToUse, pathname, basename);\n      if (newMatches) {\n        return {\n          type: \"success\",\n          matches: newMatches\n        };\n      }\n      let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n      // Avoid loops if the second pass results in the same partial matches\n      if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {\n        return {\n          type: \"success\",\n          matches: null\n        };\n      }\n      partialMatches = newPartialMatches;\n    }\n  }\n  function _internalSetRoutes(newRoutes) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n  }\n  function patchRoutes(routeId, children) {\n    let isNonHMR = inFlightDataRoutes == null;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n    // If we are not in the middle of an HMR revalidation and we changed the\n    // routes, provide a new identity and trigger a reflow via `updateState`\n    // to re-run memoized `router.routes` dependencies.\n    // HMR will already update the identity and reflow when it lands\n    // `inFlightDataRoutes` in `completeNavigation`\n    if (isNonHMR) {\n      dataRoutes = [...dataRoutes];\n      updateState({});\n    }\n  }\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: to => init.history.createHref(to),\n    encodeLocation: to => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes\n  };\n  return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n  invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n  let manifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties;\n  if (opts != null && opts.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts != null && opts.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future = _extends({\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false\n  }, opts ? opts.future : null);\n  let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(request, _temp3) {\n    let {\n      requestContext,\n      skipLoaderErrorBubbling,\n      dataStrategy\n    } = _temp3 === void 0 ? {} : _temp3;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, {\n        method\n      });\n      let {\n        matches: methodNotAllowedMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n      let {\n        matches: notFoundMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null);\n    if (isResponse(result)) {\n      return result;\n    }\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return _extends({\n      location,\n      basename\n    }, result);\n  }\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(request, _temp4) {\n    let {\n      routeId,\n      requestContext,\n      dataStrategy\n    } = _temp4 === void 0 ? {} : _temp4;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, {\n        method\n      });\n    } else if (!matches) {\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match);\n    if (isResponse(result)) {\n      return result;\n    }\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n    if (result.loaderData) {\n      var _result$activeDeferre;\n      let data = Object.values(result.loaderData)[0];\n      if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n    return undefined;\n  }\n  async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n    invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n        return result;\n      }\n      let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch);\n      return isResponse(result) ? result : _extends({}, result, {\n        actionData: null,\n        actionHeaders: {}\n      });\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n  async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n    let result;\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")\n        }\n      });\n    }\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    }\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: {\n          [actionMatch.route.id]: result.data\n        },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal\n    });\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n      let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n      // action status codes take precedence over loader status codes\n      return _extends({}, context, {\n        statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n        actionData: null,\n        actionHeaders: _extends({}, result.headers ? {\n          [actionMatch.route.id]: result.headers\n        } : {})\n      });\n    }\n    let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null);\n    return _extends({}, context, {\n      actionData: {\n        [actionMatch.route.id]: result.data\n      }\n    }, result.statusCode ? {\n      statusCode: result.statusCode\n    } : {}, {\n      actionHeaders: result.headers ? {\n        [actionMatch.route.id]: result.headers\n      } : {}\n    });\n  }\n  async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n    let isRouteRequest = routeMatch != null;\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch == null ? void 0 : routeMatch.route.id\n      });\n    }\n    let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n    let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n          [m.route.id]: null\n        }), {}),\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy);\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n    // Process and commit output from loaders\n    let activeDeferreds = new Map();\n    let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n    matches.forEach(match => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n    return _extends({}, context, {\n      matches,\n      activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n    });\n  }\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n    let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);\n    let dataResults = {};\n    await Promise.all(matches.map(async match => {\n      if (!(match.route.id in results)) {\n        return;\n      }\n      let result = results[match.route.id];\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        // Throw redirects and let the server handle them with an HTTP redirect\n        throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);\n      }\n      if (isResponse(result.result) && isRouteRequest) {\n        // For SSR single-route requests, we want to hand Responses back\n        // directly without unwrapping\n        throw result;\n      }\n      dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n    }));\n    return dataResults;\n  }\n  return {\n    dataRoutes,\n    query,\n    queryRoute\n  };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n  let newContext = _extends({}, context, {\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error\n    }\n  });\n  return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n  return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n  let contextualMatches;\n  let activeRouteMatch;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n  // Resolve the relative path\n  let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n  // Account for `?index` params when routing to the current location\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n    let nakedIndex = hasNakedIndexQuery(path.search);\n    if (activeRouteMatch.route.index && !nakedIndex) {\n      // Add one when we're targeting an index route\n      path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n    } else if (!activeRouteMatch.route.index && nakedIndex) {\n      // Remove existing ones when we're not\n      let params = new URLSearchParams(path.search);\n      let indexValues = params.getAll(\"index\");\n      params.delete(\"index\");\n      indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? \"?\" + qs : \"\";\n    }\n  }\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return {\n      path\n    };\n  }\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, {\n        method: opts.formMethod\n      })\n    };\n  }\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, {\n      type: \"invalid-body\"\n    })\n  });\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n  let formAction = stripHashFromPath(path);\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n      // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n      Array.from(opts.body.entries()).reduce((acc, _ref3) => {\n        let [name, value] = _ref3;\n        return \"\" + acc + name + \"=\" + value + \"\\n\";\n      }, \"\") : String(opts.body);\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text\n        }\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      try {\n        let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined\n          }\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n  invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n  let searchParams;\n  let formData;\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n  let submission = {\n    formMethod,\n    formAction,\n    formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined\n  };\n  if (isMutationMethod(submission.formMethod)) {\n    return {\n      path,\n      submission\n    };\n  }\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = \"?\" + searchParams;\n  return {\n    path: createPath(parsedPath),\n    submission\n  };\n}\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) {\n  if (includeBoundary === void 0) {\n    includeBoundary = false;\n  }\n  let index = matches.findIndex(m => m.route.id === boundaryId);\n  if (index >= 0) {\n    return matches.slice(0, includeBoundary ? index + 1 : index);\n  }\n  return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n  let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryMatches = matches;\n  if (initialHydration && state.errors) {\n    // On initial hydration, only consider matches up to _and including_ the boundary.\n    // This is inclusive to handle cases where a server loader ran successfully,\n    // a child server loader bubbled up to this route, but this route has\n    // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n    // we have a complete version of `loaderData`\n    boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true);\n  } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n    // If an action threw an error, we call loaders up to, but not including the\n    // boundary\n    boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]);\n  }\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n  let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let {\n      route\n    } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n    if (route.loader == null) {\n      return false;\n    }\n    if (initialHydration) {\n      return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n    }\n    // Always call the loader on new route instances and pending defer cancellations\n    if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n      return true;\n    }\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n    return shouldRevalidateLoader(match, _extends({\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params\n    }, submission, {\n      actionResult,\n      actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation ? false :\n      // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n      isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n      // Search params affect all loaders\n      currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n    }));\n  });\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial hydration (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n      return;\n    }\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null\n      });\n      return;\n    }\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.has(key)) {\n      // Always mark for revalidation if the fetcher was cancelled\n      cancelledFetcherLoads.delete(key);\n      shouldRevalidate = true;\n    } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params\n      }, submission, {\n        actionResult,\n        actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n      }));\n    }\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController()\n      });\n    }\n  });\n  return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n  // We dunno if we have a loader - gotta find out!\n  if (route.lazy) {\n    return true;\n  }\n  // No loader, nothing to initialize\n  if (!route.loader) {\n    return false;\n  }\n  let hasData = loaderData != null && loaderData[route.id] !== undefined;\n  let hasError = errors != null && errors[route.id] !== undefined;\n  // Don't run if we error'd during SSR\n  if (!hasData && hasError) {\n    return false;\n  }\n  // Explicitly opting-in to running on hydration\n  if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n    return true;\n  }\n  // Otherwise, run if we're not yet initialized with anything\n  return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n  let isNew =\n  // [a] -> [a, b]\n  !currentMatch ||\n  // [a, b] -> [a, c]\n  match.route.id !== currentMatch.route.id;\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n  );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n  return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n  var _childrenToPatch;\n  let childrenToPatch;\n  if (routeId) {\n    let route = manifest[routeId];\n    invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n    if (!route.children) {\n      route.children = [];\n    }\n    childrenToPatch = route.children;\n  } else {\n    childrenToPatch = routesToUse;\n  }\n  // Don't patch in routes we already know about so that `patch` is idempotent\n  // to simplify user-land code. This is useful because we re-call the\n  // `patchRoutesOnNavigation` function for matched routes with params.\n  let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute)));\n  let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || \"_\", \"patch\", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || \"0\")], manifest);\n  childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n  // Most optimal check is by id\n  if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n    return true;\n  }\n  // Second is by pathing differences\n  if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n    return false;\n  }\n  // Pathless layout routes are trickier since we need to check children.\n  // If they have no children then they're the same as far as we can tell\n  if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n    return true;\n  }\n  // Otherwise, we look to see if every child in the new route is already\n  // represented in the existing route's children\n  return newRoute.children.every((aChild, i) => {\n    var _existingRoute$childr;\n    return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild));\n  });\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n  if (!route.lazy) {\n    return;\n  }\n  let lazyRoute = await route.lazy();\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue = routeToUpdate[lazyRouteProperty];\n    let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n    // This property isn't static since it should always be updated based\n    // on the route updates\n    lazyRouteProperty !== \"hasErrorBoundary\";\n    warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n    if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n      routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n    }\n  }\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n    lazy: undefined\n  }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy(_ref4) {\n  let {\n    matches\n  } = _ref4;\n  let matchesToLoad = matches.filter(m => m.shouldLoad);\n  let results = await Promise.all(matchesToLoad.map(m => m.resolve()));\n  return results.reduce((acc, result, i) => Object.assign(acc, {\n    [matchesToLoad[i].route.id]: result\n  }), {});\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {\n  let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);\n  let dsMatches = matches.map((match, i) => {\n    let loadRoutePromise = loadRouteDefinitionsPromises[i];\n    let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);\n    // `resolve` encapsulates route.lazy(), executing the loader/action,\n    // and mapping return values/thrown errors to a `DataStrategyResult`.  Users\n    // can pass a callback to take fine-grained control over the execution\n    // of the loader/action\n    let resolve = async handlerOverride => {\n      if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n        shouldLoad = true;\n      }\n      return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({\n        type: ResultType.data,\n        result: undefined\n      });\n    };\n    return _extends({}, match, {\n      shouldLoad,\n      resolve\n    });\n  });\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: dsMatches,\n    request,\n    params: matches[0].params,\n    fetcherKey,\n    context: requestContext\n  });\n  // Wait for all routes to load here but 'swallow the error since we want\n  // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n  // called from `match.resolve()`\n  try {\n    await Promise.all(loadRouteDefinitionsPromises);\n  } catch (e) {\n    // No-op\n  }\n  return results;\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {\n  let result;\n  let onReject;\n  let runHandler = handler => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject;\n    // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise((_, r) => reject = r);\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n    let actualHandler = ctx => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n      }\n      return handler({\n        request,\n        params: match.params,\n        context: staticContext\n      }, ...(ctx !== undefined ? [ctx] : []));\n    };\n    let handlerPromise = (async () => {\n      try {\n        let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());\n        return {\n          type: \"data\",\n          result: val\n        };\n      } catch (e) {\n        return {\n          type: \"error\",\n          result: e\n        };\n      }\n    })();\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n  try {\n    let handler = match.route[type];\n    // If we have a route.lazy promise, await that first\n    if (loadRoutePromise) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n        // If the handler throws, don't let it immediately bubble out,\n        // since we need to let the lazy() execution finish so we know if this\n        // route has a boundary that can handle the error\n        runHandler(handler).catch(e => {\n          handlerError = e;\n        }), loadRoutePromise]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadRoutePromise;\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return {\n            type: ResultType.data,\n            result: undefined\n          };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n    invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // DataStrategyResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return {\n      type: ResultType.error,\n      result: e\n    };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n  return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n  let {\n    result,\n    type\n  } = dataStrategyResult;\n  if (isResponse(result)) {\n    let data;\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers\n      };\n    }\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers\n    };\n  }\n  if (type === ResultType.error) {\n    if (isDataWithResponseInit(result)) {\n      var _result$init2;\n      if (result.data instanceof Error) {\n        var _result$init;\n        return {\n          type: ResultType.error,\n          error: result.data,\n          statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status\n        };\n      }\n      // Convert thrown data() to ErrorResponse instances\n      result = new ErrorResponseImpl(((_result$init2 = result.init) == null ? void 0 : _result$init2.status) || 500, undefined, result.data);\n    }\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : undefined\n    };\n  }\n  if (isDeferredData(result)) {\n    var _result$init3, _result$init4;\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: (_result$init3 = result.init) == null ? void 0 : _result$init3.status,\n      headers: ((_result$init4 = result.init) == null ? void 0 : _result$init4.headers) && new Headers(result.init.headers)\n    };\n  }\n  if (isDataWithResponseInit(result)) {\n    var _result$init5, _result$init6;\n    return {\n      type: ResultType.data,\n      data: result.data,\n      statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n      headers: (_result$init6 = result.init) != null && _result$init6.headers ? new Headers(result.init.headers) : undefined\n    };\n  }\n  return {\n    type: ResultType.data,\n    data: result\n  };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n  let location = response.headers.get(\"Location\");\n  invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n    location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n    response.headers.set(\"Location\", location);\n  }\n  return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename) {\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init = {\n    signal\n  };\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let {\n      formMethod,\n      formEncType\n    } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({\n        \"Content-Type\": formEncType\n      });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n  return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n  let searchParams = new URLSearchParams();\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n  return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n  // Fill in loaderData/errors from our loaders\n  let loaderData = {};\n  let errors = null;\n  let statusCode;\n  let foundError = false;\n  let loaderHeaders = {};\n  let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n  // Process loader results into state.loaderData/state.errors\n  matches.forEach(match => {\n    if (!(match.route.id in results)) {\n      return;\n    }\n    let id = match.route.id;\n    let result = results[id];\n    invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n      errors = errors || {};\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = {\n      [pendingActionResult[0]]: pendingError\n    };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders\n  };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n  let {\n    loaderData,\n    errors\n  } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n  );\n  // Process results from our revalidating fetchers\n  revalidatingFetchers.forEach(rf => {\n    let {\n      key,\n      match,\n      controller\n    } = rf;\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      return;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = _extends({}, errors, {\n          [boundaryMatch.route.id]: result.error\n        });\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  });\n  return {\n    loaderData,\n    errors\n  };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n  let mergedLoaderData = _extends({}, newLoaderData);\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1]) ? {\n    // Clear out prior actionData on errors\n    actionData: {}\n  } : {\n    actionData: {\n      [pendingActionResult[0]]: pendingActionResult[1].data\n    }\n  };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n  let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n  return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n    id: \"__shim-error-route__\"\n  };\n  return {\n    matches: [{\n      params: {},\n      pathname: \"\",\n      pathnameBase: \"\",\n      route\n    }],\n    route\n  };\n}\nfunction getInternalRouterError(status, _temp5) {\n  let {\n    pathname,\n    routeId,\n    method,\n    type,\n    message\n  } = _temp5 === void 0 ? {} : _temp5;\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (method) {\n      errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n    }\n  }\n  return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n  let entries = Object.entries(results);\n  for (let i = entries.length - 1; i >= 0; i--) {\n    let [key, result] = entries[i];\n    if (isRedirectResult(result)) {\n      return {\n        key,\n        result\n      };\n    }\n  }\n}\nfunction stripHashFromPath(path) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath(_extends({}, parsedPath, {\n    hash: \"\"\n  }));\n}\nfunction isHashChangeOnly(a, b) {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\nfunction isDataStrategyResult(result) {\n  return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectDataStrategyResultResult(result) {\n  return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n  return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n  return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n  return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n  return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n  let deferred = value;\n  return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n  return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n  if (!isResponse(result)) {\n    return false;\n  }\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n  return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n  return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {\n  let entries = Object.entries(results);\n  for (let index = 0; index < entries.length; index++) {\n    let [routeId, result] = entries[index];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n    let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n    if (isDeferredResult(result) && isRevalidatingLoader) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      await resolveDeferredData(result, signal, false).then(result => {\n        if (result) {\n          results[routeId] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let {\n      key,\n      routeId,\n      controller\n    } = revalidatingFetchers[index];\n    let result = results[key];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    if (isDeferredResult(result)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      invariant(controller, \"Expected an AbortController for revalidating fetcher deferred result\");\n      await resolveDeferredData(result, controller.signal, true).then(result => {\n        if (result) {\n          results[key] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n  if (unwrap === void 0) {\n    unwrap = false;\n  }\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n  }\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data\n  };\n}\nfunction hasNakedIndexQuery(search) {\n  return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n  let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n  let {\n    formMethod,\n    formAction,\n    formEncType,\n    text,\n    formData,\n    json\n  } = navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined\n    };\n  }\n}\nfunction getLoadingNavigation(location, submission) {\n  if (submission) {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text\n    };\n    return navigation;\n  } else {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined\n    };\n    return navigation;\n  }\n}\nfunction getSubmittingNavigation(location, submission) {\n  let navigation = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text\n  };\n  return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n  if (submission) {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data\n    };\n    return fetcher;\n  } else {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data\n    };\n    return fetcher;\n  }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n  let fetcher = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined\n  };\n  return fetcher;\n}\nfunction getDoneFetcher(data) {\n  let fetcher = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data\n  };\n  return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n  if (transitions.size > 0) {\n    let json = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n    } catch (error) {\n      warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n    }\n  }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, data, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router DOM v6.28.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_logV6DeprecationWarnings, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n  return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n  return event.button === 0 && (\n  // Ignore everything but left clicks\n  !target || target === \"_self\") &&\n  // Let browser handle \"target=_blank\" etc.\n  !isModifiedEvent(event) // Ignore clicks with modifier keys\n  ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nfunction createSearchParams(init) {\n  if (init === void 0) {\n    init = \"\";\n  }\n  return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n    let value = init[key];\n    return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n  }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n  let searchParams = createSearchParams(locationSearch);\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach(value => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n  return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(document.createElement(\"form\"),\n      // @ts-expect-error if FormData supports the submitter parameter, this will throw\n      0);\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n  if (encType != null && !supportedFormEncTypes.has(encType)) {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n    return null;\n  }\n  return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n  let method;\n  let action;\n  let encType;\n  let formData;\n  let body;\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n    formData = new FormData(target);\n  } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n    let form = target.form;\n    if (form == null) {\n      throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n    }\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let {\n        name,\n        type,\n        value\n      } = target;\n      if (type === \"image\") {\n        let prefix = name ? name + \".\" : \"\";\n        formData.append(prefix + \"x\", \"0\");\n        formData.append(prefix + \"y\", \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n  return {\n    action,\n    method: method.toLowerCase(),\n    encType,\n    formData,\n    body\n  };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"viewTransition\"],\n  _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"viewTransition\", \"children\"],\n  _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"viewTransition\"];\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"6\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\nfunction createBrowserRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createBrowserHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createHashHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction parseHydrationData() {\n  var _window;\n  let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = _extends({}, state, {\n      errors: deserializeErrors(state.errors)\n    });\n  }\n  return state;\n}\nfunction deserializeErrors(errors) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n  isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n  FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\nfunction startTransitionSafe(cb) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\nfunction flushSyncSafe(cb) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\nclass Deferred {\n  constructor() {\n    this.status = \"pending\";\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = value => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = reason => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState();\n  let [vtContext, setVtContext] = React.useState({\n    isTransitioning: false\n  });\n  let [renderDfd, setRenderDfd] = React.useState();\n  let [transition, setTransition] = React.useState();\n  let [interruption, setInterruption] = React.useState();\n  let fetcherData = React.useRef(new Map());\n  let {\n    v7_startTransition\n  } = future || {};\n  let optInStartTransition = React.useCallback(cb => {\n    if (v7_startTransition) {\n      startTransitionSafe(cb);\n    } else {\n      cb();\n    }\n  }, [v7_startTransition]);\n  let setState = React.useCallback((newState, _ref2) => {\n    let {\n      deletedFetchers,\n      flushSync: flushSync,\n      viewTransitionOpts: viewTransitionOpts\n    } = _ref2;\n    deletedFetchers.forEach(key => fetcherData.current.delete(key));\n    newState.fetchers.forEach((fetcher, key) => {\n      if (fetcher.data !== undefined) {\n        fetcherData.current.set(key, fetcher.data);\n      }\n    });\n    let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== \"function\";\n    // If this isn't a view transition or it's not available in this browser,\n    // just update and be done with it\n    if (!viewTransitionOpts || isViewTransitionUnavailable) {\n      if (flushSync) {\n        flushSyncSafe(() => setStateImpl(newState));\n      } else {\n        optInStartTransition(() => setStateImpl(newState));\n      }\n      return;\n    }\n    // flushSync + startViewTransition\n    if (flushSync) {\n      // Flush through the context to mark DOM elements as transition=ing\n      flushSyncSafe(() => {\n        // Cancel any pending transitions\n        if (transition) {\n          renderDfd && renderDfd.resolve();\n          transition.skipTransition();\n        }\n        setVtContext({\n          isTransitioning: true,\n          flushSync: true,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      });\n      // Update the DOM\n      let t = router.window.document.startViewTransition(() => {\n        flushSyncSafe(() => setStateImpl(newState));\n      });\n      // Clean up after the animation completes\n      t.finished.finally(() => {\n        flushSyncSafe(() => {\n          setRenderDfd(undefined);\n          setTransition(undefined);\n          setPendingState(undefined);\n          setVtContext({\n            isTransitioning: false\n          });\n        });\n      });\n      flushSyncSafe(() => setTransition(t));\n      return;\n    }\n    // startTransition + startViewTransition\n    if (transition) {\n      // Interrupting an in-progress transition, cancel and let everything flush\n      // out, and then kick off a new transition from the interruption state\n      renderDfd && renderDfd.resolve();\n      transition.skipTransition();\n      setInterruption({\n        state: newState,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    } else {\n      // Completed navigation update with opted-in view transitions, let 'er rip\n      setPendingState(newState);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    }\n  }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred());\n    }\n  }, [vtContext]);\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({\n          isTransitioning: false\n        });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  let routerFuture = React.useMemo(() => ({\n    v7_relativeSplatPath: router.future.v7_relativeSplatPath\n  }), [router.future.v7_relativeSplatPath]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future, router.future), [future, router.future]);\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n    value: fetcherData.current\n  }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n    value: vtContext\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: routerFuture\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(MemoizedDataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))))), null);\n}\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = /*#__PURE__*/React.memo(DataRoutes);\nfunction DataRoutes(_ref3) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref3;\n  return UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref4;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref5;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n  let {\n    basename,\n    children,\n    future,\n    history\n  } = _ref6;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\nif (process.env.NODE_ENV !== \"production\") {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n  let {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      viewTransition\n    } = _ref7,\n    rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  // Rendered into <a href> for absolute URLs\n  let absoluteHref;\n  let isExternal = false;\n  if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n    // Render the absolute href server- and client-side\n    absoluteHref = to;\n    // Only check for external origins client-side\n    if (isBrowser) {\n      try {\n        let currentUrl = new URL(window.location.href);\n        let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n        let path = stripBasename(targetUrl.pathname, basename);\n        if (targetUrl.origin === currentUrl.origin && path != null) {\n          // Strip the protocol/origin/basename for same-origin absolute URLs\n          to = path + targetUrl.search + targetUrl.hash;\n        } else {\n          isExternal = true;\n        }\n      } catch (e) {\n        // We can't do external URL detection without a valid URL\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n      }\n    }\n  }\n  // Rendered into <a href> for relative URLs\n  let href = useHref(to, {\n    relative\n  });\n  let internalOnClick = useLinkClickHandler(to, {\n    replace,\n    state,\n    target,\n    preventScrollReset,\n    relative,\n    viewTransition\n  });\n  function handleClick(event) {\n    if (onClick) onClick(event);\n    if (!event.defaultPrevented) {\n      internalOnClick(event);\n    }\n  }\n  return (\n    /*#__PURE__*/\n    // eslint-disable-next-line jsx-a11y/anchor-has-content\n    React.createElement(\"a\", _extends({}, rest, {\n      href: absoluteHref || href,\n      onClick: isExternal || reloadDocument ? onClick : handleClick,\n      ref: ref,\n      target: target\n    }))\n  );\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n  let {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      viewTransition,\n      children\n    } = _ref8,\n    rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n  let path = useResolvedPath(to, {\n    relative: rest.relative\n  });\n  let location = useLocation();\n  let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n  let {\n    navigator,\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let isTransitioning = routerState != null &&\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  useViewTransitionState(path) && viewTransition === true;\n  let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n  let locationPathname = location.pathname;\n  let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n  if (!caseSensitive) {\n    locationPathname = locationPathname.toLowerCase();\n    nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n    toPathname = toPathname.toLowerCase();\n  }\n  if (nextLocationPathname && basename) {\n    nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n  }\n  // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n  // we're looking for a slash _after_ what's in `to`.  For example:\n  //\n  // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n  // both want to look for a / at index 6 to match URL `/users/matt`\n  const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n  let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n  let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n  let renderProps = {\n    isActive,\n    isPending,\n    isTransitioning\n  };\n  let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n  let className;\n  if (typeof classNameProp === \"function\") {\n    className = classNameProp(renderProps);\n  } else {\n    // If the className prop is not a function, we use a default `active`\n    // class for <NavLink />s that are active. In v5 `active` was the default\n    // value for `activeClassName`, but we are removing that API and can still\n    // use the old default behavior for a cleaner upgrade path and keep the\n    // simple styling rules working as they currently do.\n    className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n  }\n  let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n  return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n    \"aria-current\": ariaCurrent,\n    className: className,\n    ref: ref,\n    style: style,\n    to: to,\n    viewTransition: viewTransition\n  }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n  NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n  let {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      viewTransition\n    } = _ref9,\n    props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n  let submit = useSubmit();\n  let formAction = useFormAction(action, {\n    relative\n  });\n  let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n  let submitHandler = event => {\n    onSubmit && onSubmit(event);\n    if (event.defaultPrevented) return;\n    event.preventDefault();\n    let submitter = event.nativeEvent.submitter;\n    let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n    submit(submitter || event.currentTarget, {\n      fetcherKey,\n      method: submitMethod,\n      navigate,\n      replace,\n      state,\n      relative,\n      preventScrollReset,\n      viewTransition\n    });\n  };\n  return /*#__PURE__*/React.createElement(\"form\", _extends({\n    ref: forwardedRef,\n    method: formMethod,\n    action: formAction,\n    onSubmit: reloadDocument ? onSubmit : submitHandler\n  }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref10) {\n  let {\n    getKey,\n    storageKey\n  } = _ref10;\n  useScrollRestoration({\n    getKey,\n    storageKey\n  });\n  return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n  DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n  DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n  DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n  DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n  DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(UNSAFE_DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(UNSAFE_DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n  let {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    viewTransition\n  } = _temp === void 0 ? {} : _temp;\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, {\n    relative\n  });\n  return React.useCallback(event => {\n    if (shouldProcessLinkClick(event, target)) {\n      event.preventDefault();\n      // If the URL hasn't changed, a regular <a> will do a replace instead of\n      // a push, so do the same here unless the replace prop is explicitly set\n      let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n      navigate(to, {\n        replace,\n        state,\n        preventScrollReset,\n        relative,\n        viewTransition\n      });\n    }\n  }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params.\") : void 0;\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n  let location = useLocation();\n  let searchParams = React.useMemo(() =>\n  // Only merge in the defaults if we haven't yet called setSearchParams.\n  // Once we call that we want those to take precedence, otherwise you can't\n  // remove a param with setSearchParams({}) if it has an initial value\n  getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n    const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n    hasSetSearchParamsRef.current = true;\n    navigate(\"?\" + newSearchParams, navigateOptions);\n  }, [navigate, searchParams]);\n  return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n  }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let currentRouteId = UNSAFE_useRouteId();\n  return React.useCallback(function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    validateClientSideSubmission();\n    let {\n      action,\n      method,\n      encType,\n      formData,\n      body\n    } = getFormSubmissionInfo(target, basename);\n    if (options.navigate === false) {\n      let key = options.fetcherKey || getUniqueFetcherId();\n      router.fetch(key, currentRouteId, options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        flushSync: options.flushSync\n      });\n    } else {\n      router.navigate(options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        replace: options.replace,\n        state: options.state,\n        fromRouteId: currentRouteId,\n        flushSync: options.flushSync,\n        viewTransition: options.viewTransition\n      });\n    }\n  }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let routeContext = React.useContext(UNSAFE_RouteContext);\n  !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = _extends({}, useResolvedPath(action ? action : \".\", {\n    relative\n  }));\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    let indexValues = params.getAll(\"index\");\n    let hasNakedIndexParam = indexValues.some(v => v === \"\");\n    if (hasNakedIndexParam) {\n      params.delete(\"index\");\n      indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? \"?\" + qs : \"\";\n    }\n  }\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n  var _route$matches;\n  let {\n    key\n  } = _temp3 === void 0 ? {} : _temp3;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(UNSAFE_RouteContext);\n  let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n  !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n  // Fetcher additions\n  let load = React.useCallback((href, opts) => {\n    !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n    router.fetch(fetcherKey, routeId, href, opts);\n  }, [fetcherKey, routeId, router]);\n  let submitImpl = useSubmit();\n  let submit = React.useCallback((target, opts) => {\n    submitImpl(target, _extends({}, opts, {\n      navigate: false,\n      fetcherKey\n    }));\n  }, [fetcherKey, submitImpl]);\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n      return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n        navigate: false,\n        fetcherKey: fetcherKey,\n        ref: ref\n      }));\n    });\n    if (process.env.NODE_ENV !== \"production\") {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(() => _extends({\n    Form: FetcherForm,\n    submit,\n    load\n  }, fetcher, {\n    data\n  }), [FetcherForm, submit, load, fetcher, data]);\n  return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(_ref11 => {\n    let [key, fetcher] = _ref11;\n    return _extends({}, fetcher, {\n      key\n    });\n  });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n  let {\n    getKey,\n    storageKey\n  } = _temp4 === void 0 ? {} : _temp4;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let {\n    restoreScrollPosition,\n    preventScrollReset\n  } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n  // Save positions on pagehide\n  usePageHide(React.useCallback(() => {\n    if (navigation.state === \"idle\") {\n      let key = (getKey ? getKey(location, matches) : null) || location.key;\n      savedScrollPositions[key] = window.scrollY;\n    }\n    try {\n      sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n    } catch (error) {\n      process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n    }\n    window.history.scrollRestoration = \"auto\";\n  }, [storageKey, getKey, navigation.state, location, matches]));\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey( // Strip the basename to match useLocation()\n      _extends({}, location, {\n        pathname: stripBasename(location.pathname, basename) || location.pathname\n      }), matches) : getKey;\n      let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt(_ref12) {\n  let {\n    when,\n    message\n  } = _ref12;\n  let blocker = useBlocker(when);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  let vtContext = React.useContext(ViewTransitionContext);\n  !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename\n  } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n  let path = useResolvedPath(to, {\n    relative: opts.relative\n  });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n  let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n  let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\nexport { BrowserRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, FetchersContext as UNSAFE_FetchersContext, ViewTransitionContext as UNSAFE_ViewTransitionContext, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit, useViewTransitionState };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router v6.28.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  AwaitContext.displayName = \"Await\";\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 */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n  outlet: null,\n  matches: [],\n  isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  RouteErrorContext.displayName = \"RouteError\";\n}\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/v6/hooks/use-href\n */\nfunction useHref(to, _temp) {\n  let {\n    relative\n  } = _temp === void 0 ? {} : _temp;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // 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.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    hash,\n    pathname,\n    search\n  } = useResolvedPath(to, {\n    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 = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n  return navigator.createHref({\n    pathname: joinedPathname,\n    search,\n    hash\n  });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\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/v6/hooks/use-location\n */\nfunction useLocation() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // 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.\") : UNSAFE_invariant(false) : void 0;\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/v6/hooks/use-navigation-type\n */\nfunction useNavigationType() {\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/v6/hooks/use-match\n */\nfunction useMatch(pattern) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // 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.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    pathname\n  } = useLocation();\n  return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\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/v6/hooks/use-navigate\n */\nfunction useNavigate() {\n  let {\n    isDataRoute\n  } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // 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.\") : UNSAFE_invariant(false) : void 0;\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let {\n    basename,\n    future,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our history listener yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      navigator.go(to);\n      return;\n    }\n    let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n    // If we're operating within a basename, prepend it to the pathname prior\n    // to handing off to history (but only if we're not in a data router,\n    // otherwise it'll prepend the basename inside of the router).\n    // If this is a root navigation, then we navigate to the raw basename\n    // which allows the basename to have full control over the presence of a\n    // trailing slash on root links\n    if (dataRouterContext == null && basename !== \"/\") {\n      path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n    }\n    (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n  }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n  return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(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/v6/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n  return React.useContext(OutletContext);\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/v6/hooks/use-outlet\n */\nfunction useOutlet(context) {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n      value: context\n    }, outlet);\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/v6/hooks/use-params\n */\nfunction useParams() {\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    future\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\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/v6/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // 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.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches: parentMatches\n  } = 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  if (process.env.NODE_ENV !== \"production\") {\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(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n  }\n  let locationFromContext = useLocation();\n  let location;\n  if (locationArg) {\n    var _parsedLocationArg$pa;\n    let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n    !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n  let pathname = location.pathname || \"/\";\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n  let matches = matchRoutes(routes, {\n    pathname: remainingPathname\n  });\n  if (process.env.NODE_ENV !== \"production\") {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n  }\n  let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n    params: Object.assign({}, parentParams, match.params),\n    pathname: joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n    pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n  })), parentMatches, dataRouterState, future);\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 /*#__PURE__*/React.createElement(LocationContext.Provider, {\n      value: {\n        location: _extends({\n          pathname: \"/\",\n          search: \"\",\n          hash: \"\",\n          state: null,\n          key: \"default\"\n        }, location),\n        navigationType: Action.Pop\n      }\n    }, renderedMatches);\n  }\n  return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = {\n    padding: \"0.5rem\",\n    backgroundColor: lightgrey\n  };\n  let codeStyles = {\n    padding: \"2px 4px\",\n    backgroundColor: lightgrey\n  };\n  let devInfo = null;\n  if (process.env.NODE_ENV !== \"production\") {\n    console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n    devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"errorElement\"), \" prop on your route.\"));\n  }\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n    style: {\n      fontStyle: \"italic\"\n    }\n  }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n    style: preStyles\n  }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error: error\n    };\n  }\n  static getDerivedStateFromProps(props, state) {\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 || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation\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 !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"React Router caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n      value: this.props.routeContext\n    }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n      value: this.state.error,\n      children: this.props.component\n    })) : this.props.children;\n  }\n}\nfunction RenderedRoute(_ref) {\n  let {\n    routeContext,\n    match,\n    children\n  } = _ref;\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n  return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n    value: routeContext\n  }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n  var _dataRouterState;\n  if (parentMatches === void 0) {\n    parentMatches = [];\n  }\n  if (dataRouterState === void 0) {\n    dataRouterState = null;\n  }\n  if (future === void 0) {\n    future = null;\n  }\n  if (matches == null) {\n    var _future;\n    if (!dataRouterState) {\n      return null;\n    }\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;\n    } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n      // Don't bail if we're initializing with partial hydration and we have\n      // router matches.  That means we're actively running `patchRoutesOnNavigation`\n      // so we should render down the partial matches to the appropriate\n      // `HydrateFallback`.  We only do this if `parentMatches` is empty so it\n      // only impacts the root matches for `RouterProvider` and no descendant\n      // `<Routes>`\n      matches = dataRouterState.matches;\n    } else {\n      return null;\n    }\n  }\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n    !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n    renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n      if (match.route.id) {\n        let {\n          loaderData,\n          errors\n        } = dataRouterState;\n        let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error;\n    let shouldRenderHydrateFallback = false;\n    let errorElement = null;\n    let hydrateFallbackElement = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = /*#__PURE__*/React.createElement(match.route.Component, null);\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return /*#__PURE__*/React.createElement(RenderedRoute, {\n        match: match,\n        routeContext: {\n          outlet,\n          matches,\n          isDataRoute: dataRouterState != null\n        },\n        children: children\n      });\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n      location: dataRouterState.location,\n      revalidation: dataRouterState.revalidation,\n      component: errorElement,\n      error: error,\n      children: getChildren(),\n      routeContext: {\n        outlet: null,\n        matches,\n        isDataRoute: true\n      }\n    }) : getChildren();\n  }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n  DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n  return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n  DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n  DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n  DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n  DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n  DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n  DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n  DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n  return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\nfunction useRouteContext(hookName) {\n  let route = React.useContext(RouteContext);\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction 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 */\nfunction useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(() => ({\n    revalidate: dataRouterContext.router.revalidate,\n    state: state.revalidation\n  }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n  let {\n    matches,\n    loaderData\n  } = useDataRouterState(DataRouterStateHook.UseMatches);\n  return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\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 */\nfunction useActionData() {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\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 * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n  var _state$errors;\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n  let {\n    router,\n    basename\n  } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback(arg => {\n    if (typeof shouldBlock !== \"function\") {\n      return !!shouldBlock;\n    }\n    if (basename === \"/\") {\n      return shouldBlock(arg);\n    }\n\n    // If they provided us a function and we've got an active basename, strip\n    // it from the locations we expose to the user to match the behavior of\n    // useLocation\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = arg;\n    return shouldBlock({\n      currentLocation: _extends({}, currentLocation, {\n        pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n      }),\n      nextLocation: _extends({}, nextLocation, {\n        pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n      }),\n      historyAction\n    });\n  }, [basename, shouldBlock]);\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our router subscriber yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      router.navigate(to);\n    } else {\n      router.navigate(to, _extends({\n        fromRouteId: id\n      }, options));\n    }\n  }, [router, id]);\n  return navigate;\n}\nconst alreadyWarned$1 = {};\nfunction warningOnce(key, cond, message) {\n  if (!cond && !alreadyWarned$1[key]) {\n    alreadyWarned$1[key] = true;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n  }\n}\n\nconst alreadyWarned = {};\nfunction warnOnce(key, message) {\n  if (!alreadyWarned[message]) {\n    alreadyWarned[message] = true;\n    console.warn(message);\n  }\n}\nconst logDeprecation = (flag, msg, link) => warnOnce(flag, \"\\u26A0\\uFE0F React Router Future Flag Warning: \" + msg + \". \" + (\"You can use the `\" + flag + \"` future flag to opt-in early. \") + (\"For more information, see \" + link + \".\"));\nfunction logV6DeprecationWarnings(renderFuture, routerFuture) {\n  if (!(renderFuture != null && renderFuture.v7_startTransition)) {\n    logDeprecation(\"v7_startTransition\", \"React Router will begin wrapping state updates in `React.startTransition` in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\");\n  }\n  if (!(renderFuture != null && renderFuture.v7_relativeSplatPath) && (!routerFuture || !routerFuture.v7_relativeSplatPath)) {\n    logDeprecation(\"v7_relativeSplatPath\", \"Relative route resolution within Splat routes is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\");\n  }\n  if (routerFuture) {\n    if (!routerFuture.v7_fetcherPersist) {\n      logDeprecation(\"v7_fetcherPersist\", \"The persistence behavior of fetchers is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\");\n    }\n    if (!routerFuture.v7_normalizeFormMethod) {\n      logDeprecation(\"v7_normalizeFormMethod\", \"Casing of `formMethod` fields is being normalized to uppercase in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\");\n    }\n    if (!routerFuture.v7_partialHydration) {\n      logDeprecation(\"v7_partialHydration\", \"`RouterProvider` hydration behavior is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\");\n    }\n    if (!routerFuture.v7_skipActionErrorRevalidation) {\n      logDeprecation(\"v7_skipActionErrorRevalidation\", \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\");\n    }\n  }\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    if (v7_startTransition && startTransitionImpl) {\n      startTransitionImpl(() => setStateImpl(newState));\n    } else {\n      setStateImpl(newState);\n    }\n  }, [setStateImpl, v7_startTransition]);\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  React.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]);\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: {\n      v7_relativeSplatPath: router.future.v7_relativeSplatPath\n    }\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(DataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref2;\n  return useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/v6/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n  let {\n    basename,\n    children,\n    initialEntries,\n    initialIndex,\n    future\n  } = _ref3;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\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/v6/components/navigate\n */\nfunction Navigate(_ref4) {\n  let {\n    to,\n    replace,\n    state,\n    relative\n  } = _ref4;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // 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.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    future,\n    static: isStatic\n  } = React.useContext(NavigationContext);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!isStatic, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(to, UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath), locationPathname, relative === \"path\");\n  let jsonPath = JSON.stringify(path);\n  React.useEffect(() => navigate(JSON.parse(jsonPath), {\n    replace,\n    state,\n    relative\n  }), [navigate, jsonPath, relative, replace, state]);\n  return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/v6/components/outlet\n */\nfunction Outlet(props) {\n  return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/v6/components/route\n */\nfunction Route(_props) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_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>.\") : UNSAFE_invariant(false) ;\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/v6/router-components/router\n */\nfunction Router(_ref5) {\n  let {\n    basename: basenameProp = \"/\",\n    children = null,\n    location: locationProp,\n    navigationType = Action.Pop,\n    navigator,\n    static: staticProp = false,\n    future\n  } = _ref5;\n  !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\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,\n    navigator,\n    static: staticProp,\n    future: _extends({\n      v7_relativeSplatPath: false\n    }, future)\n  }), [basename, future, navigator, staticProp]);\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\"\n  } = locationProp;\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n    if (trailingPathname == null) {\n      return null;\n    }\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key\n      },\n      navigationType\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n  if (locationContext == null) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n    value: navigationContext\n  }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n    children: children,\n    value: locationContext\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/v6/components/routes\n */\nfunction Routes(_ref6) {\n  let {\n    children,\n    location\n  } = _ref6;\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n  let {\n    children,\n    errorElement,\n    resolve\n  } = _ref7;\n  return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n    resolve: resolve,\n    errorElement: errorElement\n  }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n  AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n  AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n  AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n  return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      error: null\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"<Await> caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    let {\n      children,\n      errorElement,\n      resolve\n    } = this.props;\n    let promise = null;\n    let status = AwaitRenderStatus.pending;\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\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_data\", {\n        get: () => resolve\n      });\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\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_error\", {\n        get: () => renderError\n      });\n    } else if (resolve._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status = \"_error\" in promise ? AwaitRenderStatus.error : \"_data\" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", {\n        get: () => true\n      });\n      promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n        get: () => data\n      }), error => Object.defineProperty(resolve, \"_error\", {\n        get: () => error\n      }));\n    }\n    if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: errorElement\n      });\n    }\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: children\n      });\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(_ref8) {\n  let {\n    children\n  } = _ref8;\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\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/v6/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  let routes = [];\n  React.Children.forEach(children, (element, index) => {\n    if (! /*#__PURE__*/React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n    let treePath = [...parentPath, index];\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n      return;\n    }\n    !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n    !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n    let route = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\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      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy\n    };\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(element.props.children, treePath);\n    }\n    routes.push(route);\n  });\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n  return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n  let updates = {\n    // Note: this check also occurs in createRoutesFromChildren so update\n    // there if you change this -- please and thank you!\n    hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n  };\n  if (route.Component) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.element) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      element: /*#__PURE__*/React.createElement(route.Component),\n      Component: undefined\n    });\n  }\n  if (route.HydrateFallback) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.hydrateFallbackElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - \" + \"`HydrateFallback` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      hydrateFallbackElement: /*#__PURE__*/React.createElement(route.HydrateFallback),\n      HydrateFallback: undefined\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.errorElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n      ErrorBoundary: undefined\n    });\n  }\n  return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createMemoryHistory({\n      initialEntries: opts == null ? void 0 : opts.initialEntries,\n      initialIndex: opts == null ? void 0 : opts.initialIndex\n    }),\n    hydrationData: opts == null ? void 0 : opts.hydrationData,\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation\n  }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, logV6DeprecationWarnings as UNSAFE_logV6DeprecationWarnings, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n"],"names":["Action","ResultType","_extends","Object","target","i","arguments","source","key","PopStateEventType","createBrowserHistory","options","getUrlBasedHistory","getLocation","createHref","validateLocation","window","document","v5Compat","globalHistory","action","listener","index","getIndex","state","handlePop","nextIndex","delta","history","createURL","to","base","href","createPath","invariant","URL","fn","Error","url","push","location","createLocation","historyState","getHistoryState","error","DOMException","replace","n","pathname","search","hash","value","message","warning","cond","console","e","current","parsePath","Math","_ref","path","parsedPath","hashIndex","searchIndex","immutableRouteKeys","Set","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","route","treePath","String","id","indexRoute","pathOrLayoutRoute","undefined","matchRoutes","locationArg","basename","matchRoutesImpl","allowPartial","stripBasename","branches","flattenRoutes","parentsMeta","flattenRoute","relativePath","meta","joinPaths","routesMeta","computeScore","segments","initialScore","isSplat","s","score","segment","paramRe","_route$path","exploded","explodeOptionalSegments","first","rest","isOptional","required","restExploded","result","subpath","rankRouteBranches","a","b","compareIndexes","siblings","matches","decoded","decodePath","matchRouteBranch","branch","matchedParams","matchedPathname","end","remainingPathname","match","matchPath","normalizePathname","pattern","matcher","compiledParams","compilePath","caseSensitive","params","regexpSource","_","paramName","RegExp","pathnameBase","captureGroups","memo","splatValue","v","decodeURIComponent","startIndex","nextChar","getInvalidPathError","char","field","dest","JSON","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","idx","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","from","isEmptyPath","toPathname","routePathnameIndex","toSegments","resolvePath","fromPathname","resolvePathname","relativeSegments","normalizeSearch","normalizeHash","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","AbortedDeferredError","ErrorResponseImpl","status","statusText","data","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","IDLE_FETCHER","IDLE_BLOCKER","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","init","inFlightDataRoutes","initialized","router","pendingNavigationController","unblockBlockerHistoryUpdate","routerWindow","isBrowser","isServer","detectErrorBoundary","dataRoutes","dataStrategyImpl","defaultDataStrategy","patchRoutesOnNavigationImpl","future","unlistenHistory","subscribers","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","fogOfWar","checkFogOfWar","m","loaderData","errors","shouldLoadRouteOnHydration","Map","pendingAction","pendingPreventScrollReset","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","updateState","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","subscriber","deleteFetcher","completeNavigation","_temp","_location$state","_location$state2","actionData","viewTransitionOpts","flushSync","isActionReload","isMutationMethod","mergeLoaderData","blockers","k","preventScrollReset","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","submission","normalizeNavigateOptions","currentLocation","nextLocation","userReplace","historyAction","blockerKey","shouldBlockNavigation","updateBlocker","startNavigation","pendingActionResult","saveScrollPosition","getScrollKey","routesToUse","loadingNavigation","notFoundMatches","handleNavigational404","isHashChangeOnly","AbortController","request","createClientSideRequest","findNearestBoundary","actionResult","handleAction","routeId","isErrorResult","getLoadingNavigation","shortCircuited","updatedMatches","handleLoaders","getActionDataForCommit","isFogOfWar","interruptActiveLoads","navigation","getSubmittingNavigation","discoverResult","discoverRoutes","boundaryId","actionMatch","getTargetMatch","results","callDataStrategy","isRedirectResult","normalizeRedirectLocation","startRedirectNavigation","isDeferredResult","boundaryMatch","overrideNavigation","fetcherSubmission","initialHydration","activeSubmission","getSubmissionFromNavigation","shouldUpdateNavigationState","getUpdatedActionData","matchesToLoad","revalidatingFetchers","getMatchesToLoad","cancelActiveDeferreds","updatedFetchers","markFetchRedirectsDone","updates","getUpdatedRevalidatingFetchers","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","redirect","findRedirect","processLoaderData","deferredData","aborted","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","handleFetcherAction","requestMatches","detectAndHandle405Error","setFetcherError","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResults","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","r","doneFetcher","handleFetcherLoader","resolveDeferredData","isNavigation","_temp2","redirectLocation","isDocumentReload","redirectHistoryAction","formMethod","formAction","formEncType","type","fetcherKey","dataResults","callDataStrategyImpl","isRedirectDataStrategyResultResult","isResponse","response","normalizeRelativeRoutingRedirectResponse","trimmedMatches","convertDataStrategyResultToDataResult","fetchersToLoad","currentMatches","loaderResultsPromise","fetcherResultsPromise","Promise","acc","resolveNavigationDeferredResults","resolveFetcherDeferredResults","getFetcher","controller","markFetchersDone","keys","doneKeys","landedId","yeetedKeys","deleteBlocker","newBlocker","blocker","_ref2","entries","Array","blockerFunction","predicate","cancelledRouteIds","dfd","convertRouteMatchToUiMatch","y","fogMatches","signal","partialMatches","isNonHMR","localManifest","children","patchRoutesImpl","newMatches","newPartialMatches","initialize","nextHistoryUpdatePromise","resolve","restoreAppliedTransitions","_window","transitions","sessionPositions","json","_saveAppliedTransitions","persistAppliedTransitions","subscribe","enableScrollRestoration","positions","getPosition","getKey","fetch","revalidate","count","dispose","getBlocker","patchRoutes","_internalSetRoutes","newRoutes","Symbol","prependBasename","fromRouteId","relative","contextualMatches","activeRouteMatch","nakedIndex","hasNakedIndexQuery","URLSearchParams","indexValues","qs","normalizeFormMethod","isFetcher","searchParams","formData","isValidMethod","method","getInvalidBodyError","rawFormMethod","stripHashFromPath","text","FormData","_ref3","name","convertFormDataToSearchParams","convertSearchParamsToFormData","getLoaderMatchesUntilBoundary","includeBoundary","skipActionErrorRevalidation","currentUrl","nextUrl","boundaryMatches","actionStatus","shouldSkipRevalidation","navigationMatches","isNewLoader","currentLoaderData","currentMatch","isNew","isMissingData","currentRouteMatch","shouldRevalidateLoader","nextRouteMatch","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","hasData","hasError","currentPath","loaderMatch","arg","routeChoice","_childrenToPatch","childrenToPatch","newRoute","existingRoute","isSameRoute","aChild","_existingRoute$childr","bChild","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","isPropertyStaticallyDefined","staticRouteValue","_ref4","requestContext","loadRouteDefinitionsPromises","dsMatches","loadRoutePromise","shouldLoad","handlerOverride","callLoaderOrAction","staticContext","onReject","runHandler","handler","reject","abortPromise","actualHandler","ctx","val","handlerError","dataStrategyResult","_result$init2","_result$init","_result$init3","_result$init4","_result$init5","_result$init6","contentType","isDataWithResponseInit","isDeferredData","deferred","Headers","normalizedLocation","isSameBasename","Request","skipLoaderErrorBubbling","statusCode","foundError","loaderHeaders","pendingError","newLoaderData","mergedLoaderData","eligibleMatches","_temp5","errorMessage","isRevalidatingLoader","unwrap","DataRouterHook","DataRouterStateHook","_objectWithoutPropertiesLoose","excluded","sourceKeys","defaultEncType","isHtmlElement","object","createSearchParams","_formDataSupportsSubmitter","supportedFormEncTypes","getFormEncType","encType","_excluded","_excluded2","createBrowserRouter","parseHydrationData","deserializeErrors","serialized","ErrorConstructor","ViewTransitionContext","FetchersContext","startTransitionImpl","flushSyncImpl","flushSyncSafe","cb","Deferred","reason","RouterProvider","fallbackElement","setStateImpl","pendingState","setPendingState","vtContext","setVtContext","renderDfd","setRenderDfd","transition","setTransition","interruption","setInterruption","fetcherData","v7_startTransition","optInStartTransition","setState","isViewTransitionUnavailable","t","renderPromise","navigator","dataRouterContext","routerFuture","MemoizedDataRoutes","Link","_ref7","ref","absoluteHref","onClick","reloadDocument","viewTransition","isExternal","targetUrl","internalOnClick","useLinkClickHandler","replaceProp","event","NavLink","_ref8","className","ariaCurrentProp","classNameProp","styleProp","routerState","isTransitioning","useViewTransitionState","useDataRouterContext","nextPath","nextLocationPathname","endSlashPosition","isActive","isPending","renderProps","ariaCurrent","style","hookName","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","locationSearch","defaultSearchParams","setSearchParams","nextInit","navigateOptions","newSearchParams","fetcherId","getUniqueFetcherId","createRoutesFromChildren","element","Route","AwaitRenderStatus","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","RouteErrorContext","useHref","useInRouterContext","useResolvedPath","joinedPathname","useLocation","useMatch","useIsomorphicLayoutEffect","useNavigate","isDataRoute","useNavigateStable","useCurrentRouteId","activeRef","useNavigateUnstable","routePathnamesJson","OutletContext","useParams","routeMatch","useRoutesImpl","dataRouterState","parentMatches","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","_dataRouterState","_future","errorIndex","renderFallback","fallbackIndex","needsToRunLoader","outlet","shouldRenderHydrateFallback","errorElement","hydrateFallbackElement","defaultErrorElement","warningOnce","alreadyWarned$1","getChildren","RenderedRoute","RenderErrorBoundary","useRouteError","_state$errors","stack","props","errorInfo","routeContext","thisRoute","alreadyWarned","logDeprecation","flag","msg","link","logV6DeprecationWarnings","renderFuture","Outlet","context","_props","Router","_ref5","basenameProp","locationProp","navigationType","staticProp","navigationContext","locationContext","trailingPathname"],"mappings":"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"}