{"version":3,"file":"map_topics.js","mappings":"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","sources":["webpack://a4-meinberlin/./node_modules/adhocracy4/adhocracy4/maps_react/static/a4maps_react/MapPopup.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/ControlBarFilterPills.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/card/CardMeta.jsx","webpack://a4-meinberlin/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://a4-meinberlin/./node_modules/react-router/dist/development/chunk-4N6VE7H7.mjs","webpack://a4-meinberlin/./meinberlin/react/contrib/card/CardStatus.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/ControlBar.jsx","webpack://a4-meinberlin/./node_modules/prop-types/index.js","webpack://a4-meinberlin/./meinberlin/react/contrib/card/CardStats.jsx","webpack://a4-meinberlin/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://a4-meinberlin/./meinberlin/react/contrib/card/Card.jsx","webpack://a4-meinberlin/./node_modules/react-router/dist/development/chunk-RJYABSBD.mjs","webpack://a4-meinberlin/./meinberlin/react/contrib/IconSwitch.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/Spinner.jsx","webpack://a4-meinberlin/./node_modules/cookie/dist/index.js","webpack://a4-meinberlin/./meinberlin/react/contrib/helpers.js","webpack://a4-meinberlin/./node_modules/adhocracy4/adhocracy4/maps_react/static/a4maps_react/MarkerClusterLayer.js","webpack://a4-meinberlin/./meinberlin/react/contrib/map/ItemPopup.jsx","webpack://a4-meinberlin/./node_modules/set-cookie-parser/lib/set-cookie.js","webpack://a4-meinberlin/./node_modules/hyphenate-style-name/index.js","webpack://a4-meinberlin/./node_modules/shallow-equal/dist/index.modern.mjs","webpack://a4-meinberlin/./node_modules/react-responsive/dist/esm/index.js","webpack://a4-meinberlin/./meinberlin/react/contrib/card/CardList.jsx","webpack://a4-meinberlin/./node_modules/matchmediaquery/index.js","webpack://a4-meinberlin/./meinberlin/react/contrib/ControlBarListMapSwitch.jsx","webpack://a4-meinberlin/./node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.js","webpack://a4-meinberlin/./meinberlin/react/contrib/PaginationButton.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/ModeratorStatus.jsx","webpack://a4-meinberlin/./node_modules/css-mediaquery/index.js","webpack://a4-meinberlin/./meinberlin/react/contrib/Pagination.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/Pill.jsx","webpack://a4-meinberlin/./meinberlin/react/maptopicprio/react_map_topics_init.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/map/Map.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/contexts/FetchItemsProvider.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/map/ListMapView.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/ToggleSwitch.jsx"],"sourcesContent":["import React from 'react'\nimport { Popup } from 'react-leaflet'\n\nexport const MapPopup = ({ feature, className, children, ...rest }) => {\n  const _className = 'maps-popups ' + (className ?? '')\n  return (\n    <Popup {...rest} className={_className} closeButton={false}>\n      <div\n        style={{ backgroundImage: 'url(' + feature.properties.image + ')' }}\n        className={'maps-popups-popup-image' + (feature.properties.image ? '' : ' maps-popups-popup-no-image')}\n      />\n      <div className=\"maps-popups-popup-text-content\">\n        {children}\n      </div>\n    </Popup>\n  )\n}\n","import React from 'react'\nimport django from 'django'\nimport { Pill } from './Pill'\n\nconst translated = { filterRemove: django.gettext('Remove filter %s') }\n\nconst getFilterRemoveText = (label) => {\n  return django.interpolate(translated.filterRemove, [label])\n}\n\nexport const ControlBarFilterPills = ({ filters: _filters, onRemove }) => {\n  const filters = _filters.filter(f => f.value !== null && f.value !== false && f.value !== '')\n  if (!filters.length) {\n    return null\n  }\n\n  return (\n    <ul className=\"pill__list\">\n      {\n        filters.map((filter) => {\n          const label = filter.label || filter.choices.find(choice => choice[0] === filter.value)[1]\n          return (\n            <Pill\n              key={'pill_' + filter.type + filter.value}\n              pillClass=\"pill\"\n            >\n              {label}\n              <button\n                onClick={() => onRemove(filter.type, filter.value)}\n                className=\"pill__close\"\n                title={getFilterRemoveText(label)}\n              >\n                <span className=\"fa fa-times\" aria-label={getFilterRemoveText(label)} />\n              </button>\n            </Pill>\n          )\n        })\n      }\n    </ul>\n  )\n}\n","import React from 'react'\nimport { toLocaleDate } from '../helpers'\n\nexport const CardMeta = (props) => {\n  const { item } = props\n  const safeLocale = props.locale ? props.locale : undefined\n  const dateTime = item.modified\n    ? item.modified\n    : item.created\n  const date = toLocaleDate(dateTime, safeLocale)\n\n  return (\n    <div className=\"card__meta subtitle text--meta\">\n      <p>\n        {item.creator} <time dateTime={dateTime}>{date}</time>\n      </p>\n    </div>\n  )\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * react-router v7.15.1\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 */\nvar __typeError = (msg) => {\n  throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\n\n// lib/router/history.ts\nvar Action = /* @__PURE__ */ ((Action2) => {\n  Action2[\"Pop\"] = \"POP\";\n  Action2[\"Push\"] = \"PUSH\";\n  Action2[\"Replace\"] = \"REPLACE\";\n  return Action2;\n})(Action || {});\nvar PopStateEventType = \"popstate\";\nfunction isLocation(obj) {\n  return typeof obj === \"object\" && obj != null && \"pathname\" in obj && \"search\" in obj && \"hash\" in obj && \"state\" in obj && \"key\" in obj;\n}\nfunction createMemoryHistory(options = {}) {\n  let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n  let entries;\n  entries = initialEntries.map(\n    (entry, index2) => createMemoryLocation(\n      entry,\n      typeof entry === \"string\" ? null : entry.state,\n      index2 === 0 ? \"default\" : void 0,\n      typeof entry === \"string\" ? void 0 : entry.mask\n    )\n  );\n  let index = clampIndex(\n    initialIndex == null ? entries.length - 1 : initialIndex\n  );\n  let action = \"POP\" /* 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 = null, key, mask) {\n    let location = createLocation(\n      entries ? getCurrentLocation().pathname : \"/\",\n      to,\n      state,\n      key,\n      mask\n    );\n    warning(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in memory history: ${JSON.stringify(\n        to\n      )}`\n    );\n    return location;\n  }\n  function createHref2(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: createHref2,\n    createURL(to) {\n      return new URL(createHref2(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 = \"PUSH\" /* Push */;\n      let nextLocation = isLocation(to) ? to : createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 1 });\n      }\n    },\n    replace(to, state) {\n      action = \"REPLACE\" /* Replace */;\n      let nextLocation = isLocation(to) ? to : createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({ action, location: nextLocation, delta: 0 });\n      }\n    },\n    go(delta) {\n      action = \"POP\" /* Pop */;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({ action, location: nextLocation, delta });\n      }\n    },\n    listen(fn) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    }\n  };\n  return history;\n}\nfunction createBrowserHistory(options = {}) {\n  function createBrowserLocation(window2, globalHistory) {\n    let maskedLocation = globalHistory.state?.masked;\n    let { pathname, search, hash } = maskedLocation || window2.location;\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      globalHistory.state && globalHistory.state.usr || null,\n      globalHistory.state && globalHistory.state.key || \"default\",\n      maskedLocation ? {\n        pathname: window2.location.pathname,\n        search: window2.location.search,\n        hash: window2.location.hash\n      } : void 0\n    );\n  }\n  function createBrowserHref(window2, to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  return getUrlBasedHistory(\n    createBrowserLocation,\n    createBrowserHref,\n    null,\n    options\n  );\n}\nfunction createHashHistory(options = {}) {\n  function createHashLocation(window2, globalHistory) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\"\n    } = parsePath(window2.location.hash.substring(1));\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n    return createLocation(\n      \"\",\n      { pathname, search, hash },\n      // state defaults to `null` because `window.history.state` does\n      globalHistory.state && globalHistory.state.usr || null,\n      globalHistory.state && globalHistory.state.key || \"default\"\n    );\n  }\n  function createHashHref(window2, to) {\n    let base = window2.document.querySelector(\"base\");\n    let href = \"\";\n    if (base && base.getAttribute(\"href\")) {\n      let url = window2.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(\n      location.pathname.charAt(0) === \"/\",\n      `relative pathnames are not supported in hash history.push(${JSON.stringify(\n        to\n      )})`\n    );\n  }\n  return getUrlBasedHistory(\n    createHashLocation,\n    createHashHref,\n    validateHashLocation,\n    options\n  );\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    if (typeof console !== \"undefined\") console.warn(message);\n    try {\n      throw new Error(message);\n    } catch (e) {\n    }\n  }\n}\nfunction createKey() {\n  return Math.random().toString(36).substring(2, 10);\n}\nfunction getHistoryState(location, index) {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index,\n    masked: location.mask ? {\n      pathname: location.pathname,\n      search: location.search,\n      hash: location.hash\n    } : void 0\n  };\n}\nfunction createLocation(current, to, state = null, key, mask) {\n  let location = {\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    mask\n  };\n  return location;\n}\nfunction createPath({\n  pathname = \"/\",\n  search = \"\",\n  hash = \"\"\n}) {\n  if (search && search !== \"?\")\n    pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\")\n    pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\nfunction parsePath(path) {\n  let parsedPath = {};\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substring(hashIndex);\n      path = path.substring(0, hashIndex);\n    }\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substring(searchIndex);\n      path = path.substring(0, searchIndex);\n    }\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n  return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref2, validateLocation, options = {}) {\n  let { window: window2 = document.defaultView, v5Compat = false } = options;\n  let globalHistory = window2.history;\n  let action = \"POP\" /* Pop */;\n  let listener = null;\n  let index = getIndex();\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n  }\n  function getIndex() {\n    let state = globalHistory.state || { idx: null };\n    return state.idx;\n  }\n  function handlePop() {\n    action = \"POP\" /* Pop */;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({ action, location: history.location, delta });\n    }\n  }\n  function push(to, state) {\n    action = \"PUSH\" /* Push */;\n    let location = isLocation(to) ? to : 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.mask || location);\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      window2.location.assign(url);\n    }\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 1 });\n    }\n  }\n  function replace2(to, state) {\n    action = \"REPLACE\" /* Replace */;\n    let location = isLocation(to) ? to : 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.mask || location);\n    globalHistory.replaceState(historyState, \"\", url);\n    if (v5Compat && listener) {\n      listener({ action, location: history.location, delta: 0 });\n    }\n  }\n  function createURL(to) {\n    return createBrowserURLImpl(to);\n  }\n  let history = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window2, globalHistory);\n    },\n    listen(fn) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window2.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n      return () => {\n        window2.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref2(window2, to);\n    },\n    createURL,\n    encodeLocation(to) {\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: replace2,\n    go(n) {\n      return globalHistory.go(n);\n    }\n  };\n  return history;\n}\nfunction createBrowserURLImpl(to, isAbsolute = false) {\n  let base = \"http://localhost\";\n  if (typeof window !== \"undefined\") {\n    base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n  }\n  invariant(base, \"No window.location.(origin|href) available to create URL\");\n  let href = typeof to === \"string\" ? to : createPath(to);\n  href = href.replace(/ $/, \"%20\");\n  if (!isAbsolute && href.startsWith(\"//\")) {\n    href = base + href;\n  }\n  return new URL(href, base);\n}\n\n// lib/router/utils.ts\nfunction createContext(defaultValue) {\n  return { defaultValue };\n}\nvar _map;\nvar RouterContextProvider = class {\n  /**\n   * Create a new `RouterContextProvider` instance\n   * @param init An optional initial context map to populate the provider with\n   */\n  constructor(init) {\n    __privateAdd(this, _map, /* @__PURE__ */ new Map());\n    if (init) {\n      for (let [context, value] of init) {\n        this.set(context, value);\n      }\n    }\n  }\n  /**\n   * Access a value from the context. If no value has been set for the context,\n   * it will return the context's `defaultValue` if provided, or throw an error\n   * if no `defaultValue` was set.\n   * @param context The context to get the value for\n   * @returns The value for the context, or the context's `defaultValue` if no\n   * value was set\n   */\n  get(context) {\n    if (__privateGet(this, _map).has(context)) {\n      return __privateGet(this, _map).get(context);\n    }\n    if (context.defaultValue !== void 0) {\n      return context.defaultValue;\n    }\n    throw new Error(\"No value found for context\");\n  }\n  /**\n   * Set a value for the context. If the context already has a value set, this\n   * will overwrite it.\n   *\n   * @param context The context to set the value for\n   * @param value The value to set for the context\n   * @returns {void}\n   */\n  set(context, value) {\n    __privateGet(this, _map).set(context, value);\n  }\n};\n_map = new WeakMap();\nvar unsupportedLazyRouteObjectKeys = /* @__PURE__ */ new Set([\n  \"lazy\",\n  \"caseSensitive\",\n  \"path\",\n  \"id\",\n  \"index\",\n  \"children\"\n]);\nfunction isUnsupportedLazyRouteObjectKey(key) {\n  return unsupportedLazyRouteObjectKeys.has(\n    key\n  );\n}\nvar unsupportedLazyRouteFunctionKeys = /* @__PURE__ */ new Set([\n  \"lazy\",\n  \"caseSensitive\",\n  \"path\",\n  \"id\",\n  \"index\",\n  \"middleware\",\n  \"children\"\n]);\nfunction isUnsupportedLazyRouteFunctionKey(key) {\n  return unsupportedLazyRouteFunctionKeys.has(\n    key\n  );\n}\nfunction isIndexRoute(route) {\n  return route.index === true;\n}\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties2, parentPath = [], manifest = {}, allowInPlaceMutations = false) {\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(\n      route.index !== true || !route.children,\n      `Cannot specify children on an index route`\n    );\n    invariant(\n      allowInPlaceMutations || !manifest[id],\n      `Found a route id collision on id \"${id}\".  Route id's must be globally unique within Data Router usages`\n    );\n    if (isIndexRoute(route)) {\n      let indexRoute = {\n        ...route,\n        id\n      };\n      manifest[id] = mergeRouteUpdates(\n        indexRoute,\n        mapRouteProperties2(indexRoute)\n      );\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute = {\n        ...route,\n        id,\n        children: void 0\n      };\n      manifest[id] = mergeRouteUpdates(\n        pathOrLayoutRoute,\n        mapRouteProperties2(pathOrLayoutRoute)\n      );\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n          route.children,\n          mapRouteProperties2,\n          treePath,\n          manifest,\n          allowInPlaceMutations\n        );\n      }\n      return pathOrLayoutRoute;\n    }\n  });\n}\nfunction mergeRouteUpdates(route, updates) {\n  return Object.assign(route, {\n    ...updates,\n    ...typeof updates.lazy === \"object\" && updates.lazy != null ? {\n      lazy: {\n        ...route.lazy,\n        ...updates.lazy\n      }\n    } : {}\n  });\n}\nfunction matchRoutes(routes, locationArg, basename = \"/\") {\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial, precomputedBranches) {\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 = precomputedBranches ?? flattenAndRankRoutes(routes);\n  let matches = null;\n  let decoded = decodePath(pathname);\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    matches = matchRouteBranch(\n      branches[i],\n      decoded,\n      allowPartial\n    );\n  }\n  return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n  let { route, pathname, params } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    loaderData: loaderData[route.id],\n    handle: route.handle\n  };\n}\nfunction flattenAndRankRoutes(routes) {\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n  return branches;\n}\nfunction flattenRoutes(routes, branches = [], parentsMeta = [], parentPath = \"\", _hasParentOptionalSegments = false) {\n  let flattenRoute = (route, index, hasParentOptionalSegments = _hasParentOptionalSegments, relativePath) => {\n    let meta = {\n      relativePath: relativePath === void 0 ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route\n    };\n    if (meta.relativePath.startsWith(\"/\")) {\n      if (!meta.relativePath.startsWith(parentPath) && hasParentOptionalSegments) {\n        return;\n      }\n      invariant(\n        meta.relativePath.startsWith(parentPath),\n        `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      );\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\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,\n        `Index routes must not have child routes. Please remove all child routes from route path \"${path}\".`\n      );\n      flattenRoutes(\n        route.children,\n        branches,\n        routesMeta,\n        path,\n        hasParentOptionalSegments\n      );\n    }\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    if (route.path === \"\" || !route.path?.includes(\"?\")) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, true, exploded);\n      }\n    }\n  });\n  return branches;\n}\nfunction explodeOptionalSegments(path) {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n  let [first, ...rest] = segments;\n  let isOptional = first.endsWith(\"?\");\n  let required = first.replace(/\\?$/, \"\");\n  if (rest.length === 0) {\n    return isOptional ? [required, \"\"] : [required];\n  }\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n  let result = [];\n  result.push(\n    ...restExploded.map(\n      (subpath) => subpath === \"\" ? required : [required, subpath].join(\"/\")\n    )\n  );\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n  return result.map(\n    (exploded) => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n  );\n}\nfunction rankRouteBranches(branches) {\n  branches.sort(\n    (a, b) => a.score !== b.score ? b.score - a.score : compareIndexes(\n      a.routesMeta.map((meta) => meta.childrenIndex),\n      b.routesMeta.map((meta) => meta.childrenIndex)\n    )\n  );\n}\nvar paramRe = /^:[\\w-]+$/;\nvar dynamicSegmentValue = 3;\nvar indexRouteValue = 2;\nvar emptySegmentValue = 1;\nvar staticSegmentValue = 10;\nvar splatPenalty = -2;\nvar 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(\n    (score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue),\n    initialScore\n  );\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  ) : (\n    // Otherwise, it doesn't really make sense to rank non-siblings by index,\n    // so they sort equally.\n    0\n  );\n}\nfunction matchRouteBranch(branch, pathname, allowPartial = false) {\n  let { routesMeta } = 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, caseSensitive: meta.caseSensitive, end },\n      remainingPathname\n    );\n    let route = meta.route;\n    if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n      match = matchPath(\n        {\n          path: meta.relativePath,\n          caseSensitive: meta.caseSensitive,\n          end: false\n        },\n        remainingPathname\n      );\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(\n        joinPaths([matchedPathname, match.pathnameBase])\n      ),\n      route\n    });\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n  return matches;\n}\nfunction generatePath(originalPath, params = {}) {\n  let path = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(\n      false,\n      `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    );\n    path = path.replace(/\\*$/, \"/*\");\n  }\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n  const stringify2 = (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    if (isLastSegment && segment === \"*\") {\n      return stringify2(params[\"*\"]);\n    }\n    const keyMatch = segment.match(/^:([\\w-]+)(\\??)(.*)/);\n    if (keyMatch) {\n      const [, key, optional, suffix] = keyMatch;\n      let param = params[key];\n      invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n      return encodeURIComponent(stringify2(param)) + suffix;\n    }\n    return segment.replace(/\\?$/g, \"\");\n  }).filter((segment) => !!segment);\n  return prefix + segments.join(\"/\");\n}\nfunction matchPath(pattern, pathname) {\n  if (typeof pattern === \"string\") {\n    pattern = { path: pattern, caseSensitive: false, end: true };\n  }\n  let [matcher, compiledParams] = compilePath(\n    pattern.path,\n    pattern.caseSensitive,\n    pattern.end\n  );\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(\n    (memo2, { paramName, isOptional }, index) => {\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        memo2[paramName] = void 0;\n      } else {\n        memo2[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n      }\n      return memo2;\n    },\n    {}\n  );\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern\n  };\n}\nfunction compilePath(path, caseSensitive = false, end = true) {\n  warning(\n    path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n    `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  );\n  let params = [];\n  let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\").replace(/^\\/*/, \"/\").replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\").replace(\n    /\\/:([\\w-]+)(\\?)?/g,\n    (match, paramName, isOptional, index, str) => {\n      params.push({ paramName, isOptional: isOptional != null });\n      if (isOptional) {\n        let nextChar = str.charAt(index + match.length);\n        if (nextChar && nextChar !== \"/\") {\n          return \"/([^\\\\/]*)\";\n        }\n        return \"(?:/([^\\\\/]*))?\";\n      }\n      return \"/([^\\\\/]+)\";\n    }\n  ).replace(/\\/([\\w-]+)\\?(\\/|$)/g, \"(/$1)?$2\");\n  if (path.endsWith(\"*\")) {\n    params.push({ paramName: \"*\" });\n    regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" : \"(?:\\\\/(.+)|\\\\/*)$\";\n  } else if (end) {\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else {\n  }\n  let matcher = new RegExp(regexpSource, caseSensitive ? void 0 : \"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(\n      false,\n      `The URL path \"${value}\" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${error}).`\n    );\n    return value;\n  }\n}\nfunction stripBasename(pathname, basename) {\n  if (basename === \"/\") return pathname;\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n  let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    return null;\n  }\n  return pathname.slice(startIndex) || \"/\";\n}\nfunction prependBasename({\n  basename,\n  pathname\n}) {\n  return pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n}\nvar ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar isAbsoluteUrl = (url) => ABSOLUTE_URL_REGEX.test(url);\nfunction resolvePath(to, fromPathname = \"/\") {\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\"\n  } = typeof to === \"string\" ? parsePath(to) : to;\n  let pathname;\n  if (toPathname) {\n    toPathname = removeDoubleSlashes(toPathname);\n    if (toPathname.startsWith(\"/\")) {\n      pathname = resolvePathname(toPathname.substring(1), \"/\");\n    } else {\n      pathname = resolvePathname(toPathname, fromPathname);\n    }\n  } else {\n    pathname = fromPathname;\n  }\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash)\n  };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n  let segments = removeTrailingSlash(fromPathname).split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n  relativeSegments.forEach((segment) => {\n    if (segment === \"..\") {\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(\n    path\n  )}].  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}\nfunction getPathContributingMatches(matches) {\n  return matches.filter(\n    (match, index) => index === 0 || match.route.path && match.route.path.length > 0\n  );\n}\nfunction getResolveToMatches(matches) {\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches.map(\n    (match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n  );\n}\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative = false) {\n  let to;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = { ...toArg };\n    invariant(\n      !to.pathname || !to.pathname.includes(\"?\"),\n      getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n    );\n    invariant(\n      !to.pathname || !to.pathname.includes(\"#\"),\n      getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n    );\n    invariant(\n      !to.search || !to.search.includes(\"#\"),\n      getInvalidPathError(\"#\", \"search\", \"hash\", to)\n    );\n  }\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n  let from;\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\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  let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n    path.pathname += \"/\";\n  }\n  return path;\n}\nvar removeDoubleSlashes = (path) => path.replace(/\\/\\/+/g, \"/\");\nvar joinPaths = (paths) => removeDoubleSlashes(paths.join(\"/\"));\nvar removeTrailingSlash = (path) => path.replace(/\\/+$/, \"\");\nvar normalizePathname = (pathname) => removeTrailingSlash(pathname).replace(/^\\/*/, \"/\");\nvar normalizeSearch = (search) => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\nvar normalizeHash = (hash) => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\nvar DataWithResponseInit = class {\n  constructor(data2, init) {\n    this.type = \"DataWithResponseInit\";\n    this.data = data2;\n    this.init = init || null;\n  }\n};\nfunction data(data2, init) {\n  return new DataWithResponseInit(\n    data2,\n    typeof init === \"number\" ? { status: init } : init\n  );\n}\nvar redirect = (url, init = 302) => {\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = { status: responseInit };\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, { ...responseInit, headers });\n};\nvar redirectDocument = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\nvar replace = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\nvar ErrorResponseImpl = class {\n  constructor(status, statusText, data2, internal = false) {\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data2 instanceof Error) {\n      this.data = data2.toString();\n      this.error = data2;\n    } else {\n      this.data = data2;\n    }\n  }\n};\nfunction isRouteErrorResponse(error) {\n  return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\nfunction getRoutePattern(matches) {\n  let parts = matches.map((m) => m.route.path).filter(Boolean);\n  return joinPaths(parts) || \"/\";\n}\nvar isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nfunction parseToInfo(_to, basename) {\n  let to = _to;\n  if (typeof to !== \"string\" || !ABSOLUTE_URL_REGEX.test(to)) {\n    return {\n      absoluteURL: void 0,\n      isExternal: false,\n      to\n    };\n  }\n  let absoluteURL = to;\n  let isExternal = false;\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        to = path + targetUrl.search + targetUrl.hash;\n      } else {\n        isExternal = true;\n      }\n    } catch (e) {\n      warning(\n        false,\n        `<Link to=\"${to}\"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`\n      );\n    }\n  }\n  return {\n    absoluteURL,\n    isExternal,\n    to\n  };\n}\n\n// lib/router/instrumentation.ts\nvar UninstrumentedSymbol = Symbol(\"Uninstrumented\");\nfunction getRouteInstrumentationUpdates(fns, route) {\n  let aggregated = {\n    lazy: [],\n    \"lazy.loader\": [],\n    \"lazy.action\": [],\n    \"lazy.middleware\": [],\n    middleware: [],\n    loader: [],\n    action: []\n  };\n  fns.forEach(\n    (fn) => fn({\n      id: route.id,\n      index: route.index,\n      path: route.path,\n      instrument(i) {\n        let keys = Object.keys(aggregated);\n        for (let key of keys) {\n          if (i[key]) {\n            aggregated[key].push(i[key]);\n          }\n        }\n      }\n    })\n  );\n  let updates = {};\n  if (typeof route.lazy === \"function\" && aggregated.lazy.length > 0) {\n    let instrumented = wrapImpl(aggregated.lazy, route.lazy, () => void 0);\n    if (instrumented) {\n      updates.lazy = instrumented;\n    }\n  }\n  if (typeof route.lazy === \"object\") {\n    let lazyObject = route.lazy;\n    [\"middleware\", \"loader\", \"action\"].forEach((key) => {\n      let lazyFn = lazyObject[key];\n      let instrumentations = aggregated[`lazy.${key}`];\n      if (typeof lazyFn === \"function\" && instrumentations.length > 0) {\n        let instrumented = wrapImpl(instrumentations, lazyFn, () => void 0);\n        if (instrumented) {\n          updates.lazy = Object.assign(updates.lazy || {}, {\n            [key]: instrumented\n          });\n        }\n      }\n    });\n  }\n  [\"loader\", \"action\"].forEach((key) => {\n    let handler = route[key];\n    if (typeof handler === \"function\" && aggregated[key].length > 0) {\n      let original = handler[UninstrumentedSymbol] ?? handler;\n      let instrumented = wrapImpl(\n        aggregated[key],\n        original,\n        (...args) => getHandlerInfo(args[0])\n      );\n      if (instrumented) {\n        if (key === \"loader\" && original.hydrate === true) {\n          instrumented.hydrate = true;\n        }\n        instrumented[UninstrumentedSymbol] = original;\n        updates[key] = instrumented;\n      }\n    }\n  });\n  if (route.middleware && route.middleware.length > 0 && aggregated.middleware.length > 0) {\n    updates.middleware = route.middleware.map((middleware) => {\n      let original = middleware[UninstrumentedSymbol] ?? middleware;\n      let instrumented = wrapImpl(\n        aggregated.middleware,\n        original,\n        (...args) => getHandlerInfo(args[0])\n      );\n      if (instrumented) {\n        instrumented[UninstrumentedSymbol] = original;\n        return instrumented;\n      }\n      return middleware;\n    });\n  }\n  return updates;\n}\nfunction instrumentClientSideRouter(router, fns) {\n  let aggregated = {\n    navigate: [],\n    fetch: []\n  };\n  fns.forEach(\n    (fn) => fn({\n      instrument(i) {\n        let keys = Object.keys(i);\n        for (let key of keys) {\n          if (i[key]) {\n            aggregated[key].push(i[key]);\n          }\n        }\n      }\n    })\n  );\n  if (aggregated.navigate.length > 0) {\n    let navigate = router.navigate[UninstrumentedSymbol] ?? router.navigate;\n    let instrumentedNavigate = wrapImpl(\n      aggregated.navigate,\n      navigate,\n      (...args) => {\n        let [to, opts] = args;\n        return {\n          to: typeof to === \"number\" || typeof to === \"string\" ? to : to ? createPath(to) : \".\",\n          ...getRouterInfo(router, opts ?? {})\n        };\n      }\n    );\n    if (instrumentedNavigate) {\n      instrumentedNavigate[UninstrumentedSymbol] = navigate;\n      router.navigate = instrumentedNavigate;\n    }\n  }\n  if (aggregated.fetch.length > 0) {\n    let fetch2 = router.fetch[UninstrumentedSymbol] ?? router.fetch;\n    let instrumentedFetch = wrapImpl(aggregated.fetch, fetch2, (...args) => {\n      let [key, , href, opts] = args;\n      return {\n        href: href ?? \".\",\n        fetcherKey: key,\n        ...getRouterInfo(router, opts ?? {})\n      };\n    });\n    if (instrumentedFetch) {\n      instrumentedFetch[UninstrumentedSymbol] = fetch2;\n      router.fetch = instrumentedFetch;\n    }\n  }\n  return router;\n}\nfunction instrumentHandler(handler, fns) {\n  let aggregated = {\n    request: []\n  };\n  fns.forEach(\n    (fn) => fn({\n      instrument(i) {\n        let keys = Object.keys(i);\n        for (let key of keys) {\n          if (i[key]) {\n            aggregated[key].push(i[key]);\n          }\n        }\n      }\n    })\n  );\n  let instrumentedHandler = handler;\n  if (aggregated.request.length > 0) {\n    instrumentedHandler = wrapImpl(aggregated.request, handler, (...args) => {\n      let [request, context] = args;\n      return {\n        request: getReadonlyRequest(request),\n        context: context != null ? getReadonlyContext(context) : context\n      };\n    });\n  }\n  return instrumentedHandler;\n}\nfunction wrapImpl(impls, handler, getInfo) {\n  if (impls.length === 0) {\n    return null;\n  }\n  return async (...args) => {\n    let result = await recurseRight(\n      impls,\n      getInfo(...args),\n      () => handler(...args),\n      impls.length - 1\n    );\n    if (result.type === \"error\") {\n      throw result.value;\n    }\n    return result.value;\n  };\n}\nasync function recurseRight(impls, info, handler, index) {\n  let impl = impls[index];\n  let result;\n  if (!impl) {\n    try {\n      let value = await handler();\n      result = { type: \"success\", value };\n    } catch (e) {\n      result = { type: \"error\", value: e };\n    }\n  } else {\n    let handlerPromise = void 0;\n    let callHandler = async () => {\n      if (handlerPromise) {\n        console.error(\"You cannot call instrumented handlers more than once\");\n      } else {\n        handlerPromise = recurseRight(impls, info, handler, index - 1);\n      }\n      result = await handlerPromise;\n      invariant(result, \"Expected a result\");\n      if (result.type === \"error\" && result.value instanceof Error) {\n        return { status: \"error\", error: result.value };\n      }\n      return { status: \"success\", error: void 0 };\n    };\n    try {\n      await impl(callHandler, info);\n    } catch (e) {\n      console.error(\"An instrumentation function threw an error:\", e);\n    }\n    if (!handlerPromise) {\n      await callHandler();\n    }\n    await handlerPromise;\n  }\n  if (result) {\n    return result;\n  }\n  return {\n    type: \"error\",\n    value: new Error(\"No result assigned in instrumentation chain.\")\n  };\n}\nfunction getHandlerInfo(args) {\n  let { request, context, params, pattern } = args;\n  return {\n    request: getReadonlyRequest(request),\n    params: { ...params },\n    pattern,\n    context: getReadonlyContext(context)\n  };\n}\nfunction getRouterInfo(router, opts) {\n  return {\n    currentUrl: createPath(router.state.location),\n    ...\"formMethod\" in opts ? { formMethod: opts.formMethod } : {},\n    ...\"formEncType\" in opts ? { formEncType: opts.formEncType } : {},\n    ...\"formData\" in opts ? { formData: opts.formData } : {},\n    ...\"body\" in opts ? { body: opts.body } : {}\n  };\n}\nfunction getReadonlyRequest(request) {\n  return {\n    method: request.method,\n    url: request.url,\n    headers: {\n      get: (...args) => request.headers.get(...args)\n    }\n  };\n}\nfunction getReadonlyContext(context) {\n  if (isPlainObject(context)) {\n    let frozen = { ...context };\n    Object.freeze(frozen);\n    return frozen;\n  } else {\n    return {\n      get: (ctx) => context.get(ctx)\n    };\n  }\n}\nvar objectProtoNames = Object.getOwnPropertyNames(Object.prototype).sort().join(\"\\0\");\nfunction isPlainObject(thing) {\n  if (thing === null || typeof thing !== \"object\") {\n    return false;\n  }\n  const proto = Object.getPrototypeOf(thing);\n  return proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join(\"\\0\") === objectProtoNames;\n}\n\n// lib/router/router.ts\nvar validMutationMethodsArr = [\n  \"POST\",\n  \"PUT\",\n  \"PATCH\",\n  \"DELETE\"\n];\nvar validMutationMethods = new Set(\n  validMutationMethodsArr\n);\nvar validRequestMethodsArr = [\n  \"GET\",\n  ...validMutationMethodsArr\n];\nvar validRequestMethods = new Set(validRequestMethodsArr);\nvar redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);\nvar redirectPreserveMethodStatusCodes = /* @__PURE__ */ new Set([307, 308]);\nvar IDLE_NAVIGATION = {\n  state: \"idle\",\n  location: void 0,\n  matches: void 0,\n  historyAction: void 0,\n  formMethod: void 0,\n  formAction: void 0,\n  formEncType: void 0,\n  formData: void 0,\n  json: void 0,\n  text: void 0\n};\nvar IDLE_FETCHER = {\n  state: \"idle\",\n  data: void 0,\n  formMethod: void 0,\n  formAction: void 0,\n  formEncType: void 0,\n  formData: void 0,\n  json: void 0,\n  text: void 0\n};\nvar IDLE_BLOCKER = {\n  state: \"unblocked\",\n  proceed: void 0,\n  reset: void 0,\n  location: void 0\n};\nvar defaultMapRouteProperties = (route) => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nvar TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\nvar ResetLoaderDataSymbol = Symbol(\"ResetLoaderData\");\nvar _routes, _branches, _hmrRoutes, _hmrBranches;\nvar DataRoutes = class {\n  constructor(routes) {\n    __privateAdd(this, _routes);\n    __privateAdd(this, _branches);\n    __privateAdd(this, _hmrRoutes);\n    __privateAdd(this, _hmrBranches);\n    __privateSet(this, _routes, routes);\n    __privateSet(this, _branches, flattenAndRankRoutes(routes));\n  }\n  /** The stable route tree */\n  get stableRoutes() {\n    return __privateGet(this, _routes);\n  }\n  /** The in-flight route tree if one is active, otherwise the stable tree */\n  get activeRoutes() {\n    return __privateGet(this, _hmrRoutes) ?? __privateGet(this, _routes);\n  }\n  /** Pre-computed branches */\n  get branches() {\n    return __privateGet(this, _hmrBranches) ?? __privateGet(this, _branches);\n  }\n  get hasHMRRoutes() {\n    return __privateGet(this, _hmrRoutes) != null;\n  }\n  /** Replace the stable route tree and recompute its branches */\n  setRoutes(routes) {\n    __privateSet(this, _routes, routes);\n    __privateSet(this, _branches, flattenAndRankRoutes(routes));\n  }\n  /** Set a new in-flight route tree and recompute its branches */\n  setHmrRoutes(routes) {\n    __privateSet(this, _hmrRoutes, routes);\n    __privateSet(this, _hmrBranches, flattenAndRankRoutes(routes));\n  }\n  /** Commit in-flight routes/branches to the stable slot and clear in-flight */\n  commitHmrRoutes() {\n    if (__privateGet(this, _hmrRoutes)) {\n      __privateSet(this, _routes, __privateGet(this, _hmrRoutes));\n      __privateSet(this, _branches, __privateGet(this, _hmrBranches));\n      __privateSet(this, _hmrRoutes, void 0);\n      __privateSet(this, _hmrBranches, void 0);\n    }\n  }\n};\n_routes = new WeakMap();\n_branches = new WeakMap();\n_hmrRoutes = new WeakMap();\n_hmrBranches = new WeakMap();\nfunction createRouter(init) {\n  const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : void 0;\n  const isBrowser3 = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n  invariant(\n    init.routes.length > 0,\n    \"You must provide a non-empty routes array to createRouter\"\n  );\n  let hydrationRouteProperties2 = init.hydrationRouteProperties || [];\n  let _mapRouteProperties = init.mapRouteProperties || defaultMapRouteProperties;\n  let mapRouteProperties2 = _mapRouteProperties;\n  if (init.instrumentations) {\n    let instrumentations = init.instrumentations;\n    mapRouteProperties2 = (route) => {\n      return {\n        ..._mapRouteProperties(route),\n        ...getRouteInstrumentationUpdates(\n          instrumentations.map((i) => i.route).filter(Boolean),\n          route\n        )\n      };\n    };\n  }\n  let manifest = {};\n  let dataRoutes = new DataRoutes(\n    convertRoutesToDataRoutes(\n      init.routes,\n      mapRouteProperties2,\n      void 0,\n      manifest\n    )\n  );\n  let basename = init.basename || \"/\";\n  if (!basename.startsWith(\"/\")) {\n    basename = `/${basename}`;\n  }\n  let dataStrategyImpl = init.dataStrategy || defaultDataStrategyWithMiddleware;\n  let future = {\n    ...init.future\n  };\n  let unlistenHistory = null;\n  let subscribers = /* @__PURE__ */ new Set();\n  let bufferedInitialStateUpdate = null;\n  let savedScrollPositions2 = null;\n  let getScrollRestorationKey2 = null;\n  let getScrollPosition = null;\n  let initialScrollRestored = init.hydrationData != null;\n  let initialMatches = matchRoutesImpl(\n    dataRoutes.activeRoutes,\n    init.history.location,\n    basename,\n    false,\n    dataRoutes.branches\n  );\n  let initialMatchesIsFOW = false;\n  let initialErrors = null;\n  let initialized;\n  let renderFallback;\n  if (initialMatches == null && !init.patchRoutesOnNavigation) {\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname\n    });\n    let { matches, route } = getShortCircuitMatches(dataRoutes.activeRoutes);\n    initialized = true;\n    renderFallback = !initialized;\n    initialMatches = matches;\n    initialErrors = { [route.id]: error };\n  } else {\n    if (initialMatches && !init.hydrationData) {\n      let fogOfWar = checkFogOfWar(\n        initialMatches,\n        dataRoutes.activeRoutes,\n        init.history.location.pathname\n      );\n      if (fogOfWar.active) {\n        initialMatches = null;\n      }\n    }\n    if (!initialMatches) {\n      initialized = false;\n      renderFallback = !initialized;\n      initialMatches = [];\n      let fogOfWar = checkFogOfWar(\n        null,\n        dataRoutes.activeRoutes,\n        init.history.location.pathname\n      );\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatchesIsFOW = true;\n        initialMatches = fogOfWar.matches;\n      }\n    } else if (initialMatches.some((m) => m.route.lazy)) {\n      initialized = false;\n      renderFallback = !initialized;\n    } else if (!initialMatches.some((m) => routeHasLoaderOrMiddleware(m.route))) {\n      initialized = true;\n      renderFallback = !initialized;\n    } else {\n      let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n      let errors = init.hydrationData ? init.hydrationData.errors : null;\n      let relevantMatches = initialMatches;\n      if (errors) {\n        let idx = initialMatches.findIndex(\n          (m) => errors[m.route.id] !== void 0\n        );\n        relevantMatches = relevantMatches.slice(0, idx + 1);\n      }\n      renderFallback = false;\n      initialized = true;\n      relevantMatches.forEach((m) => {\n        let status = getRouteHydrationStatus(m.route, loaderData, errors);\n        renderFallback = renderFallback || status.renderFallback;\n        initialized = initialized && !status.shouldLoad;\n      });\n    }\n  }\n  let router;\n  let state = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    renderFallback,\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: /* @__PURE__ */ new Map(),\n    blockers: /* @__PURE__ */ new Map()\n  };\n  let pendingAction = \"POP\" /* Pop */;\n  let pendingPopstateNavigationDfd = null;\n  let pendingPreventScrollReset = false;\n  let pendingNavigationController;\n  let pendingViewTransitionEnabled = false;\n  let appliedViewTransitions = /* @__PURE__ */ new Map();\n  let removePageHideEventListener = null;\n  let isUninterruptedRevalidation = false;\n  let isRevalidationRequired = false;\n  let cancelledFetcherLoads = /* @__PURE__ */ new Set();\n  let fetchControllers = /* @__PURE__ */ new Map();\n  let incrementingLoadId = 0;\n  let pendingNavigationLoadId = -1;\n  let fetchReloadIds = /* @__PURE__ */ new Map();\n  let fetchRedirectIds = /* @__PURE__ */ new Set();\n  let fetchLoadMatches = /* @__PURE__ */ new Map();\n  let activeFetchers = /* @__PURE__ */ new Map();\n  let fetchersQueuedForDeletion = /* @__PURE__ */ new Set();\n  let blockerFunctions = /* @__PURE__ */ new Map();\n  let unblockBlockerHistoryUpdate = void 0;\n  let pendingRevalidationDfd = null;\n  function initialize() {\n    unlistenHistory = init.history.listen(\n      ({ action: historyAction, location, delta }) => {\n        if (unblockBlockerHistoryUpdate) {\n          unblockBlockerHistoryUpdate();\n          unblockBlockerHistoryUpdate = void 0;\n          return;\n        }\n        warning(\n          blockerFunctions.size === 0 || delta != null,\n          \"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        );\n        let blockerKey = shouldBlockNavigation({\n          currentLocation: state.location,\n          nextLocation: location,\n          historyAction\n        });\n        if (blockerKey && delta != null) {\n          let nextHistoryUpdatePromise = new Promise((resolve) => {\n            unblockBlockerHistoryUpdate = resolve;\n          });\n          init.history.go(delta * -1);\n          updateBlocker(blockerKey, {\n            state: \"blocked\",\n            location,\n            proceed() {\n              updateBlocker(blockerKey, {\n                state: \"proceeding\",\n                proceed: void 0,\n                reset: void 0,\n                location\n              });\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({ blockers });\n            }\n          });\n          pendingPopstateNavigationDfd?.resolve();\n          pendingPopstateNavigationDfd = null;\n          return;\n        }\n        return startNavigation(historyAction, location);\n      }\n    );\n    if (isBrowser3) {\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n    if (!state.initialized) {\n      startNavigation(\"POP\" /* Pop */, state.location, {\n        initialHydration: true\n      });\n    }\n    return router;\n  }\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(state.fetchers, key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n  function subscribe(fn) {\n    subscribers.add(fn);\n    if (bufferedInitialStateUpdate) {\n      let { newErrors } = bufferedInitialStateUpdate;\n      bufferedInitialStateUpdate = null;\n      fn(state, {\n        deletedFetchers: [],\n        newErrors,\n        viewTransitionOpts: void 0,\n        flushSync: false\n      });\n    }\n    return () => subscribers.delete(fn);\n  }\n  function updateState(newState, opts = {}) {\n    if (newState.matches) {\n      newState.matches = newState.matches.map((m) => {\n        let route = manifest[m.route.id];\n        let matchRoute = m.route;\n        if (matchRoute.element !== route.element || matchRoute.errorElement !== route.errorElement || matchRoute.hydrateFallbackElement !== route.hydrateFallbackElement) {\n          return {\n            ...m,\n            route\n          };\n        }\n        return m;\n      });\n    }\n    state = {\n      ...state,\n      ...newState\n    };\n    let unmountedFetchers = [];\n    let mountedFetchers = [];\n    state.fetchers.forEach((fetcher, key) => {\n      if (fetcher.state === \"idle\") {\n        if (fetchersQueuedForDeletion.has(key)) {\n          unmountedFetchers.push(key);\n        } else {\n          mountedFetchers.push(key);\n        }\n      }\n    });\n    fetchersQueuedForDeletion.forEach((key) => {\n      if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n        unmountedFetchers.push(key);\n      }\n    });\n    if (subscribers.size === 0) {\n      bufferedInitialStateUpdate = { newErrors: newState.errors ?? null };\n    }\n    [...subscribers].forEach(\n      (subscriber) => subscriber(state, {\n        deletedFetchers: unmountedFetchers,\n        newErrors: newState.errors ?? null,\n        viewTransitionOpts: opts.viewTransitionOpts,\n        flushSync: opts.flushSync === true\n      })\n    );\n    unmountedFetchers.forEach((key) => deleteFetcher(state.fetchers, key));\n    mountedFetchers.forEach((key) => state.fetchers.delete(key));\n  }\n  function completeNavigation(location, newState, { flushSync } = {}) {\n    let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && 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        actionData = null;\n      }\n    } else if (isActionReload) {\n      actionData = state.actionData;\n    } else {\n      actionData = null;\n    }\n    let loaderData = newState.loaderData ? mergeLoaderData(\n      state.loaderData,\n      newState.loaderData,\n      newState.matches || [],\n      newState.errors\n    ) : state.loaderData;\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    let restoreScrollPosition = isUninterruptedRevalidation ? false : getSavedScrollPosition(location, newState.matches || state.matches);\n    let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && location.state?._isRedirect !== true;\n    dataRoutes.commitHmrRoutes();\n    if (isUninterruptedRevalidation) {\n    } else if (pendingAction === \"POP\" /* Pop */) {\n    } else if (pendingAction === \"PUSH\" /* Push */) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === \"REPLACE\" /* Replace */) {\n      init.history.replace(location, location.state);\n    }\n    let viewTransitionOpts;\n    if (pendingAction === \"POP\" /* Pop */) {\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        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = /* @__PURE__ */ 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(\n      {\n        ...newState,\n        // matches, errors, fetchers go through as-is\n        actionData,\n        loaderData,\n        historyAction: pendingAction,\n        location,\n        initialized: true,\n        renderFallback: false,\n        navigation: IDLE_NAVIGATION,\n        revalidation: \"idle\",\n        restoreScrollPosition,\n        preventScrollReset,\n        blockers\n      },\n      {\n        viewTransitionOpts,\n        flushSync: flushSync === true\n      }\n    );\n    pendingAction = \"POP\" /* Pop */;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    pendingPopstateNavigationDfd?.resolve();\n    pendingPopstateNavigationDfd = null;\n    pendingRevalidationDfd?.resolve();\n    pendingRevalidationDfd = null;\n  }\n  async function navigate(to, opts) {\n    pendingPopstateNavigationDfd?.resolve();\n    pendingPopstateNavigationDfd = null;\n    if (typeof to === \"number\") {\n      if (!pendingPopstateNavigationDfd) {\n        pendingPopstateNavigationDfd = createDeferred();\n      }\n      let promise = pendingPopstateNavigationDfd.promise;\n      init.history.go(to);\n      return promise;\n    }\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      to,\n      opts?.fromRouteId,\n      opts?.relative\n    );\n    let { path, submission, error } = normalizeNavigateOptions(\n      false,\n      normalizedPath,\n      opts\n    );\n    let maskPath;\n    if (opts?.mask) {\n      let partialPath = typeof opts.mask === \"string\" ? parsePath(opts.mask) : {\n        ...state.location.mask,\n        ...opts.mask\n      };\n      maskPath = {\n        pathname: \"\",\n        search: \"\",\n        hash: \"\",\n        ...partialPath\n      };\n    }\n    let currentLocation = state.location;\n    let nextLocation = createLocation(\n      currentLocation,\n      path,\n      opts && opts.state,\n      void 0,\n      maskPath\n    );\n    nextLocation = {\n      ...nextLocation,\n      ...init.history.encodeLocation(nextLocation)\n    };\n    let userReplace = opts && opts.replace != null ? opts.replace : void 0;\n    let historyAction = \"PUSH\" /* Push */;\n    if (userReplace === true) {\n      historyAction = \"REPLACE\" /* Replace */;\n    } else if (userReplace === false) {\n    } else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n      historyAction = \"REPLACE\" /* Replace */;\n    }\n    let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : void 0;\n    let flushSync = (opts && opts.flushSync) === true;\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction\n    });\n    if (blockerKey) {\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey, {\n            state: \"proceeding\",\n            proceed: void 0,\n            reset: void 0,\n            location: nextLocation\n          });\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey, IDLE_BLOCKER);\n          updateState({ blockers });\n        }\n      });\n      return;\n    }\n    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      callSiteDefaultShouldRevalidate: opts && opts.defaultShouldRevalidate\n    });\n  }\n  function revalidate() {\n    if (!pendingRevalidationDfd) {\n      pendingRevalidationDfd = createDeferred();\n    }\n    interruptActiveLoads();\n    updateState({ revalidation: \"loading\" });\n    let promise = pendingRevalidationDfd.promise;\n    if (state.navigation.state === \"submitting\") {\n      return promise;\n    }\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true\n      });\n      return promise;\n    }\n    startNavigation(\n      pendingAction || state.historyAction,\n      state.navigation.location,\n      {\n        overrideNavigation: state.navigation,\n        // Proxy through any rending view transition\n        enableViewTransition: pendingViewTransitionEnabled === true\n      }\n    );\n    return promise;\n  }\n  async function startNavigation(historyAction, location, opts) {\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n    let routesToUse = dataRoutes.activeRoutes;\n    let matches = opts?.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ? (\n      // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n      state.matches\n    ) : matchRoutesImpl(\n      routesToUse,\n      location,\n      basename,\n      false,\n      dataRoutes.branches\n    );\n    let flushSync = (opts && opts.flushSync) === true;\n    if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n      completeNavigation(location, { matches }, { flushSync });\n      return;\n    }\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    if (!matches) {\n      let { error, notFoundMatches, route } = handleNavigational404(\n        location.pathname\n      );\n      completeNavigation(\n        location,\n        {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error\n          }\n        },\n        { flushSync }\n      );\n      return;\n    }\n    let loadingNavigation = opts && opts.overrideNavigation ? {\n      ...opts.overrideNavigation,\n      matches,\n      historyAction\n    } : void 0;\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(\n      init.history,\n      location,\n      pendingNavigationController.signal,\n      opts && opts.submission\n    );\n    let scopedContext = init.getContext ? await init.getContext() : new RouterContextProvider();\n    let pendingActionResult;\n    if (opts && opts.pendingError) {\n      pendingActionResult = [\n        findNearestBoundary(matches).route.id,\n        { type: \"error\" /* error */, error: opts.pendingError }\n      ];\n    } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n      let actionResult = await handleAction(\n        request,\n        location,\n        opts.submission,\n        matches,\n        historyAction,\n        scopedContext,\n        fogOfWar.active,\n        opts && opts.initialHydration === true,\n        { replace: opts.replace, flushSync }\n      );\n      if (actionResult.shortCircuited) {\n        return;\n      }\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(\n        location,\n        matches,\n        historyAction,\n        opts.submission\n      );\n      flushSync = false;\n      fogOfWar.active = false;\n      request = createClientSideRequest(\n        init.history,\n        request.url,\n        request.signal\n      );\n    }\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors,\n      workingFetchers\n    } = await handleLoaders(\n      request,\n      location,\n      matches,\n      historyAction,\n      scopedContext,\n      fogOfWar.active,\n      loadingNavigation,\n      opts && opts.submission,\n      opts && opts.fetcherSubmission,\n      opts && opts.replace,\n      opts && opts.initialHydration === true,\n      flushSync,\n      pendingActionResult,\n      opts && opts.callSiteDefaultShouldRevalidate\n    );\n    if (shortCircuited) {\n      return;\n    }\n    pendingNavigationController = null;\n    completeNavigation(location, {\n      matches: updatedMatches || matches,\n      ...getActionDataForCommit(pendingActionResult),\n      loaderData,\n      errors,\n      ...workingFetchers ? { fetchers: workingFetchers } : {}\n    });\n  }\n  async function handleAction(request, location, submission, matches, historyAction, scopedContext, isFogOfWar, initialHydration, opts = {}) {\n    interruptActiveLoads();\n    let navigation = getSubmittingNavigation(\n      location,\n      matches,\n      historyAction,\n      submission\n    );\n    updateState({ navigation }, { flushSync: opts.flushSync === true });\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        matches,\n        location.pathname,\n        request.signal\n      );\n      if (discoverResult.type === \"aborted\") {\n        return { shortCircuited: true };\n      } else if (discoverResult.type === \"error\") {\n        if (discoverResult.partialMatches.length === 0) {\n          let { matches: matches2, route } = getShortCircuitMatches(\n            dataRoutes.activeRoutes\n          );\n          return {\n            matches: matches2,\n            pendingActionResult: [\n              route.id,\n              {\n                type: \"error\" /* error */,\n                error: discoverResult.error\n              }\n            ]\n          };\n        }\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [\n            boundaryId,\n            {\n              type: \"error\" /* error */,\n              error: discoverResult.error\n            }\n          ]\n        };\n      } else if (!discoverResult.matches) {\n        let { notFoundMatches, error, route } = handleNavigational404(\n          location.pathname\n        );\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [\n            route.id,\n            {\n              type: \"error\" /* error */,\n              error\n            }\n          ]\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    let result;\n    let actionMatch = getTargetMatch(matches, location);\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: \"error\" /* error */,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id\n        })\n      };\n    } else {\n      let dsMatches = getTargetedDataStrategyMatches(\n        mapRouteProperties2,\n        manifest,\n        request,\n        location,\n        matches,\n        actionMatch,\n        initialHydration ? [] : hydrationRouteProperties2,\n        scopedContext\n      );\n      let results = await callDataStrategy(\n        request,\n        location,\n        dsMatches,\n        scopedContext,\n        null\n      );\n      result = results[actionMatch.route.id];\n      if (!result) {\n        for (let match of matches) {\n          if (results[match.route.id]) {\n            result = results[match.route.id];\n            break;\n          }\n        }\n      }\n      if (request.signal.aborted) {\n        return { shortCircuited: true };\n      }\n    }\n    if (isRedirectResult(result)) {\n      let replace2;\n      if (opts && opts.replace != null) {\n        replace2 = opts.replace;\n      } else {\n        let location2 = normalizeRedirectLocation(\n          result.response.headers.get(\"Location\"),\n          new URL(request.url),\n          basename,\n          init.history\n        );\n        replace2 = location2 === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace: replace2\n      });\n      return { shortCircuited: true };\n    }\n    if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      if ((opts && opts.replace) !== true) {\n        pendingAction = \"PUSH\" /* Push */;\n      }\n      return {\n        matches,\n        pendingActionResult: [\n          boundaryMatch.route.id,\n          result,\n          actionMatch.route.id\n        ]\n      };\n    }\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result]\n    };\n  }\n  async function handleLoaders(request, location, matches, historyAction, scopedContext, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace2, initialHydration, flushSync, pendingActionResult, callSiteDefaultShouldRevalidate) {\n    let loadingNavigation = overrideNavigation || getLoadingNavigation(location, matches, historyAction, submission);\n    let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n    let shouldUpdateNavigationState = !isUninterruptedRevalidation && !initialHydration;\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(\n          {\n            navigation: loadingNavigation,\n            ...actionData !== void 0 ? { actionData } : {}\n          },\n          {\n            flushSync\n          }\n        );\n      }\n      let discoverResult = await discoverRoutes(\n        matches,\n        location.pathname,\n        request.signal\n      );\n      if (discoverResult.type === \"aborted\") {\n        return { shortCircuited: true };\n      } else if (discoverResult.type === \"error\") {\n        if (discoverResult.partialMatches.length === 0) {\n          let { matches: matches2, route } = getShortCircuitMatches(\n            dataRoutes.activeRoutes\n          );\n          return {\n            matches: matches2,\n            loaderData: {},\n            errors: {\n              [route.id]: discoverResult.error\n            }\n          };\n        }\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 { error, notFoundMatches, route } = handleNavigational404(\n          location.pathname\n        );\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 = dataRoutes.activeRoutes;\n    let { dsMatches, revalidatingFetchers } = getMatchesToLoad(\n      request,\n      scopedContext,\n      mapRouteProperties2,\n      manifest,\n      init.history,\n      state,\n      matches,\n      activeSubmission,\n      location,\n      initialHydration ? [] : hydrationRouteProperties2,\n      initialHydration === true,\n      isRevalidationRequired,\n      cancelledFetcherLoads,\n      fetchersQueuedForDeletion,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      init.patchRoutesOnNavigation != null,\n      dataRoutes.branches,\n      pendingActionResult,\n      callSiteDefaultShouldRevalidate\n    );\n    pendingNavigationLoadId = ++incrementingLoadId;\n    if (!init.dataStrategy && !dsMatches.some((m) => m.shouldLoad) && !dsMatches.some(\n      (m) => m.route.middleware && m.route.middleware.length > 0\n    ) && revalidatingFetchers.length === 0) {\n      let workingFetchers2 = new Map(state.fetchers);\n      let didUpdateFetcherRedirects2 = markFetchRedirectsDone(workingFetchers2);\n      completeNavigation(\n        location,\n        {\n          matches,\n          loaderData: {},\n          // Commit pending error if we're short circuiting\n          errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? { [pendingActionResult[0]]: pendingActionResult[1].error } : null,\n          ...getActionDataForCommit(pendingActionResult),\n          ...didUpdateFetcherRedirects2 ? { fetchers: workingFetchers2 } : {}\n        },\n        { flushSync }\n      );\n      return { shortCircuited: true };\n    }\n    if (shouldUpdateNavigationState) {\n      let updates = {};\n      if (!isFogOfWar) {\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== void 0) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, { flushSync });\n    }\n    revalidatingFetchers.forEach((rf) => {\n      abortFetcher(rf.key);\n      if (rf.controller) {\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n    let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n      dsMatches,\n      revalidatingFetchers,\n      request,\n      location,\n      scopedContext\n    );\n    if (request.signal.aborted) {\n      return { shortCircuited: true };\n    }\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\n        \"abort\",\n        abortPendingFetchRevalidations\n      );\n    }\n    revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n    let redirect2 = findRedirect(loaderResults);\n    if (redirect2) {\n      await startRedirectNavigation(request, redirect2.result, true, {\n        replace: replace2\n      });\n      return { shortCircuited: true };\n    }\n    redirect2 = findRedirect(fetcherResults);\n    if (redirect2) {\n      fetchRedirectIds.add(redirect2.key);\n      await startRedirectNavigation(request, redirect2.result, true, {\n        replace: replace2\n      });\n      return { shortCircuited: true };\n    }\n    let workingFetchers = new Map(state.fetchers);\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      loaderResults,\n      pendingActionResult,\n      revalidatingFetchers,\n      fetcherResults,\n      workingFetchers\n    );\n    if (initialHydration && state.errors) {\n      errors = { ...state.errors, ...errors };\n    }\n    let didUpdateFetcherRedirects = markFetchRedirectsDone(workingFetchers);\n    let didAbortFetchLoads = abortStaleFetchLoads(\n      pendingNavigationLoadId,\n      workingFetchers\n    );\n    let shouldUpdateFetchers = didUpdateFetcherRedirects || didAbortFetchLoads || revalidatingFetchers.length > 0;\n    return {\n      matches,\n      loaderData,\n      errors,\n      ...shouldUpdateFetchers ? { workingFetchers } : {}\n    };\n  }\n  function getUpdatedActionData(pendingActionResult) {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\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    let workingFetchers = new Map(state.fetchers);\n    revalidatingFetchers.forEach((rf) => {\n      let fetcher = workingFetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(\n        void 0,\n        fetcher ? fetcher.data : void 0\n      );\n      workingFetchers.set(rf.key, revalidatingFetcher);\n    });\n    return workingFetchers;\n  }\n  async function fetch2(key, routeId, href, opts) {\n    abortFetcher(key);\n    let flushSync = (opts && opts.flushSync) === true;\n    let routesToUse = dataRoutes.activeRoutes;\n    let normalizedPath = normalizeTo(\n      state.location,\n      state.matches,\n      basename,\n      href,\n      routeId,\n      opts?.relative\n    );\n    let matches = matchRoutesImpl(\n      routesToUse,\n      normalizedPath,\n      basename,\n      false,\n      dataRoutes.branches\n    );\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    if (!matches) {\n      setFetcherError(\n        key,\n        routeId,\n        getInternalRouterError(404, { pathname: normalizedPath }),\n        { flushSync }\n      );\n      return;\n    }\n    let { path, submission, error } = normalizeNavigateOptions(\n      true,\n      normalizedPath,\n      opts\n    );\n    if (error) {\n      setFetcherError(key, routeId, error, { flushSync });\n      return;\n    }\n    let scopedContext = init.getContext ? await init.getContext() : new RouterContextProvider();\n    let preventScrollReset = (opts && opts.preventScrollReset) === true;\n    if (submission && isMutationMethod(submission.formMethod)) {\n      await handleFetcherAction(\n        key,\n        routeId,\n        path,\n        matches,\n        scopedContext,\n        fogOfWar.active,\n        flushSync,\n        preventScrollReset,\n        submission,\n        opts && opts.defaultShouldRevalidate\n      );\n      return;\n    }\n    fetchLoadMatches.set(key, { routeId, path });\n    await handleFetcherLoader(\n      key,\n      routeId,\n      path,\n      matches,\n      scopedContext,\n      fogOfWar.active,\n      flushSync,\n      preventScrollReset,\n      submission\n    );\n  }\n  async function handleFetcherAction(key, routeId, path, requestMatches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission, callSiteDefaultShouldRevalidate) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\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(\n      init.history,\n      path,\n      abortController.signal,\n      submission\n    );\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        requestMatches,\n        new URL(fetchRequest.url).pathname,\n        fetchRequest.signal,\n        key\n      );\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, { flushSync });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(\n          key,\n          routeId,\n          getInternalRouterError(404, { pathname: path }),\n          { flushSync }\n        );\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n      }\n    }\n    let match = getTargetMatch(requestMatches, path);\n    if (!match.route.action && !match.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: submission.formMethod,\n        pathname: path,\n        routeId\n      });\n      setFetcherError(key, routeId, error, { flushSync });\n      return;\n    }\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let fetchMatches = getTargetedDataStrategyMatches(\n      mapRouteProperties2,\n      manifest,\n      fetchRequest,\n      path,\n      requestMatches,\n      match,\n      hydrationRouteProperties2,\n      scopedContext\n    );\n    let actionResults = await callDataStrategy(\n      fetchRequest,\n      path,\n      fetchMatches,\n      scopedContext,\n      key\n    );\n    let actionResult = actionResults[match.route.id];\n    if (!actionResult) {\n      for (let match2 of fetchMatches) {\n        if (actionResults[match2.route.id]) {\n          actionResult = actionResults[match2.route.id];\n          break;\n        }\n      }\n    }\n    if (fetchRequest.signal.aborted) {\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n    if (fetchersQueuedForDeletion.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(void 0));\n        return;\n      }\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          updateFetcherState(key, getDoneFetcher(void 0));\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      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(\n      init.history,\n      nextLocation,\n      abortController.signal\n    );\n    let routesToUse = dataRoutes.activeRoutes;\n    let matches = state.navigation.state !== \"idle\" ? matchRoutesImpl(\n      routesToUse,\n      state.navigation.location,\n      basename,\n      false,\n      dataRoutes.branches\n    ) : state.matches;\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n    let { dsMatches, revalidatingFetchers } = getMatchesToLoad(\n      revalidationRequest,\n      scopedContext,\n      mapRouteProperties2,\n      manifest,\n      init.history,\n      state,\n      matches,\n      submission,\n      nextLocation,\n      hydrationRouteProperties2,\n      false,\n      isRevalidationRequired,\n      cancelledFetcherLoads,\n      fetchersQueuedForDeletion,\n      fetchLoadMatches,\n      fetchRedirectIds,\n      routesToUse,\n      basename,\n      init.patchRoutesOnNavigation != null,\n      dataRoutes.branches,\n      [match.route.id, actionResult],\n      callSiteDefaultShouldRevalidate\n    );\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    let workingFetchers = new Map(state.fetchers);\n    workingFetchers.set(key, loadFetcher);\n    revalidatingFetchers.filter((rf) => rf.key !== key).forEach((rf) => {\n      let staleKey = rf.key;\n      let existingFetcher2 = workingFetchers.get(staleKey);\n      let revalidatingFetcher = getLoadingFetcher(\n        void 0,\n        existingFetcher2 ? existingFetcher2.data : void 0\n      );\n      workingFetchers.set(staleKey, revalidatingFetcher);\n      abortFetcher(staleKey);\n      if (rf.controller) {\n        fetchControllers.set(staleKey, rf.controller);\n      }\n    });\n    updateState({ fetchers: workingFetchers });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n    abortController.signal.addEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n    let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n      dsMatches,\n      revalidatingFetchers,\n      revalidationRequest,\n      nextLocation,\n      scopedContext\n    );\n    if (abortController.signal.aborted) {\n      return;\n    }\n    abortController.signal.removeEventListener(\n      \"abort\",\n      abortPendingFetchRevalidations\n    );\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n    let fetcherIsMounted = state.fetchers.has(key);\n    let getRedirectStateWithDoneFetcher = (s) => {\n      if (!fetcherIsMounted) return s;\n      let workingFetchers2 = new Map(s.fetchers);\n      workingFetchers2.set(key, getDoneFetcher(actionResult.data));\n      return { ...s, fetchers: workingFetchers2 };\n    };\n    let redirect2 = findRedirect(loaderResults);\n    if (redirect2) {\n      state = getRedirectStateWithDoneFetcher(state);\n      return startRedirectNavigation(\n        revalidationRequest,\n        redirect2.result,\n        false,\n        { preventScrollReset }\n      );\n    }\n    redirect2 = findRedirect(fetcherResults);\n    if (redirect2) {\n      fetchRedirectIds.add(redirect2.key);\n      state = getRedirectStateWithDoneFetcher(state);\n      return startRedirectNavigation(\n        revalidationRequest,\n        redirect2.result,\n        false,\n        { preventScrollReset }\n      );\n    }\n    let finalFetchers = new Map(state.fetchers);\n    if (fetcherIsMounted) {\n      finalFetchers.set(key, getDoneFetcher(actionResult.data));\n    }\n    let { loaderData, errors } = processLoaderData(\n      state,\n      matches,\n      loaderResults,\n      void 0,\n      revalidatingFetchers,\n      fetcherResults,\n      finalFetchers\n    );\n    abortStaleFetchLoads(loadId, finalFetchers);\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: finalFetchers\n      });\n    } else {\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(\n          state.loaderData,\n          loaderData,\n          matches,\n          errors\n        ),\n        fetchers: finalFetchers\n      });\n      isRevalidationRequired = false;\n    }\n  }\n  async function handleFetcherLoader(key, routeId, path, matches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(\n      key,\n      getLoadingFetcher(\n        submission,\n        existingFetcher ? existingFetcher.data : void 0\n      ),\n      { flushSync }\n    );\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      init.history,\n      path,\n      abortController.signal\n    );\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(\n        matches,\n        new URL(fetchRequest.url).pathname,\n        fetchRequest.signal,\n        key\n      );\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, { flushSync });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(\n          key,\n          routeId,\n          getInternalRouterError(404, { pathname: path }),\n          { flushSync }\n        );\n        return;\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    let match = getTargetMatch(matches, path);\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let dsMatches = getTargetedDataStrategyMatches(\n      mapRouteProperties2,\n      manifest,\n      fetchRequest,\n      path,\n      matches,\n      match,\n      hydrationRouteProperties2,\n      scopedContext\n    );\n    let results = await callDataStrategy(\n      fetchRequest,\n      path,\n      dsMatches,\n      scopedContext,\n      key\n    );\n    let result = results[match.route.id];\n    if (!result) {\n      for (let match2 of matches) {\n        if (results[match2.route.id]) {\n          result = results[match2.route.id];\n          break;\n        }\n      }\n    }\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n    if (fetchersQueuedForDeletion.has(key)) {\n      updateFetcherState(key, getDoneFetcher(void 0));\n      return;\n    }\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        updateFetcherState(key, getDoneFetcher(void 0));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false, {\n          preventScrollReset\n        });\n        return;\n      }\n    }\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n  async function startRedirectNavigation(request, redirect2, isNavigation, {\n    submission,\n    fetcherSubmission,\n    preventScrollReset,\n    replace: replace2\n  } = {}) {\n    if (!isNavigation) {\n      pendingPopstateNavigationDfd?.resolve();\n      pendingPopstateNavigationDfd = null;\n    }\n    if (redirect2.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n    let location = redirect2.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(\n      location,\n      new URL(request.url),\n      basename,\n      init.history\n    );\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true\n    });\n    if (isBrowser3) {\n      let isDocumentReload = false;\n      if (redirect2.response.headers.has(\"X-Remix-Reload-Document\")) {\n        isDocumentReload = true;\n      } else if (isAbsoluteUrl(location)) {\n        const url = createBrowserURLImpl(location, true);\n        isDocumentReload = // Hard reload if it's an absolute URL to a new origin\n        url.origin !== routerWindow.location.origin || // 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 (replace2) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n    pendingNavigationController = null;\n    let redirectNavigationType = replace2 === true || redirect2.response.headers.has(\"X-Remix-Replace\") ? \"REPLACE\" /* Replace */ : \"PUSH\" /* Push */;\n    let { formMethod, formAction, formEncType } = state.navigation;\n    if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n    let activeSubmission = submission || fetcherSubmission;\n    if (redirectPreserveMethodStatusCodes.has(redirect2.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n      await startNavigation(redirectNavigationType, redirectLocation, {\n        submission: {\n          ...activeSubmission,\n          formAction: location\n        },\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n      });\n    } else {\n      let overrideNavigation = getLoadingNavigation(\n        redirectLocation,\n        [],\n        redirectNavigationType,\n        submission\n      );\n      await startNavigation(redirectNavigationType, 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 : void 0\n      });\n    }\n  }\n  async function callDataStrategy(request, path, matches, scopedContext, fetcherKey) {\n    let results;\n    let dataResults = {};\n    try {\n      results = await callDataStrategyImpl(\n        dataStrategyImpl,\n        request,\n        path,\n        matches,\n        fetcherKey,\n        scopedContext,\n        false\n      );\n    } catch (e) {\n      matches.filter((m) => m.shouldLoad).forEach((m) => {\n        dataResults[m.route.id] = {\n          type: \"error\" /* error */,\n          error: e\n        };\n      });\n      return dataResults;\n    }\n    if (request.signal.aborted) {\n      return dataResults;\n    }\n    if (!isMutationMethod(request.method)) {\n      for (let match of matches) {\n        if (results[match.route.id]?.type === \"error\" /* error */) {\n          break;\n        }\n        if (!results.hasOwnProperty(match.route.id) && !state.loaderData.hasOwnProperty(match.route.id) && (!state.errors || !state.errors.hasOwnProperty(match.route.id)) && match.shouldCallHandler()) {\n          results[match.route.id] = {\n            type: \"error\" /* error */,\n            result: new Error(\n              `No result returned from dataStrategy for route ${match.route.id}`\n            )\n          };\n        }\n      }\n    }\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResult(result)) {\n        let response = result.result;\n        dataResults[routeId] = {\n          type: \"redirect\" /* redirect */,\n          response: normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            routeId,\n            matches,\n            basename\n          )\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n      }\n    }\n    return dataResults;\n  }\n  async function callLoadersAndMaybeResolveData(matches, fetchersToLoad, request, location, scopedContext) {\n    let loaderResultsPromise = callDataStrategy(\n      request,\n      location,\n      matches,\n      scopedContext,\n      null\n    );\n    let fetcherResultsPromise = Promise.all(\n      fetchersToLoad.map(async (f) => {\n        if (f.matches && f.match && f.request && f.controller) {\n          let results = await callDataStrategy(\n            f.request,\n            f.path,\n            f.matches,\n            scopedContext,\n            f.key\n          );\n          let result = results[f.match.route.id];\n          return { [f.key]: result };\n        } else {\n          return Promise.resolve({\n            [f.key]: {\n              type: \"error\" /* error */,\n              error: getInternalRouterError(404, {\n                pathname: f.path\n              })\n            }\n          });\n        }\n      })\n    );\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce(\n      (acc, r) => Object.assign(acc, r),\n      {}\n    );\n    return {\n      loaderResults,\n      fetcherResults\n    };\n  }\n  function interruptActiveLoads() {\n    isRevalidationRequired = true;\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    let workingFetchers = new Map(state.fetchers);\n    workingFetchers.set(key, fetcher);\n    updateState(\n      { fetchers: workingFetchers },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n  function setFetcherError(key, routeId, error, opts = {}) {\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    let workingFetchers = new Map(state.fetchers);\n    deleteFetcher(workingFetchers, key);\n    updateState(\n      {\n        errors: {\n          [boundaryMatch.route.id]: error\n        },\n        fetchers: workingFetchers\n      },\n      { flushSync: (opts && opts.flushSync) === true }\n    );\n  }\n  function getFetcher(key) {\n    activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n    if (fetchersQueuedForDeletion.has(key)) {\n      fetchersQueuedForDeletion.delete(key);\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n  function resetFetcher(key, opts) {\n    abortFetcher(key, opts?.reason);\n    updateFetcherState(key, getDoneFetcher(null));\n  }\n  function deleteFetcher(fetchers, key) {\n    let fetcher = state.fetchers.get(key);\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    fetchersQueuedForDeletion.delete(key);\n    cancelledFetcherLoads.delete(key);\n    fetchers.delete(key);\n  }\n  function queueFetcherForDeletion(key) {\n    let count = (activeFetchers.get(key) || 0) - 1;\n    if (count <= 0) {\n      activeFetchers.delete(key);\n      fetchersQueuedForDeletion.add(key);\n    } else {\n      activeFetchers.set(key, count);\n    }\n    updateState({ fetchers: new Map(state.fetchers) });\n  }\n  function abortFetcher(key, reason) {\n    let controller = fetchControllers.get(key);\n    if (controller) {\n      controller.abort(reason);\n      fetchControllers.delete(key);\n    }\n  }\n  function markFetchersDone(keys, fetchers) {\n    for (let key of keys) {\n      let fetcher = fetchers.get(key);\n      invariant(fetcher, `Expected fetcher: ${key}`);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      fetchers.set(key, doneFetcher);\n    }\n  }\n  function markFetchRedirectsDone(fetchers) {\n    let doneKeys = [];\n    let didUpdateFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = fetchers.get(key);\n      invariant(fetcher, `Expected fetcher: ${key}`);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        didUpdateFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys, fetchers);\n    return didUpdateFetchers;\n  }\n  function abortStaleFetchLoads(landedId, fetchers) {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = 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, fetchers);\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  function updateBlocker(key, newBlocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    invariant(\n      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\",\n      `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n    );\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({ blockers });\n  }\n  function shouldBlockNavigation({\n    currentLocation,\n    nextLocation,\n    historyAction\n  }) {\n    if (blockerFunctions.size === 0) {\n      return;\n    }\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      return;\n    }\n    if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n      return blockerKey;\n    }\n  }\n  function handleNavigational404(pathname) {\n    let error = getInternalRouterError(404, { pathname });\n    let routesToUse = dataRoutes.activeRoutes;\n    let { matches, route } = getShortCircuitMatches(routesToUse);\n    return { notFoundMatches: matches, route, error };\n  }\n  function enableScrollRestoration(positions, getPosition, getKey) {\n    savedScrollPositions2 = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey2 = getKey || null;\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({ restoreScrollPosition: y });\n      }\n    }\n    return () => {\n      savedScrollPositions2 = null;\n      getScrollPosition = null;\n      getScrollRestorationKey2 = null;\n    };\n  }\n  function getScrollKey(location, matches) {\n    if (getScrollRestorationKey2) {\n      let key = getScrollRestorationKey2(\n        location,\n        matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n      );\n      return key || location.key;\n    }\n    return location.key;\n  }\n  function saveScrollPosition(location, matches) {\n    if (savedScrollPositions2 && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions2[key] = getScrollPosition();\n    }\n  }\n  function getSavedScrollPosition(location, matches) {\n    if (savedScrollPositions2) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions2[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n  function checkFogOfWar(matches, routesToUse, pathname) {\n    if (init.patchRoutesOnNavigation) {\n      let activeBranches = dataRoutes.branches;\n      if (!matches) {\n        let fogMatches = matchRoutesImpl(\n          routesToUse,\n          pathname,\n          basename,\n          true,\n          activeBranches\n        );\n        return { active: true, matches: fogMatches || [] };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          let partialMatches = matchRoutesImpl(\n            routesToUse,\n            pathname,\n            basename,\n            true,\n            activeBranches\n          );\n          return { active: true, matches: partialMatches };\n        }\n      }\n    }\n    return { active: false, matches: null };\n  }\n  async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n    if (!init.patchRoutesOnNavigation) {\n      return { type: \"success\", matches };\n    }\n    let partialMatches = matches;\n    while (true) {\n      let localManifest = manifest;\n      try {\n        await init.patchRoutesOnNavigation({\n          signal,\n          path: pathname,\n          matches: partialMatches,\n          fetcherKey,\n          patch: (routeId, children) => {\n            if (signal.aborted) return;\n            patchRoutesImpl(\n              routeId,\n              children,\n              dataRoutes,\n              localManifest,\n              mapRouteProperties2,\n              false\n            );\n          }\n        });\n      } catch (e) {\n        return { type: \"error\", error: e, partialMatches };\n      }\n      if (signal.aborted) {\n        return { type: \"aborted\" };\n      }\n      let activeBranches = dataRoutes.branches;\n      let newMatches = matchRoutesImpl(\n        dataRoutes.activeRoutes,\n        pathname,\n        basename,\n        false,\n        activeBranches\n      );\n      let newPartialMatches = null;\n      if (newMatches) {\n        if (Object.keys(newMatches[0].params).length === 0) {\n          return { type: \"success\", matches: newMatches };\n        } else {\n          newPartialMatches = matchRoutesImpl(\n            dataRoutes.activeRoutes,\n            pathname,\n            basename,\n            true,\n            activeBranches\n          );\n          let matchedDeeper = newPartialMatches && partialMatches.length < newPartialMatches.length && compareMatches(\n            partialMatches,\n            newPartialMatches.slice(0, partialMatches.length)\n          );\n          if (!matchedDeeper) {\n            return { type: \"success\", matches: newMatches };\n          }\n        }\n      }\n      if (!newPartialMatches) {\n        newPartialMatches = matchRoutesImpl(\n          dataRoutes.activeRoutes,\n          pathname,\n          basename,\n          true,\n          activeBranches\n        );\n      }\n      if (!newPartialMatches || compareMatches(partialMatches, newPartialMatches)) {\n        return { type: \"success\", matches: null };\n      }\n      partialMatches = newPartialMatches;\n    }\n  }\n  function compareMatches(a, b) {\n    return a.length === b.length && a.every((m, i) => m.route.id === b[i].route.id);\n  }\n  function _internalSetRoutes(newRoutes) {\n    manifest = {};\n    dataRoutes.setHmrRoutes(\n      convertRoutesToDataRoutes(\n        newRoutes,\n        mapRouteProperties2,\n        void 0,\n        manifest\n      )\n    );\n  }\n  function patchRoutes(routeId, children, unstable_allowElementMutations = false) {\n    patchRoutesImpl(\n      routeId,\n      children,\n      dataRoutes,\n      manifest,\n      mapRouteProperties2,\n      unstable_allowElementMutations\n    );\n    if (!dataRoutes.hasHMRRoutes) {\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.stableRoutes;\n    },\n    get branches() {\n      return dataRoutes.branches;\n    },\n    get manifest() {\n      return manifest;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch: fetch2,\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    resetFetcher,\n    deleteFetcher: queueFetcherForDeletion,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes,\n    _internalSetStateDoNotUseOrYouWillBreakYourApp(newState) {\n      updateState(newState);\n    }\n  };\n  if (init.instrumentations) {\n    router = instrumentClientSideRouter(\n      router,\n      init.instrumentations.map((i) => i.router).filter(Boolean)\n    );\n  }\n  return router;\n}\nfunction createStaticHandler(routes, opts) {\n  invariant(\n    routes.length > 0,\n    \"You must provide a non-empty routes array to createStaticHandler\"\n  );\n  let manifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let _mapRouteProperties = opts?.mapRouteProperties || defaultMapRouteProperties;\n  let mapRouteProperties2 = _mapRouteProperties;\n  let future = {\n    ...opts?.future\n  };\n  if (opts?.instrumentations) {\n    let instrumentations = opts.instrumentations;\n    mapRouteProperties2 = (route) => {\n      return {\n        ..._mapRouteProperties(route),\n        ...getRouteInstrumentationUpdates(\n          instrumentations.map((i) => i.route).filter(Boolean),\n          route\n        )\n      };\n    };\n  }\n  let dataRoutes = convertRoutesToDataRoutes(\n    routes,\n    mapRouteProperties2,\n    void 0,\n    manifest\n  );\n  let routeBranches = flattenAndRankRoutes(dataRoutes);\n  async function query(request, {\n    requestContext,\n    filterMatchesToLoad,\n    skipLoaderErrorBubbling,\n    skipRevalidation,\n    dataStrategy,\n    generateMiddlewareResponse,\n    normalizePath\n  } = {}) {\n    let normalizePathImpl = normalizePath || defaultNormalizePath;\n    let method = request.method;\n    let location = createLocation(\n      \"\",\n      normalizePathImpl(request),\n      null,\n      \"default\"\n    );\n    let matches = matchRoutesImpl(\n      dataRoutes,\n      location,\n      basename,\n      false,\n      routeBranches\n    );\n    requestContext = requestContext != null ? requestContext : new RouterContextProvider();\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, { method });\n      let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);\n      let staticContext = {\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      };\n      return generateMiddlewareResponse ? generateMiddlewareResponse(() => Promise.resolve(staticContext)) : staticContext;\n    } else if (!matches) {\n      let error = getInternalRouterError(404, { pathname: location.pathname });\n      let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);\n      let staticContext = {\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      };\n      return generateMiddlewareResponse ? generateMiddlewareResponse(() => Promise.resolve(staticContext)) : staticContext;\n    }\n    if (generateMiddlewareResponse) {\n      invariant(\n        requestContext instanceof RouterContextProvider,\n        \"When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `RouterContextProvider`\"\n      );\n      try {\n        await loadLazyMiddlewareForMatches(\n          matches,\n          manifest,\n          mapRouteProperties2\n        );\n        let renderedStaticContext;\n        let response = await runServerMiddlewarePipeline(\n          {\n            request,\n            url: createDataFunctionUrl(request, location),\n            pattern: getRoutePattern(matches),\n            matches,\n            params: matches[0].params,\n            // If we're calling middleware then it must be enabled so we can cast\n            // this to the proper type knowing it's not an `AppLoadContext`\n            context: requestContext\n          },\n          async () => {\n            let res = await generateMiddlewareResponse(\n              async (revalidationRequest, opts2 = {}) => {\n                let result2 = await queryImpl(\n                  revalidationRequest,\n                  location,\n                  matches,\n                  requestContext,\n                  dataStrategy || null,\n                  skipLoaderErrorBubbling === true,\n                  null,\n                  \"filterMatchesToLoad\" in opts2 ? opts2.filterMatchesToLoad ?? null : filterMatchesToLoad ?? null,\n                  skipRevalidation === true\n                );\n                if (isResponse(result2)) {\n                  return result2;\n                }\n                renderedStaticContext = { location, basename, ...result2 };\n                return renderedStaticContext;\n              }\n            );\n            return res;\n          },\n          async (error, routeId) => {\n            if (isRedirectResponse(error)) {\n              return error;\n            }\n            if (isResponse(error)) {\n              try {\n                error = new ErrorResponseImpl(\n                  error.status,\n                  error.statusText,\n                  await parseResponseBody(error)\n                );\n              } catch (e) {\n                error = e;\n              }\n            }\n            if (isDataWithResponseInit(error)) {\n              error = dataWithResponseInitToErrorResponse(error);\n            }\n            if (renderedStaticContext) {\n              if (routeId in renderedStaticContext.loaderData) {\n                renderedStaticContext.loaderData[routeId] = void 0;\n              }\n              let staticContext = getStaticContextFromError(\n                dataRoutes,\n                renderedStaticContext,\n                error,\n                skipLoaderErrorBubbling ? routeId : findNearestBoundary(matches, routeId).route.id\n              );\n              return generateMiddlewareResponse(\n                () => Promise.resolve(staticContext)\n              );\n            } else {\n              let boundaryRouteId = skipLoaderErrorBubbling ? routeId : findNearestBoundary(\n                matches,\n                matches.find(\n                  (m) => m.route.id === routeId || m.route.loader\n                )?.route.id || routeId\n              ).route.id;\n              let staticContext = {\n                matches,\n                location,\n                basename,\n                loaderData: {},\n                actionData: null,\n                errors: {\n                  [boundaryRouteId]: error\n                },\n                statusCode: isRouteErrorResponse(error) ? error.status : 500,\n                actionHeaders: {},\n                loaderHeaders: {}\n              };\n              return generateMiddlewareResponse(\n                () => Promise.resolve(staticContext)\n              );\n            }\n          }\n        );\n        invariant(isResponse(response), \"Expected a response in query()\");\n        return response;\n      } catch (e) {\n        if (isResponse(e)) {\n          return e;\n        }\n        throw e;\n      }\n    }\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      dataStrategy || null,\n      skipLoaderErrorBubbling === true,\n      null,\n      filterMatchesToLoad || null,\n      skipRevalidation === true\n    );\n    if (isResponse(result)) {\n      return result;\n    }\n    return { location, basename, ...result };\n  }\n  async function queryRoute(request, {\n    routeId,\n    requestContext,\n    dataStrategy,\n    generateMiddlewareResponse,\n    normalizePath\n  } = {}) {\n    let normalizePathImpl = normalizePath || defaultNormalizePath;\n    let method = request.method;\n    let location = createLocation(\n      \"\",\n      normalizePathImpl(request),\n      null,\n      \"default\"\n    );\n    let matches = matchRoutesImpl(\n      dataRoutes,\n      location,\n      basename,\n      false,\n      routeBranches\n    );\n    requestContext = requestContext != null ? requestContext : new RouterContextProvider();\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, { method });\n    } else if (!matches) {\n      throw getInternalRouterError(404, { pathname: location.pathname });\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      throw getInternalRouterError(404, { pathname: location.pathname });\n    }\n    if (generateMiddlewareResponse) {\n      invariant(\n        requestContext instanceof RouterContextProvider,\n        \"When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `RouterContextProvider`\"\n      );\n      await loadLazyMiddlewareForMatches(matches, manifest, mapRouteProperties2);\n      let response = await runServerMiddlewarePipeline(\n        {\n          request,\n          url: createDataFunctionUrl(request, location),\n          pattern: getRoutePattern(matches),\n          matches,\n          params: matches[0].params,\n          // If we're calling middleware then it must be enabled so we can cast\n          // this to the proper type knowing it's not an `AppLoadContext`\n          context: requestContext\n        },\n        async () => {\n          let res = await generateMiddlewareResponse(\n            async (innerRequest) => {\n              let result2 = await queryImpl(\n                innerRequest,\n                location,\n                matches,\n                requestContext,\n                dataStrategy || null,\n                false,\n                match,\n                null,\n                false\n              );\n              let processed = handleQueryResult(result2);\n              return isResponse(processed) ? processed : typeof processed === \"string\" ? new Response(processed) : Response.json(processed);\n            }\n          );\n          return res;\n        },\n        (error) => {\n          if (isDataWithResponseInit(error)) {\n            return Promise.resolve(dataWithResponseInitToResponse(error));\n          }\n          if (isResponse(error)) {\n            return Promise.resolve(error);\n          }\n          throw error;\n        }\n      );\n      return response;\n    }\n    let result = await queryImpl(\n      request,\n      location,\n      matches,\n      requestContext,\n      dataStrategy || null,\n      false,\n      match,\n      null,\n      false\n    );\n    return handleQueryResult(result);\n    function handleQueryResult(result2) {\n      if (isResponse(result2)) {\n        return result2;\n      }\n      let error = result2.errors ? Object.values(result2.errors)[0] : void 0;\n      if (error !== void 0) {\n        throw error;\n      }\n      if (result2.actionData) {\n        return Object.values(result2.actionData)[0];\n      }\n      if (result2.loaderData) {\n        return Object.values(result2.loaderData)[0];\n      }\n      return void 0;\n    }\n  }\n  async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, skipRevalidation) {\n    invariant(\n      request.signal,\n      \"query()/queryRoute() requests must contain an AbortController signal\"\n    );\n    try {\n      if (isMutationMethod(request.method)) {\n        let result2 = await submit(\n          request,\n          location,\n          matches,\n          routeMatch || getTargetMatch(matches, location),\n          requestContext,\n          dataStrategy,\n          skipLoaderErrorBubbling,\n          routeMatch != null,\n          filterMatchesToLoad,\n          skipRevalidation\n        );\n        return result2;\n      }\n      let result = await loadRouteData(\n        request,\n        location,\n        matches,\n        requestContext,\n        dataStrategy,\n        skipLoaderErrorBubbling,\n        routeMatch,\n        filterMatchesToLoad\n      );\n      return isResponse(result) ? result : {\n        ...result,\n        actionData: null,\n        actionHeaders: {}\n      };\n    } catch (e) {\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === \"error\" /* error */) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n  async function submit(request, location, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest, filterMatchesToLoad, skipRevalidation) {\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: \"error\" /* error */,\n        error\n      };\n    } else {\n      let dsMatches = getTargetedDataStrategyMatches(\n        mapRouteProperties2,\n        manifest,\n        request,\n        location,\n        matches,\n        actionMatch,\n        [],\n        requestContext\n      );\n      let results = await callDataStrategy(\n        request,\n        location,\n        dsMatches,\n        isRouteRequest,\n        requestContext,\n        dataStrategy\n      );\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest);\n      }\n    }\n    if (isRedirectResult(result)) {\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")\n        }\n      });\n    }\n    if (isRouteRequest) {\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: { [actionMatch.route.id]: result.data },\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      };\n    }\n    if (skipRevalidation) {\n      if (isErrorResult(result)) {\n        let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n        return {\n          statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n          actionData: null,\n          actionHeaders: {\n            ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n          },\n          matches,\n          loaderData: {},\n          errors: {\n            [boundaryMatch.route.id]: result.error\n          },\n          loaderHeaders: {}\n        };\n      } else {\n        return {\n          actionData: {\n            [actionMatch.route.id]: result.data\n          },\n          actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {},\n          matches,\n          loaderData: {},\n          errors: null,\n          statusCode: result.statusCode || 200,\n          loaderHeaders: {}\n        };\n      }\n    }\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      let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n      let handlerContext2 = await loadRouteData(\n        loaderRequest,\n        location,\n        matches,\n        requestContext,\n        dataStrategy,\n        skipLoaderErrorBubbling,\n        null,\n        filterMatchesToLoad,\n        [boundaryMatch.route.id, result]\n      );\n      return {\n        ...handlerContext2,\n        statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n        actionData: null,\n        actionHeaders: {\n          ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n        }\n      };\n    }\n    let handlerContext = await loadRouteData(\n      loaderRequest,\n      location,\n      matches,\n      requestContext,\n      dataStrategy,\n      skipLoaderErrorBubbling,\n      null,\n      filterMatchesToLoad\n    );\n    return {\n      ...handlerContext,\n      actionData: {\n        [actionMatch.route.id]: result.data\n      },\n      // action status codes take precedence over loader status codes\n      ...result.statusCode ? { statusCode: result.statusCode } : {},\n      actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {}\n    };\n  }\n  async function loadRouteData(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, pendingActionResult) {\n    let isRouteRequest = routeMatch != null;\n    if (isRouteRequest && !routeMatch?.route.loader && !routeMatch?.route.lazy) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch?.route.id\n      });\n    }\n    let dsMatches;\n    if (routeMatch) {\n      dsMatches = getTargetedDataStrategyMatches(\n        mapRouteProperties2,\n        manifest,\n        request,\n        location,\n        matches,\n        routeMatch,\n        [],\n        requestContext\n      );\n    } else {\n      let maxIdx = pendingActionResult && isErrorResult(pendingActionResult[1]) ? (\n        // Up to but not including the boundary\n        matches.findIndex((m) => m.route.id === pendingActionResult[0]) - 1\n      ) : void 0;\n      let pattern = getRoutePattern(matches);\n      dsMatches = matches.map((match, index) => {\n        if (maxIdx != null && index > maxIdx) {\n          return getDataStrategyMatch(\n            mapRouteProperties2,\n            manifest,\n            request,\n            location,\n            pattern,\n            match,\n            [],\n            requestContext,\n            false\n          );\n        }\n        return getDataStrategyMatch(\n          mapRouteProperties2,\n          manifest,\n          request,\n          location,\n          pattern,\n          match,\n          [],\n          requestContext,\n          (match.route.loader || match.route.lazy) != null && (!filterMatchesToLoad || filterMatchesToLoad(match))\n        );\n      });\n    }\n    if (!dataStrategy && !dsMatches.some((m) => m.shouldLoad)) {\n      return {\n        matches,\n        loaderData: {},\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null,\n        statusCode: 200,\n        loaderHeaders: {}\n      };\n    }\n    let results = await callDataStrategy(\n      request,\n      location,\n      dsMatches,\n      isRouteRequest,\n      requestContext,\n      dataStrategy\n    );\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest);\n    }\n    let handlerContext = processRouteLoaderData(\n      matches,\n      results,\n      pendingActionResult,\n      true,\n      skipLoaderErrorBubbling\n    );\n    return {\n      ...handlerContext,\n      matches\n    };\n  }\n  async function callDataStrategy(request, location, matches, isRouteRequest, requestContext, dataStrategy) {\n    let results = await callDataStrategyImpl(\n      dataStrategy || defaultDataStrategy,\n      request,\n      location,\n      matches,\n      null,\n      requestContext,\n      true\n    );\n    let dataResults = {};\n    await Promise.all(\n      matches.map(async (match) => {\n        if (!(match.route.id in results)) {\n          return;\n        }\n        let result = results[match.route.id];\n        if (isRedirectDataStrategyResult(result)) {\n          let response = result.result;\n          throw normalizeRelativeRoutingRedirectResponse(\n            response,\n            request,\n            match.route.id,\n            matches,\n            basename\n          );\n        }\n        if (isRouteRequest) {\n          if (isResponse(result.result)) {\n            throw result;\n          } else if (isDataWithResponseInit(result.result)) {\n            throw dataWithResponseInitToResponse(result.result);\n          }\n        }\n        dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n      })\n    );\n    return dataResults;\n  }\n  return {\n    dataRoutes,\n    _internalRouteBranches: routeBranches,\n    query,\n    queryRoute\n  };\n}\nfunction getStaticContextFromError(routes, handlerContext, error, boundaryId) {\n  let errorBoundaryId = boundaryId || handlerContext._deepestRenderedBoundaryId || routes[0].id;\n  return {\n    ...handlerContext,\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [errorBoundaryId]: error\n    }\n  };\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest) {\n  if (request.signal.reason !== void 0) {\n    throw request.signal.reason;\n  }\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(\n    `${method}() call aborted without an \\`AbortSignal.reason\\`: ${request.method} ${request.url}`\n  );\n}\nfunction isSubmissionNavigation(opts) {\n  return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== void 0);\n}\nfunction defaultNormalizePath(request) {\n  let url = new URL(request.url);\n  return {\n    pathname: url.pathname,\n    search: url.search,\n    hash: url.hash\n  };\n}\nfunction normalizeTo(location, matches, basename, to, fromRouteId, relative) {\n  let contextualMatches;\n  let activeRouteMatch;\n  if (fromRouteId) {\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  let path = resolveTo(\n    to ? to : \".\",\n    getResolveToMatches(contextualMatches),\n    stripBasename(location.pathname, basename) || location.pathname,\n    relative === \"path\"\n  );\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n    let nakedIndex = hasNakedIndexQuery(path.search);\n    if (activeRouteMatch.route.index && !nakedIndex) {\n      path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n    } else if (!activeRouteMatch.route.index && nakedIndex) {\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 (basename !== \"/\") {\n    path.pathname = prependBasename({ basename, pathname: path.pathname });\n  }\n  return createPath(path);\n}\nfunction normalizeNavigateOptions(isFetcher, path, opts) {\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return { path };\n  }\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, { method: opts.formMethod })\n    };\n  }\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, { type: \"invalid-body\" })\n  });\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = rawFormMethod.toUpperCase();\n  let formAction = stripHashFromPath(path);\n  if (opts.body !== void 0) {\n    if (opts.formEncType === \"text/plain\") {\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(\n          (acc, [name, value]) => `${acc}${name}=${value}\n`,\n          \"\"\n        )\n      ) : String(opts.body);\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: void 0,\n          json: void 0,\n          text\n        }\n      };\n    } else if (opts.formEncType === \"application/json\") {\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: void 0,\n            json,\n            text: void 0\n          }\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n  invariant(\n    typeof FormData === \"function\",\n    \"FormData is not available in this environment\"\n  );\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: void 0,\n    text: void 0\n  };\n  if (isMutationMethod(submission.formMethod)) {\n    return { path, submission };\n  }\n  let parsedPath = parsePath(path);\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = `?${searchParams}`;\n  return { path: createPath(parsedPath), submission };\n}\nfunction getMatchesToLoad(request, scopedContext, mapRouteProperties2, manifest, history, state, matches, submission, location, lazyRoutePropertiesToSkip, initialHydration, isRevalidationRequired, cancelledFetcherLoads, fetchersQueuedForDeletion, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, hasPatchRoutesOnNavigation, branches, pendingActionResult, callSiteDefaultShouldRevalidate) {\n  let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : void 0;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n  let maxIdx;\n  if (initialHydration && state.errors) {\n    let boundaryId = Object.keys(state.errors)[0];\n    maxIdx = matches.findIndex((m) => m.route.id === boundaryId);\n  } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n    let boundaryId = pendingActionResult[0];\n    maxIdx = matches.findIndex((m) => m.route.id === boundaryId) - 1;\n  }\n  let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : void 0;\n  let shouldSkipRevalidation = actionStatus && actionStatus >= 400;\n  let baseShouldRevalidateArgs = {\n    currentUrl,\n    currentParams: state.matches[0]?.params || {},\n    nextUrl,\n    nextParams: matches[0].params,\n    ...submission,\n    actionResult,\n    actionStatus\n  };\n  let pattern = getRoutePattern(matches);\n  let dsMatches = matches.map((match, index) => {\n    let { route } = match;\n    let forceShouldLoad = null;\n    if (maxIdx != null && index > maxIdx) {\n      forceShouldLoad = false;\n    } else if (route.lazy) {\n      forceShouldLoad = true;\n    } else if (!routeHasLoaderOrMiddleware(route)) {\n      forceShouldLoad = false;\n    } else if (initialHydration) {\n      let { shouldLoad: shouldLoad2 } = getRouteHydrationStatus(\n        route,\n        state.loaderData,\n        state.errors\n      );\n      forceShouldLoad = shouldLoad2;\n    } else if (isNewLoader(state.loaderData, state.matches[index], match)) {\n      forceShouldLoad = true;\n    }\n    if (forceShouldLoad !== null) {\n      return getDataStrategyMatch(\n        mapRouteProperties2,\n        manifest,\n        request,\n        location,\n        pattern,\n        match,\n        lazyRoutePropertiesToSkip,\n        scopedContext,\n        forceShouldLoad\n      );\n    }\n    let defaultShouldRevalidate = false;\n    if (typeof callSiteDefaultShouldRevalidate === \"boolean\") {\n      defaultShouldRevalidate = callSiteDefaultShouldRevalidate;\n    } else if (shouldSkipRevalidation) {\n      defaultShouldRevalidate = false;\n    } else if (isRevalidationRequired) {\n      defaultShouldRevalidate = true;\n    } else if (currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search) {\n      defaultShouldRevalidate = true;\n    } else if (currentUrl.search !== nextUrl.search) {\n      defaultShouldRevalidate = true;\n    } else if (isNewRouteInstance(state.matches[index], match)) {\n      defaultShouldRevalidate = true;\n    }\n    let shouldRevalidateArgs = {\n      ...baseShouldRevalidateArgs,\n      defaultShouldRevalidate\n    };\n    let shouldLoad = shouldRevalidateLoader(match, shouldRevalidateArgs);\n    return getDataStrategyMatch(\n      mapRouteProperties2,\n      manifest,\n      request,\n      location,\n      pattern,\n      match,\n      lazyRoutePropertiesToSkip,\n      scopedContext,\n      shouldLoad,\n      shouldRevalidateArgs,\n      callSiteDefaultShouldRevalidate\n    );\n  });\n  let revalidatingFetchers = [];\n  fetchLoadMatches.forEach((f, key) => {\n    if (initialHydration || !matches.some((m) => m.route.id === f.routeId) || fetchersQueuedForDeletion.has(key)) {\n      return;\n    }\n    let fetcher = state.fetchers.get(key);\n    let isMidInitialLoad = fetcher && fetcher.state !== \"idle\" && fetcher.data === void 0;\n    let fetcherMatches = matchRoutesImpl(\n      routesToUse,\n      f.path,\n      basename ?? \"/\",\n      false,\n      branches\n    );\n    if (!fetcherMatches) {\n      if (hasPatchRoutesOnNavigation && isMidInitialLoad) {\n        return;\n      }\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        request: null,\n        controller: null\n      });\n      return;\n    }\n    if (fetchRedirectIds.has(key)) {\n      return;\n    }\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n    let fetchController = new AbortController();\n    let fetchRequest = createClientSideRequest(\n      history,\n      f.path,\n      fetchController.signal\n    );\n    let fetcherDsMatches = null;\n    if (cancelledFetcherLoads.has(key)) {\n      cancelledFetcherLoads.delete(key);\n      fetcherDsMatches = getTargetedDataStrategyMatches(\n        mapRouteProperties2,\n        manifest,\n        fetchRequest,\n        f.path,\n        fetcherMatches,\n        fetcherMatch,\n        lazyRoutePropertiesToSkip,\n        scopedContext\n      );\n    } else if (isMidInitialLoad) {\n      if (isRevalidationRequired) {\n        fetcherDsMatches = getTargetedDataStrategyMatches(\n          mapRouteProperties2,\n          manifest,\n          fetchRequest,\n          f.path,\n          fetcherMatches,\n          fetcherMatch,\n          lazyRoutePropertiesToSkip,\n          scopedContext\n        );\n      }\n    } else {\n      let defaultShouldRevalidate;\n      if (typeof callSiteDefaultShouldRevalidate === \"boolean\") {\n        defaultShouldRevalidate = callSiteDefaultShouldRevalidate;\n      } else if (shouldSkipRevalidation) {\n        defaultShouldRevalidate = false;\n      } else {\n        defaultShouldRevalidate = isRevalidationRequired;\n      }\n      let shouldRevalidateArgs = {\n        ...baseShouldRevalidateArgs,\n        defaultShouldRevalidate\n      };\n      if (shouldRevalidateLoader(fetcherMatch, shouldRevalidateArgs)) {\n        fetcherDsMatches = getTargetedDataStrategyMatches(\n          mapRouteProperties2,\n          manifest,\n          fetchRequest,\n          f.path,\n          fetcherMatches,\n          fetcherMatch,\n          lazyRoutePropertiesToSkip,\n          scopedContext,\n          shouldRevalidateArgs\n        );\n      }\n    }\n    if (fetcherDsMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherDsMatches,\n        match: fetcherMatch,\n        request: fetchRequest,\n        controller: fetchController\n      });\n    }\n  });\n  return { dsMatches, revalidatingFetchers };\n}\nfunction routeHasLoaderOrMiddleware(route) {\n  return route.loader != null || route.middleware != null && route.middleware.length > 0;\n}\nfunction getRouteHydrationStatus(route, loaderData, errors) {\n  if (route.lazy) {\n    return { shouldLoad: true, renderFallback: true };\n  }\n  if (!routeHasLoaderOrMiddleware(route)) {\n    return { shouldLoad: false, renderFallback: false };\n  }\n  let hasData = loaderData != null && route.id in loaderData;\n  let hasError = errors != null && errors[route.id] !== void 0;\n  if (!hasData && hasError) {\n    return { shouldLoad: false, renderFallback: false };\n  }\n  if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n    return { shouldLoad: true, renderFallback: !hasData };\n  }\n  let shouldLoad = !hasData && !hasError;\n  return { shouldLoad, renderFallback: shouldLoad };\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n  let isNew = (\n    // [a] -> [a, b]\n    !currentMatch || // [a, b] -> [a, c]\n    match.route.id !== currentMatch.route.id\n  );\n  let isMissingData = !currentLoaderData.hasOwnProperty(match.route.id);\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 || // 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, dataRoutes, manifest, mapRouteProperties2, allowElementMutations) {\n  let childrenToPatch;\n  if (routeId) {\n    let route = manifest[routeId];\n    invariant(\n      route,\n      `No route found to patch children into: routeId = ${routeId}`\n    );\n    if (!route.children) {\n      route.children = [];\n    }\n    childrenToPatch = route.children;\n  } else {\n    childrenToPatch = dataRoutes.activeRoutes;\n  }\n  let uniqueChildren = [];\n  let existingChildren = [];\n  children.forEach((newRoute) => {\n    let existingRoute = childrenToPatch.find(\n      (existingRoute2) => isSameRoute(newRoute, existingRoute2)\n    );\n    if (existingRoute) {\n      existingChildren.push({ existingRoute, newRoute });\n    } else {\n      uniqueChildren.push(newRoute);\n    }\n  });\n  if (uniqueChildren.length > 0) {\n    let newRoutes = convertRoutesToDataRoutes(\n      uniqueChildren,\n      mapRouteProperties2,\n      [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n      manifest\n    );\n    childrenToPatch.push(...newRoutes);\n  }\n  if (allowElementMutations && existingChildren.length > 0) {\n    for (let i = 0; i < existingChildren.length; i++) {\n      let { existingRoute, newRoute } = existingChildren[i];\n      let existingRouteTyped = existingRoute;\n      let [newRouteTyped] = convertRoutesToDataRoutes(\n        [newRoute],\n        mapRouteProperties2,\n        [],\n        // Doesn't matter for mutated routes since they already have an id\n        {},\n        // Don't touch the manifest here since we're updating in place\n        true\n      );\n      Object.assign(existingRouteTyped, {\n        element: newRouteTyped.element ? newRouteTyped.element : existingRouteTyped.element,\n        errorElement: newRouteTyped.errorElement ? newRouteTyped.errorElement : existingRouteTyped.errorElement,\n        hydrateFallbackElement: newRouteTyped.hydrateFallbackElement ? newRouteTyped.hydrateFallbackElement : existingRouteTyped.hydrateFallbackElement\n      });\n    }\n  }\n  if (!dataRoutes.hasHMRRoutes) {\n    dataRoutes.setRoutes([...dataRoutes.activeRoutes]);\n  }\n}\nfunction isSameRoute(newRoute, existingRoute) {\n  if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n    return true;\n  }\n  if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n    return false;\n  }\n  if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n    return true;\n  }\n  return newRoute.children?.every(\n    (aChild, i) => existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n  ) ?? false;\n}\nvar lazyRoutePropertyCache = /* @__PURE__ */ new WeakMap();\nvar loadLazyRouteProperty = ({\n  key,\n  route,\n  manifest,\n  mapRouteProperties: mapRouteProperties2\n}) => {\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  if (!routeToUpdate.lazy || typeof routeToUpdate.lazy !== \"object\") {\n    return;\n  }\n  let lazyFn = routeToUpdate.lazy[key];\n  if (!lazyFn) {\n    return;\n  }\n  let cache = lazyRoutePropertyCache.get(routeToUpdate);\n  if (!cache) {\n    cache = {};\n    lazyRoutePropertyCache.set(routeToUpdate, cache);\n  }\n  let cachedPromise = cache[key];\n  if (cachedPromise) {\n    return cachedPromise;\n  }\n  let propertyPromise = (async () => {\n    let isUnsupported = isUnsupportedLazyRouteObjectKey(key);\n    let staticRouteValue = routeToUpdate[key];\n    let isStaticallyDefined = staticRouteValue !== void 0 && key !== \"hasErrorBoundary\";\n    if (isUnsupported) {\n      warning(\n        !isUnsupported,\n        \"Route property \" + key + \" is not a supported lazy route property. This property will be ignored.\"\n      );\n      cache[key] = Promise.resolve();\n    } else if (isStaticallyDefined) {\n      warning(\n        false,\n        `Route \"${routeToUpdate.id}\" has a static property \"${key}\" defined. The lazy property will be ignored.`\n      );\n    } else {\n      let value = await lazyFn();\n      if (value != null) {\n        Object.assign(routeToUpdate, { [key]: value });\n        Object.assign(routeToUpdate, mapRouteProperties2(routeToUpdate));\n      }\n    }\n    if (typeof routeToUpdate.lazy === \"object\") {\n      routeToUpdate.lazy[key] = void 0;\n      if (Object.values(routeToUpdate.lazy).every((value) => value === void 0)) {\n        routeToUpdate.lazy = void 0;\n      }\n    }\n  })();\n  cache[key] = propertyPromise;\n  return propertyPromise;\n};\nvar lazyRouteFunctionCache = /* @__PURE__ */ new WeakMap();\nfunction loadLazyRoute(route, type, manifest, mapRouteProperties2, lazyRoutePropertiesToSkip) {\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  if (!route.lazy) {\n    return {\n      lazyRoutePromise: void 0,\n      lazyHandlerPromise: void 0\n    };\n  }\n  if (typeof route.lazy === \"function\") {\n    let cachedPromise = lazyRouteFunctionCache.get(routeToUpdate);\n    if (cachedPromise) {\n      return {\n        lazyRoutePromise: cachedPromise,\n        lazyHandlerPromise: cachedPromise\n      };\n    }\n    let lazyRoutePromise2 = (async () => {\n      invariant(\n        typeof route.lazy === \"function\",\n        \"No lazy route function found\"\n      );\n      let lazyRoute = await route.lazy();\n      let routeUpdates = {};\n      for (let lazyRouteProperty in lazyRoute) {\n        let lazyValue = lazyRoute[lazyRouteProperty];\n        if (lazyValue === void 0) {\n          continue;\n        }\n        let isUnsupported = isUnsupportedLazyRouteFunctionKey(lazyRouteProperty);\n        let staticRouteValue = routeToUpdate[lazyRouteProperty];\n        let isStaticallyDefined = staticRouteValue !== void 0 && // This property isn't static since it should always be updated based\n        // on the route updates\n        lazyRouteProperty !== \"hasErrorBoundary\";\n        if (isUnsupported) {\n          warning(\n            !isUnsupported,\n            \"Route property \" + lazyRouteProperty + \" is not a supported property to be returned from a lazy route function. This property will be ignored.\"\n          );\n        } else if (isStaticallyDefined) {\n          warning(\n            !isStaticallyDefined,\n            `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          );\n        } else {\n          routeUpdates[lazyRouteProperty] = lazyValue;\n        }\n      }\n      Object.assign(routeToUpdate, routeUpdates);\n      Object.assign(routeToUpdate, {\n        // To keep things framework agnostic, we use the provided `mapRouteProperties`\n        // function to set the framework-aware properties (`element`/`hasErrorBoundary`)\n        // since the logic will differ between frameworks.\n        ...mapRouteProperties2(routeToUpdate),\n        lazy: void 0\n      });\n    })();\n    lazyRouteFunctionCache.set(routeToUpdate, lazyRoutePromise2);\n    lazyRoutePromise2.catch(() => {\n    });\n    return {\n      lazyRoutePromise: lazyRoutePromise2,\n      lazyHandlerPromise: lazyRoutePromise2\n    };\n  }\n  let lazyKeys = Object.keys(route.lazy);\n  let lazyPropertyPromises = [];\n  let lazyHandlerPromise = void 0;\n  for (let key of lazyKeys) {\n    if (lazyRoutePropertiesToSkip && lazyRoutePropertiesToSkip.includes(key)) {\n      continue;\n    }\n    let promise = loadLazyRouteProperty({\n      key,\n      route,\n      manifest,\n      mapRouteProperties: mapRouteProperties2\n    });\n    if (promise) {\n      lazyPropertyPromises.push(promise);\n      if (key === type) {\n        lazyHandlerPromise = promise;\n      }\n    }\n  }\n  let lazyRoutePromise = lazyPropertyPromises.length > 0 ? Promise.all(lazyPropertyPromises).then(() => {\n  }) : void 0;\n  lazyRoutePromise?.catch(() => {\n  });\n  lazyHandlerPromise?.catch(() => {\n  });\n  return {\n    lazyRoutePromise,\n    lazyHandlerPromise\n  };\n}\nfunction isNonNullable(value) {\n  return value !== void 0;\n}\nfunction loadLazyMiddlewareForMatches(matches, manifest, mapRouteProperties2) {\n  let promises = matches.map(({ route }) => {\n    if (typeof route.lazy !== \"object\" || !route.lazy.middleware) {\n      return void 0;\n    }\n    return loadLazyRouteProperty({\n      key: \"middleware\",\n      route,\n      manifest,\n      mapRouteProperties: mapRouteProperties2\n    });\n  }).filter(isNonNullable);\n  return promises.length > 0 ? Promise.all(promises) : void 0;\n}\nasync function defaultDataStrategy(args) {\n  let matchesToLoad = args.matches.filter((m) => m.shouldLoad);\n  let keyedResults = {};\n  let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n  results.forEach((result, i) => {\n    keyedResults[matchesToLoad[i].route.id] = result;\n  });\n  return keyedResults;\n}\nasync function defaultDataStrategyWithMiddleware(args) {\n  if (!args.matches.some((m) => m.route.middleware)) {\n    return defaultDataStrategy(args);\n  }\n  return runClientMiddlewarePipeline(args, () => defaultDataStrategy(args));\n}\nfunction runServerMiddlewarePipeline(args, handler, errorHandler) {\n  return runMiddlewarePipeline(\n    args,\n    handler,\n    processResult,\n    isResponse,\n    errorHandler\n  );\n  function processResult(result) {\n    return isDataWithResponseInit(result) ? dataWithResponseInitToResponse(result) : result;\n  }\n}\nfunction runClientMiddlewarePipeline(args, handler) {\n  return runMiddlewarePipeline(\n    args,\n    handler,\n    (r) => {\n      if (isRedirectResponse(r)) {\n        throw r;\n      }\n      return r;\n    },\n    isDataStrategyResults,\n    errorHandler\n  );\n  function errorHandler(error, routeId, nextResult) {\n    if (nextResult) {\n      return Promise.resolve(\n        Object.assign(nextResult.value, {\n          [routeId]: { type: \"error\", result: error }\n        })\n      );\n    } else {\n      let { matches } = args;\n      let maxBoundaryIdx = Math.min(\n        // Throwing route\n        Math.max(\n          matches.findIndex((m) => m.route.id === routeId),\n          0\n        ),\n        // or the shallowest route that needs to load data\n        Math.max(\n          matches.findIndex((m) => m.shouldCallHandler()),\n          0\n        )\n      );\n      let boundaryRouteId = findNearestBoundary(\n        matches,\n        matches[maxBoundaryIdx].route.id\n      ).route.id;\n      return Promise.resolve({\n        [boundaryRouteId]: { type: \"error\", result: error }\n      });\n    }\n  }\n}\nasync function runMiddlewarePipeline(args, handler, processResult, isResult, errorHandler) {\n  let { matches, ...dataFnArgs } = args;\n  let tuples = matches.flatMap(\n    (m) => m.route.middleware ? m.route.middleware.map((fn) => [m.route.id, fn]) : []\n  );\n  let result = await callRouteMiddleware(\n    dataFnArgs,\n    tuples,\n    handler,\n    processResult,\n    isResult,\n    errorHandler\n  );\n  return result;\n}\nasync function callRouteMiddleware(args, middlewares, handler, processResult, isResult, errorHandler, idx = 0) {\n  let { request } = args;\n  if (request.signal.aborted) {\n    throw request.signal.reason ?? new Error(`Request aborted: ${request.method} ${request.url}`);\n  }\n  let tuple = middlewares[idx];\n  if (!tuple) {\n    let result = await handler();\n    return result;\n  }\n  let [routeId, middleware] = tuple;\n  let nextResult;\n  let next = async () => {\n    if (nextResult) {\n      throw new Error(\"You may only call `next()` once per middleware\");\n    }\n    try {\n      let result = await callRouteMiddleware(\n        args,\n        middlewares,\n        handler,\n        processResult,\n        isResult,\n        errorHandler,\n        idx + 1\n      );\n      nextResult = { value: result };\n      return nextResult.value;\n    } catch (error) {\n      nextResult = { value: await errorHandler(error, routeId, nextResult) };\n      return nextResult.value;\n    }\n  };\n  try {\n    let value = await middleware(args, next);\n    let result = value != null ? processResult(value) : void 0;\n    if (isResult(result)) {\n      return result;\n    } else if (nextResult) {\n      return result ?? nextResult.value;\n    } else {\n      nextResult = { value: await next() };\n      return nextResult.value;\n    }\n  } catch (error) {\n    let response = await errorHandler(error, routeId, nextResult);\n    return response;\n  }\n}\nfunction getDataStrategyMatchLazyPromises(mapRouteProperties2, manifest, request, match, lazyRoutePropertiesToSkip) {\n  let lazyMiddlewarePromise = loadLazyRouteProperty({\n    key: \"middleware\",\n    route: match.route,\n    manifest,\n    mapRouteProperties: mapRouteProperties2\n  });\n  let lazyRoutePromises = loadLazyRoute(\n    match.route,\n    isMutationMethod(request.method) ? \"action\" : \"loader\",\n    manifest,\n    mapRouteProperties2,\n    lazyRoutePropertiesToSkip\n  );\n  return {\n    middleware: lazyMiddlewarePromise,\n    route: lazyRoutePromises.lazyRoutePromise,\n    handler: lazyRoutePromises.lazyHandlerPromise\n  };\n}\nfunction getDataStrategyMatch(mapRouteProperties2, manifest, request, path, pattern, match, lazyRoutePropertiesToSkip, scopedContext, shouldLoad, shouldRevalidateArgs = null, callSiteDefaultShouldRevalidate) {\n  let isUsingNewApi = false;\n  let _lazyPromises = getDataStrategyMatchLazyPromises(\n    mapRouteProperties2,\n    manifest,\n    request,\n    match,\n    lazyRoutePropertiesToSkip\n  );\n  return {\n    ...match,\n    _lazyPromises,\n    shouldLoad,\n    shouldRevalidateArgs,\n    shouldCallHandler(defaultShouldRevalidate) {\n      isUsingNewApi = true;\n      if (!shouldRevalidateArgs) {\n        return shouldLoad;\n      }\n      if (typeof callSiteDefaultShouldRevalidate === \"boolean\") {\n        return shouldRevalidateLoader(match, {\n          ...shouldRevalidateArgs,\n          defaultShouldRevalidate: callSiteDefaultShouldRevalidate\n        });\n      }\n      if (typeof defaultShouldRevalidate === \"boolean\") {\n        return shouldRevalidateLoader(match, {\n          ...shouldRevalidateArgs,\n          defaultShouldRevalidate\n        });\n      }\n      return shouldRevalidateLoader(match, shouldRevalidateArgs);\n    },\n    resolve(handlerOverride) {\n      let { lazy, loader, middleware } = match.route;\n      let callHandler = isUsingNewApi || shouldLoad || handlerOverride && !isMutationMethod(request.method) && (lazy || loader);\n      let isMiddlewareOnlyRoute = middleware && middleware.length > 0 && !loader && !lazy;\n      if (callHandler && (isMutationMethod(request.method) || !isMiddlewareOnlyRoute)) {\n        return callLoaderOrAction({\n          request,\n          path,\n          pattern,\n          match,\n          lazyHandlerPromise: _lazyPromises?.handler,\n          lazyRoutePromise: _lazyPromises?.route,\n          handlerOverride,\n          scopedContext\n        });\n      }\n      return Promise.resolve({ type: \"data\" /* data */, result: void 0 });\n    }\n  };\n}\nfunction getTargetedDataStrategyMatches(mapRouteProperties2, manifest, request, path, matches, targetMatch, lazyRoutePropertiesToSkip, scopedContext, shouldRevalidateArgs = null) {\n  return matches.map((match) => {\n    if (match.route.id !== targetMatch.route.id) {\n      return {\n        ...match,\n        shouldLoad: false,\n        shouldRevalidateArgs,\n        shouldCallHandler: () => false,\n        _lazyPromises: getDataStrategyMatchLazyPromises(\n          mapRouteProperties2,\n          manifest,\n          request,\n          match,\n          lazyRoutePropertiesToSkip\n        ),\n        resolve: () => Promise.resolve({ type: \"data\", result: void 0 })\n      };\n    }\n    return getDataStrategyMatch(\n      mapRouteProperties2,\n      manifest,\n      request,\n      path,\n      getRoutePattern(matches),\n      match,\n      lazyRoutePropertiesToSkip,\n      scopedContext,\n      true,\n      shouldRevalidateArgs\n    );\n  });\n}\nasync function callDataStrategyImpl(dataStrategyImpl, request, path, matches, fetcherKey, scopedContext, isStaticHandler) {\n  if (matches.some((m) => m._lazyPromises?.middleware)) {\n    await Promise.all(matches.map((m) => m._lazyPromises?.middleware));\n  }\n  let dataStrategyArgs = {\n    request,\n    url: createDataFunctionUrl(request, path),\n    pattern: getRoutePattern(matches),\n    params: matches[0].params,\n    context: scopedContext,\n    matches\n  };\n  let runClientMiddleware = isStaticHandler ? () => {\n    throw new Error(\n      \"You cannot call `runClientMiddleware()` from a static handler `dataStrategy`. Middleware is run outside of `dataStrategy` during SSR in order to bubble up the Response.  You can enable middleware via the `respond` API in `query`/`queryRoute`\"\n    );\n  } : (cb) => {\n    let typedDataStrategyArgs = dataStrategyArgs;\n    return runClientMiddlewarePipeline(typedDataStrategyArgs, () => {\n      return cb({\n        ...typedDataStrategyArgs,\n        fetcherKey,\n        runClientMiddleware: () => {\n          throw new Error(\n            \"Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler\"\n          );\n        }\n      });\n    });\n  };\n  let results = await dataStrategyImpl({\n    ...dataStrategyArgs,\n    fetcherKey,\n    runClientMiddleware\n  });\n  try {\n    await Promise.all(\n      matches.flatMap((m) => [\n        m._lazyPromises?.handler,\n        m._lazyPromises?.route\n      ])\n    );\n  } catch (e) {\n  }\n  return results;\n}\nasync function callLoaderOrAction({\n  request,\n  path,\n  pattern,\n  match,\n  lazyHandlerPromise,\n  lazyRoutePromise,\n  handlerOverride,\n  scopedContext\n}) {\n  let result;\n  let onReject;\n  let isAction = isMutationMethod(request.method);\n  let type = isAction ? \"action\" : \"loader\";\n  let runHandler = (handler) => {\n    let reject;\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(\n          new Error(\n            `You cannot call the handler for a route which defines a boolean \"${type}\" [routeId: ${match.route.id}]`\n          )\n        );\n      }\n      return handler(\n        {\n          request,\n          url: createDataFunctionUrl(request, path),\n          pattern,\n          params: match.params,\n          context: scopedContext\n        },\n        ...ctx !== void 0 ? [ctx] : []\n      );\n    };\n    let handlerPromise = (async () => {\n      try {\n        let val = await (handlerOverride ? handlerOverride((ctx) => actualHandler(ctx)) : actualHandler());\n        return { type: \"data\", result: val };\n      } catch (e) {\n        return { type: \"error\", result: e };\n      }\n    })();\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n  try {\n    let handler = isAction ? match.route.action : match.route.loader;\n    if (lazyHandlerPromise || lazyRoutePromise) {\n      if (handler) {\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          }),\n          // Ensure all lazy route promises are resolved before continuing\n          lazyHandlerPromise,\n          lazyRoutePromise\n        ]);\n        if (handlerError !== void 0) {\n          throw handlerError;\n        }\n        result = value;\n      } else {\n        await lazyHandlerPromise;\n        let handler2 = isAction ? match.route.action : match.route.loader;\n        if (handler2) {\n          [result] = await Promise.all([runHandler(handler2), lazyRoutePromise]);\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          return { type: \"data\" /* data */, result: void 0 };\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  } catch (e) {\n    return { type: \"error\" /* error */, result: e };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n  return result;\n}\nasync function parseResponseBody(response) {\n  let contentType = response.headers.get(\"Content-Type\");\n  if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n    return response.body == null ? null : response.json();\n  }\n  return response.text();\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n  let { result, type } = dataStrategyResult;\n  if (isResponse(result)) {\n    let data2;\n    try {\n      data2 = await parseResponseBody(result);\n    } catch (e) {\n      return { type: \"error\" /* error */, error: e };\n    }\n    if (type === \"error\" /* error */) {\n      return {\n        type: \"error\" /* error */,\n        error: new ErrorResponseImpl(result.status, result.statusText, data2),\n        statusCode: result.status,\n        headers: result.headers\n      };\n    }\n    return {\n      type: \"data\" /* data */,\n      data: data2,\n      statusCode: result.status,\n      headers: result.headers\n    };\n  }\n  if (type === \"error\" /* error */) {\n    if (isDataWithResponseInit(result)) {\n      if (result.data instanceof Error) {\n        return {\n          type: \"error\" /* error */,\n          error: result.data,\n          statusCode: result.init?.status,\n          headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n        };\n      }\n      return {\n        type: \"error\" /* error */,\n        error: dataWithResponseInitToErrorResponse(result),\n        statusCode: isRouteErrorResponse(result) ? result.status : void 0,\n        headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n      };\n    }\n    return {\n      type: \"error\" /* error */,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : void 0\n    };\n  }\n  if (isDataWithResponseInit(result)) {\n    return {\n      type: \"data\" /* data */,\n      data: result.data,\n      statusCode: result.init?.status,\n      headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n    };\n  }\n  return { type: \"data\" /* data */, data: result };\n}\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename) {\n  let location = response.headers.get(\"Location\");\n  invariant(\n    location,\n    \"Redirects returned/thrown from loaders/actions must have a Location header\"\n  );\n  if (!isAbsoluteUrl(location)) {\n    let trimmedMatches = matches.slice(\n      0,\n      matches.findIndex((m) => m.route.id === routeId) + 1\n    );\n    location = normalizeTo(\n      new URL(request.url),\n      trimmedMatches,\n      basename,\n      location\n    );\n    response.headers.set(\"Location\", location);\n  }\n  return response;\n}\nvar invalidProtocols = [\n  \"about:\",\n  \"blob:\",\n  \"chrome:\",\n  \"chrome-untrusted:\",\n  \"content:\",\n  \"data:\",\n  \"devtools:\",\n  \"file:\",\n  \"filesystem:\",\n  // eslint-disable-next-line no-script-url\n  \"javascript:\"\n];\nfunction normalizeRedirectLocation(location, currentUrl, basename, historyInstance) {\n  if (isAbsoluteUrl(location)) {\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n    if (invalidProtocols.includes(url.protocol)) {\n      throw new Error(\"Invalid redirect location\");\n    }\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return removeDoubleSlashes(url.pathname) + url.search + url.hash;\n    }\n  }\n  try {\n    let url = historyInstance.createURL(location);\n    if (invalidProtocols.includes(url.protocol)) {\n      throw new Error(\"Invalid redirect location\");\n    }\n  } catch (e) {\n  }\n  return location;\n}\nfunction createClientSideRequest(history, location, signal, submission) {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init = { signal };\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let { formMethod, formEncType } = submission;\n    init.method = formMethod.toUpperCase();\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({ \"Content-Type\": formEncType });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      init.body = submission.text;\n    } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      init.body = submission.formData;\n    }\n  }\n  return new Request(url, init);\n}\nfunction createDataFunctionUrl(request, path) {\n  let url = new URL(request.url);\n  let parsed = typeof path === \"string\" ? parsePath(path) : path;\n  url.pathname = parsed.pathname || \"/\";\n  if (parsed.search) {\n    let searchParams = new URLSearchParams(parsed.search);\n    let indexValues = searchParams.getAll(\"index\");\n    searchParams.delete(\"index\");\n    for (let value of indexValues.filter(Boolean)) {\n      searchParams.append(\"index\", value);\n    }\n    url.search = searchParams.size ? `?${searchParams.toString()}` : \"\";\n  } else {\n    url.search = \"\";\n  }\n  url.hash = parsed.hash || \"\";\n  return url;\n}\nfunction convertFormDataToSearchParams(formData) {\n  let searchParams = new URLSearchParams();\n  for (let [key, value] of formData.entries()) {\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, isStaticHandler = false, skipLoaderErrorBubbling = false) {\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 : void 0;\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(\n      !isRedirectResult(result),\n      \"Cannot handle redirect results in processLoaderData\"\n    );\n    if (isErrorResult(result)) {\n      let error = result.error;\n      if (pendingError !== void 0) {\n        error = pendingError;\n        pendingError = void 0;\n      }\n      errors = errors || {};\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n      if (!isStaticHandler) {\n        loaderData[id] = ResetLoaderDataSymbol;\n      }\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      loaderData[id] = result.data;\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  if (pendingError !== void 0 && pendingActionResult) {\n    errors = { [pendingActionResult[0]]: pendingError };\n    if (pendingActionResult[2]) {\n      loaderData[pendingActionResult[2]] = void 0;\n    }\n  }\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders\n  };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, workingFetchers) {\n  let { loaderData, errors } = processRouteLoaderData(\n    matches,\n    results,\n    pendingActionResult\n  );\n  revalidatingFetchers.filter((f) => !f.matches || f.matches.some((m) => m.shouldLoad)).forEach((rf) => {\n    let { key, match, controller } = rf;\n    if (controller && controller.signal.aborted) {\n      return;\n    }\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n    if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = {\n          ...errors,\n          [boundaryMatch.route.id]: result.error\n        };\n      }\n      workingFetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      workingFetchers.set(key, doneFetcher);\n    }\n  });\n  return { loaderData, errors };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n  let mergedLoaderData = Object.entries(newLoaderData).filter(([, v]) => v !== ResetLoaderDataSymbol).reduce((merged, [k, v]) => {\n    merged[k] = v;\n    return merged;\n  }, {});\n  for (let match of matches) {\n    let id = match.route.id;\n    if (!newLoaderData.hasOwnProperty(id) && loaderData.hasOwnProperty(id) && match.route.loader) {\n      mergedLoaderData[id] = loaderData[id];\n    }\n    if (errors && errors.hasOwnProperty(id)) {\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}\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  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      {\n        params: {},\n        pathname: \"\",\n        pathnameBase: \"\",\n        route\n      }\n    ],\n    route\n  };\n}\nfunction getInternalRouterError(status, {\n  pathname,\n  routeId,\n  method,\n  type,\n  message\n} = {}) {\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 === \"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(\n    status || 500,\n    statusText,\n    new Error(errorMessage),\n    true\n  );\n}\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 { key, result };\n    }\n  }\n}\nfunction stripHashFromPath(path) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath({ ...parsedPath, hash: \"\" });\n}\nfunction isHashChangeOnly(a, b) {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n  if (a.hash === \"\") {\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    return true;\n  } else if (b.hash !== \"\") {\n    return true;\n  }\n  return false;\n}\nfunction dataWithResponseInitToResponse(data2) {\n  return Response.json(data2.data, data2.init ?? void 0);\n}\nfunction dataWithResponseInitToErrorResponse(data2) {\n  return new ErrorResponseImpl(\n    data2.init?.status ?? 500,\n    data2.init?.statusText ?? \"Internal Server Error\",\n    data2.data\n  );\n}\nfunction isDataStrategyResults(result) {\n  return result != null && typeof result === \"object\" && Object.entries(result).every(\n    ([key, value]) => typeof key === \"string\" && isDataStrategyResult(value)\n  );\n}\nfunction isDataStrategyResult(result) {\n  return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === \"data\" /* data */ || result.type === \"error\" /* error */);\n}\nfunction isRedirectDataStrategyResult(result) {\n  return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isErrorResult(result) {\n  return result.type === \"error\" /* error */;\n}\nfunction isRedirectResult(result) {\n  return (result && result.type) === \"redirect\" /* 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 isResponse(value) {\n  return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectStatusCode(statusCode) {\n  return redirectStatusCodes.has(statusCode);\n}\nfunction isRedirectResponse(result) {\n  return isResponse(result) && isRedirectStatusCode(result.status) && result.headers.has(\"Location\");\n}\nfunction isValidMethod(method) {\n  return validRequestMethods.has(method.toUpperCase());\n}\nfunction isMutationMethod(method) {\n  return validMutationMethods.has(method.toUpperCase());\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 matches[matches.length - 1];\n  }\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n  let { formMethod, formAction, formEncType, text, formData, json } = navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: void 0,\n      json: void 0,\n      text\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: void 0,\n      text: void 0\n    };\n  } else if (json !== void 0) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: void 0,\n      json,\n      text: void 0\n    };\n  }\n}\nfunction getLoadingNavigation(location, matches, historyAction, submission) {\n  if (submission) {\n    let navigation = {\n      state: \"loading\",\n      location,\n      matches,\n      historyAction,\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      matches,\n      historyAction,\n      formMethod: void 0,\n      formAction: void 0,\n      formEncType: void 0,\n      formData: void 0,\n      json: void 0,\n      text: void 0\n    };\n    return navigation;\n  }\n}\nfunction getSubmittingNavigation(location, matches, historyAction, submission) {\n  let navigation = {\n    state: \"submitting\",\n    location,\n    matches,\n    historyAction,\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, data2) {\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: data2\n    };\n    return fetcher;\n  } else {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: void 0,\n      formAction: void 0,\n      formEncType: void 0,\n      formData: void 0,\n      json: void 0,\n      text: void 0,\n      data: data2\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 : void 0\n  };\n  return fetcher;\n}\nfunction getDoneFetcher(data2) {\n  let fetcher = {\n    state: \"idle\",\n    formMethod: void 0,\n    formAction: void 0,\n    formEncType: void 0,\n    formData: void 0,\n    json: void 0,\n    text: void 0,\n    data: data2\n  };\n  return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(\n      TRANSITIONS_STORAGE_KEY\n    );\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  }\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(\n        TRANSITIONS_STORAGE_KEY,\n        JSON.stringify(json)\n      );\n    } catch (error) {\n      warning(\n        false,\n        `Failed to save applied view transitions in sessionStorage (${error}).`\n      );\n    }\n  }\n}\nfunction createDeferred() {\n  let resolve;\n  let reject;\n  let promise = new Promise((res, rej) => {\n    resolve = async (val) => {\n      res(val);\n      try {\n        await promise;\n      } catch (e) {\n      }\n    };\n    reject = async (error) => {\n      rej(error);\n      try {\n        await promise;\n      } catch (e) {\n      }\n    };\n  });\n  return {\n    promise,\n    //@ts-ignore\n    resolve,\n    //@ts-ignore\n    reject\n  };\n}\n\n// lib/context.ts\nimport * as React from \"react\";\nvar DataRouterContext = React.createContext(null);\nDataRouterContext.displayName = \"DataRouter\";\nvar DataRouterStateContext = React.createContext(null);\nDataRouterStateContext.displayName = \"DataRouterState\";\nvar RSCRouterContext = React.createContext(false);\nfunction useIsRSCRouterContext() {\n  return React.useContext(RSCRouterContext);\n}\nvar ViewTransitionContext = React.createContext({\n  isTransitioning: false\n});\nViewTransitionContext.displayName = \"ViewTransition\";\nvar FetchersContext = React.createContext(\n  /* @__PURE__ */ new Map()\n);\nFetchersContext.displayName = \"Fetchers\";\nvar AwaitContext = React.createContext(null);\nAwaitContext.displayName = \"Await\";\nvar AwaitContextProvider = (props) => React.createElement(AwaitContext.Provider, props);\nvar NavigationContext = React.createContext(\n  null\n);\nNavigationContext.displayName = \"Navigation\";\nvar LocationContext = React.createContext(\n  null\n);\nLocationContext.displayName = \"Location\";\nvar RouteContext = React.createContext({\n  outlet: null,\n  matches: [],\n  isDataRoute: false\n});\nRouteContext.displayName = \"Route\";\nvar RouteErrorContext = React.createContext(null);\nRouteErrorContext.displayName = \"RouteError\";\nvar ENABLE_DEV_WARNINGS = true;\n\n// lib/hooks.tsx\nimport * as React2 from \"react\";\n\n// lib/errors.ts\nvar ERROR_DIGEST_BASE = \"REACT_ROUTER_ERROR\";\nvar ERROR_DIGEST_REDIRECT = \"REDIRECT\";\nvar ERROR_DIGEST_ROUTE_ERROR_RESPONSE = \"ROUTE_ERROR_RESPONSE\";\nfunction decodeRedirectErrorDigest(digest) {\n  if (digest.startsWith(`${ERROR_DIGEST_BASE}:${ERROR_DIGEST_REDIRECT}:{`)) {\n    try {\n      let parsed = JSON.parse(digest.slice(28));\n      if (typeof parsed === \"object\" && parsed && typeof parsed.status === \"number\" && typeof parsed.statusText === \"string\" && typeof parsed.location === \"string\" && typeof parsed.reloadDocument === \"boolean\" && typeof parsed.replace === \"boolean\") {\n        return parsed;\n      }\n    } catch {\n    }\n  }\n}\nfunction decodeRouteErrorResponseDigest(digest) {\n  if (digest.startsWith(\n    `${ERROR_DIGEST_BASE}:${ERROR_DIGEST_ROUTE_ERROR_RESPONSE}:{`\n  )) {\n    try {\n      let parsed = JSON.parse(digest.slice(40));\n      if (typeof parsed === \"object\" && parsed && typeof parsed.status === \"number\" && typeof parsed.statusText === \"string\") {\n        return new ErrorResponseImpl(\n          parsed.status,\n          parsed.statusText,\n          parsed.data\n        );\n      }\n    } catch {\n    }\n  }\n}\n\n// lib/hooks.tsx\nfunction useHref(to, { relative } = {}) {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useHref() may be used only in the context of a <Router> component.`\n  );\n  let { basename, navigator } = React2.useContext(NavigationContext);\n  let { hash, pathname, search } = useResolvedPath(to, { relative });\n  let joinedPathname = pathname;\n  if (basename !== \"/\") {\n    joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n  return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\nfunction useInRouterContext() {\n  return React2.useContext(LocationContext) != null;\n}\nfunction useLocation() {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useLocation() may be used only in the context of a <Router> component.`\n  );\n  return React2.useContext(LocationContext).location;\n}\nfunction useNavigationType() {\n  return React2.useContext(LocationContext).navigationType;\n}\nfunction useMatch(pattern) {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useMatch() may be used only in the context of a <Router> component.`\n  );\n  let { pathname } = useLocation();\n  return React2.useMemo(\n    () => matchPath(pattern, decodePath(pathname)),\n    [pathname, pattern]\n  );\n}\nvar navigateEffectWarning = `You should call navigate() in a React.useEffect(), not when your component is first rendered.`;\nfunction useIsomorphicLayoutEffect(cb) {\n  let isStatic = React2.useContext(NavigationContext).static;\n  if (!isStatic) {\n    React2.useLayoutEffect(cb);\n  }\n}\nfunction useNavigate() {\n  let { isDataRoute } = React2.useContext(RouteContext);\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useNavigate() may be used only in the context of a <Router> component.`\n  );\n  let dataRouterContext = React2.useContext(DataRouterContext);\n  let { basename, navigator } = React2.useContext(NavigationContext);\n  let { matches } = React2.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n  let activeRef = React2.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React2.useCallback(\n    (to, options = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n      if (!activeRef.current) return;\n      if (typeof to === \"number\") {\n        navigator.go(to);\n        return;\n      }\n      let path = resolveTo(\n        to,\n        JSON.parse(routePathnamesJson),\n        locationPathname,\n        options.relative === \"path\"\n      );\n      if (dataRouterContext == null && basename !== \"/\") {\n        path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n      }\n      (!!options.replace ? navigator.replace : navigator.push)(\n        path,\n        options.state,\n        options\n      );\n    },\n    [\n      basename,\n      navigator,\n      routePathnamesJson,\n      locationPathname,\n      dataRouterContext\n    ]\n  );\n  return navigate;\n}\nvar OutletContext = React2.createContext(null);\nfunction useOutletContext() {\n  return React2.useContext(OutletContext);\n}\nfunction useOutlet(context) {\n  let outlet = React2.useContext(RouteContext).outlet;\n  return React2.useMemo(\n    () => outlet && /* @__PURE__ */ React2.createElement(OutletContext.Provider, { value: context }, outlet),\n    [outlet, context]\n  );\n}\nfunction useParams() {\n  let { matches } = React2.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch?.params ?? {};\n}\nfunction useResolvedPath(to, { relative } = {}) {\n  let { matches } = React2.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n  return React2.useMemo(\n    () => resolveTo(\n      to,\n      JSON.parse(routePathnamesJson),\n      locationPathname,\n      relative === \"path\"\n    ),\n    [to, routePathnamesJson, locationPathname, relative]\n  );\n}\nfunction useRoutes(routes, locationArg) {\n  return useRoutesImpl(routes, locationArg);\n}\nfunction useRoutesImpl(routes, locationArg, dataRouterOpts) {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of the\n    // router loaded. We can help them understand how to avoid that.\n    `useRoutes() may be used only in the context of a <Router> component.`\n  );\n  let { navigator } = React2.useContext(NavigationContext);\n  let { matches: parentMatches } = React2.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 (ENABLE_DEV_WARNINGS) {\n    let parentPath = parentRoute && parentRoute.path || \"\";\n    warningOnce(\n      parentPathname,\n      !parentRoute || parentPath.endsWith(\"*\") || parentPath.endsWith(\"*?\"),\n      `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\nPlease change the parent <Route path=\"${parentPath}\"> to <Route path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n    );\n  }\n  let locationFromContext = useLocation();\n  let location;\n  if (locationArg) {\n    let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n    invariant(\n      parentPathnameBase === \"/\" || parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n      `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.`\n    );\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n  let pathname = location.pathname || \"/\";\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n  let matches = dataRouterOpts && dataRouterOpts.state.matches.length ? (\n    // If we're in a data router, use the matches we've already identified but ensure\n    // we have the latest route instances from the manifest in case elements have changed\n    dataRouterOpts.state.matches.map(\n      (m) => Object.assign(m, {\n        route: dataRouterOpts.manifest[m.route.id] || m.route\n      })\n    )\n  ) : matchRoutes(routes, { pathname: remainingPathname });\n  if (ENABLE_DEV_WARNINGS) {\n    warning(\n      parentRoute || matches != null,\n      `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n    );\n    warning(\n      matches == null || matches[matches.length - 1].route.element !== void 0 || matches[matches.length - 1].route.Component !== void 0 || matches[matches.length - 1].route.lazy !== void 0,\n      `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.`\n    );\n  }\n  let renderedMatches = _renderMatches(\n    matches && matches.map(\n      (match) => Object.assign({}, match, {\n        params: Object.assign({}, parentParams, match.params),\n        pathname: joinPaths([\n          parentPathnameBase,\n          // Re-encode pathnames that were decoded inside matchRoutes.\n          // Pre-encode `%`, `?` and `#` ahead of `encodeLocation` because it uses\n          // `new URL()` internally and we need to prevent it from treating\n          // them as separators\n          navigator.encodeLocation ? navigator.encodeLocation(\n            match.pathname.replace(/%/g, \"%25\").replace(/\\?/g, \"%3F\").replace(/#/g, \"%23\")\n          ).pathname : match.pathname\n        ]),\n        pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([\n          parentPathnameBase,\n          // Re-encode pathnames that were decoded inside matchRoutes\n          // Pre-encode `%`, `?` and `#` ahead of `encodeLocation` because it uses\n          // `new URL()` internally and we need to prevent it from treating\n          // them as separators\n          navigator.encodeLocation ? navigator.encodeLocation(\n            match.pathnameBase.replace(/%/g, \"%25\").replace(/\\?/g, \"%3F\").replace(/#/g, \"%23\")\n          ).pathname : match.pathnameBase\n        ])\n      })\n    ),\n    parentMatches,\n    dataRouterOpts\n  );\n  if (locationArg && renderedMatches) {\n    return /* @__PURE__ */ React2.createElement(\n      LocationContext.Provider,\n      {\n        value: {\n          location: {\n            pathname: \"/\",\n            search: \"\",\n            hash: \"\",\n            state: null,\n            key: \"default\",\n            mask: void 0,\n            ...location\n          },\n          navigationType: \"POP\" /* Pop */\n        }\n      },\n      renderedMatches\n    );\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 = { padding: \"0.5rem\", backgroundColor: lightgrey };\n  let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n  let devInfo = null;\n  if (ENABLE_DEV_WARNINGS) {\n    console.error(\n      \"Error handled by React Router default ErrorBoundary:\",\n      error\n    );\n    devInfo = /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"p\", null, \"\\u{1F4BF} Hey developer \\u{1F44B}\"), /* @__PURE__ */ React2.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"ErrorBoundary\"), \" or\", \" \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"errorElement\"), \" prop on your route.\"));\n  }\n  return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"h2\", null, \"Unexpected Application Error!\"), /* @__PURE__ */ React2.createElement(\"h3\", { style: { fontStyle: \"italic\" } }, message), stack ? /* @__PURE__ */ React2.createElement(\"pre\", { style: preStyles }, stack) : null, devInfo);\n}\nvar defaultErrorElement = /* @__PURE__ */ React2.createElement(DefaultErrorComponent, null);\nvar RenderErrorBoundary = class extends React2.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 { error };\n  }\n  static getDerivedStateFromProps(props, state) {\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    return {\n      error: props.error !== void 0 ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    if (this.props.onError) {\n      this.props.onError(error, errorInfo);\n    } else {\n      console.error(\n        \"React Router caught the following error during render\",\n        error\n      );\n    }\n  }\n  render() {\n    let error = this.state.error;\n    if (this.context && typeof error === \"object\" && error && \"digest\" in error && typeof error.digest === \"string\") {\n      const decoded = decodeRouteErrorResponseDigest(error.digest);\n      if (decoded) error = decoded;\n    }\n    let result = error !== void 0 ? /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: this.props.routeContext }, /* @__PURE__ */ React2.createElement(\n      RouteErrorContext.Provider,\n      {\n        value: error,\n        children: this.props.component\n      }\n    )) : this.props.children;\n    if (this.context) {\n      return /* @__PURE__ */ React2.createElement(RSCErrorHandler, { error }, result);\n    }\n    return result;\n  }\n};\nRenderErrorBoundary.contextType = RSCRouterContext;\nvar errorRedirectHandledMap = /* @__PURE__ */ new WeakMap();\nfunction RSCErrorHandler({\n  children,\n  error\n}) {\n  let { basename } = React2.useContext(NavigationContext);\n  if (typeof error === \"object\" && error && \"digest\" in error && typeof error.digest === \"string\") {\n    let redirect2 = decodeRedirectErrorDigest(error.digest);\n    if (redirect2) {\n      let existingRedirect = errorRedirectHandledMap.get(error);\n      if (existingRedirect) throw existingRedirect;\n      let parsed = parseToInfo(redirect2.location, basename);\n      if (isBrowser && !errorRedirectHandledMap.get(error)) {\n        if (parsed.isExternal || redirect2.reloadDocument) {\n          window.location.href = parsed.absoluteURL || parsed.to;\n        } else {\n          const redirectPromise = Promise.resolve().then(\n            () => window.__reactRouterDataRouter.navigate(parsed.to, {\n              replace: redirect2.replace\n            })\n          );\n          errorRedirectHandledMap.set(error, redirectPromise);\n          throw redirectPromise;\n        }\n      }\n      return /* @__PURE__ */ React2.createElement(\n        \"meta\",\n        {\n          httpEquiv: \"refresh\",\n          content: `0;url=${parsed.absoluteURL || parsed.to}`\n        }\n      );\n    }\n  }\n  return children;\n}\nfunction RenderedRoute({ routeContext, match, children }) {\n  let dataRouterContext = React2.useContext(DataRouterContext);\n  if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n  return /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: routeContext }, children);\n}\nfunction _renderMatches(matches, parentMatches = [], dataRouterOpts) {\n  let dataRouterState = dataRouterOpts?.state;\n  if (matches == null) {\n    if (!dataRouterState) {\n      return null;\n    }\n    if (dataRouterState.errors) {\n      matches = dataRouterState.matches;\n    } else if (parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n      matches = dataRouterState.matches;\n    } else {\n      return null;\n    }\n  }\n  let renderedMatches = matches;\n  let errors = dataRouterState?.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(\n      (m) => m.route.id && errors?.[m.route.id] !== void 0\n    );\n    invariant(\n      errorIndex >= 0,\n      `Could not find a matching route for errors on route IDs: ${Object.keys(\n        errors\n      ).join(\",\")}`\n    );\n    renderedMatches = renderedMatches.slice(\n      0,\n      Math.min(renderedMatches.length, errorIndex + 1)\n    );\n  }\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterOpts && dataRouterState) {\n    renderFallback = dataRouterState.renderFallback;\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n      if (match.route.id) {\n        let { loaderData, errors: errors2 } = dataRouterState;\n        let needsToRunLoader = match.route.loader && !loaderData.hasOwnProperty(match.route.id) && (!errors2 || errors2[match.route.id] === void 0);\n        if (match.route.lazy || needsToRunLoader) {\n          if (dataRouterOpts.isStatic) {\n            renderFallback = true;\n          }\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  let onErrorHandler = dataRouterOpts?.onError;\n  let onError = dataRouterState && onErrorHandler ? (error, errorInfo) => {\n    onErrorHandler(error, {\n      location: dataRouterState.location,\n      params: dataRouterState.matches?.[0]?.params ?? {},\n      pattern: getRoutePattern(dataRouterState.matches),\n      errorInfo\n    });\n  } : void 0;\n  return renderedMatches.reduceRight(\n    (outlet, match, index) => {\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] : void 0;\n        errorElement = match.route.errorElement || defaultErrorElement;\n        if (renderFallback) {\n          if (fallbackIndex < 0 && index === 0) {\n            warningOnce(\n              \"route-fallback\",\n              false,\n              \"No `HydrateFallback` element provided to render during initial hydration\"\n            );\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 matches2 = 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          children = /* @__PURE__ */ React2.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__ */ React2.createElement(\n          RenderedRoute,\n          {\n            match,\n            routeContext: {\n              outlet,\n              matches: matches2,\n              isDataRoute: dataRouterState != null\n            },\n            children\n          }\n        );\n      };\n      return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /* @__PURE__ */ React2.createElement(\n        RenderErrorBoundary,\n        {\n          location: dataRouterState.location,\n          revalidation: dataRouterState.revalidation,\n          component: errorElement,\n          error,\n          children: getChildren(),\n          routeContext: { outlet: null, matches: matches2, isDataRoute: true },\n          onError\n        }\n      ) : getChildren();\n    },\n    null\n  );\n}\nfunction getDataRouterConsoleError(hookName) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React2.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError(hookName));\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React2.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError(hookName));\n  return state;\n}\nfunction useRouteContext(hookName) {\n  let route = React2.useContext(RouteContext);\n  invariant(route, getDataRouterConsoleError(hookName));\n  return route;\n}\nfunction useCurrentRouteId(hookName) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  invariant(\n    thisRoute.route.id,\n    `${hookName} can only be used on routes that contain a unique \"id\"`\n  );\n  return thisRoute.route.id;\n}\nfunction useRouteId() {\n  return useCurrentRouteId(\"useRouteId\" /* UseRouteId */);\n}\nfunction useNavigation() {\n  let state = useDataRouterState(\"useNavigation\" /* UseNavigation */);\n  return React2.useMemo(() => {\n    let { matches, historyAction, ...rest } = state.navigation;\n    return rest;\n  }, [state.navigation]);\n}\nfunction useRevalidator() {\n  let dataRouterContext = useDataRouterContext(\"useRevalidator\" /* UseRevalidator */);\n  let state = useDataRouterState(\"useRevalidator\" /* UseRevalidator */);\n  let revalidate = React2.useCallback(async () => {\n    await dataRouterContext.router.revalidate();\n  }, [dataRouterContext.router]);\n  return React2.useMemo(\n    () => ({ revalidate, state: state.revalidation }),\n    [revalidate, state.revalidation]\n  );\n}\nfunction useMatches() {\n  let { matches, loaderData } = useDataRouterState(\n    \"useMatches\" /* UseMatches */\n  );\n  return React2.useMemo(\n    () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n    [matches, loaderData]\n  );\n}\nfunction useLoaderData() {\n  let state = useDataRouterState(\"useLoaderData\" /* UseLoaderData */);\n  let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n  return state.loaderData[routeId];\n}\nfunction useRouteLoaderData(routeId) {\n  let state = useDataRouterState(\"useRouteLoaderData\" /* UseRouteLoaderData */);\n  return state.loaderData[routeId];\n}\nfunction useActionData() {\n  let state = useDataRouterState(\"useActionData\" /* UseActionData */);\n  let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n  return state.actionData ? state.actionData[routeId] : void 0;\n}\nfunction useRouteError() {\n  let error = React2.useContext(RouteErrorContext);\n  let state = useDataRouterState(\"useRouteError\" /* UseRouteError */);\n  let routeId = useCurrentRouteId(\"useRouteError\" /* UseRouteError */);\n  if (error !== void 0) {\n    return error;\n  }\n  return state.errors?.[routeId];\n}\nfunction useAsyncValue() {\n  let value = React2.useContext(AwaitContext);\n  return value?._data;\n}\nfunction useAsyncError() {\n  let value = React2.useContext(AwaitContext);\n  return value?._error;\n}\nvar blockerId = 0;\nfunction useBlocker(shouldBlock) {\n  let { router, basename } = useDataRouterContext(\"useBlocker\" /* UseBlocker */);\n  let state = useDataRouterState(\"useBlocker\" /* UseBlocker */);\n  let [blockerKey, setBlockerKey] = React2.useState(\"\");\n  let blockerFunction = React2.useCallback(\n    (arg) => {\n      if (typeof shouldBlock !== \"function\") {\n        return !!shouldBlock;\n      }\n      if (basename === \"/\") {\n        return shouldBlock(arg);\n      }\n      let { currentLocation, nextLocation, historyAction } = arg;\n      return shouldBlock({\n        currentLocation: {\n          ...currentLocation,\n          pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n        },\n        nextLocation: {\n          ...nextLocation,\n          pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n        },\n        historyAction\n      });\n    },\n    [basename, shouldBlock]\n  );\n  React2.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n  React2.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n  return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\nfunction useNavigateStable() {\n  let { router } = useDataRouterContext(\"useNavigate\" /* UseNavigateStable */);\n  let id = useCurrentRouteId(\"useNavigate\" /* UseNavigateStable */);\n  let activeRef = React2.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React2.useCallback(\n    async (to, options = {}) => {\n      warning(activeRef.current, navigateEffectWarning);\n      if (!activeRef.current) return;\n      if (typeof to === \"number\") {\n        await router.navigate(to);\n      } else {\n        await router.navigate(to, { fromRouteId: id, ...options });\n      }\n    },\n    [router, id]\n  );\n  return navigate;\n}\nvar alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n  if (!cond && !alreadyWarned[key]) {\n    alreadyWarned[key] = true;\n    warning(false, message);\n  }\n}\nfunction useRoute(...args) {\n  const currentRouteId = useCurrentRouteId(\n    \"useRoute\" /* UseRoute */\n  );\n  const id = args[0] ?? currentRouteId;\n  const state = useDataRouterState(\"useRoute\" /* UseRoute */);\n  const route = state.matches.find(({ route: route2 }) => route2.id === id);\n  if (route === void 0) return void 0;\n  return {\n    handle: route.route.handle,\n    loaderData: state.loaderData[id],\n    actionData: state.actionData?.[id]\n  };\n}\nfunction toRouterStateMatch(match) {\n  return {\n    id: match.route.id,\n    pathname: match.pathname,\n    params: match.params,\n    handle: match.route.handle\n  };\n}\nfunction useRouterState() {\n  let {\n    location,\n    historyAction: type,\n    matches,\n    navigation\n  } = useDataRouterState(\"unstable_useRouterState\" /* UseRouterState */);\n  let active = React2.useMemo(\n    () => ({\n      type,\n      location,\n      searchParams: new URLSearchParams(location.search),\n      params: matches[matches.length - 1]?.params ?? {},\n      matches: matches.map((m) => toRouterStateMatch(m))\n    }),\n    [location, matches, type]\n  );\n  let pending = React2.useMemo(() => {\n    if (navigation.state === \"idle\") return null;\n    let shared = {\n      type: navigation.historyAction,\n      location: navigation.location,\n      searchParams: new URLSearchParams(navigation.location.search),\n      params: navigation.matches[navigation.matches.length - 1]?.params ?? {},\n      matches: navigation.matches.map((m) => toRouterStateMatch(m))\n    };\n    return navigation.state === \"loading\" ? {\n      ...shared,\n      state: \"loading\",\n      formMethod: navigation.formMethod,\n      formAction: navigation.formAction,\n      formEncType: navigation.formEncType,\n      formData: navigation.formData,\n      json: navigation.json,\n      text: navigation.text\n    } : {\n      ...shared,\n      state: \"submitting\",\n      formMethod: navigation.formMethod,\n      formAction: navigation.formAction,\n      formEncType: navigation.formEncType,\n      formData: navigation.formData,\n      json: navigation.json,\n      text: navigation.text\n    };\n  }, [navigation]);\n  return React2.useMemo(\n    () => ({ active, pending }),\n    [active, pending]\n  );\n}\n\n// lib/components.tsx\nimport * as React3 from \"react\";\n\n// lib/server-runtime/warnings.ts\nvar alreadyWarned2 = {};\nfunction warnOnce(condition, message) {\n  if (!condition && !alreadyWarned2[message]) {\n    alreadyWarned2[message] = true;\n    console.warn(message);\n  }\n}\n\n// lib/components.tsx\nvar USE_OPTIMISTIC = \"useOptimistic\";\nvar useOptimisticImpl = React3[USE_OPTIMISTIC];\nvar stableUseOptimisticSetter = () => void 0;\nfunction useOptimisticSafe(val) {\n  if (useOptimisticImpl) {\n    return useOptimisticImpl(val);\n  } else {\n    return [val, stableUseOptimisticSetter];\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.hasErrorBoundary || route.ErrorBoundary != null || route.errorElement != null\n  };\n  if (route.Component) {\n    if (ENABLE_DEV_WARNINGS) {\n      if (route.element) {\n        warning(\n          false,\n          \"You should not include both `Component` and `element` on your route - `Component` will be used.\"\n        );\n      }\n    }\n    Object.assign(updates, {\n      element: React3.createElement(route.Component),\n      Component: void 0\n    });\n  }\n  if (route.HydrateFallback) {\n    if (ENABLE_DEV_WARNINGS) {\n      if (route.hydrateFallbackElement) {\n        warning(\n          false,\n          \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used.\"\n        );\n      }\n    }\n    Object.assign(updates, {\n      hydrateFallbackElement: React3.createElement(route.HydrateFallback),\n      HydrateFallback: void 0\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (ENABLE_DEV_WARNINGS) {\n      if (route.errorElement) {\n        warning(\n          false,\n          \"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used.\"\n        );\n      }\n    }\n    Object.assign(updates, {\n      errorElement: React3.createElement(route.ErrorBoundary),\n      ErrorBoundary: void 0\n    });\n  }\n  return updates;\n}\nvar hydrationRouteProperties = [\n  \"HydrateFallback\",\n  \"hydrateFallbackElement\"\n];\nfunction createMemoryRouter(routes, opts) {\n  return createRouter({\n    basename: opts?.basename,\n    getContext: opts?.getContext,\n    future: opts?.future,\n    history: createMemoryHistory({\n      initialEntries: opts?.initialEntries,\n      initialIndex: opts?.initialIndex\n    }),\n    hydrationData: opts?.hydrationData,\n    routes,\n    hydrationRouteProperties,\n    mapRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    instrumentations: opts?.instrumentations\n  }).initialize();\n}\nvar Deferred = class {\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};\nfunction RouterProvider({\n  router,\n  flushSync: reactDomFlushSyncImpl,\n  onError,\n  useTransitions\n}) {\n  let unstable_rsc = useIsRSCRouterContext();\n  useTransitions = unstable_rsc || useTransitions;\n  let [_state, setStateImpl] = React3.useState(router.state);\n  let [state, setOptimisticState] = useOptimisticSafe(_state);\n  let [pendingState, setPendingState] = React3.useState();\n  let [vtContext, setVtContext] = React3.useState({\n    isTransitioning: false\n  });\n  let [renderDfd, setRenderDfd] = React3.useState();\n  let [transition, setTransition] = React3.useState();\n  let [interruption, setInterruption] = React3.useState();\n  let fetcherData = React3.useRef(/* @__PURE__ */ new Map());\n  let setState = React3.useCallback(\n    (newState, { deletedFetchers, newErrors, flushSync, viewTransitionOpts }) => {\n      if (newErrors && onError) {\n        Object.values(newErrors).forEach(\n          (error) => onError(error, {\n            location: newState.location,\n            params: newState.matches[0]?.params ?? {},\n            pattern: getRoutePattern(newState.matches)\n          })\n        );\n      }\n      newState.fetchers.forEach((fetcher, key) => {\n        if (fetcher.data !== void 0) {\n          fetcherData.current.set(key, fetcher.data);\n        }\n      });\n      deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n      warnOnce(\n        flushSync === false || reactDomFlushSyncImpl != null,\n        'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable.  Please update your app to `import { RouterProvider } from \"react-router/dom\"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.'\n      );\n      let isViewTransitionAvailable = router.window != null && router.window.document != null && typeof router.window.document.startViewTransition === \"function\";\n      warnOnce(\n        viewTransitionOpts == null || isViewTransitionAvailable,\n        \"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available.\"\n      );\n      if (!viewTransitionOpts || !isViewTransitionAvailable) {\n        if (reactDomFlushSyncImpl && flushSync) {\n          reactDomFlushSyncImpl(() => setStateImpl(newState));\n        } else if (useTransitions === false) {\n          setStateImpl(newState);\n        } else {\n          React3.startTransition(() => {\n            if (useTransitions === true) {\n              setOptimisticState((s) => getOptimisticRouterState(s, newState));\n            }\n            setStateImpl(newState);\n          });\n        }\n        return;\n      }\n      if (reactDomFlushSyncImpl && flushSync) {\n        reactDomFlushSyncImpl(() => {\n          if (transition) {\n            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        let t = router.window.document.startViewTransition(() => {\n          reactDomFlushSyncImpl(() => setStateImpl(newState));\n        });\n        t.finished.finally(() => {\n          reactDomFlushSyncImpl(() => {\n            setRenderDfd(void 0);\n            setTransition(void 0);\n            setPendingState(void 0);\n            setVtContext({ isTransitioning: false });\n          });\n        });\n        reactDomFlushSyncImpl(() => setTransition(t));\n        return;\n      }\n      if (transition) {\n        renderDfd?.resolve();\n        transition.skipTransition();\n        setInterruption({\n          state: newState,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      } else {\n        setPendingState(newState);\n        setVtContext({\n          isTransitioning: true,\n          flushSync: false,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      }\n    },\n    [\n      router.window,\n      reactDomFlushSyncImpl,\n      transition,\n      renderDfd,\n      useTransitions,\n      setOptimisticState,\n      onError\n    ]\n  );\n  React3.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  React3.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred());\n    }\n  }, [vtContext]);\n  React3.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition2 = router.window.document.startViewTransition(async () => {\n        if (useTransitions === false) {\n          setStateImpl(newState);\n        } else {\n          React3.startTransition(() => {\n            if (useTransitions === true) {\n              setOptimisticState((s) => getOptimisticRouterState(s, newState));\n            }\n            setStateImpl(newState);\n          });\n        }\n        await renderPromise;\n      });\n      transition2.finished.finally(() => {\n        setRenderDfd(void 0);\n        setTransition(void 0);\n        setPendingState(void 0);\n        setVtContext({ isTransitioning: false });\n      });\n      setTransition(transition2);\n    }\n  }, [\n    pendingState,\n    renderDfd,\n    router.window,\n    useTransitions,\n    setOptimisticState\n  ]);\n  React3.useEffect(() => {\n    if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n  React3.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(void 0);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n  let navigator = React3.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: (n) => router.navigate(n),\n      push: (to, state2, opts) => router.navigate(to, {\n        state: state2,\n        preventScrollReset: opts?.preventScrollReset\n      }),\n      replace: (to, state2, opts) => router.navigate(to, {\n        replace: true,\n        state: state2,\n        preventScrollReset: opts?.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React3.useMemo(\n    () => ({\n      router,\n      navigator,\n      static: false,\n      basename,\n      onError\n    }),\n    [router, navigator, basename, onError]\n  );\n  return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React3.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React3.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React3.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React3.createElement(\n    Router,\n    {\n      basename,\n      location: state.location,\n      navigationType: state.historyAction,\n      navigator,\n      useTransitions\n    },\n    /* @__PURE__ */ React3.createElement(\n      MemoizedDataRoutes,\n      {\n        routes: router.routes,\n        manifest: router.manifest,\n        future: router.future,\n        state,\n        isStatic: false,\n        onError\n      }\n    )\n  ))))), null);\n}\nfunction getOptimisticRouterState(currentState, newState) {\n  return {\n    // Don't surface \"current location specific\" stuff mid-navigation\n    // (historyAction, location, matches, loaderData, errors, initialized,\n    // restoreScroll, preventScrollReset, blockers, etc.)\n    ...currentState,\n    // Only surface \"pending/in-flight stuff\"\n    // (navigation, revalidation, actionData, fetchers, )\n    navigation: newState.navigation.state !== \"idle\" ? newState.navigation : currentState.navigation,\n    revalidation: newState.revalidation !== \"idle\" ? newState.revalidation : currentState.revalidation,\n    actionData: newState.navigation.state !== \"submitting\" ? newState.actionData : currentState.actionData,\n    fetchers: newState.fetchers\n  };\n}\nvar MemoizedDataRoutes = React3.memo(DataRoutes2);\nfunction DataRoutes2({\n  routes,\n  manifest,\n  future,\n  state,\n  isStatic,\n  onError\n}) {\n  return useRoutesImpl(routes, void 0, {\n    manifest,\n    state,\n    isStatic,\n    onError,\n    future\n  });\n}\nfunction MemoryRouter({\n  basename,\n  children,\n  initialEntries,\n  initialIndex,\n  useTransitions\n}) {\n  let historyRef = React3.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] = React3.useState({\n    action: history.action,\n    location: history.location\n  });\n  let setState = React3.useCallback(\n    (newState) => {\n      if (useTransitions === false) {\n        setStateImpl(newState);\n      } else {\n        React3.startTransition(() => setStateImpl(newState));\n      }\n    },\n    [useTransitions]\n  );\n  React3.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /* @__PURE__ */ React3.createElement(\n    Router,\n    {\n      basename,\n      children,\n      location: state.location,\n      navigationType: state.action,\n      navigator: history,\n      useTransitions\n    }\n  );\n}\nfunction Navigate({\n  to,\n  replace: replace2,\n  state,\n  relative\n}) {\n  invariant(\n    useInRouterContext(),\n    // TODO: This error is probably because they somehow have 2 versions of\n    // the router loaded. We can help them understand how to avoid that.\n    `<Navigate> may be used only in the context of a <Router> component.`\n  );\n  let { static: isStatic } = React3.useContext(NavigationContext);\n  warning(\n    !isStatic,\n    `<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.`\n  );\n  let { matches } = React3.useContext(RouteContext);\n  let { pathname: locationPathname } = useLocation();\n  let navigate = useNavigate();\n  let path = resolveTo(\n    to,\n    getResolveToMatches(matches),\n    locationPathname,\n    relative === \"path\"\n  );\n  let jsonPath = JSON.stringify(path);\n  React3.useEffect(() => {\n    navigate(JSON.parse(jsonPath), { replace: replace2, state, relative });\n  }, [navigate, jsonPath, relative, replace2, state]);\n  return null;\n}\nfunction Outlet(props) {\n  return useOutlet(props.context);\n}\nfunction Route(props) {\n  invariant(\n    false,\n    `A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`\n  );\n}\nfunction Router({\n  basename: basenameProp = \"/\",\n  children = null,\n  location: locationProp,\n  navigationType = \"POP\" /* Pop */,\n  navigator,\n  static: staticProp = false,\n  useTransitions\n}) {\n  invariant(\n    !useInRouterContext(),\n    `You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`\n  );\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React3.useMemo(\n    () => ({\n      basename,\n      navigator,\n      static: staticProp,\n      useTransitions,\n      future: {}\n    }),\n    [basename, navigator, staticProp, useTransitions]\n  );\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    mask\n  } = locationProp;\n  let locationContext = React3.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        mask\n      },\n      navigationType\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType, mask]);\n  warning(\n    locationContext != null,\n    `<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.`\n  );\n  if (locationContext == null) {\n    return null;\n  }\n  return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));\n}\nfunction Routes({\n  children,\n  location\n}) {\n  return useRoutes(createRoutesFromChildren(children), location);\n}\nfunction Await({\n  children,\n  errorElement,\n  resolve\n}) {\n  let dataRouterContext = React3.useContext(DataRouterContext);\n  let dataRouterStateContext = React3.useContext(DataRouterStateContext);\n  let onError = React3.useCallback(\n    (error, errorInfo) => {\n      if (dataRouterContext && dataRouterContext.onError && dataRouterStateContext) {\n        dataRouterContext.onError(error, {\n          location: dataRouterStateContext.location,\n          params: dataRouterStateContext.matches[0]?.params || {},\n          pattern: getRoutePattern(dataRouterStateContext.matches),\n          errorInfo\n        });\n      }\n    },\n    [dataRouterContext, dataRouterStateContext]\n  );\n  return /* @__PURE__ */ React3.createElement(\n    AwaitErrorBoundary,\n    {\n      resolve,\n      errorElement,\n      onError\n    },\n    /* @__PURE__ */ React3.createElement(ResolveAwait, null, children)\n  );\n}\nvar AwaitErrorBoundary = class extends React3.Component {\n  constructor(props) {\n    super(props);\n    this.state = { error: null };\n  }\n  static getDerivedStateFromError(error) {\n    return { error };\n  }\n  componentDidCatch(error, errorInfo) {\n    if (this.props.onError) {\n      this.props.onError(error, errorInfo);\n    } else {\n      console.error(\n        \"<Await> caught the following error during render\",\n        error,\n        errorInfo\n      );\n    }\n  }\n  render() {\n    let { children, errorElement, resolve } = this.props;\n    let promise = null;\n    let status = 0 /* pending */;\n    if (!(resolve instanceof Promise)) {\n      status = 1 /* success */;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_data\", { get: () => resolve });\n    } else if (this.state.error) {\n      status = 2 /* error */;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {\n      });\n      Object.defineProperty(promise, \"_tracked\", { get: () => true });\n      Object.defineProperty(promise, \"_error\", { get: () => renderError });\n    } else if (resolve._tracked) {\n      promise = resolve;\n      status = \"_error\" in promise ? 2 /* error */ : \"_data\" in promise ? 1 /* success */ : 0 /* pending */;\n    } else {\n      status = 0 /* pending */;\n      Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n      promise = resolve.then(\n        (data2) => Object.defineProperty(resolve, \"_data\", { get: () => data2 }),\n        (error) => {\n          this.props.onError?.(error);\n          Object.defineProperty(resolve, \"_error\", { get: () => error });\n        }\n      );\n    }\n    if (status === 2 /* error */ && !errorElement) {\n      throw promise._error;\n    }\n    if (status === 2 /* error */) {\n      return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children: errorElement });\n    }\n    if (status === 1 /* success */) {\n      return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children });\n    }\n    throw promise;\n  }\n};\nfunction ResolveAwait({\n  children\n}) {\n  let data2 = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data2) : children;\n  return /* @__PURE__ */ React3.createElement(React3.Fragment, null, toRender);\n}\nfunction createRoutesFromChildren(children, parentPath = []) {\n  let routes = [];\n  React3.Children.forEach(children, (element, index) => {\n    if (!React3.isValidElement(element)) {\n      return;\n    }\n    let treePath = [...parentPath, index];\n    if (element.type === React3.Fragment) {\n      routes.push.apply(\n        routes,\n        createRoutesFromChildren(element.props.children, treePath)\n      );\n      return;\n    }\n    invariant(\n      element.type === Route,\n      `[${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>`\n    );\n    invariant(\n      !element.props.index || !element.props.children,\n      \"An index route cannot have child routes.\"\n    );\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      middleware: element.props.middleware,\n      loader: element.props.loader,\n      action: element.props.action,\n      hydrateFallbackElement: element.props.hydrateFallbackElement,\n      HydrateFallback: element.props.HydrateFallback,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary: element.props.hasErrorBoundary === true || 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(\n        element.props.children,\n        treePath\n      );\n    }\n    routes.push(route);\n  });\n  return routes;\n}\nvar createRoutesFromElements = createRoutesFromChildren;\nfunction renderMatches(matches) {\n  return _renderMatches(matches);\n}\nfunction useRouteComponentProps() {\n  return {\n    params: useParams(),\n    loaderData: useLoaderData(),\n    actionData: useActionData(),\n    matches: useMatches()\n  };\n}\nfunction WithComponentProps({\n  children\n}) {\n  const props = useRouteComponentProps();\n  return React3.cloneElement(children, props);\n}\nfunction withComponentProps(Component4) {\n  return function WithComponentProps2() {\n    const props = useRouteComponentProps();\n    return React3.createElement(Component4, props);\n  };\n}\nfunction useHydrateFallbackProps() {\n  return {\n    params: useParams(),\n    loaderData: useLoaderData(),\n    actionData: useActionData()\n  };\n}\nfunction WithHydrateFallbackProps({\n  children\n}) {\n  const props = useHydrateFallbackProps();\n  return React3.cloneElement(children, props);\n}\nfunction withHydrateFallbackProps(HydrateFallback) {\n  return function WithHydrateFallbackProps2() {\n    const props = useHydrateFallbackProps();\n    return React3.createElement(HydrateFallback, props);\n  };\n}\nfunction useErrorBoundaryProps() {\n  return {\n    params: useParams(),\n    loaderData: useLoaderData(),\n    actionData: useActionData(),\n    error: useRouteError()\n  };\n}\nfunction WithErrorBoundaryProps({\n  children\n}) {\n  const props = useErrorBoundaryProps();\n  return React3.cloneElement(children, props);\n}\nfunction withErrorBoundaryProps(ErrorBoundary) {\n  return function WithErrorBoundaryProps2() {\n    const props = useErrorBoundaryProps();\n    return React3.createElement(ErrorBoundary, props);\n  };\n}\n\n// lib/dom/dom.ts\nvar defaultMethod = \"get\";\nvar defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n  return typeof HTMLElement !== \"undefined\" && object instanceof HTMLElement;\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 && // Ignore everything but left clicks\n  (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n  !isModifiedEvent(event);\n}\nfunction createSearchParams(init = \"\") {\n  return new URLSearchParams(\n    typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo2, key) => {\n      let value = init[key];\n      return memo2.concat(\n        Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n      );\n    }, [])\n  );\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n  let searchParams = createSearchParams(locationSearch);\n  if (defaultSearchParams) {\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}\nvar _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(\n        document.createElement(\"form\"),\n        // @ts-expect-error if FormData supports the submitter parameter, this will throw\n        0\n      );\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\nvar supportedFormEncTypes = /* @__PURE__ */ new Set([\n  \"application/x-www-form-urlencoded\",\n  \"multipart/form-data\",\n  \"text/plain\"\n]);\nfunction getFormEncType(encType) {\n  if (encType != null && !supportedFormEncTypes.has(encType)) {\n    warning(\n      false,\n      `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` and will default to \"${defaultEncType}\"`\n    );\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    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(\n        `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n      );\n    }\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    formData = new FormData(form, target);\n    if (!isFormDataSubmitterSupported()) {\n      let { name, type, value } = 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(\n      `Cannot submit element that is not <form>, <button>, or <input type=\"submit|image\">`\n    );\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = void 0;\n  }\n  return { action, method: method.toLowerCase(), encType, formData, body };\n}\n\n// lib/dom/ssr/single-fetch.tsx\nimport * as React4 from \"react\";\n\n// vendor/turbo-stream-v2/utils.ts\nvar HOLE = -1;\nvar NAN = -2;\nvar NEGATIVE_INFINITY = -3;\nvar NEGATIVE_ZERO = -4;\nvar NULL = -5;\nvar POSITIVE_INFINITY = -6;\nvar UNDEFINED = -7;\nvar TYPE_BIGINT = \"B\";\nvar TYPE_DATE = \"D\";\nvar TYPE_ERROR = \"E\";\nvar TYPE_MAP = \"M\";\nvar TYPE_NULL_OBJECT = \"N\";\nvar TYPE_PROMISE = \"P\";\nvar TYPE_REGEXP = \"R\";\nvar TYPE_SET = \"S\";\nvar TYPE_SYMBOL = \"Y\";\nvar TYPE_URL = \"U\";\nvar TYPE_PREVIOUS_RESOLVED = \"Z\";\nvar SUPPORTED_ERROR_TYPES = [\n  \"EvalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\nvar Deferred2 = class {\n  constructor() {\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = resolve;\n      this.reject = reject;\n    });\n  }\n};\nfunction createLineSplittingTransform() {\n  const decoder = new TextDecoder();\n  let leftover = \"\";\n  return new TransformStream({\n    transform(chunk, controller) {\n      const str = decoder.decode(chunk, { stream: true });\n      const parts = (leftover + str).split(\"\\n\");\n      leftover = parts.pop() || \"\";\n      for (const part of parts) {\n        controller.enqueue(part);\n      }\n    },\n    flush(controller) {\n      if (leftover) {\n        controller.enqueue(leftover);\n      }\n    }\n  });\n}\n\n// vendor/turbo-stream-v2/flatten.ts\nvar TIME_LIMIT_MS = 1;\nvar getNow = () => Date.now();\nvar yieldToMain = () => new Promise((resolve) => setTimeout(resolve, 0));\nasync function flatten(input) {\n  const { indices } = this;\n  const existing = indices.get(input);\n  if (existing) return [existing];\n  if (input === void 0) return UNDEFINED;\n  if (input === null) return NULL;\n  if (Number.isNaN(input)) return NAN;\n  if (input === Number.POSITIVE_INFINITY) return POSITIVE_INFINITY;\n  if (input === Number.NEGATIVE_INFINITY) return NEGATIVE_INFINITY;\n  if (input === 0 && 1 / input < 0) return NEGATIVE_ZERO;\n  const index = this.index++;\n  indices.set(input, index);\n  const stack = [[input, index]];\n  await stringify.call(this, stack);\n  return index;\n}\nasync function stringify(stack) {\n  const { deferred, indices, plugins, postPlugins } = this;\n  const str = this.stringified;\n  let lastYieldTime = getNow();\n  const flattenValue = (value) => {\n    const existing = indices.get(value);\n    if (existing) return [existing];\n    if (value === void 0) return UNDEFINED;\n    if (value === null) return NULL;\n    if (Number.isNaN(value)) return NAN;\n    if (value === Number.POSITIVE_INFINITY) return POSITIVE_INFINITY;\n    if (value === Number.NEGATIVE_INFINITY) return NEGATIVE_INFINITY;\n    if (value === 0 && 1 / value < 0) return NEGATIVE_ZERO;\n    const index = this.index++;\n    indices.set(value, index);\n    stack.push([value, index]);\n    return index;\n  };\n  let i = 0;\n  while (stack.length > 0) {\n    const now = getNow();\n    if (++i % 6e3 === 0 && now - lastYieldTime >= TIME_LIMIT_MS) {\n      await yieldToMain();\n      lastYieldTime = getNow();\n    }\n    const [input, index] = stack.pop();\n    const partsForObj = (obj) => Object.keys(obj).map((k) => `\"_${flattenValue(k)}\":${flattenValue(obj[k])}`).join(\",\");\n    let error = null;\n    switch (typeof input) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        str[index] = JSON.stringify(input);\n        break;\n      case \"bigint\":\n        str[index] = `[\"${TYPE_BIGINT}\",\"${input}\"]`;\n        break;\n      case \"symbol\": {\n        const keyFor = Symbol.keyFor(input);\n        if (!keyFor) {\n          error = new Error(\n            \"Cannot encode symbol unless created with Symbol.for()\"\n          );\n        } else {\n          str[index] = `[\"${TYPE_SYMBOL}\",${JSON.stringify(keyFor)}]`;\n        }\n        break;\n      }\n      case \"object\": {\n        if (!input) {\n          str[index] = `${NULL}`;\n          break;\n        }\n        const isArray = Array.isArray(input);\n        let pluginHandled = false;\n        if (!isArray && plugins) {\n          for (const plugin of plugins) {\n            const pluginResult = plugin(input);\n            if (Array.isArray(pluginResult)) {\n              pluginHandled = true;\n              const [pluginIdentifier, ...rest] = pluginResult;\n              str[index] = `[${JSON.stringify(pluginIdentifier)}`;\n              if (rest.length > 0) {\n                str[index] += `,${rest.map((v) => flattenValue(v)).join(\",\")}`;\n              }\n              str[index] += \"]\";\n              break;\n            }\n          }\n        }\n        if (!pluginHandled) {\n          let result = isArray ? \"[\" : \"{\";\n          if (isArray) {\n            for (let i2 = 0; i2 < input.length; i2++)\n              result += (i2 ? \",\" : \"\") + (i2 in input ? flattenValue(input[i2]) : HOLE);\n            str[index] = `${result}]`;\n          } else if (input instanceof Date) {\n            const dateTime = input.getTime();\n            str[index] = `[\"${TYPE_DATE}\",${Number.isNaN(dateTime) ? JSON.stringify(\"invalid\") : dateTime}]`;\n          } else if (input instanceof URL) {\n            str[index] = `[\"${TYPE_URL}\",${JSON.stringify(input.href)}]`;\n          } else if (input instanceof RegExp) {\n            str[index] = `[\"${TYPE_REGEXP}\",${JSON.stringify(\n              input.source\n            )},${JSON.stringify(input.flags)}]`;\n          } else if (input instanceof Set) {\n            if (input.size > 0) {\n              str[index] = `[\"${TYPE_SET}\",${[...input].map((val) => flattenValue(val)).join(\",\")}]`;\n            } else {\n              str[index] = `[\"${TYPE_SET}\"]`;\n            }\n          } else if (input instanceof Map) {\n            if (input.size > 0) {\n              str[index] = `[\"${TYPE_MAP}\",${[...input].flatMap(([k, v]) => [flattenValue(k), flattenValue(v)]).join(\",\")}]`;\n            } else {\n              str[index] = `[\"${TYPE_MAP}\"]`;\n            }\n          } else if (input instanceof Promise) {\n            str[index] = `[\"${TYPE_PROMISE}\",${index}]`;\n            deferred[index] = input;\n          } else if (input instanceof Error) {\n            str[index] = `[\"${TYPE_ERROR}\",${JSON.stringify(input.message)}`;\n            if (input.name !== \"Error\") {\n              str[index] += `,${JSON.stringify(input.name)}`;\n            }\n            str[index] += \"]\";\n          } else if (Object.getPrototypeOf(input) === null) {\n            str[index] = `[\"${TYPE_NULL_OBJECT}\",{${partsForObj(input)}}]`;\n          } else if (isPlainObject2(input)) {\n            str[index] = `{${partsForObj(input)}}`;\n          } else {\n            error = new Error(\"Cannot encode object with prototype\");\n          }\n        }\n        break;\n      }\n      default: {\n        const isArray = Array.isArray(input);\n        let pluginHandled = false;\n        if (!isArray && plugins) {\n          for (const plugin of plugins) {\n            const pluginResult = plugin(input);\n            if (Array.isArray(pluginResult)) {\n              pluginHandled = true;\n              const [pluginIdentifier, ...rest] = pluginResult;\n              str[index] = `[${JSON.stringify(pluginIdentifier)}`;\n              if (rest.length > 0) {\n                str[index] += `,${rest.map((v) => flattenValue(v)).join(\",\")}`;\n              }\n              str[index] += \"]\";\n              break;\n            }\n          }\n        }\n        if (!pluginHandled) {\n          error = new Error(\"Cannot encode function or unexpected type\");\n        }\n      }\n    }\n    if (error) {\n      let pluginHandled = false;\n      if (postPlugins) {\n        for (const plugin of postPlugins) {\n          const pluginResult = plugin(input);\n          if (Array.isArray(pluginResult)) {\n            pluginHandled = true;\n            const [pluginIdentifier, ...rest] = pluginResult;\n            str[index] = `[${JSON.stringify(pluginIdentifier)}`;\n            if (rest.length > 0) {\n              str[index] += `,${rest.map((v) => flattenValue(v)).join(\",\")}`;\n            }\n            str[index] += \"]\";\n            break;\n          }\n        }\n      }\n      if (!pluginHandled) {\n        throw error;\n      }\n    }\n  }\n}\nvar objectProtoNames2 = Object.getOwnPropertyNames(Object.prototype).sort().join(\"\\0\");\nfunction isPlainObject2(thing) {\n  const proto = Object.getPrototypeOf(thing);\n  return proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join(\"\\0\") === objectProtoNames2;\n}\n\n// vendor/turbo-stream-v2/unflatten.ts\nvar globalObj = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : void 0;\nfunction unflatten(parsed) {\n  const { hydrated, values } = this;\n  if (typeof parsed === \"number\") return hydrate.call(this, parsed);\n  if (!Array.isArray(parsed) || !parsed.length) throw new SyntaxError();\n  const startIndex = values.length;\n  for (const value of parsed) {\n    values.push(value);\n  }\n  hydrated.length = values.length;\n  return hydrate.call(this, startIndex);\n}\nfunction hydrate(index) {\n  const { hydrated, values, deferred, plugins } = this;\n  let result;\n  const stack = [\n    [\n      index,\n      (v) => {\n        result = v;\n      }\n    ]\n  ];\n  let postRun = [];\n  while (stack.length > 0) {\n    const [index2, set] = stack.pop();\n    switch (index2) {\n      case UNDEFINED:\n        set(void 0);\n        continue;\n      case NULL:\n        set(null);\n        continue;\n      case NAN:\n        set(NaN);\n        continue;\n      case POSITIVE_INFINITY:\n        set(Infinity);\n        continue;\n      case NEGATIVE_INFINITY:\n        set(-Infinity);\n        continue;\n      case NEGATIVE_ZERO:\n        set(-0);\n        continue;\n    }\n    if (hydrated[index2]) {\n      set(hydrated[index2]);\n      continue;\n    }\n    const value = values[index2];\n    if (!value || typeof value !== \"object\") {\n      hydrated[index2] = value;\n      set(value);\n      continue;\n    }\n    if (Array.isArray(value)) {\n      if (typeof value[0] === \"string\") {\n        const [type, b, c] = value;\n        switch (type) {\n          case TYPE_DATE:\n            set(hydrated[index2] = new Date(b));\n            continue;\n          case TYPE_URL:\n            set(hydrated[index2] = new URL(b));\n            continue;\n          case TYPE_BIGINT:\n            set(hydrated[index2] = BigInt(b));\n            continue;\n          case TYPE_REGEXP:\n            set(hydrated[index2] = new RegExp(b, c));\n            continue;\n          case TYPE_SYMBOL:\n            set(hydrated[index2] = Symbol.for(b));\n            continue;\n          case TYPE_SET:\n            const newSet = /* @__PURE__ */ new Set();\n            hydrated[index2] = newSet;\n            for (let i = value.length - 1; i > 0; i--)\n              stack.push([\n                value[i],\n                (v) => {\n                  newSet.add(v);\n                }\n              ]);\n            set(newSet);\n            continue;\n          case TYPE_MAP:\n            const map = /* @__PURE__ */ new Map();\n            hydrated[index2] = map;\n            for (let i = value.length - 2; i > 0; i -= 2) {\n              const r = [];\n              stack.push([\n                value[i + 1],\n                (v) => {\n                  r[1] = v;\n                }\n              ]);\n              stack.push([\n                value[i],\n                (k) => {\n                  r[0] = k;\n                }\n              ]);\n              postRun.push(() => {\n                map.set(r[0], r[1]);\n              });\n            }\n            set(map);\n            continue;\n          case TYPE_NULL_OBJECT:\n            const obj = /* @__PURE__ */ Object.create(null);\n            hydrated[index2] = obj;\n            for (const key of Object.keys(b).reverse()) {\n              const r = [];\n              stack.push([\n                b[key],\n                (v) => {\n                  r[1] = v;\n                }\n              ]);\n              stack.push([\n                Number(key.slice(1)),\n                (k) => {\n                  r[0] = k;\n                }\n              ]);\n              postRun.push(() => {\n                obj[r[0]] = r[1];\n              });\n            }\n            set(obj);\n            continue;\n          case TYPE_PROMISE:\n            if (hydrated[b]) {\n              set(hydrated[index2] = hydrated[b]);\n            } else {\n              const d = new Deferred2();\n              deferred[b] = d;\n              set(hydrated[index2] = d.promise);\n            }\n            continue;\n          case TYPE_ERROR:\n            const [, message, errorType] = value;\n            let error = errorType && globalObj && SUPPORTED_ERROR_TYPES.includes(errorType) && errorType in globalObj && typeof globalObj[errorType] === \"function\" ? new globalObj[errorType](message) : new Error(message);\n            hydrated[index2] = error;\n            set(error);\n            continue;\n          case TYPE_PREVIOUS_RESOLVED:\n            set(hydrated[index2] = hydrated[b]);\n            continue;\n          default:\n            if (Array.isArray(plugins)) {\n              const r = [];\n              const vals = value.slice(1);\n              for (let i = 0; i < vals.length; i++) {\n                const v = vals[i];\n                stack.push([\n                  v,\n                  (v2) => {\n                    r[i] = v2;\n                  }\n                ]);\n              }\n              postRun.push(() => {\n                for (const plugin of plugins) {\n                  const result2 = plugin(value[0], ...r);\n                  if (result2) {\n                    set(hydrated[index2] = result2.value);\n                    return;\n                  }\n                }\n                throw new SyntaxError();\n              });\n              continue;\n            }\n            throw new SyntaxError();\n        }\n      } else {\n        const array = [];\n        hydrated[index2] = array;\n        for (let i = 0; i < value.length; i++) {\n          const n = value[i];\n          if (n !== HOLE) {\n            stack.push([\n              n,\n              (v) => {\n                array[i] = v;\n              }\n            ]);\n          }\n        }\n        set(array);\n        continue;\n      }\n    } else {\n      const object = {};\n      hydrated[index2] = object;\n      for (const key of Object.keys(value).reverse()) {\n        const r = [];\n        stack.push([\n          value[key],\n          (v) => {\n            r[1] = v;\n          }\n        ]);\n        stack.push([\n          Number(key.slice(1)),\n          (k) => {\n            r[0] = k;\n          }\n        ]);\n        postRun.push(() => {\n          object[r[0]] = r[1];\n        });\n      }\n      set(object);\n      continue;\n    }\n  }\n  while (postRun.length > 0) {\n    postRun.pop()();\n  }\n  return result;\n}\n\n// vendor/turbo-stream-v2/turbo-stream.ts\nasync function decode(readable, options) {\n  const { plugins } = options ?? {};\n  const done = new Deferred2();\n  const reader = readable.pipeThrough(createLineSplittingTransform()).getReader();\n  const decoder = {\n    values: [],\n    hydrated: [],\n    deferred: {},\n    plugins\n  };\n  const decoded = await decodeInitial.call(decoder, reader);\n  let donePromise = done.promise;\n  if (decoded.done) {\n    done.resolve();\n  } else {\n    donePromise = decodeDeferred.call(decoder, reader).then(done.resolve).catch((reason) => {\n      for (const deferred of Object.values(decoder.deferred)) {\n        deferred.reject(reason);\n      }\n      done.reject(reason);\n    });\n  }\n  return {\n    done: donePromise.then(() => reader.closed),\n    value: decoded.value\n  };\n}\nasync function decodeInitial(reader) {\n  const read = await reader.read();\n  if (!read.value) {\n    throw new SyntaxError();\n  }\n  let line;\n  try {\n    line = JSON.parse(read.value);\n  } catch (reason) {\n    throw new SyntaxError();\n  }\n  return {\n    done: read.done,\n    value: unflatten.call(this, line)\n  };\n}\nasync function decodeDeferred(reader) {\n  let read = await reader.read();\n  while (!read.done) {\n    if (!read.value) continue;\n    const line = read.value;\n    switch (line[0]) {\n      case TYPE_PROMISE: {\n        const colonIndex = line.indexOf(\":\");\n        const deferredId = Number(line.slice(1, colonIndex));\n        const deferred = this.deferred[deferredId];\n        if (!deferred) {\n          throw new Error(`Deferred ID ${deferredId} not found in stream`);\n        }\n        const lineData = line.slice(colonIndex + 1);\n        let jsonLine;\n        try {\n          jsonLine = JSON.parse(lineData);\n        } catch (reason) {\n          throw new SyntaxError();\n        }\n        const value = unflatten.call(this, jsonLine);\n        deferred.resolve(value);\n        break;\n      }\n      case TYPE_ERROR: {\n        const colonIndex = line.indexOf(\":\");\n        const deferredId = Number(line.slice(1, colonIndex));\n        const deferred = this.deferred[deferredId];\n        if (!deferred) {\n          throw new Error(`Deferred ID ${deferredId} not found in stream`);\n        }\n        const lineData = line.slice(colonIndex + 1);\n        let jsonLine;\n        try {\n          jsonLine = JSON.parse(lineData);\n        } catch (reason) {\n          throw new SyntaxError();\n        }\n        const value = unflatten.call(this, jsonLine);\n        deferred.reject(value);\n        break;\n      }\n      default:\n        throw new SyntaxError();\n    }\n    read = await reader.read();\n  }\n}\nfunction encode(input, options) {\n  const { onComplete, plugins, postPlugins, signal } = options ?? {};\n  const encoder = {\n    deferred: {},\n    index: 0,\n    indices: /* @__PURE__ */ new Map(),\n    stringified: [],\n    plugins,\n    postPlugins,\n    signal\n  };\n  const textEncoder = new TextEncoder();\n  let lastSentIndex = 0;\n  const readable = new ReadableStream({\n    async start(controller) {\n      const id = await flatten.call(encoder, input);\n      if (Array.isArray(id)) {\n        throw new Error(\"This should never happen\");\n      }\n      if (id < 0) {\n        controller.enqueue(textEncoder.encode(`${id}\n`));\n      } else {\n        controller.enqueue(\n          textEncoder.encode(`[${encoder.stringified.join(\",\")}]\n`)\n        );\n        lastSentIndex = encoder.stringified.length - 1;\n      }\n      const seenPromises = /* @__PURE__ */ new WeakSet();\n      let processingChain = Promise.resolve();\n      if (Object.keys(encoder.deferred).length) {\n        let raceDone;\n        const racePromise = new Promise((resolve, reject) => {\n          raceDone = resolve;\n          if (signal) {\n            const rejectPromise = () => reject(signal.reason || new Error(\"Signal was aborted.\"));\n            if (signal.aborted) {\n              rejectPromise();\n            } else {\n              signal.addEventListener(\"abort\", (event) => {\n                rejectPromise();\n              });\n            }\n          }\n        });\n        while (Object.keys(encoder.deferred).length > 0) {\n          for (const [deferredId, deferred] of Object.entries(\n            encoder.deferred\n          )) {\n            if (seenPromises.has(deferred)) continue;\n            seenPromises.add(\n              // biome-ignore lint/suspicious/noAssignInExpressions: <explanation>\n              encoder.deferred[Number(deferredId)] = Promise.race([\n                racePromise,\n                deferred\n              ]).then(\n                (resolved) => {\n                  processingChain = processingChain.then(async () => {\n                    const id2 = await flatten.call(encoder, resolved);\n                    if (Array.isArray(id2)) {\n                      controller.enqueue(\n                        textEncoder.encode(\n                          `${TYPE_PROMISE}${deferredId}:[[\"${TYPE_PREVIOUS_RESOLVED}\",${id2[0]}]]\n`\n                        )\n                      );\n                      encoder.index++;\n                      lastSentIndex++;\n                    } else if (id2 < 0) {\n                      controller.enqueue(\n                        textEncoder.encode(\n                          `${TYPE_PROMISE}${deferredId}:${id2}\n`\n                        )\n                      );\n                    } else {\n                      const values = encoder.stringified.slice(lastSentIndex + 1).join(\",\");\n                      controller.enqueue(\n                        textEncoder.encode(\n                          `${TYPE_PROMISE}${deferredId}:[${values}]\n`\n                        )\n                      );\n                      lastSentIndex = encoder.stringified.length - 1;\n                    }\n                  });\n                  return processingChain;\n                },\n                (reason) => {\n                  processingChain = processingChain.then(async () => {\n                    if (!reason || typeof reason !== \"object\" || !(reason instanceof Error)) {\n                      reason = new Error(\"An unknown error occurred\");\n                    }\n                    const id2 = await flatten.call(encoder, reason);\n                    if (Array.isArray(id2)) {\n                      controller.enqueue(\n                        textEncoder.encode(\n                          `${TYPE_ERROR}${deferredId}:[[\"${TYPE_PREVIOUS_RESOLVED}\",${id2[0]}]]\n`\n                        )\n                      );\n                      encoder.index++;\n                      lastSentIndex++;\n                    } else if (id2 < 0) {\n                      controller.enqueue(\n                        textEncoder.encode(\n                          `${TYPE_ERROR}${deferredId}:${id2}\n`\n                        )\n                      );\n                    } else {\n                      const values = encoder.stringified.slice(lastSentIndex + 1).join(\",\");\n                      controller.enqueue(\n                        textEncoder.encode(\n                          `${TYPE_ERROR}${deferredId}:[${values}]\n`\n                        )\n                      );\n                      lastSentIndex = encoder.stringified.length - 1;\n                    }\n                  });\n                  return processingChain;\n                }\n              ).finally(() => {\n                delete encoder.deferred[Number(deferredId)];\n              })\n            );\n          }\n          await Promise.race(Object.values(encoder.deferred));\n        }\n        raceDone();\n      }\n      await Promise.all(Object.values(encoder.deferred));\n      await processingChain;\n      controller.close();\n      onComplete?.();\n    }\n  });\n  return readable;\n}\n\n// lib/dom/ssr/data.ts\nasync function createRequestInit(request) {\n  let init = { signal: request.signal };\n  if (request.method !== \"GET\") {\n    init.method = request.method;\n    let contentType = request.headers.get(\"Content-Type\");\n    if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n      init.headers = { \"Content-Type\": contentType };\n      init.body = JSON.stringify(await request.json());\n    } else if (contentType && /\\btext\\/plain\\b/.test(contentType)) {\n      init.headers = { \"Content-Type\": contentType };\n      init.body = await request.text();\n    } else if (contentType && /\\bapplication\\/x-www-form-urlencoded\\b/.test(contentType)) {\n      init.body = new URLSearchParams(await request.text());\n    } else {\n      init.body = await request.formData();\n    }\n  }\n  return init;\n}\n\n// lib/dom/ssr/markup.ts\nvar ESCAPE_LOOKUP = {\n  \"&\": \"\\\\u0026\",\n  \">\": \"\\\\u003e\",\n  \"<\": \"\\\\u003c\",\n  \"\\u2028\": \"\\\\u2028\",\n  \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction escapeHtml(html) {\n  return html.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);\n}\n\n// lib/dom/ssr/invariant.ts\nfunction invariant2(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\n\n// lib/dom/ssr/single-fetch.tsx\nvar SingleFetchRedirectSymbol = Symbol(\"SingleFetchRedirect\");\nvar SingleFetchNoResultError = class extends Error {\n};\nvar SINGLE_FETCH_REDIRECT_STATUS = 202;\nvar NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([100, 101, 204, 205]);\nfunction StreamTransfer({\n  context,\n  identifier,\n  reader,\n  textDecoder,\n  nonce\n}) {\n  if (!context.renderMeta || !context.renderMeta.didRenderScripts) {\n    return null;\n  }\n  if (!context.renderMeta.streamCache) {\n    context.renderMeta.streamCache = {};\n  }\n  let { streamCache } = context.renderMeta;\n  let promise = streamCache[identifier];\n  if (!promise) {\n    promise = streamCache[identifier] = reader.read().then((result) => {\n      streamCache[identifier].result = {\n        done: result.done,\n        value: textDecoder.decode(result.value, { stream: true })\n      };\n    }).catch((e) => {\n      streamCache[identifier].error = e;\n    });\n  }\n  if (promise.error) {\n    throw promise.error;\n  }\n  if (promise.result === void 0) {\n    throw promise;\n  }\n  let { done, value } = promise.result;\n  let scriptTag = value ? /* @__PURE__ */ React4.createElement(\n    \"script\",\n    {\n      nonce,\n      dangerouslySetInnerHTML: {\n        __html: `window.__reactRouterContext.streamController.enqueue(${escapeHtml(\n          JSON.stringify(value)\n        )});`\n      }\n    }\n  ) : null;\n  if (done) {\n    return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(\n      \"script\",\n      {\n        nonce,\n        dangerouslySetInnerHTML: {\n          __html: `window.__reactRouterContext.streamController.close();`\n        }\n      }\n    ));\n  } else {\n    return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(React4.Suspense, null, /* @__PURE__ */ React4.createElement(\n      StreamTransfer,\n      {\n        context,\n        identifier: identifier + 1,\n        reader,\n        textDecoder,\n        nonce\n      }\n    )));\n  }\n}\nfunction getTurboStreamSingleFetchDataStrategy(getRouter, manifest, routeModules, ssr, basename, trailingSlashAware) {\n  let dataStrategy = getSingleFetchDataStrategyImpl(\n    getRouter,\n    (match) => {\n      let manifestRoute = manifest.routes[match.route.id];\n      invariant2(manifestRoute, \"Route not found in manifest\");\n      return {\n        hasLoader: manifestRoute.hasLoader,\n        hasClientLoader: manifestRoute.hasClientLoader\n      };\n    },\n    fetchAndDecodeViaTurboStream,\n    ssr,\n    basename,\n    trailingSlashAware\n  );\n  return async (args) => args.runClientMiddleware(dataStrategy);\n}\nfunction getSingleFetchDataStrategyImpl(getRouter, getRouteInfo, fetchAndDecode, ssr, basename, trailingSlashAware, shouldAllowOptOut = () => true) {\n  return async (args) => {\n    let { request, matches, fetcherKey } = args;\n    let router = getRouter();\n    if (request.method !== \"GET\") {\n      return singleFetchActionStrategy(\n        args,\n        fetchAndDecode,\n        basename,\n        trailingSlashAware\n      );\n    }\n    let foundRevalidatingServerLoader = matches.some((m) => {\n      let { hasLoader, hasClientLoader } = getRouteInfo(m);\n      return m.shouldCallHandler() && hasLoader && !hasClientLoader;\n    });\n    if (!ssr && !foundRevalidatingServerLoader) {\n      return nonSsrStrategy(\n        args,\n        getRouteInfo,\n        fetchAndDecode,\n        basename,\n        trailingSlashAware\n      );\n    }\n    if (fetcherKey) {\n      return singleFetchLoaderFetcherStrategy(\n        args,\n        fetchAndDecode,\n        basename,\n        trailingSlashAware\n      );\n    }\n    return singleFetchLoaderNavigationStrategy(\n      args,\n      router,\n      getRouteInfo,\n      fetchAndDecode,\n      ssr,\n      basename,\n      trailingSlashAware,\n      shouldAllowOptOut\n    );\n  };\n}\nasync function singleFetchActionStrategy(args, fetchAndDecode, basename, trailingSlashAware) {\n  let actionMatch = args.matches.find((m) => m.shouldCallHandler());\n  invariant2(actionMatch, \"No action match found\");\n  let actionStatus = void 0;\n  let result = await actionMatch.resolve(async (handler) => {\n    let result2 = await handler(async () => {\n      let { data: data2, status } = await fetchAndDecode(\n        args,\n        basename,\n        trailingSlashAware,\n        [actionMatch.route.id]\n      );\n      actionStatus = status;\n      return unwrapSingleFetchResult(data2, actionMatch.route.id);\n    });\n    return result2;\n  });\n  if (isResponse(result.result) || isRouteErrorResponse(result.result) || isDataWithResponseInit(result.result)) {\n    return { [actionMatch.route.id]: result };\n  }\n  return {\n    [actionMatch.route.id]: {\n      type: result.type,\n      result: data(result.result, actionStatus)\n    }\n  };\n}\nasync function nonSsrStrategy(args, getRouteInfo, fetchAndDecode, basename, trailingSlashAware) {\n  let matchesToLoad = args.matches.filter((m) => m.shouldCallHandler());\n  let results = {};\n  await Promise.all(\n    matchesToLoad.map(\n      (m) => m.resolve(async (handler) => {\n        try {\n          let { hasClientLoader } = getRouteInfo(m);\n          let routeId = m.route.id;\n          let result = hasClientLoader ? await handler(async () => {\n            let { data: data2 } = await fetchAndDecode(\n              args,\n              basename,\n              trailingSlashAware,\n              [routeId]\n            );\n            return unwrapSingleFetchResult(data2, routeId);\n          }) : await handler();\n          results[m.route.id] = { type: \"data\", result };\n        } catch (e) {\n          results[m.route.id] = { type: \"error\", result: e };\n        }\n      })\n    )\n  );\n  return results;\n}\nasync function singleFetchLoaderNavigationStrategy(args, router, getRouteInfo, fetchAndDecode, ssr, basename, trailingSlashAware, shouldAllowOptOut = () => true) {\n  let routesParams = /* @__PURE__ */ new Set();\n  let foundOptOutRoute = false;\n  let routeDfds = args.matches.map(() => createDeferred2());\n  let singleFetchDfd = createDeferred2();\n  let results = {};\n  let resolvePromise = Promise.all(\n    args.matches.map(\n      async (m, i) => m.resolve(async (handler) => {\n        routeDfds[i].resolve();\n        let routeId = m.route.id;\n        let { hasLoader, hasClientLoader } = getRouteInfo(m);\n        let defaultShouldRevalidate = !m.shouldRevalidateArgs || m.shouldRevalidateArgs.actionStatus == null || m.shouldRevalidateArgs.actionStatus < 400;\n        let shouldCall = m.shouldCallHandler(defaultShouldRevalidate);\n        if (!shouldCall) {\n          foundOptOutRoute || (foundOptOutRoute = m.shouldRevalidateArgs != null && // This is a revalidation,\n          hasLoader);\n          return;\n        }\n        if (shouldAllowOptOut(m) && hasClientLoader) {\n          if (hasLoader) {\n            foundOptOutRoute = true;\n          }\n          try {\n            let result = await handler(async () => {\n              let { data: data2 } = await fetchAndDecode(\n                args,\n                basename,\n                trailingSlashAware,\n                [routeId]\n              );\n              return unwrapSingleFetchResult(data2, routeId);\n            });\n            results[routeId] = { type: \"data\", result };\n          } catch (e) {\n            results[routeId] = { type: \"error\", result: e };\n          }\n          return;\n        }\n        if (hasLoader) {\n          routesParams.add(routeId);\n        }\n        try {\n          let result = await handler(async () => {\n            let data2 = await singleFetchDfd.promise;\n            return unwrapSingleFetchResult(data2, routeId);\n          });\n          results[routeId] = { type: \"data\", result };\n        } catch (e) {\n          results[routeId] = { type: \"error\", result: e };\n        }\n      })\n    )\n  );\n  await Promise.all(routeDfds.map((d) => d.promise));\n  let isInitialLoad = !router.state.initialized && router.state.navigation.state === \"idle\";\n  if ((isInitialLoad || routesParams.size === 0) && !window.__reactRouterHdrActive) {\n    singleFetchDfd.resolve({ routes: {} });\n  } else {\n    let targetRoutes = ssr && foundOptOutRoute && routesParams.size > 0 ? [...routesParams.keys()] : void 0;\n    try {\n      let data2 = await fetchAndDecode(\n        args,\n        basename,\n        trailingSlashAware,\n        targetRoutes\n      );\n      singleFetchDfd.resolve(data2.data);\n    } catch (e) {\n      singleFetchDfd.reject(e);\n    }\n  }\n  await resolvePromise;\n  await bubbleMiddlewareErrors(\n    singleFetchDfd.promise,\n    args.matches,\n    routesParams,\n    results\n  );\n  return results;\n}\nasync function bubbleMiddlewareErrors(singleFetchPromise, matches, routesParams, results) {\n  try {\n    let middlewareError;\n    let fetchedData = await singleFetchPromise;\n    if (\"routes\" in fetchedData) {\n      for (let match of matches) {\n        if (match.route.id in fetchedData.routes) {\n          let routeResult = fetchedData.routes[match.route.id];\n          if (\"error\" in routeResult) {\n            middlewareError = routeResult.error;\n            if (results[match.route.id]?.result == null) {\n              results[match.route.id] = {\n                type: \"error\",\n                result: middlewareError\n              };\n            }\n            break;\n          }\n        }\n      }\n    }\n    if (middlewareError !== void 0) {\n      Array.from(routesParams.values()).forEach((routeId) => {\n        if (results[routeId].result instanceof SingleFetchNoResultError) {\n          results[routeId].result = middlewareError;\n        }\n      });\n    }\n  } catch (e) {\n  }\n}\nasync function singleFetchLoaderFetcherStrategy(args, fetchAndDecode, basename, trailingSlashAware) {\n  let fetcherMatch = args.matches.find((m) => m.shouldCallHandler());\n  invariant2(fetcherMatch, \"No fetcher match found\");\n  let routeId = fetcherMatch.route.id;\n  let result = await fetcherMatch.resolve(\n    async (handler) => handler(async () => {\n      let { data: data2 } = await fetchAndDecode(args, basename, trailingSlashAware, [\n        routeId\n      ]);\n      return unwrapSingleFetchResult(data2, routeId);\n    })\n  );\n  return { [fetcherMatch.route.id]: result };\n}\nfunction stripIndexParam(url) {\n  let indexValues = url.searchParams.getAll(\"index\");\n  url.searchParams.delete(\"index\");\n  let indexValuesToKeep = [];\n  for (let indexValue of indexValues) {\n    if (indexValue) {\n      indexValuesToKeep.push(indexValue);\n    }\n  }\n  for (let toKeep of indexValuesToKeep) {\n    url.searchParams.append(\"index\", toKeep);\n  }\n  return url;\n}\nfunction singleFetchUrl(reqUrl, basename, trailingSlashAware, extension) {\n  let url = typeof reqUrl === \"string\" ? new URL(\n    reqUrl,\n    // This can be called during the SSR flow via PrefetchPageLinksImpl so\n    // don't assume window is available\n    typeof window === \"undefined\" ? \"server://singlefetch/\" : window.location.origin\n  ) : reqUrl;\n  if (trailingSlashAware) {\n    if (url.pathname.endsWith(\"/\")) {\n      url.pathname = `${url.pathname}_.${extension}`;\n    } else {\n      url.pathname = `${url.pathname}.${extension}`;\n    }\n  } else {\n    if (url.pathname === \"/\") {\n      url.pathname = `_root.${extension}`;\n    } else if (basename && stripBasename(url.pathname, basename) === \"/\") {\n      url.pathname = `${removeTrailingSlash(basename)}/_root.${extension}`;\n    } else {\n      url.pathname = `${removeTrailingSlash(url.pathname)}.${extension}`;\n    }\n  }\n  return url;\n}\nasync function fetchAndDecodeViaTurboStream(args, basename, trailingSlashAware, targetRoutes) {\n  let { request } = args;\n  let url = singleFetchUrl(request.url, basename, trailingSlashAware, \"data\");\n  if (request.method === \"GET\") {\n    url = stripIndexParam(url);\n    if (targetRoutes) {\n      url.searchParams.set(\"_routes\", targetRoutes.join(\",\"));\n    }\n  }\n  let res = await fetch(url, await createRequestInit(request));\n  if (res.status >= 400 && !res.headers.has(\"X-Remix-Response\")) {\n    throw new ErrorResponseImpl(res.status, res.statusText, await res.text());\n  }\n  if (res.status === 204 && res.headers.has(\"X-Remix-Redirect\")) {\n    return {\n      status: SINGLE_FETCH_REDIRECT_STATUS,\n      data: {\n        redirect: {\n          redirect: res.headers.get(\"X-Remix-Redirect\"),\n          status: Number(res.headers.get(\"X-Remix-Status\") || \"302\"),\n          revalidate: res.headers.get(\"X-Remix-Revalidate\") === \"true\",\n          reload: res.headers.get(\"X-Remix-Reload-Document\") === \"true\",\n          replace: res.headers.get(\"X-Remix-Replace\") === \"true\"\n        }\n      }\n    };\n  }\n  if (NO_BODY_STATUS_CODES.has(res.status)) {\n    let routes = {};\n    if (targetRoutes && request.method !== \"GET\") {\n      routes[targetRoutes[0]] = { data: void 0 };\n    }\n    return {\n      status: res.status,\n      data: { routes }\n    };\n  }\n  invariant2(res.body, \"No response body to decode\");\n  try {\n    let decoded = await decodeViaTurboStream(res.body, window);\n    let data2;\n    if (request.method === \"GET\") {\n      let typed = decoded.value;\n      if (SingleFetchRedirectSymbol in typed) {\n        data2 = { redirect: typed[SingleFetchRedirectSymbol] };\n      } else {\n        data2 = { routes: typed };\n      }\n    } else {\n      let typed = decoded.value;\n      let routeId = targetRoutes?.[0];\n      invariant2(routeId, \"No routeId found for single fetch call decoding\");\n      if (\"redirect\" in typed) {\n        data2 = { redirect: typed };\n      } else {\n        data2 = { routes: { [routeId]: typed } };\n      }\n    }\n    return { status: res.status, data: data2 };\n  } catch (e) {\n    throw new Error(\"Unable to decode turbo-stream response\");\n  }\n}\nfunction decodeViaTurboStream(body, global) {\n  return decode(body, {\n    plugins: [\n      (type, ...rest) => {\n        if (type === \"SanitizedError\") {\n          let [name, message, stack] = rest;\n          let Constructor = Error;\n          if (name && SUPPORTED_ERROR_TYPES.includes(name) && name in global && // @ts-expect-error\n          typeof global[name] === \"function\") {\n            Constructor = global[name];\n          }\n          let error = new Constructor(message);\n          error.stack = stack;\n          return { value: error };\n        }\n        if (type === \"ErrorResponse\") {\n          let [data2, status, statusText] = rest;\n          return {\n            value: new ErrorResponseImpl(status, statusText, data2)\n          };\n        }\n        if (type === \"SingleFetchRedirect\") {\n          return { value: { [SingleFetchRedirectSymbol]: rest[0] } };\n        }\n        if (type === \"SingleFetchClassInstance\") {\n          return { value: rest[0] };\n        }\n        if (type === \"SingleFetchFallback\") {\n          return { value: void 0 };\n        }\n      }\n    ]\n  });\n}\nfunction unwrapSingleFetchResult(result, routeId) {\n  if (\"redirect\" in result) {\n    let {\n      redirect: location,\n      revalidate,\n      reload,\n      replace: replace2,\n      status\n    } = result.redirect;\n    throw redirect(location, {\n      status,\n      headers: {\n        // Three R's of redirecting (lol Veep)\n        ...revalidate ? { \"X-Remix-Revalidate\": \"yes\" } : null,\n        ...reload ? { \"X-Remix-Reload-Document\": \"yes\" } : null,\n        ...replace2 ? { \"X-Remix-Replace\": \"yes\" } : null\n      }\n    });\n  }\n  let routeResult = result.routes[routeId];\n  if (routeResult == null) {\n    throw new SingleFetchNoResultError(\n      `No result found for routeId \"${routeId}\"`\n    );\n  } else if (\"error\" in routeResult) {\n    throw routeResult.error;\n  } else if (\"data\" in routeResult) {\n    return routeResult.data;\n  } else {\n    throw new Error(`Invalid response found for routeId \"${routeId}\"`);\n  }\n}\nfunction createDeferred2() {\n  let resolve;\n  let reject;\n  let promise = new Promise((res, rej) => {\n    resolve = async (val) => {\n      res(val);\n      try {\n        await promise;\n      } catch (e) {\n      }\n    };\n    reject = async (error) => {\n      rej(error);\n      try {\n        await promise;\n      } catch (e) {\n      }\n    };\n  });\n  return {\n    promise,\n    //@ts-ignore\n    resolve,\n    //@ts-ignore\n    reject\n  };\n}\n\n// lib/dom/ssr/errorBoundaries.tsx\nimport * as React9 from \"react\";\n\n// lib/dom/ssr/components.tsx\nimport * as React8 from \"react\";\n\n// lib/dom/ssr/routeModules.ts\nasync function loadRouteModule(route, routeModulesCache) {\n  if (route.id in routeModulesCache) {\n    return routeModulesCache[route.id];\n  }\n  try {\n    let routeModule = await import(\n      /* @vite-ignore */\n      /* webpackIgnore: true */\n      route.module\n    );\n    routeModulesCache[route.id] = routeModule;\n    return routeModule;\n  } catch (error) {\n    console.error(\n      `Error loading route module \\`${route.module}\\`, reloading page...`\n    );\n    console.error(error);\n    if (window.__reactRouterContext && window.__reactRouterContext.isSpaMode && // @ts-expect-error\n    import.meta.hot) {\n      throw error;\n    }\n    window.location.reload();\n    return new Promise(() => {\n    });\n  }\n}\n\n// lib/dom/ssr/links.ts\nfunction getKeyedLinksForMatches(matches, routeModules, manifest) {\n  let descriptors = matches.map((match) => {\n    let module = routeModules[match.route.id];\n    let route = manifest.routes[match.route.id];\n    return [\n      route && route.css ? route.css.map((href) => ({ rel: \"stylesheet\", href })) : [],\n      module?.links?.() || []\n    ];\n  }).flat(2);\n  let preloads = getModuleLinkHrefs(matches, manifest);\n  return dedupeLinkDescriptors(descriptors, preloads);\n}\nfunction getRouteCssDescriptors(route) {\n  if (!route.css) return [];\n  return route.css.map((href) => ({ rel: \"stylesheet\", href }));\n}\nasync function prefetchRouteCss(route) {\n  if (!route.css) return;\n  let descriptors = getRouteCssDescriptors(route);\n  await Promise.all(descriptors.map(prefetchStyleLink));\n}\nasync function prefetchStyleLinks(route, routeModule) {\n  if (!route.css && !routeModule.links || !isPreloadSupported()) return;\n  let descriptors = [];\n  if (route.css) {\n    descriptors.push(...getRouteCssDescriptors(route));\n  }\n  if (routeModule.links) {\n    descriptors.push(...routeModule.links());\n  }\n  if (descriptors.length === 0) return;\n  let styleLinks = [];\n  for (let descriptor of descriptors) {\n    if (!isPageLinkDescriptor(descriptor) && descriptor.rel === \"stylesheet\") {\n      styleLinks.push({\n        ...descriptor,\n        rel: \"preload\",\n        as: \"style\"\n      });\n    }\n  }\n  await Promise.all(styleLinks.map(prefetchStyleLink));\n}\nasync function prefetchStyleLink(descriptor) {\n  return new Promise((resolve) => {\n    if (descriptor.media && !window.matchMedia(descriptor.media).matches || document.querySelector(\n      `link[rel=\"stylesheet\"][href=\"${descriptor.href}\"]`\n    )) {\n      return resolve();\n    }\n    let link = document.createElement(\"link\");\n    Object.assign(link, descriptor);\n    function removeLink() {\n      if (document.head.contains(link)) {\n        document.head.removeChild(link);\n      }\n    }\n    link.onload = () => {\n      removeLink();\n      resolve();\n    };\n    link.onerror = () => {\n      removeLink();\n      resolve();\n    };\n    document.head.appendChild(link);\n  });\n}\nfunction isPageLinkDescriptor(object) {\n  return object != null && typeof object.page === \"string\";\n}\nfunction isHtmlLinkDescriptor(object) {\n  if (object == null) {\n    return false;\n  }\n  if (object.href == null) {\n    return object.rel === \"preload\" && typeof object.imageSrcSet === \"string\" && typeof object.imageSizes === \"string\";\n  }\n  return typeof object.rel === \"string\" && typeof object.href === \"string\";\n}\nasync function getKeyedPrefetchLinks(matches, manifest, routeModules) {\n  let links = await Promise.all(\n    matches.map(async (match) => {\n      let route = manifest.routes[match.route.id];\n      if (route) {\n        let mod = await loadRouteModule(route, routeModules);\n        return mod.links ? mod.links() : [];\n      }\n      return [];\n    })\n  );\n  return dedupeLinkDescriptors(\n    links.flat(1).filter(isHtmlLinkDescriptor).filter((link) => link.rel === \"stylesheet\" || link.rel === \"preload\").map(\n      (link) => link.rel === \"stylesheet\" ? { ...link, rel: \"prefetch\", as: \"style\" } : { ...link, rel: \"prefetch\" }\n    )\n  );\n}\nfunction getNewMatchesForLinks(page, nextMatches, currentMatches, manifest, location, mode) {\n  let isNew = (match, index) => {\n    if (!currentMatches[index]) return true;\n    return match.route.id !== currentMatches[index].route.id;\n  };\n  let matchPathChanged = (match, index) => {\n    return (\n      // param change, /users/123 -> /users/456\n      currentMatches[index].pathname !== match.pathname || // splat param changed, which is not present in match.path\n      // e.g. /files/images/avatar.jpg -> files/finances.xls\n      currentMatches[index].route.path?.endsWith(\"*\") && currentMatches[index].params[\"*\"] !== match.params[\"*\"]\n    );\n  };\n  if (mode === \"assets\") {\n    return nextMatches.filter(\n      (match, index) => isNew(match, index) || matchPathChanged(match, index)\n    );\n  }\n  if (mode === \"data\") {\n    return nextMatches.filter((match, index) => {\n      let manifestRoute = manifest.routes[match.route.id];\n      if (!manifestRoute || !manifestRoute.hasLoader) {\n        return false;\n      }\n      if (isNew(match, index) || matchPathChanged(match, index)) {\n        return true;\n      }\n      if (match.route.shouldRevalidate) {\n        let routeChoice = match.route.shouldRevalidate({\n          currentUrl: new URL(\n            location.pathname + location.search + location.hash,\n            window.origin\n          ),\n          currentParams: currentMatches[0]?.params || {},\n          nextUrl: new URL(page, window.origin),\n          nextParams: match.params,\n          defaultShouldRevalidate: true\n        });\n        if (typeof routeChoice === \"boolean\") {\n          return routeChoice;\n        }\n      }\n      return true;\n    });\n  }\n  return [];\n}\nfunction getModuleLinkHrefs(matches, manifest, { includeHydrateFallback } = {}) {\n  return dedupeHrefs(\n    matches.map((match) => {\n      let route = manifest.routes[match.route.id];\n      if (!route) return [];\n      let hrefs = [route.module];\n      if (route.clientActionModule) {\n        hrefs = hrefs.concat(route.clientActionModule);\n      }\n      if (route.clientLoaderModule) {\n        hrefs = hrefs.concat(route.clientLoaderModule);\n      }\n      if (includeHydrateFallback && route.hydrateFallbackModule) {\n        hrefs = hrefs.concat(route.hydrateFallbackModule);\n      }\n      if (route.imports) {\n        hrefs = hrefs.concat(route.imports);\n      }\n      return hrefs;\n    }).flat(1)\n  );\n}\nfunction dedupeHrefs(hrefs) {\n  return [...new Set(hrefs)];\n}\nfunction sortKeys(obj) {\n  let sorted = {};\n  let keys = Object.keys(obj).sort();\n  for (let key of keys) {\n    sorted[key] = obj[key];\n  }\n  return sorted;\n}\nfunction dedupeLinkDescriptors(descriptors, preloads) {\n  let set = /* @__PURE__ */ new Set();\n  let preloadsSet = new Set(preloads);\n  return descriptors.reduce((deduped, descriptor) => {\n    let alreadyModulePreload = preloads && !isPageLinkDescriptor(descriptor) && descriptor.as === \"script\" && descriptor.href && preloadsSet.has(descriptor.href);\n    if (alreadyModulePreload) {\n      return deduped;\n    }\n    let key = JSON.stringify(sortKeys(descriptor));\n    if (!set.has(key)) {\n      set.add(key);\n      deduped.push({ key, link: descriptor });\n    }\n    return deduped;\n  }, []);\n}\nvar _isPreloadSupported;\nfunction isPreloadSupported() {\n  if (_isPreloadSupported !== void 0) {\n    return _isPreloadSupported;\n  }\n  let el = document.createElement(\"link\");\n  _isPreloadSupported = el.relList.supports(\"preload\");\n  el = null;\n  return _isPreloadSupported;\n}\n\n// lib/dom/ssr/fog-of-war.ts\nimport * as React7 from \"react\";\n\n// lib/dom/ssr/routes.tsx\nimport * as React6 from \"react\";\n\n// lib/dom/ssr/fallback.tsx\nimport * as React5 from \"react\";\nfunction RemixRootDefaultHydrateFallback() {\n  return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: \"Loading...\", renderScripts: true }, ENABLE_DEV_WARNINGS ? /* @__PURE__ */ React5.createElement(\n    \"script\",\n    {\n      dangerouslySetInnerHTML: {\n        __html: `\n              console.log(\n                \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this \" +\n                \"when your app is loading JS modules and/or running \\`clientLoader\\` \" +\n                \"functions. Check out https://reactrouter.com/start/framework/route-module#hydratefallback \" +\n                \"for more information.\"\n              );\n            `\n      }\n    }\n  ) : null);\n}\n\n// lib/dom/ssr/routes.tsx\nfunction groupRoutesByParentId(manifest) {\n  let routes = {};\n  Object.values(manifest).forEach((route) => {\n    if (route) {\n      let parentId = route.parentId || \"\";\n      if (!routes[parentId]) {\n        routes[parentId] = [];\n      }\n      routes[parentId].push(route);\n    }\n  });\n  return routes;\n}\nfunction getRouteComponents(route, routeModule, isSpaMode) {\n  let Component4 = getRouteModuleComponent(routeModule);\n  let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === \"root\") ? routeModule.HydrateFallback : route.id === \"root\" ? RemixRootDefaultHydrateFallback : void 0;\n  let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === \"root\" ? () => /* @__PURE__ */ React6.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;\n  if (route.id === \"root\" && routeModule.Layout) {\n    return {\n      ...Component4 ? {\n        element: /* @__PURE__ */ React6.createElement(routeModule.Layout, null, /* @__PURE__ */ React6.createElement(Component4, null))\n      } : { Component: Component4 },\n      ...ErrorBoundary ? {\n        errorElement: /* @__PURE__ */ React6.createElement(routeModule.Layout, null, /* @__PURE__ */ React6.createElement(ErrorBoundary, null))\n      } : { ErrorBoundary },\n      ...HydrateFallback ? {\n        hydrateFallbackElement: /* @__PURE__ */ React6.createElement(routeModule.Layout, null, /* @__PURE__ */ React6.createElement(HydrateFallback, null))\n      } : { HydrateFallback }\n    };\n  }\n  return { Component: Component4, ErrorBoundary, HydrateFallback };\n}\nfunction createServerRoutes(manifest, routeModules, future, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), spaModeLazyPromise = Promise.resolve({ Component: () => null })) {\n  return (routesByParentId[parentId] || []).map((route) => {\n    let routeModule = routeModules[route.id];\n    invariant2(\n      routeModule,\n      \"No `routeModule` available to create server routes\"\n    );\n    let dataRoute = {\n      ...getRouteComponents(route, routeModule, isSpaMode),\n      caseSensitive: route.caseSensitive,\n      id: route.id,\n      index: route.index,\n      path: route.path,\n      handle: routeModule.handle,\n      // For SPA Mode, all routes are lazy except root.  However we tell the\n      // router root is also lazy here too since we don't need a full\n      // implementation - we just need a `lazy` prop to tell the RR rendering\n      // where to stop which is always at the root route in SPA mode\n      lazy: isSpaMode ? () => spaModeLazyPromise : void 0,\n      // For partial hydration rendering, we need to indicate when the route\n      // has a loader/clientLoader, but it won't ever be called during the static\n      // render, so just give it a no-op function so we can render down to the\n      // proper fallback\n      loader: route.hasLoader || route.hasClientLoader ? () => null : void 0\n      // We don't need middleware/action/shouldRevalidate on these routes since\n      // they're for a static render\n    };\n    let children = createServerRoutes(\n      manifest,\n      routeModules,\n      future,\n      isSpaMode,\n      route.id,\n      routesByParentId,\n      spaModeLazyPromise\n    );\n    if (children.length > 0) dataRoute.children = children;\n    return dataRoute;\n  });\n}\nfunction createClientRoutesWithHMRRevalidationOptOut(needsRevalidation, manifest, routeModulesCache, initialState, ssr, isSpaMode) {\n  return createClientRoutes(\n    manifest,\n    routeModulesCache,\n    initialState,\n    ssr,\n    isSpaMode,\n    \"\",\n    groupRoutesByParentId(manifest),\n    needsRevalidation\n  );\n}\nfunction preventInvalidServerHandlerCall(type, route) {\n  if (type === \"loader\" && !route.hasLoader || type === \"action\" && !route.hasAction) {\n    let fn = type === \"action\" ? \"serverAction()\" : \"serverLoader()\";\n    let msg = `You are trying to call ${fn} on a route that does not have a server ${type} (routeId: \"${route.id}\")`;\n    console.error(msg);\n    throw new ErrorResponseImpl(400, \"Bad Request\", new Error(msg), true);\n  }\n}\nfunction noActionDefinedError(type, routeId) {\n  let article = type === \"clientAction\" ? \"a\" : \"an\";\n  let msg = `Route \"${routeId}\" does not have ${article} ${type}, but you are trying to submit to it. To fix this, please add ${article} \\`${type}\\` function to the route`;\n  console.error(msg);\n  throw new ErrorResponseImpl(405, \"Method Not Allowed\", new Error(msg), true);\n}\nfunction createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), needsRevalidation) {\n  return (routesByParentId[parentId] || []).map((route) => {\n    let routeModule = routeModulesCache[route.id];\n    function fetchServerHandler(singleFetch) {\n      invariant2(\n        typeof singleFetch === \"function\",\n        \"No single fetch function available for route handler\"\n      );\n      return singleFetch();\n    }\n    function fetchServerLoader(singleFetch) {\n      if (!route.hasLoader) return Promise.resolve(null);\n      return fetchServerHandler(singleFetch);\n    }\n    function fetchServerAction(singleFetch) {\n      if (!route.hasAction) {\n        throw noActionDefinedError(\"action\", route.id);\n      }\n      return fetchServerHandler(singleFetch);\n    }\n    function prefetchModule(modulePath) {\n      import(\n        /* @vite-ignore */\n        /* webpackIgnore: true */\n        modulePath\n      );\n    }\n    function prefetchRouteModuleChunks(route2) {\n      if (route2.clientActionModule) {\n        prefetchModule(route2.clientActionModule);\n      }\n      if (route2.clientLoaderModule) {\n        prefetchModule(route2.clientLoaderModule);\n      }\n    }\n    async function prefetchStylesAndCallHandler(handler) {\n      let cachedModule = routeModulesCache[route.id];\n      let linkPrefetchPromise = cachedModule ? prefetchStyleLinks(route, cachedModule) : Promise.resolve();\n      try {\n        return handler();\n      } finally {\n        await linkPrefetchPromise;\n      }\n    }\n    let dataRoute = {\n      id: route.id,\n      index: route.index,\n      path: route.path\n    };\n    if (routeModule) {\n      Object.assign(dataRoute, {\n        ...dataRoute,\n        ...getRouteComponents(route, routeModule, isSpaMode),\n        middleware: routeModule.clientMiddleware,\n        handle: routeModule.handle,\n        shouldRevalidate: getShouldRevalidateFunction(\n          dataRoute.path,\n          routeModule,\n          route,\n          ssr,\n          needsRevalidation\n        )\n      });\n      let hasInitialData = initialState && initialState.loaderData && route.id in initialState.loaderData;\n      let initialData = hasInitialData ? initialState?.loaderData?.[route.id] : void 0;\n      let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;\n      let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;\n      let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);\n      dataRoute.loader = async ({ request, params, context, pattern, url }, singleFetch) => {\n        let _isHydrationRequest = isHydrationRequest;\n        isHydrationRequest = false;\n        let result = await prefetchStylesAndCallHandler(async () => {\n          invariant2(\n            routeModule,\n            \"No `routeModule` available for critical-route loader\"\n          );\n          if (!routeModule.clientLoader) {\n            return fetchServerLoader(singleFetch);\n          }\n          return routeModule.clientLoader({\n            request,\n            params,\n            context,\n            pattern,\n            url,\n            async serverLoader() {\n              preventInvalidServerHandlerCall(\"loader\", route);\n              if (_isHydrationRequest) {\n                if (hasInitialData) {\n                  return initialData;\n                }\n                if (hasInitialError) {\n                  throw initialError;\n                }\n              }\n              return fetchServerLoader(singleFetch);\n            }\n          });\n        });\n        return result;\n      };\n      dataRoute.loader.hydrate = shouldHydrateRouteLoader(\n        route.id,\n        routeModule.clientLoader,\n        route.hasLoader,\n        isSpaMode\n      );\n      dataRoute.action = ({ request, params, context, pattern, url }, singleFetch) => {\n        return prefetchStylesAndCallHandler(async () => {\n          invariant2(\n            routeModule,\n            \"No `routeModule` available for critical-route action\"\n          );\n          if (!routeModule.clientAction) {\n            if (isSpaMode) {\n              throw noActionDefinedError(\"clientAction\", route.id);\n            }\n            return fetchServerAction(singleFetch);\n          }\n          return routeModule.clientAction({\n            request,\n            params,\n            context,\n            pattern,\n            url,\n            async serverAction() {\n              preventInvalidServerHandlerCall(\"action\", route);\n              return fetchServerAction(singleFetch);\n            }\n          });\n        });\n      };\n    } else {\n      if (!route.hasClientLoader) {\n        dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n          return fetchServerLoader(singleFetch);\n        });\n      }\n      if (!route.hasClientAction) {\n        dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n          if (isSpaMode) {\n            throw noActionDefinedError(\"clientAction\", route.id);\n          }\n          return fetchServerAction(singleFetch);\n        });\n      }\n      let lazyRoutePromise;\n      async function getLazyRoute() {\n        if (lazyRoutePromise) {\n          return await lazyRoutePromise;\n        }\n        lazyRoutePromise = (async () => {\n          if (route.clientLoaderModule || route.clientActionModule) {\n            await new Promise((resolve) => setTimeout(resolve, 0));\n          }\n          let routeModulePromise = loadRouteModuleWithBlockingLinks(\n            route,\n            routeModulesCache\n          );\n          prefetchRouteModuleChunks(route);\n          return await routeModulePromise;\n        })();\n        return await lazyRoutePromise;\n      }\n      dataRoute.lazy = {\n        loader: route.hasClientLoader ? async () => {\n          let { clientLoader } = route.clientLoaderModule ? await import(\n            /* @vite-ignore */\n            /* webpackIgnore: true */\n            route.clientLoaderModule\n          ) : await getLazyRoute();\n          invariant2(clientLoader, \"No `clientLoader` export found\");\n          return (args, singleFetch) => clientLoader({\n            ...args,\n            async serverLoader() {\n              preventInvalidServerHandlerCall(\"loader\", route);\n              return fetchServerLoader(singleFetch);\n            }\n          });\n        } : void 0,\n        action: route.hasClientAction ? async () => {\n          let clientActionPromise = route.clientActionModule ? import(\n            /* @vite-ignore */\n            /* webpackIgnore: true */\n            route.clientActionModule\n          ) : getLazyRoute();\n          prefetchRouteModuleChunks(route);\n          let { clientAction } = await clientActionPromise;\n          invariant2(clientAction, \"No `clientAction` export found\");\n          return (args, singleFetch) => clientAction({\n            ...args,\n            async serverAction() {\n              preventInvalidServerHandlerCall(\"action\", route);\n              return fetchServerAction(singleFetch);\n            }\n          });\n        } : void 0,\n        middleware: route.hasClientMiddleware ? async () => {\n          let { clientMiddleware } = route.clientMiddlewareModule ? await import(\n            /* @vite-ignore */\n            /* webpackIgnore: true */\n            route.clientMiddlewareModule\n          ) : await getLazyRoute();\n          invariant2(clientMiddleware, \"No `clientMiddleware` export found\");\n          return clientMiddleware;\n        } : void 0,\n        shouldRevalidate: async () => {\n          let lazyRoute = await getLazyRoute();\n          return getShouldRevalidateFunction(\n            dataRoute.path,\n            lazyRoute,\n            route,\n            ssr,\n            needsRevalidation\n          );\n        },\n        handle: async () => (await getLazyRoute()).handle,\n        // No need to wrap these in layout since the root route is never\n        // loaded via route.lazy()\n        Component: async () => (await getLazyRoute()).Component,\n        ErrorBoundary: route.hasErrorBoundary ? async () => (await getLazyRoute()).ErrorBoundary : void 0\n      };\n    }\n    let children = createClientRoutes(\n      manifest,\n      routeModulesCache,\n      initialState,\n      ssr,\n      isSpaMode,\n      route.id,\n      routesByParentId,\n      needsRevalidation\n    );\n    if (children.length > 0) dataRoute.children = children;\n    return dataRoute;\n  });\n}\nfunction getShouldRevalidateFunction(path, route, manifestRoute, ssr, needsRevalidation) {\n  if (needsRevalidation) {\n    return wrapShouldRevalidateForHdr(\n      manifestRoute.id,\n      route.shouldRevalidate,\n      needsRevalidation\n    );\n  }\n  if (!ssr && manifestRoute.hasLoader && !manifestRoute.hasClientLoader) {\n    let myParams = path ? compilePath(path)[1].map((p) => p.paramName) : [];\n    const didParamsChange = (opts) => myParams.some((p) => opts.currentParams[p] !== opts.nextParams[p]);\n    if (route.shouldRevalidate) {\n      let fn = route.shouldRevalidate;\n      return (opts) => fn({\n        ...opts,\n        defaultShouldRevalidate: didParamsChange(opts)\n      });\n    } else {\n      return (opts) => didParamsChange(opts);\n    }\n  }\n  return route.shouldRevalidate;\n}\nfunction wrapShouldRevalidateForHdr(routeId, routeShouldRevalidate, needsRevalidation) {\n  let handledRevalidation = false;\n  return (arg) => {\n    if (!handledRevalidation) {\n      handledRevalidation = true;\n      return needsRevalidation.has(routeId);\n    }\n    return routeShouldRevalidate ? routeShouldRevalidate(arg) : arg.defaultShouldRevalidate;\n  };\n}\nasync function loadRouteModuleWithBlockingLinks(route, routeModules) {\n  let routeModulePromise = loadRouteModule(route, routeModules);\n  let prefetchRouteCssPromise = prefetchRouteCss(route);\n  let routeModule = await routeModulePromise;\n  await Promise.all([\n    prefetchRouteCssPromise,\n    prefetchStyleLinks(route, routeModule)\n  ]);\n  return {\n    Component: getRouteModuleComponent(routeModule),\n    ErrorBoundary: routeModule.ErrorBoundary,\n    clientMiddleware: routeModule.clientMiddleware,\n    clientAction: routeModule.clientAction,\n    clientLoader: routeModule.clientLoader,\n    handle: routeModule.handle,\n    links: routeModule.links,\n    meta: routeModule.meta,\n    shouldRevalidate: routeModule.shouldRevalidate\n  };\n}\nfunction getRouteModuleComponent(routeModule) {\n  if (routeModule.default == null) return void 0;\n  let isEmptyObject = typeof routeModule.default === \"object\" && Object.keys(routeModule.default).length === 0;\n  if (!isEmptyObject) {\n    return routeModule.default;\n  }\n}\nfunction shouldHydrateRouteLoader(routeId, clientLoader, hasLoader, isSpaMode) {\n  return isSpaMode && routeId !== \"root\" || clientLoader != null && (clientLoader.hydrate === true || hasLoader !== true);\n}\n\n// lib/dom/ssr/fog-of-war.ts\nvar nextPaths = /* @__PURE__ */ new Set();\nvar discoveredPathsMaxSize = 1e3;\nvar discoveredPaths = /* @__PURE__ */ new Set();\nvar URL_LIMIT = 7680;\nfunction isFogOfWarEnabled(routeDiscovery, ssr) {\n  return routeDiscovery.mode === \"lazy\" && ssr === true;\n}\nfunction getPartialManifest({ sri, ...manifest }, router) {\n  let routeIds = new Set(router.state.matches.map((m) => m.route.id));\n  let segments = router.state.location.pathname.split(\"/\").filter(Boolean);\n  let paths = [\"/\"];\n  segments.pop();\n  while (segments.length > 0) {\n    paths.push(`/${segments.join(\"/\")}`);\n    segments.pop();\n  }\n  paths.forEach((path) => {\n    let matches = matchRoutesImpl(\n      router.routes,\n      path,\n      router.basename || \"/\",\n      false,\n      router.branches\n    );\n    if (matches) {\n      matches.forEach((m) => routeIds.add(m.route.id));\n    }\n  });\n  let initialRoutes = [...routeIds].reduce(\n    (acc, id) => Object.assign(acc, { [id]: manifest.routes[id] }),\n    {}\n  );\n  return {\n    ...manifest,\n    routes: initialRoutes,\n    sri: sri ? true : void 0\n  };\n}\nfunction getPatchRoutesOnNavigationFunction(getRouter, manifest, routeModules, ssr, routeDiscovery, isSpaMode, basename) {\n  if (!isFogOfWarEnabled(routeDiscovery, ssr)) {\n    return void 0;\n  }\n  return async ({ path, patch, signal, fetcherKey }) => {\n    if (discoveredPaths.has(path)) {\n      return;\n    }\n    let { state } = getRouter();\n    await fetchAndApplyManifestPatches(\n      [path],\n      // If we're patching for a fetcher call, reload the current location\n      // Otherwise prefer any ongoing navigation location\n      fetcherKey ? window.location.href : createPath(state.navigation.location || state.location),\n      manifest,\n      routeModules,\n      ssr,\n      isSpaMode,\n      basename,\n      routeDiscovery.manifestPath,\n      patch,\n      signal\n    );\n  };\n}\nfunction useFogOFWarDiscovery(router, manifest, routeModules, ssr, routeDiscovery, isSpaMode) {\n  React7.useEffect(() => {\n    if (!isFogOfWarEnabled(routeDiscovery, ssr) || // @ts-expect-error - TS doesn't know about this yet\n    window.navigator?.connection?.saveData === true) {\n      return;\n    }\n    function registerElement(el) {\n      let path = el.tagName === \"FORM\" ? el.getAttribute(\"action\") : el.getAttribute(\"href\");\n      if (!path) {\n        return;\n      }\n      let pathname = el.tagName === \"A\" ? el.pathname : new URL(path, window.location.origin).pathname;\n      if (!discoveredPaths.has(pathname)) {\n        nextPaths.add(pathname);\n      }\n    }\n    async function fetchPatches() {\n      document.querySelectorAll(\"a[data-discover], form[data-discover]\").forEach(registerElement);\n      let lazyPaths = Array.from(nextPaths.keys()).filter((path) => {\n        if (discoveredPaths.has(path)) {\n          nextPaths.delete(path);\n          return false;\n        }\n        return true;\n      });\n      if (lazyPaths.length === 0) {\n        return;\n      }\n      try {\n        await fetchAndApplyManifestPatches(\n          lazyPaths,\n          null,\n          manifest,\n          routeModules,\n          ssr,\n          isSpaMode,\n          router.basename,\n          routeDiscovery.manifestPath,\n          router.patchRoutes\n        );\n      } catch (e) {\n        console.error(\"Failed to fetch manifest patches\", e);\n      }\n    }\n    let debouncedFetchPatches = debounce(fetchPatches, 100);\n    fetchPatches();\n    let observer = new MutationObserver(() => debouncedFetchPatches());\n    observer.observe(document.documentElement, {\n      subtree: true,\n      childList: true,\n      attributes: true,\n      attributeFilter: [\"data-discover\", \"href\", \"action\"]\n    });\n    return () => observer.disconnect();\n  }, [ssr, isSpaMode, manifest, routeModules, router, routeDiscovery]);\n}\nfunction getManifestPath(_manifestPath, basename) {\n  let manifestPath = _manifestPath || \"/__manifest\";\n  return basename == null ? manifestPath : joinPaths([basename, manifestPath]);\n}\nvar MANIFEST_VERSION_STORAGE_KEY = \"react-router-manifest-version\";\nasync function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, routeModules, ssr, isSpaMode, basename, manifestPath, patchRoutes, signal) {\n  const searchParams = new URLSearchParams();\n  searchParams.set(\"paths\", paths.sort().join(\",\"));\n  searchParams.set(\"version\", manifest.version);\n  let url = new URL(\n    getManifestPath(manifestPath, basename),\n    window.location.origin\n  );\n  url.search = searchParams.toString();\n  if (url.toString().length > URL_LIMIT) {\n    nextPaths.clear();\n    return;\n  }\n  let serverPatches;\n  try {\n    let res = await fetch(url, { signal });\n    if (!res.ok) {\n      throw new Error(`${res.status} ${res.statusText}`);\n    } else if (res.status === 204 && res.headers.has(\"X-Remix-Reload-Document\")) {\n      if (!errorReloadPath) {\n        console.warn(\n          \"Detected a manifest version mismatch during eager route discovery. The next navigation/fetch to an undiscovered route will result in a new document navigation to sync up with the latest manifest.\"\n        );\n        return;\n      }\n      try {\n        if (sessionStorage.getItem(MANIFEST_VERSION_STORAGE_KEY) === manifest.version) {\n          console.error(\n            \"Unable to discover routes due to manifest version mismatch.\"\n          );\n          return;\n        }\n        sessionStorage.setItem(MANIFEST_VERSION_STORAGE_KEY, manifest.version);\n      } catch {\n      }\n      window.location.href = errorReloadPath;\n      console.warn(\"Detected manifest version mismatch, reloading...\");\n      await new Promise(() => {\n      });\n    } else if (res.status >= 400) {\n      throw new Error(await res.text());\n    }\n    try {\n      sessionStorage.removeItem(MANIFEST_VERSION_STORAGE_KEY);\n    } catch {\n    }\n    serverPatches = await res.json();\n  } catch (e) {\n    if (signal?.aborted) return;\n    throw e;\n  }\n  let knownRoutes = new Set(Object.keys(manifest.routes));\n  let patches = Object.values(serverPatches).reduce((acc, route) => {\n    if (route && !knownRoutes.has(route.id)) {\n      acc[route.id] = route;\n    }\n    return acc;\n  }, {});\n  Object.assign(manifest.routes, patches);\n  paths.forEach((p) => addToFifoQueue(p, discoveredPaths));\n  let parentIds = /* @__PURE__ */ new Set();\n  Object.values(patches).forEach((patch) => {\n    if (patch && (!patch.parentId || !patches[patch.parentId])) {\n      parentIds.add(patch.parentId);\n    }\n  });\n  parentIds.forEach(\n    (parentId) => patchRoutes(\n      parentId || null,\n      createClientRoutes(patches, routeModules, null, ssr, isSpaMode, parentId)\n    )\n  );\n}\nfunction addToFifoQueue(path, queue) {\n  if (queue.size >= discoveredPathsMaxSize) {\n    let first = queue.values().next().value;\n    queue.delete(first);\n  }\n  queue.add(path);\n}\nfunction debounce(callback, wait) {\n  let timeoutId;\n  return (...args) => {\n    window.clearTimeout(timeoutId);\n    timeoutId = window.setTimeout(() => callback(...args), wait);\n  };\n}\n\n// lib/dom/ssr/components.tsx\nfunction useDataRouterContext2() {\n  let context = React8.useContext(DataRouterContext);\n  invariant2(\n    context,\n    \"You must render this element inside a <DataRouterContext.Provider> element\"\n  );\n  return context;\n}\nfunction useDataRouterStateContext() {\n  let context = React8.useContext(DataRouterStateContext);\n  invariant2(\n    context,\n    \"You must render this element inside a <DataRouterStateContext.Provider> element\"\n  );\n  return context;\n}\nvar FrameworkContext = React8.createContext(void 0);\nFrameworkContext.displayName = \"FrameworkContext\";\nfunction useFrameworkContext() {\n  let context = React8.useContext(FrameworkContext);\n  invariant2(\n    context,\n    \"You must render this element inside a <HydratedRouter> element\"\n  );\n  return context;\n}\nfunction usePrefetchBehavior(prefetch, theirElementProps) {\n  let frameworkContext = React8.useContext(FrameworkContext);\n  let [maybePrefetch, setMaybePrefetch] = React8.useState(false);\n  let [shouldPrefetch, setShouldPrefetch] = React8.useState(false);\n  let { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;\n  let ref = React8.useRef(null);\n  React8.useEffect(() => {\n    if (prefetch === \"render\") {\n      setShouldPrefetch(true);\n    }\n    if (prefetch === \"viewport\") {\n      let callback = (entries) => {\n        entries.forEach((entry) => {\n          setShouldPrefetch(entry.isIntersecting);\n        });\n      };\n      let observer = new IntersectionObserver(callback, { threshold: 0.5 });\n      if (ref.current) observer.observe(ref.current);\n      return () => {\n        observer.disconnect();\n      };\n    }\n  }, [prefetch]);\n  React8.useEffect(() => {\n    if (maybePrefetch) {\n      let id = setTimeout(() => {\n        setShouldPrefetch(true);\n      }, 100);\n      return () => {\n        clearTimeout(id);\n      };\n    }\n  }, [maybePrefetch]);\n  let setIntent = () => {\n    setMaybePrefetch(true);\n  };\n  let cancelIntent = () => {\n    setMaybePrefetch(false);\n    setShouldPrefetch(false);\n  };\n  if (!frameworkContext) {\n    return [false, ref, {}];\n  }\n  if (prefetch !== \"intent\") {\n    return [shouldPrefetch, ref, {}];\n  }\n  return [\n    shouldPrefetch,\n    ref,\n    {\n      onFocus: composeEventHandlers(onFocus, setIntent),\n      onBlur: composeEventHandlers(onBlur, cancelIntent),\n      onMouseEnter: composeEventHandlers(onMouseEnter, setIntent),\n      onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),\n      onTouchStart: composeEventHandlers(onTouchStart, setIntent)\n    }\n  ];\n}\nfunction composeEventHandlers(theirHandler, ourHandler) {\n  return (event) => {\n    theirHandler && theirHandler(event);\n    if (!event.defaultPrevented) {\n      ourHandler(event);\n    }\n  };\n}\nfunction getActiveMatches(matches, errors, isSpaMode) {\n  if (isSpaMode && !isHydrated) {\n    return [matches[0]];\n  }\n  if (errors) {\n    let errorIdx = matches.findIndex((m) => errors[m.route.id] !== void 0);\n    return matches.slice(0, errorIdx + 1);\n  }\n  return matches;\n}\nvar CRITICAL_CSS_DATA_ATTRIBUTE = \"data-react-router-critical-css\";\nfunction Links({ nonce, crossOrigin }) {\n  let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();\n  let { errors, matches: routerMatches } = useDataRouterStateContext();\n  let matches = getActiveMatches(routerMatches, errors, isSpaMode);\n  let keyedLinks = React8.useMemo(\n    () => getKeyedLinksForMatches(matches, routeModules, manifest),\n    [matches, routeModules, manifest]\n  );\n  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, typeof criticalCss === \"string\" ? /* @__PURE__ */ React8.createElement(\n    \"style\",\n    {\n      ...{ [CRITICAL_CSS_DATA_ATTRIBUTE]: \"\" },\n      nonce,\n      dangerouslySetInnerHTML: { __html: criticalCss }\n    }\n  ) : null, typeof criticalCss === \"object\" ? /* @__PURE__ */ React8.createElement(\n    \"link\",\n    {\n      ...{ [CRITICAL_CSS_DATA_ATTRIBUTE]: \"\" },\n      rel: \"stylesheet\",\n      href: criticalCss.href,\n      nonce,\n      crossOrigin\n    }\n  ) : null, keyedLinks.map(\n    ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React8.createElement(\n      PrefetchPageLinks,\n      {\n        key,\n        nonce,\n        ...link,\n        crossOrigin: link.crossOrigin ?? crossOrigin\n      }\n    ) : /* @__PURE__ */ React8.createElement(\n      \"link\",\n      {\n        key,\n        nonce,\n        ...link,\n        crossOrigin: link.crossOrigin ?? crossOrigin\n      }\n    )\n  ));\n}\nfunction PrefetchPageLinks({ page, ...linkProps }) {\n  let rsc = useIsRSCRouterContext();\n  let { router } = useDataRouterContext2();\n  let matches = React8.useMemo(\n    () => matchRoutes(router.routes, page, router.basename),\n    [router.routes, page, router.basename]\n  );\n  if (!matches) {\n    return null;\n  }\n  if (rsc) {\n    return /* @__PURE__ */ React8.createElement(RSCPrefetchPageLinksImpl, { page, matches, ...linkProps });\n  }\n  return /* @__PURE__ */ React8.createElement(PrefetchPageLinksImpl, { page, matches, ...linkProps });\n}\nfunction useKeyedPrefetchLinks(matches) {\n  let { manifest, routeModules } = useFrameworkContext();\n  let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React8.useState([]);\n  React8.useEffect(() => {\n    let interrupted = false;\n    void getKeyedPrefetchLinks(matches, manifest, routeModules).then(\n      (links) => {\n        if (!interrupted) {\n          setKeyedPrefetchLinks(links);\n        }\n      }\n    );\n    return () => {\n      interrupted = true;\n    };\n  }, [matches, manifest, routeModules]);\n  return keyedPrefetchLinks;\n}\nfunction RSCPrefetchPageLinksImpl({\n  page,\n  matches: nextMatches,\n  ...linkProps\n}) {\n  let location = useLocation();\n  let { future } = useFrameworkContext();\n  let { basename } = useDataRouterContext2();\n  let dataHrefs = React8.useMemo(() => {\n    if (page === location.pathname + location.search + location.hash) {\n      return [];\n    }\n    let url = singleFetchUrl(\n      page,\n      basename,\n      future.unstable_trailingSlashAwareDataRequests,\n      \"rsc\"\n    );\n    let hasSomeRoutesWithShouldRevalidate = false;\n    let targetRoutes = [];\n    for (let match of nextMatches) {\n      if (typeof match.route.shouldRevalidate === \"function\") {\n        hasSomeRoutesWithShouldRevalidate = true;\n      } else {\n        targetRoutes.push(match.route.id);\n      }\n    }\n    if (hasSomeRoutesWithShouldRevalidate && targetRoutes.length > 0) {\n      url.searchParams.set(\"_routes\", targetRoutes.join(\",\"));\n    }\n    return [url.pathname + url.search];\n  }, [\n    basename,\n    future.unstable_trailingSlashAwareDataRequests,\n    page,\n    location,\n    nextMatches\n  ]);\n  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React8.createElement(\"link\", { key: href, rel: \"prefetch\", as: \"fetch\", href, ...linkProps })));\n}\nfunction PrefetchPageLinksImpl({\n  page,\n  matches: nextMatches,\n  ...linkProps\n}) {\n  let location = useLocation();\n  let { future, manifest, routeModules } = useFrameworkContext();\n  let { basename } = useDataRouterContext2();\n  let { loaderData, matches } = useDataRouterStateContext();\n  let newMatchesForData = React8.useMemo(\n    () => getNewMatchesForLinks(\n      page,\n      nextMatches,\n      matches,\n      manifest,\n      location,\n      \"data\"\n    ),\n    [page, nextMatches, matches, manifest, location]\n  );\n  let newMatchesForAssets = React8.useMemo(\n    () => getNewMatchesForLinks(\n      page,\n      nextMatches,\n      matches,\n      manifest,\n      location,\n      \"assets\"\n    ),\n    [page, nextMatches, matches, manifest, location]\n  );\n  let dataHrefs = React8.useMemo(() => {\n    if (page === location.pathname + location.search + location.hash) {\n      return [];\n    }\n    let routesParams = /* @__PURE__ */ new Set();\n    let foundOptOutRoute = false;\n    nextMatches.forEach((m) => {\n      let manifestRoute = manifest.routes[m.route.id];\n      if (!manifestRoute || !manifestRoute.hasLoader) {\n        return;\n      }\n      if (!newMatchesForData.some((m2) => m2.route.id === m.route.id) && m.route.id in loaderData && routeModules[m.route.id]?.shouldRevalidate) {\n        foundOptOutRoute = true;\n      } else if (manifestRoute.hasClientLoader) {\n        foundOptOutRoute = true;\n      } else {\n        routesParams.add(m.route.id);\n      }\n    });\n    if (routesParams.size === 0) {\n      return [];\n    }\n    let url = singleFetchUrl(\n      page,\n      basename,\n      future.unstable_trailingSlashAwareDataRequests,\n      \"data\"\n    );\n    if (foundOptOutRoute && routesParams.size > 0) {\n      url.searchParams.set(\n        \"_routes\",\n        nextMatches.filter((m) => routesParams.has(m.route.id)).map((m) => m.route.id).join(\",\")\n      );\n    }\n    return [url.pathname + url.search];\n  }, [\n    basename,\n    future.unstable_trailingSlashAwareDataRequests,\n    loaderData,\n    location,\n    manifest,\n    newMatchesForData,\n    nextMatches,\n    page,\n    routeModules\n  ]);\n  let moduleHrefs = React8.useMemo(\n    () => getModuleLinkHrefs(newMatchesForAssets, manifest),\n    [newMatchesForAssets, manifest]\n  );\n  let keyedPrefetchLinks = useKeyedPrefetchLinks(newMatchesForAssets);\n  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React8.createElement(\"link\", { key: href, rel: \"prefetch\", as: \"fetch\", href, ...linkProps })), moduleHrefs.map((href) => /* @__PURE__ */ React8.createElement(\"link\", { key: href, rel: \"modulepreload\", href, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (\n    // these don't spread `linkProps` because they are full link descriptors\n    // already with their own props\n    /* @__PURE__ */ React8.createElement(\n      \"link\",\n      {\n        key,\n        nonce: linkProps.nonce,\n        ...link,\n        crossOrigin: link.crossOrigin ?? linkProps.crossOrigin\n      }\n    )\n  )));\n}\nfunction Meta() {\n  let { isSpaMode, routeModules } = useFrameworkContext();\n  let {\n    errors,\n    matches: routerMatches,\n    loaderData\n  } = useDataRouterStateContext();\n  let location = useLocation();\n  let _matches = getActiveMatches(routerMatches, errors, isSpaMode);\n  let error = null;\n  if (errors) {\n    error = errors[_matches[_matches.length - 1].route.id];\n  }\n  let meta = [];\n  let leafMeta = null;\n  let matches = [];\n  for (let i = 0; i < _matches.length; i++) {\n    let _match = _matches[i];\n    let routeId = _match.route.id;\n    let data2 = loaderData[routeId];\n    let params = _match.params;\n    let routeModule = routeModules[routeId];\n    let routeMeta = [];\n    let match = {\n      id: routeId,\n      data: data2,\n      loaderData: data2,\n      meta: [],\n      params: _match.params,\n      pathname: _match.pathname,\n      handle: _match.route.handle,\n      error\n    };\n    matches[i] = match;\n    if (routeModule?.meta) {\n      routeMeta = typeof routeModule.meta === \"function\" ? routeModule.meta({\n        data: data2,\n        loaderData: data2,\n        params,\n        location,\n        matches,\n        error\n      }) : Array.isArray(routeModule.meta) ? [...routeModule.meta] : routeModule.meta;\n    } else if (leafMeta) {\n      routeMeta = [...leafMeta];\n    }\n    routeMeta = routeMeta || [];\n    if (!Array.isArray(routeMeta)) {\n      throw new Error(\n        \"The route at \" + _match.route.path + \" returns an invalid value. All route meta functions must return an array of meta objects.\\n\\nTo reference the meta function API, see https://reactrouter.com/start/framework/route-module#meta\"\n      );\n    }\n    match.meta = routeMeta;\n    matches[i] = match;\n    meta = [...routeMeta];\n    leafMeta = meta;\n  }\n  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, meta.flat().map((metaProps) => {\n    if (!metaProps) {\n      return null;\n    }\n    if (\"tagName\" in metaProps) {\n      let { tagName, ...rest } = metaProps;\n      if (!isValidMetaTag(tagName)) {\n        console.warn(\n          `A meta object uses an invalid tagName: ${tagName}. Expected either 'link' or 'meta'`\n        );\n        return null;\n      }\n      let Comp = tagName;\n      return /* @__PURE__ */ React8.createElement(Comp, { key: JSON.stringify(rest), ...rest });\n    }\n    if (\"title\" in metaProps) {\n      return /* @__PURE__ */ React8.createElement(\"title\", { key: \"title\" }, String(metaProps.title));\n    }\n    if (\"charset\" in metaProps) {\n      metaProps.charSet ?? (metaProps.charSet = metaProps.charset);\n      delete metaProps.charset;\n    }\n    if (\"charSet\" in metaProps && metaProps.charSet != null) {\n      return typeof metaProps.charSet === \"string\" ? /* @__PURE__ */ React8.createElement(\"meta\", { key: \"charSet\", charSet: metaProps.charSet }) : null;\n    }\n    if (\"script:ld+json\" in metaProps) {\n      try {\n        let json = JSON.stringify(metaProps[\"script:ld+json\"]);\n        return /* @__PURE__ */ React8.createElement(\n          \"script\",\n          {\n            key: `script:ld+json:${json}`,\n            type: \"application/ld+json\",\n            dangerouslySetInnerHTML: { __html: escapeHtml(json) }\n          }\n        );\n      } catch (e) {\n        return null;\n      }\n    }\n    return /* @__PURE__ */ React8.createElement(\"meta\", { key: JSON.stringify(metaProps), ...metaProps });\n  }));\n}\nfunction isValidMetaTag(tagName) {\n  return typeof tagName === \"string\" && /^(meta|link)$/.test(tagName);\n}\nvar isHydrated = false;\nfunction setIsHydrated() {\n  isHydrated = true;\n}\nfunction Scripts(scriptProps) {\n  let {\n    manifest,\n    serverHandoffString,\n    isSpaMode,\n    renderMeta,\n    routeDiscovery,\n    ssr\n  } = useFrameworkContext();\n  let { router, static: isStatic, staticContext } = useDataRouterContext2();\n  let { matches: routerMatches } = useDataRouterStateContext();\n  let isRSCRouterContext = useIsRSCRouterContext();\n  let enableFogOfWar = isFogOfWarEnabled(routeDiscovery, ssr);\n  if (renderMeta) {\n    renderMeta.didRenderScripts = true;\n  }\n  let matches = getActiveMatches(routerMatches, null, isSpaMode);\n  React8.useEffect(() => {\n    setIsHydrated();\n  }, []);\n  let initialScripts = React8.useMemo(() => {\n    if (isRSCRouterContext) {\n      return null;\n    }\n    let streamScript = \"window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());\";\n    let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : \" \";\n    let routeModulesScript = !isStatic ? \" \" : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : \"\"}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : \"\"};\n${matches.map((match, routeIndex) => {\n      let routeVarName = `route${routeIndex}`;\n      let manifestEntry = manifest.routes[match.route.id];\n      invariant2(manifestEntry, `Route ${match.route.id} not found in manifest`);\n      let {\n        clientActionModule,\n        clientLoaderModule,\n        clientMiddlewareModule,\n        hydrateFallbackModule,\n        module\n      } = manifestEntry;\n      let chunks = [\n        ...clientActionModule ? [\n          {\n            module: clientActionModule,\n            varName: `${routeVarName}_clientAction`\n          }\n        ] : [],\n        ...clientLoaderModule ? [\n          {\n            module: clientLoaderModule,\n            varName: `${routeVarName}_clientLoader`\n          }\n        ] : [],\n        ...clientMiddlewareModule ? [\n          {\n            module: clientMiddlewareModule,\n            varName: `${routeVarName}_clientMiddleware`\n          }\n        ] : [],\n        ...hydrateFallbackModule ? [\n          {\n            module: hydrateFallbackModule,\n            varName: `${routeVarName}_HydrateFallback`\n          }\n        ] : [],\n        { module, varName: `${routeVarName}_main` }\n      ];\n      if (chunks.length === 1) {\n        return `import * as ${routeVarName} from ${JSON.stringify(module)};`;\n      }\n      let chunkImportsSnippet = chunks.map((chunk) => `import * as ${chunk.varName} from \"${chunk.module}\";`).join(\"\\n\");\n      let mergedChunksSnippet = `const ${routeVarName} = {${chunks.map((chunk) => `...${chunk.varName}`).join(\",\")}};`;\n      return [chunkImportsSnippet, mergedChunksSnippet].join(\"\\n\");\n    }).join(\"\\n\")}\n  ${enableFogOfWar ? (\n      // Inline a minimal manifest with the SSR matches\n      `window.__reactRouterManifest = ${JSON.stringify(\n        getPartialManifest(manifest, router),\n        null,\n        2\n      )};`\n    ) : \"\"}\n  window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(\",\")}};\n\nimport(${JSON.stringify(manifest.entry.module)});`;\n    return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(\n      \"script\",\n      {\n        ...scriptProps,\n        suppressHydrationWarning: true,\n        dangerouslySetInnerHTML: { __html: contextScript },\n        type: void 0\n      }\n    ), /* @__PURE__ */ React8.createElement(\n      \"script\",\n      {\n        ...scriptProps,\n        suppressHydrationWarning: true,\n        dangerouslySetInnerHTML: { __html: routeModulesScript },\n        type: \"module\",\n        async: true\n      }\n    ));\n  }, []);\n  let preloads = isHydrated || isRSCRouterContext ? [] : [\n    // Dedupe through a Set\n    ...new Set(\n      manifest.entry.imports.concat(\n        getModuleLinkHrefs(matches, manifest, {\n          includeHydrateFallback: true\n        })\n      )\n    )\n  ];\n  let sri = typeof manifest.sri === \"object\" ? manifest.sri : {};\n  warnOnce(\n    !isRSCRouterContext,\n    \"The <Scripts /> element is a no-op when using RSC and can be safely removed.\"\n  );\n  return isHydrated || isRSCRouterContext ? null : /* @__PURE__ */ React8.createElement(React8.Fragment, null, typeof manifest.sri === \"object\" ? /* @__PURE__ */ React8.createElement(\n    \"script\",\n    {\n      ...scriptProps,\n      \"rr-importmap\": \"\",\n      type: \"importmap\",\n      suppressHydrationWarning: true,\n      dangerouslySetInnerHTML: {\n        __html: JSON.stringify({\n          integrity: sri\n        })\n      }\n    }\n  ) : null, !enableFogOfWar ? /* @__PURE__ */ React8.createElement(\n    \"link\",\n    {\n      rel: \"modulepreload\",\n      href: manifest.url,\n      crossOrigin: scriptProps.crossOrigin,\n      integrity: sri[manifest.url],\n      nonce: scriptProps.nonce,\n      suppressHydrationWarning: true\n    }\n  ) : null, /* @__PURE__ */ React8.createElement(\n    \"link\",\n    {\n      rel: \"modulepreload\",\n      href: manifest.entry.module,\n      crossOrigin: scriptProps.crossOrigin,\n      integrity: sri[manifest.entry.module],\n      nonce: scriptProps.nonce,\n      suppressHydrationWarning: true\n    }\n  ), preloads.map((path) => /* @__PURE__ */ React8.createElement(\n    \"link\",\n    {\n      key: path,\n      rel: \"modulepreload\",\n      href: path,\n      crossOrigin: scriptProps.crossOrigin,\n      integrity: sri[path],\n      nonce: scriptProps.nonce,\n      suppressHydrationWarning: true\n    }\n  )), initialScripts);\n}\nfunction mergeRefs(...refs) {\n  return (value) => {\n    refs.forEach((ref) => {\n      if (typeof ref === \"function\") {\n        ref(value);\n      } else if (ref != null) {\n        ref.current = value;\n      }\n    });\n  };\n}\n\n// lib/dom/ssr/errorBoundaries.tsx\nvar RemixErrorBoundary = class extends React9.Component {\n  constructor(props) {\n    super(props);\n    this.state = { error: props.error || null, location: props.location };\n  }\n  static getDerivedStateFromError(error) {\n    return { error };\n  }\n  static getDerivedStateFromProps(props, state) {\n    if (state.location !== props.location) {\n      return { error: props.error || null, location: props.location };\n    }\n    return { error: props.error || state.error, location: state.location };\n  }\n  render() {\n    if (this.state.error) {\n      return /* @__PURE__ */ React9.createElement(\n        RemixRootDefaultErrorBoundary,\n        {\n          error: this.state.error,\n          isOutsideRemixApp: true\n        }\n      );\n    } else {\n      return this.props.children;\n    }\n  }\n};\nfunction RemixRootDefaultErrorBoundary({\n  error,\n  isOutsideRemixApp\n}) {\n  console.error(error);\n  let heyDeveloper = /* @__PURE__ */ React9.createElement(\n    \"script\",\n    {\n      dangerouslySetInnerHTML: {\n        __html: `\n        console.log(\n          \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://reactrouter.com/how-to/error-boundary for more information.\"\n        );\n      `\n      }\n    }\n  );\n  if (isRouteErrorResponse(error)) {\n    return /* @__PURE__ */ React9.createElement(BoundaryShell, { title: \"Unhandled Thrown Response!\" }, /* @__PURE__ */ React9.createElement(\"h1\", { style: { fontSize: \"24px\" } }, error.status, \" \", error.statusText), ENABLE_DEV_WARNINGS ? heyDeveloper : null);\n  }\n  let errorInstance;\n  if (error instanceof Error) {\n    errorInstance = error;\n  } else {\n    let errorString = error == null ? \"Unknown Error\" : typeof error === \"object\" && \"toString\" in error ? error.toString() : JSON.stringify(error);\n    errorInstance = new Error(errorString);\n  }\n  return /* @__PURE__ */ React9.createElement(\n    BoundaryShell,\n    {\n      title: \"Application Error!\",\n      isOutsideRemixApp\n    },\n    /* @__PURE__ */ React9.createElement(\"h1\", { style: { fontSize: \"24px\" } }, \"Application Error\"),\n    /* @__PURE__ */ React9.createElement(\n      \"pre\",\n      {\n        style: {\n          padding: \"2rem\",\n          background: \"hsla(10, 50%, 50%, 0.1)\",\n          color: \"red\",\n          overflow: \"auto\"\n        }\n      },\n      errorInstance.stack\n    ),\n    heyDeveloper\n  );\n}\nfunction BoundaryShell({\n  title,\n  renderScripts,\n  isOutsideRemixApp,\n  children\n}) {\n  let { routeModules } = useFrameworkContext();\n  if (routeModules.root?.Layout && !isOutsideRemixApp) {\n    return children;\n  }\n  return /* @__PURE__ */ React9.createElement(\"html\", { lang: \"en\" }, /* @__PURE__ */ React9.createElement(\"head\", null, /* @__PURE__ */ React9.createElement(\"meta\", { charSet: \"utf-8\" }), /* @__PURE__ */ React9.createElement(\n    \"meta\",\n    {\n      name: \"viewport\",\n      content: \"width=device-width,initial-scale=1,viewport-fit=cover\"\n    }\n  ), /* @__PURE__ */ React9.createElement(\"title\", null, title)), /* @__PURE__ */ React9.createElement(\"body\", null, /* @__PURE__ */ React9.createElement(\"main\", { style: { fontFamily: \"system-ui, sans-serif\", padding: \"2rem\" } }, children, renderScripts ? /* @__PURE__ */ React9.createElement(Scripts, null) : null)));\n}\n\n// lib/dom/lib.tsx\nimport * as React10 from \"react\";\nvar isBrowser2 = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\ntry {\n  if (isBrowser2) {\n    window.__reactRouterVersion = // @ts-expect-error\n    \"7.15.1\";\n  }\n} catch (e) {\n}\nfunction createBrowserRouter(routes, opts) {\n  return createRouter({\n    basename: opts?.basename,\n    getContext: opts?.getContext,\n    future: opts?.future,\n    history: createBrowserHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    hydrationRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    window: opts?.window,\n    instrumentations: opts?.instrumentations\n  }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n  return createRouter({\n    basename: opts?.basename,\n    getContext: opts?.getContext,\n    future: opts?.future,\n    history: createHashHistory({ window: opts?.window }),\n    hydrationData: opts?.hydrationData || parseHydrationData(),\n    routes,\n    mapRouteProperties,\n    hydrationRouteProperties,\n    dataStrategy: opts?.dataStrategy,\n    patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n    window: opts?.window,\n    instrumentations: opts?.instrumentations\n  }).initialize();\n}\nfunction parseHydrationData() {\n  let state = window?.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = {\n      ...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    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new ErrorResponseImpl(\n        val.status,\n        val.statusText,\n        val.data,\n        val.internal === true\n      );\n    } else if (val && val.__type === \"Error\") {\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            let error = new ErrorConstructor(val.message);\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nfunction BrowserRouter({\n  basename,\n  children,\n  useTransitions,\n  window: window2\n}) {\n  let historyRef = React10.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({ window: window2, v5Compat: true });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React10.useState({\n    action: history.action,\n    location: history.location\n  });\n  let setState = React10.useCallback(\n    (newState) => {\n      if (useTransitions === false) {\n        setStateImpl(newState);\n      } else {\n        React10.startTransition(() => setStateImpl(newState));\n      }\n    },\n    [useTransitions]\n  );\n  React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /* @__PURE__ */ React10.createElement(\n    Router,\n    {\n      basename,\n      children,\n      location: state.location,\n      navigationType: state.action,\n      navigator: history,\n      useTransitions\n    }\n  );\n}\nfunction HashRouter({\n  basename,\n  children,\n  useTransitions,\n  window: window2\n}) {\n  let historyRef = React10.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({ window: window2, v5Compat: true });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React10.useState({\n    action: history.action,\n    location: history.location\n  });\n  let setState = React10.useCallback(\n    (newState) => {\n      if (useTransitions === false) {\n        setStateImpl(newState);\n      } else {\n        React10.startTransition(() => setStateImpl(newState));\n      }\n    },\n    [useTransitions]\n  );\n  React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /* @__PURE__ */ React10.createElement(\n    Router,\n    {\n      basename,\n      children,\n      location: state.location,\n      navigationType: state.action,\n      navigator: history,\n      useTransitions\n    }\n  );\n}\nfunction HistoryRouter({\n  basename,\n  children,\n  history,\n  useTransitions\n}) {\n  let [state, setStateImpl] = React10.useState({\n    action: history.action,\n    location: history.location\n  });\n  let setState = React10.useCallback(\n    (newState) => {\n      if (useTransitions === false) {\n        setStateImpl(newState);\n      } else {\n        React10.startTransition(() => setStateImpl(newState));\n      }\n    },\n    [useTransitions]\n  );\n  React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /* @__PURE__ */ React10.createElement(\n    Router,\n    {\n      basename,\n      children,\n      location: state.location,\n      navigationType: state.action,\n      navigator: history,\n      useTransitions\n    }\n  );\n}\nHistoryRouter.displayName = \"unstable_HistoryRouter\";\nvar ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar Link = React10.forwardRef(\n  function LinkWithRef({\n    onClick,\n    discover = \"render\",\n    prefetch = \"none\",\n    relative,\n    reloadDocument,\n    replace: replace2,\n    mask,\n    state,\n    target,\n    to,\n    preventScrollReset,\n    viewTransition,\n    defaultShouldRevalidate,\n    ...rest\n  }, forwardedRef) {\n    let { basename, navigator, useTransitions } = React10.useContext(NavigationContext);\n    let isAbsolute = typeof to === \"string\" && ABSOLUTE_URL_REGEX2.test(to);\n    let parsed = parseToInfo(to, basename);\n    to = parsed.to;\n    let href = useHref(to, { relative });\n    let location = useLocation();\n    let maskedHref = null;\n    if (mask) {\n      let resolved = resolveTo(\n        mask,\n        [],\n        location.mask ? location.mask.pathname : \"/\",\n        true\n      );\n      if (basename !== \"/\") {\n        resolved.pathname = resolved.pathname === \"/\" ? basename : joinPaths([basename, resolved.pathname]);\n      }\n      maskedHref = navigator.createHref(resolved);\n    }\n    let [shouldPrefetch, prefetchRef, prefetchHandlers] = usePrefetchBehavior(\n      prefetch,\n      rest\n    );\n    let internalOnClick = useLinkClickHandler(to, {\n      replace: replace2,\n      mask,\n      state,\n      target,\n      preventScrollReset,\n      relative,\n      viewTransition,\n      defaultShouldRevalidate,\n      useTransitions\n    });\n    function handleClick(event) {\n      if (onClick) onClick(event);\n      if (!event.defaultPrevented) {\n        internalOnClick(event);\n      }\n    }\n    let isSpaLink = !(parsed.isExternal || reloadDocument);\n    let link = (\n      // eslint-disable-next-line jsx-a11y/anchor-has-content\n      /* @__PURE__ */ React10.createElement(\n        \"a\",\n        {\n          ...rest,\n          ...prefetchHandlers,\n          href: (isSpaLink ? maskedHref : void 0) || parsed.absoluteURL || href,\n          onClick: isSpaLink ? handleClick : onClick,\n          ref: mergeRefs(forwardedRef, prefetchRef),\n          target,\n          \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n        }\n      )\n    );\n    return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, link, /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { page: href })) : link;\n  }\n);\nLink.displayName = \"Link\";\nvar NavLink = React10.forwardRef(\n  function NavLinkWithRef({\n    \"aria-current\": ariaCurrentProp = \"page\",\n    caseSensitive = false,\n    className: classNameProp = \"\",\n    end = false,\n    style: styleProp,\n    to,\n    viewTransition,\n    children,\n    ...rest\n  }, ref) {\n    let path = useResolvedPath(to, { relative: rest.relative });\n    let location = useLocation();\n    let routerState = React10.useContext(DataRouterStateContext);\n    let { navigator, basename } = React10.useContext(NavigationContext);\n    let isTransitioning = routerState != null && // 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    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 : void 0;\n    let className;\n    if (typeof classNameProp === \"function\") {\n      className = classNameProp(renderProps);\n    } else {\n      className = [\n        classNameProp,\n        isActive ? \"active\" : null,\n        isPending ? \"pending\" : null,\n        isTransitioning ? \"transitioning\" : null\n      ].filter(Boolean).join(\" \");\n    }\n    let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n    return /* @__PURE__ */ React10.createElement(\n      Link,\n      {\n        ...rest,\n        \"aria-current\": ariaCurrent,\n        className,\n        ref,\n        style,\n        to,\n        viewTransition\n      },\n      typeof children === \"function\" ? children(renderProps) : children\n    );\n  }\n);\nNavLink.displayName = \"NavLink\";\nvar Form = React10.forwardRef(\n  ({\n    discover = \"render\",\n    fetcherKey,\n    navigate,\n    reloadDocument,\n    replace: replace2,\n    state,\n    method = defaultMethod,\n    action,\n    onSubmit,\n    relative,\n    preventScrollReset,\n    viewTransition,\n    defaultShouldRevalidate,\n    ...props\n  }, forwardedRef) => {\n    let { useTransitions } = React10.useContext(NavigationContext);\n    let submit = useSubmit();\n    let formAction = useFormAction(action, { relative });\n    let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n    let isAbsolute = typeof action === \"string\" && ABSOLUTE_URL_REGEX2.test(action);\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?.getAttribute(\"formmethod\") || method;\n      let doSubmit = () => submit(submitter || event.currentTarget, {\n        fetcherKey,\n        method: submitMethod,\n        navigate,\n        replace: replace2,\n        state,\n        relative,\n        preventScrollReset,\n        viewTransition,\n        defaultShouldRevalidate\n      });\n      if (useTransitions && navigate !== false) {\n        React10.startTransition(() => doSubmit());\n      } else {\n        doSubmit();\n      }\n    };\n    return /* @__PURE__ */ React10.createElement(\n      \"form\",\n      {\n        ref: forwardedRef,\n        method: formMethod,\n        action: formAction,\n        onSubmit: reloadDocument ? onSubmit : submitHandler,\n        ...props,\n        \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n      }\n    );\n  }\n);\nForm.displayName = \"Form\";\nfunction ScrollRestoration({\n  getKey,\n  storageKey,\n  ...props\n}) {\n  let remixContext = React10.useContext(FrameworkContext);\n  let { basename } = React10.useContext(NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  useScrollRestoration({ getKey, storageKey });\n  let ssrKey = React10.useMemo(\n    () => {\n      if (!remixContext || !getKey) return null;\n      let userKey = getScrollRestorationKey(\n        location,\n        matches,\n        basename,\n        getKey\n      );\n      return userKey !== location.key ? userKey : null;\n    },\n    // Nah, we only need this the first time for the SSR render\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n  if (!remixContext || remixContext.isSpaMode) {\n    return null;\n  }\n  let restoreScroll = ((storageKey2, restoreKey) => {\n    if (!window.history.state || !window.history.state.key) {\n      let key = Math.random().toString(32).slice(2);\n      window.history.replaceState({ key }, \"\");\n    }\n    try {\n      let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \"{}\");\n      let storedY = positions[restoreKey || window.history.state.key];\n      if (typeof storedY === \"number\") {\n        window.scrollTo(0, storedY);\n      }\n    } catch (error) {\n      console.error(error);\n      sessionStorage.removeItem(storageKey2);\n    }\n  }).toString();\n  return /* @__PURE__ */ React10.createElement(\n    \"script\",\n    {\n      ...props,\n      suppressHydrationWarning: true,\n      dangerouslySetInnerHTML: {\n        __html: `(${restoreScroll})(${escapeHtml(\n          JSON.stringify(storageKey || SCROLL_RESTORATION_STORAGE_KEY)\n        )}, ${escapeHtml(JSON.stringify(ssrKey))})`\n      }\n    }\n  );\n}\nScrollRestoration.displayName = \"ScrollRestoration\";\nfunction getDataRouterConsoleError2(hookName) {\n  return `${hookName} must be used within a data router.  See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext3(hookName) {\n  let ctx = React10.useContext(DataRouterContext);\n  invariant(ctx, getDataRouterConsoleError2(hookName));\n  return ctx;\n}\nfunction useDataRouterState2(hookName) {\n  let state = React10.useContext(DataRouterStateContext);\n  invariant(state, getDataRouterConsoleError2(hookName));\n  return state;\n}\nfunction useLinkClickHandler(to, {\n  target,\n  replace: replaceProp,\n  mask,\n  state,\n  preventScrollReset,\n  relative,\n  viewTransition,\n  defaultShouldRevalidate,\n  useTransitions\n} = {}) {\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, { relative });\n  return React10.useCallback(\n    (event) => {\n      if (shouldProcessLinkClick(event, target)) {\n        event.preventDefault();\n        let replace2 = replaceProp !== void 0 ? replaceProp : createPath(location) === createPath(path);\n        let doNavigate = () => navigate(to, {\n          replace: replace2,\n          mask,\n          state,\n          preventScrollReset,\n          relative,\n          viewTransition,\n          defaultShouldRevalidate\n        });\n        if (useTransitions) {\n          React10.startTransition(() => doNavigate());\n        } else {\n          doNavigate();\n        }\n      }\n    },\n    [\n      location,\n      navigate,\n      path,\n      replaceProp,\n      mask,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      relative,\n      viewTransition,\n      defaultShouldRevalidate,\n      useTransitions\n    ]\n  );\n}\nfunction useSearchParams(defaultInit) {\n  warning(\n    typeof URLSearchParams !== \"undefined\",\n    `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.`\n  );\n  let defaultSearchParamsRef = React10.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React10.useRef(false);\n  let location = useLocation();\n  let searchParams = React10.useMemo(\n    () => (\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(\n        location.search,\n        hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n      )\n    ),\n    [location.search]\n  );\n  let navigate = useNavigate();\n  let setSearchParams = React10.useCallback(\n    (nextInit, navigateOptions) => {\n      const newSearchParams = createSearchParams(\n        typeof nextInit === \"function\" ? nextInit(new URLSearchParams(searchParams)) : nextInit\n      );\n      hasSetSearchParamsRef.current = true;\n      navigate(\"?\" + newSearchParams, navigateOptions);\n    },\n    [navigate, searchParams]\n  );\n  return [searchParams, setSearchParams];\n}\nvar fetcherId = 0;\nvar getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\nfunction useSubmit() {\n  let { router } = useDataRouterContext3(\"useSubmit\" /* UseSubmit */);\n  let { basename } = React10.useContext(NavigationContext);\n  let currentRouteId = useRouteId();\n  let routerFetch = router.fetch;\n  let routerNavigate = router.navigate;\n  return React10.useCallback(\n    async (target, options = {}) => {\n      let { action, method, encType, formData, body } = getFormSubmissionInfo(\n        target,\n        basename\n      );\n      if (options.navigate === false) {\n        let key = options.fetcherKey || getUniqueFetcherId();\n        await routerFetch(key, currentRouteId, options.action || action, {\n          defaultShouldRevalidate: options.defaultShouldRevalidate,\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        await routerNavigate(options.action || action, {\n          defaultShouldRevalidate: options.defaultShouldRevalidate,\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    },\n    [routerFetch, routerNavigate, basename, currentRouteId]\n  );\n}\nfunction useFormAction(action, { relative } = {}) {\n  let { basename } = React10.useContext(NavigationContext);\n  let routeContext = React10.useContext(RouteContext);\n  invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n  let [match] = routeContext.matches.slice(-1);\n  let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n  let location = useLocation();\n  if (action == null) {\n    path.search = location.search;\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 (basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\nfunction useFetcher({\n  key\n} = {}) {\n  let { router } = useDataRouterContext3(\"useFetcher\" /* UseFetcher */);\n  let state = useDataRouterState2(\"useFetcher\" /* UseFetcher */);\n  let fetcherData = React10.useContext(FetchersContext);\n  let route = React10.useContext(RouteContext);\n  let routeId = route.matches[route.matches.length - 1]?.route.id;\n  invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n  invariant(route, `useFetcher must be used inside a RouteContext`);\n  invariant(\n    routeId != null,\n    `useFetcher can only be used on routes that contain a unique \"id\"`\n  );\n  let defaultKey = React10.useId();\n  let [fetcherKey, setFetcherKey] = React10.useState(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  }\n  let { deleteFetcher, getFetcher, resetFetcher, fetch: routerFetch } = router;\n  React10.useEffect(() => {\n    getFetcher(fetcherKey);\n    return () => deleteFetcher(fetcherKey);\n  }, [deleteFetcher, getFetcher, fetcherKey]);\n  let load = React10.useCallback(\n    async (href, opts) => {\n      invariant(routeId, \"No routeId available for fetcher.load()\");\n      await routerFetch(fetcherKey, routeId, href, opts);\n    },\n    [fetcherKey, routeId, routerFetch]\n  );\n  let submitImpl = useSubmit();\n  let submit = React10.useCallback(\n    async (target, opts) => {\n      await submitImpl(target, {\n        ...opts,\n        navigate: false,\n        fetcherKey\n      });\n    },\n    [fetcherKey, submitImpl]\n  );\n  let reset = React10.useCallback(\n    (opts) => resetFetcher(fetcherKey, opts),\n    [resetFetcher, fetcherKey]\n  );\n  let FetcherForm = React10.useMemo(() => {\n    let FetcherForm2 = React10.forwardRef(\n      (props, ref) => {\n        return /* @__PURE__ */ React10.createElement(Form, { ...props, navigate: false, fetcherKey, ref });\n      }\n    );\n    FetcherForm2.displayName = \"fetcher.Form\";\n    return FetcherForm2;\n  }, [fetcherKey]);\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data2 = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React10.useMemo(\n    () => ({\n      Form: FetcherForm,\n      submit,\n      load,\n      reset,\n      ...fetcher,\n      data: data2\n    }),\n    [FetcherForm, submit, load, reset, fetcher, data2]\n  );\n  return fetcherWithComponents;\n}\nfunction useFetchers() {\n  let state = useDataRouterState2(\"useFetchers\" /* UseFetchers */);\n  return React10.useMemo(\n    () => Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n      ...fetcher,\n      key\n    })),\n    [state.fetchers]\n  );\n}\nvar SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nvar savedScrollPositions = {};\nfunction getScrollRestorationKey(location, matches, basename, getKey) {\n  let key = null;\n  if (getKey) {\n    if (basename !== \"/\") {\n      key = getKey(\n        {\n          ...location,\n          pathname: stripBasename(location.pathname, basename) || location.pathname\n        },\n        matches\n      );\n    } else {\n      key = getKey(location, matches);\n    }\n  }\n  if (key == null) {\n    key = location.key;\n  }\n  return key;\n}\nfunction useScrollRestoration({\n  getKey,\n  storageKey\n} = {}) {\n  let { router } = useDataRouterContext3(\"useScrollRestoration\" /* UseScrollRestoration */);\n  let { restoreScrollPosition, preventScrollReset } = useDataRouterState2(\n    \"useScrollRestoration\" /* UseScrollRestoration */\n  );\n  let { basename } = React10.useContext(NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n  React10.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n  usePageHide(\n    React10.useCallback(() => {\n      if (navigation.state === \"idle\") {\n        let key = getScrollRestorationKey(location, matches, basename, getKey);\n        savedScrollPositions[key] = window.scrollY;\n      }\n      try {\n        sessionStorage.setItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n          JSON.stringify(savedScrollPositions)\n        );\n      } catch (error) {\n        warning(\n          false,\n          `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n        );\n      }\n      window.history.scrollRestoration = \"auto\";\n    }, [navigation.state, getKey, basename, location, matches, storageKey])\n  );\n  if (typeof document !== \"undefined\") {\n    React10.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(\n          storageKey || SCROLL_RESTORATION_STORAGE_KEY\n        );\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n      }\n    }, [storageKey]);\n    React10.useLayoutEffect(() => {\n      let disableScrollRestoration = router?.enableScrollRestoration(\n        savedScrollPositions,\n        () => window.scrollY,\n        getKey ? (location2, matches2) => getScrollRestorationKey(location2, matches2, basename, getKey) : void 0\n      );\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n    React10.useLayoutEffect(() => {\n      if (restoreScrollPosition === false) {\n        return;\n      }\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n      try {\n        if (location.hash) {\n          let el = document.getElementById(\n            decodeURIComponent(location.hash.slice(1))\n          );\n          if (el) {\n            el.scrollIntoView();\n            return;\n          }\n        }\n      } catch {\n        warning(\n          false,\n          `\"${location.hash.slice(\n            1\n          )}\" is not a decodable element ID. The view will not scroll to it.`\n        );\n      }\n      if (preventScrollReset === true) {\n        return;\n      }\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\nfunction useBeforeUnload(callback, options) {\n  let { capture } = options || {};\n  React10.useEffect(() => {\n    let opts = capture != null ? { capture } : void 0;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\nfunction usePageHide(callback, options) {\n  let { capture } = options || {};\n  React10.useEffect(() => {\n    let opts = capture != null ? { capture } : void 0;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\nfunction usePrompt({\n  when,\n  message\n}) {\n  let blocker = useBlocker(when);\n  React10.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n  React10.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\nfunction useViewTransitionState(to, { relative } = {}) {\n  let vtContext = React10.useContext(ViewTransitionContext);\n  invariant(\n    vtContext != null,\n    \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  Did you accidentally import `RouterProvider` from `react-router`?\"\n  );\n  let { basename } = useDataRouterContext3(\n    \"useViewTransitionState\" /* useViewTransitionState */\n  );\n  let path = useResolvedPath(to, { relative });\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  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n\n// lib/dom/server.tsx\nimport * as React11 from \"react\";\nfunction StaticRouter({\n  basename,\n  children,\n  location: locationProp = \"/\"\n}) {\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let action = \"POP\" /* Pop */;\n  let location = {\n    pathname: locationProp.pathname || \"/\",\n    search: locationProp.search || \"\",\n    hash: locationProp.hash || \"\",\n    state: locationProp.state != null ? locationProp.state : null,\n    key: locationProp.key || \"default\",\n    mask: void 0\n  };\n  let staticNavigator = getStatelessNavigator();\n  return /* @__PURE__ */ React11.createElement(\n    Router,\n    {\n      basename,\n      children,\n      location,\n      navigationType: action,\n      navigator: staticNavigator,\n      static: true,\n      useTransitions: false\n    }\n  );\n}\nfunction StaticRouterProvider({\n  context,\n  router,\n  hydrate: hydrate2 = true,\n  nonce\n}) {\n  invariant(\n    router && context,\n    \"You must provide `router` and `context` to <StaticRouterProvider>\"\n  );\n  let dataRouterContext = {\n    router,\n    navigator: getStatelessNavigator(),\n    static: true,\n    staticContext: context,\n    basename: context.basename || \"/\"\n  };\n  let fetchersContext = /* @__PURE__ */ new Map();\n  let hydrateScript = \"\";\n  if (hydrate2 !== false) {\n    let data2 = {\n      loaderData: context.loaderData,\n      actionData: context.actionData,\n      errors: serializeErrors(context.errors)\n    };\n    let json = escapeHtml(JSON.stringify(JSON.stringify(data2)));\n    hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;\n  }\n  let { state } = dataRouterContext.router;\n  return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React11.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React11.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React11.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React11.createElement(\n    Router,\n    {\n      basename: dataRouterContext.basename,\n      location: state.location,\n      navigationType: state.historyAction,\n      navigator: dataRouterContext.navigator,\n      static: dataRouterContext.static,\n      useTransitions: false\n    },\n    /* @__PURE__ */ React11.createElement(\n      DataRoutes2,\n      {\n        manifest: router.manifest,\n        routes: router.routes,\n        future: router.future,\n        state,\n        isStatic: true\n      }\n    )\n  ))))), hydrateScript ? /* @__PURE__ */ React11.createElement(\n    \"script\",\n    {\n      suppressHydrationWarning: true,\n      nonce,\n      dangerouslySetInnerHTML: { __html: hydrateScript }\n    }\n  ) : null);\n}\nfunction serializeErrors(errors) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    if (isRouteErrorResponse(val)) {\n      serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n    } else if (val instanceof Error) {\n      serialized[key] = {\n        message: val.message,\n        __type: \"Error\",\n        // If this is a subclass (i.e., ReferenceError), send up the type so we\n        // can re-create the same type during hydration.\n        ...val.name !== \"Error\" ? {\n          __subType: val.name\n        } : {}\n      };\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nfunction getStatelessNavigator() {\n  return {\n    createHref,\n    encodeLocation,\n    push(to) {\n      throw new Error(\n        `You cannot use navigator.push() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)})\\` somewhere in your app.`\n      );\n    },\n    replace(to) {\n      throw new Error(\n        `You cannot use navigator.replace() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)}, { replace: true })\\` somewhere in your app.`\n      );\n    },\n    go(delta) {\n      throw new Error(\n        `You cannot use navigator.go() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${delta})\\` somewhere in your app.`\n      );\n    },\n    back() {\n      throw new Error(\n        `You cannot use navigator.back() on the server because it is a stateless environment.`\n      );\n    },\n    forward() {\n      throw new Error(\n        `You cannot use navigator.forward() on the server because it is a stateless environment.`\n      );\n    }\n  };\n}\nfunction createStaticHandler2(routes, opts) {\n  return createStaticHandler(routes, {\n    ...opts,\n    mapRouteProperties\n  });\n}\nfunction createStaticRouter(routes, context, opts = {}) {\n  let manifest = {};\n  let dataRoutes = convertRoutesToDataRoutes(\n    routes,\n    mapRouteProperties,\n    void 0,\n    manifest\n  );\n  let matches = context.matches.map((match) => {\n    let route = manifest[match.route.id] || match.route;\n    return {\n      ...match,\n      route\n    };\n  });\n  let msg = (method) => `You cannot use router.${method}() on the server because it is a stateless environment`;\n  return {\n    get basename() {\n      return context.basename;\n    },\n    get future() {\n      return {\n        v8_middleware: false,\n        v8_passThroughRequests: false,\n        ...opts?.future\n      };\n    },\n    get state() {\n      return {\n        historyAction: \"POP\" /* Pop */,\n        location: context.location,\n        matches,\n        loaderData: context.loaderData,\n        actionData: context.actionData,\n        errors: context.errors,\n        initialized: true,\n        renderFallback: false,\n        navigation: IDLE_NAVIGATION,\n        restoreScrollPosition: null,\n        preventScrollReset: false,\n        revalidation: \"idle\",\n        fetchers: /* @__PURE__ */ new Map(),\n        blockers: /* @__PURE__ */ new Map()\n      };\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get branches() {\n      return opts.branches;\n    },\n    get manifest() {\n      return manifest;\n    },\n    get window() {\n      return void 0;\n    },\n    initialize() {\n      throw msg(\"initialize\");\n    },\n    subscribe() {\n      throw msg(\"subscribe\");\n    },\n    enableScrollRestoration() {\n      throw msg(\"enableScrollRestoration\");\n    },\n    navigate() {\n      throw msg(\"navigate\");\n    },\n    fetch() {\n      throw msg(\"fetch\");\n    },\n    revalidate() {\n      throw msg(\"revalidate\");\n    },\n    createHref,\n    encodeLocation,\n    getFetcher() {\n      return IDLE_FETCHER;\n    },\n    deleteFetcher() {\n      throw msg(\"deleteFetcher\");\n    },\n    resetFetcher() {\n      throw msg(\"resetFetcher\");\n    },\n    dispose() {\n      throw msg(\"dispose\");\n    },\n    getBlocker() {\n      return IDLE_BLOCKER;\n    },\n    deleteBlocker() {\n      throw msg(\"deleteBlocker\");\n    },\n    patchRoutes() {\n      throw msg(\"patchRoutes\");\n    },\n    _internalFetchControllers: /* @__PURE__ */ new Map(),\n    _internalSetRoutes() {\n      throw msg(\"_internalSetRoutes\");\n    },\n    _internalSetStateDoNotUseOrYouWillBreakYourApp() {\n      throw msg(\"_internalSetStateDoNotUseOrYouWillBreakYourApp\");\n    }\n  };\n}\nfunction createHref(to) {\n  return typeof to === \"string\" ? to : createPath(to);\n}\nfunction encodeLocation(to) {\n  let href = typeof to === \"string\" ? to : createPath(to);\n  href = href.replace(/ $/, \"%20\");\n  let encoded = ABSOLUTE_URL_REGEX3.test(href) ? new URL(href) : new URL(href, \"http://localhost\");\n  return {\n    pathname: encoded.pathname,\n    search: encoded.search,\n    hash: encoded.hash\n  };\n}\nvar ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nexport {\n  Action,\n  createMemoryHistory,\n  createBrowserHistory,\n  createHashHistory,\n  invariant,\n  createPath,\n  parsePath,\n  createContext,\n  RouterContextProvider,\n  convertRoutesToDataRoutes,\n  matchRoutes,\n  matchRoutesImpl,\n  generatePath,\n  matchPath,\n  stripBasename,\n  resolvePath,\n  data,\n  redirect,\n  redirectDocument,\n  replace,\n  ErrorResponseImpl,\n  isRouteErrorResponse,\n  instrumentHandler,\n  IDLE_NAVIGATION,\n  IDLE_FETCHER,\n  IDLE_BLOCKER,\n  createRouter,\n  createStaticHandler,\n  getStaticContextFromError,\n  invalidProtocols,\n  isDataWithResponseInit,\n  isResponse,\n  isRedirectStatusCode,\n  isRedirectResponse,\n  isMutationMethod,\n  DataRouterContext,\n  DataRouterStateContext,\n  RSCRouterContext,\n  ViewTransitionContext,\n  FetchersContext,\n  AwaitContextProvider,\n  NavigationContext,\n  LocationContext,\n  RouteContext,\n  ENABLE_DEV_WARNINGS,\n  decodeRedirectErrorDigest,\n  decodeRouteErrorResponseDigest,\n  useHref,\n  useInRouterContext,\n  useLocation,\n  useNavigationType,\n  useMatch,\n  useNavigate,\n  useOutletContext,\n  useOutlet,\n  useParams,\n  useResolvedPath,\n  useRoutes,\n  useNavigation,\n  useRevalidator,\n  useMatches,\n  useLoaderData,\n  useRouteLoaderData,\n  useActionData,\n  useRouteError,\n  useAsyncValue,\n  useAsyncError,\n  useBlocker,\n  useRoute,\n  useRouterState,\n  warnOnce,\n  mapRouteProperties,\n  hydrationRouteProperties,\n  createMemoryRouter,\n  RouterProvider,\n  MemoryRouter,\n  Navigate,\n  Outlet,\n  Route,\n  Router,\n  Routes,\n  Await,\n  createRoutesFromChildren,\n  createRoutesFromElements,\n  renderMatches,\n  WithComponentProps,\n  withComponentProps,\n  WithHydrateFallbackProps,\n  withHydrateFallbackProps,\n  WithErrorBoundaryProps,\n  withErrorBoundaryProps,\n  createSearchParams,\n  escapeHtml,\n  encode,\n  createRequestInit,\n  SingleFetchRedirectSymbol,\n  SINGLE_FETCH_REDIRECT_STATUS,\n  NO_BODY_STATUS_CODES,\n  StreamTransfer,\n  getTurboStreamSingleFetchDataStrategy,\n  getSingleFetchDataStrategyImpl,\n  stripIndexParam,\n  singleFetchUrl,\n  decodeViaTurboStream,\n  RemixErrorBoundary,\n  createServerRoutes,\n  createClientRoutesWithHMRRevalidationOptOut,\n  noActionDefinedError,\n  createClientRoutes,\n  shouldHydrateRouteLoader,\n  URL_LIMIT,\n  getPatchRoutesOnNavigationFunction,\n  useFogOFWarDiscovery,\n  getManifestPath,\n  FrameworkContext,\n  CRITICAL_CSS_DATA_ATTRIBUTE,\n  Links,\n  PrefetchPageLinks,\n  Meta,\n  setIsHydrated,\n  Scripts,\n  createBrowserRouter,\n  createHashRouter,\n  BrowserRouter,\n  HashRouter,\n  HistoryRouter,\n  Link,\n  NavLink,\n  Form,\n  ScrollRestoration,\n  useLinkClickHandler,\n  useSearchParams,\n  useSubmit,\n  useFormAction,\n  useFetcher,\n  useFetchers,\n  useScrollRestoration,\n  useBeforeUnload,\n  usePrompt,\n  useViewTransitionState,\n  StaticRouter,\n  StaticRouterProvider,\n  createStaticHandler2,\n  createStaticRouter\n};\n","import React from 'react'\n\nimport { ModeratorStatus } from '../ModeratorStatus'\nimport { Pill } from '../Pill'\n\nexport const CardStatus = props => {\n  const getClass = (pill) => {\n    const pillClass = 'pill'\n    const colourClass = 'pill--' + pill[0].toLowerCase()\n    return pillClass + ' ' + colourClass\n  }\n\n  // only return icon for pointLabels\n  const hasPointLabelIcon = (type) => {\n    if (type !== 'point_label') {\n      return\n    }\n    return <span className=\"fas fa-map-marker-alt\" aria-hidden=\"true\" />\n  }\n\n  return (\n    <div className=\"card__status status\">\n      <ul className=\"pill__list\" aria-label={props.pillHeader}>\n        {props.pills.map((pill, idx) => {\n          // Hide the label if it's 'moderator_status'\n          if (pill[0] === 'moderator_status') {\n            return null\n          }\n          return (\n            <Pill\n              key={'pill_' + idx}\n              pillClass={getClass(pill)}\n            >\n              {hasPointLabelIcon(pill[0])}\n              {pill[1]}\n            </Pill>\n          )\n        })}\n        {props.numOfMorePills > 0 &&\n          <li className=\"pill pill--label\">\n            {'+' + props.numOfMorePills}\n          </li>}\n        {props.proposal.is_archived && (\n          <Pill pillClass=\"pill pill--archived\">Archived</Pill>\n        )}\n      </ul>\n      <ModeratorStatus\n        modStatus={props.proposal.moderator_status}\n        modStatusDisplay={props.proposal.get_moderator_status_display}\n      />\n    </div>\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { ControlBarDropdown, ControlBarSearch } from 'adhocracy4'\nimport { ControlBarListMapSwitch } from './ControlBarListMapSwitch'\nimport { ToggleSwitch } from './ToggleSwitch'\nimport django from 'django'\nimport { useSearchParams } from 'react-router'\nimport { ControlBarFilterPills } from './ControlBarFilterPills'\nimport { useFetchedItems } from './contexts/FetchItemsProvider'\nimport Spinner from './Spinner'\n\nconst translated = {\n  reset: django.gettext('Reset'),\n  showFilters: django.gettext('Show more'),\n  hideFilters: django.gettext('Show less'),\n  filters: django.gettext('Filters'),\n  filter: django.gettext('Filter'),\n  nav: django.gettext('Search, filter and sort the ideas list'),\n  showMap: django.gettext('Show map')\n}\n\nconst getResultCountText = (count) => {\n  const foundProposalsText = django.ngettext(\n    '1 proposal found.',\n    '%s proposals found.',\n    count\n  )\n  return django.interpolate(foundProposalsText, [count])\n}\n\nexport const ControlBar = ({ mapListViewMode, showViewModeSwitch = true, desktopViewMode, handleToggle }) => {\n  // grab the results for the list from the useFetchedItems hook\n  const { results: { list }, isMapAndList, viewMode } = useFetchedItems()\n  const [expandFilters, setExpandFilters] = useState(true)\n  const [queryParams, setQueryParams] = useSearchParams()\n  const term = queryParams.get('search') || ''\n\n  const [filters, setFilters] = useState([])\n  const appliedFilters = filters\n    .filter(f => f.type !== 'ordering' && queryParams.has(f.type))\n    .map(f => {\n      const value = queryParams.get(f.type) || f.value\n      if (!value) return null\n\n      const matchedChoice = f.choices?.find(choice => choice[0] === value)\n\n      return matchedChoice\n        ? { label: matchedChoice[1], type: f.type, value: value.toLowerCase() }\n        : null\n    })\n    .filter(Boolean)\n    .concat(term ? [{ type: 'search', label: term, value: term }] : [])\n  const nonOrderingFilters = filters.filter((f) => f.type !== 'ordering')\n\n  useEffect(() => {\n    // initialize filters object\n    if (list?.filters) {\n      const updatedFilters = Object.keys(list.filters)\n        .map((type) => ({ ...list.filters[type], type, value: queryParams.get(type) }))\n\n      setFilters(updatedFilters)\n    }\n  }, [list?.filters])\n\n  const applyQuery = (type, value) => {\n    if (value || type === 'is_archived') {\n      queryParams.set(type, value)\n    } else {\n      queryParams.delete(type)\n    }\n    queryParams.delete('page')\n    setQueryParams(queryParams)\n  }\n\n  const handleSearch = (value) => {\n    applyQuery('search', value)\n  }\n\n  const handleFilterChange = (type, choice) => {\n    setFilters(filters.map(f => f.type === type ? { ...f, value: choice } : f))\n\n    if (type === 'ordering') {\n      applyQuery(type, choice)\n    }\n  }\n\n  const applyAllFilters = () => {\n    filters.forEach(f => {\n      if (f.value || f.type === 'is_archived') {\n        queryParams.set(f.type, f.value)\n      } else {\n        queryParams.delete(f.type)\n      }\n    })\n\n    queryParams.delete('page')\n    setQueryParams(queryParams)\n  }\n\n  const clearFilters = () => {\n    setQueryParams('')\n    setFilters(filters.map(f => ({ ...f, value: '' })))\n  }\n\n  if (!list) {\n    return <Spinner />\n  }\n\n  return (\n    <div\n      className=\"container u-spacer-bottom u-spacer-top-double\"\n      aria-label={translated.nav}\n    >\n      <div className=\"modul-facetingform js-facetingform\">\n        <div className=\"facetingform__container\">\n          <div className=\"container__body\">\n            <div className=\"facets\">\n              <fieldset className=\"facet\">\n                <div className=\"facet__body\">\n                  <div className=\"flexgrid grid--3\">\n                    <div className=\"span2\">\n                      <ControlBarSearch\n                        onSearch={(value) => handleSearch(value)}\n                        placeholder={translated.searchPlaceholder}\n                        term={term}\n                      />\n                    </div>\n                    <div className=\"span1\">\n                      {viewMode === 'list' && list.filters?.ordering && (\n                        <ControlBarDropdown\n                          key=\"ordering_dropdown\"\n                          filter={list.filters.ordering}\n                          current={queryParams.get('ordering')}\n                          filterId=\"id_ordering\"\n                          onSelectFilter={(choice) => handleFilterChange('ordering', choice[0])}\n                        />\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </fieldset>\n              {nonOrderingFilters.length > 0 && (\n                <fieldset className=\"facet\">\n                  <legend className=\"facet__head\">\n                    <span className=\"facet-title\">{translated.filters}</span>\n                  </legend>\n                  <div className=\"facet__body\">\n                    <div className=\"flexgrid grid--3\" id=\"filters\">{\n                      nonOrderingFilters\n                        .slice(0, expandFilters ? nonOrderingFilters.length : 3).map((filter) => (\n                          <ControlBarDropdown\n                            key={filter.type}\n                            filter={filter}\n                            current={filter.value}\n                            filterId={'id_' + filter.type}\n                            onSelectFilter={(choice) => handleFilterChange(filter.type, choice[0])}\n                          />\n                        ))\n                    }\n                    </div>\n                    {nonOrderingFilters.length > 3 && (\n                      <button\n                        onClick={() => setExpandFilters(!expandFilters)}\n                        className=\"control-bar__filter-btn\"\n                        aria-controls=\"filters\"\n                        aria-expanded={expandFilters}\n                      >\n                        <span className={'fa fa-chevron-' + (expandFilters ? 'up' : 'down')} aria-hidden=\"true\" />&nbsp;\n                        {expandFilters ? translated.hideFilters : translated.showFilters}\n                      </button>\n                    )}\n                  </div>\n                </fieldset>\n              )}\n              <div className=\"form-actions\">\n                <button className=\"link form-actions__left\" onClick={clearFilters}>{translated.reset}</button>\n                <button className=\"button button--light form-actions__right control-bar__action-btn\" onClick={applyAllFilters}>{translated.filter}</button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div className=\"flexgrid grid grid--2 my-1 control-bar__bottom\">\n        <div>\n          {list.count >= 0 && (\n            <div className=\"text--strong\">\n              {getResultCountText(list.count)}\n            </div>\n          )}\n          <ControlBarFilterPills\n            filters={appliedFilters}\n            onRemove={(type) => {\n              handleFilterChange(type, '')\n              applyQuery(type, '')\n            }}\n          />\n        </div>\n        {isMapAndList &&\n          <div className=\"span6 align--right\">\n            {showViewModeSwitch\n              ? (\n                <ControlBarListMapSwitch mapListViewMode={mapListViewMode} query={queryParams} />\n                )\n              : (\n                <ToggleSwitch\n                  uniqueId=\"map-switch\"\n                  switchStr={translated.showMap}\n                  defaultChecked\n                  isChecked={desktopViewMode === 'map'}\n                  toggleSwitch={handleToggle}\n                />\n                )}\n          </div>}\n      </div>\n    </div>\n  )\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","import React from 'react'\nimport django from 'django'\n\nexport const CardStats = (props) => {\n  const { permissions } = props\n\n  const positiveRatingsStr = django.ngettext('Like', 'Likes', props.positiveCount)\n  const negativeRatingsStr = django.ngettext('Dislike', 'Dislikes', props.negativeCount)\n  const supportStr = django.ngettext('Supporter', 'Supporters', props.positiveCount)\n  const commentsStr = django.npgettext('card', 'Comment', 'Comments', props.commentCount)\n  const votesStr = django.ngettext('Vote', 'Votes', props.voteCount)\n\n  return (\n    <dl className=\"card__stats stats-dl\">\n      {/* ratings visible to admins in 1 and 2 phase budgeting due to `has_perm`  */}\n      {permissions.view_rate_count && (\n        <>\n          <div className=\"stat-items card__stat \">\n            <dt>{positiveRatingsStr}</dt>\n            <dd>{props.positiveCount}</dd>\n          </div>\n          <div className=\"card__stat stat-items\">\n            <dt>{negativeRatingsStr}</dt>\n            <dd>{props.negativeCount}</dd>\n          </div>\n        </>\n      )}\n\n      {permissions.view_support_count && (\n        <div className=\"stat-items card__stat \">\n          <dt>{supportStr}</dt>\n          <dd>{props.positiveCount}</dd>\n        </div>\n      )}\n      {permissions.view_vote_count && (\n        <div className=\"stat-items card__stat \">\n          <dt>{votesStr}</dt>\n          <dd>{props.voteCount}</dd>\n        </div>\n      )}\n      {permissions.view_comment_count && (\n        <div className=\"stat-items card__stat \">\n          <dt>{commentsStr}</dt>\n          <dd>{props.commentCount}</dd>\n        </div>\n      )}\n    </dl>\n  )\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React, { useState } from 'react'\nimport django from 'django'\n\nimport { CardStats } from './CardStats'\n\nconst translated = {\n  detailsStr: django.gettext('Show'),\n  toStr: django.gettext('to:')\n}\n\nexport const Card = (props) => {\n  const { item, idx, permissions, children } = props\n\n  // needed as BO JS library does not work with async libraries\n  const [hover, setHover] = useState()\n\n  const handleClick = () => {\n    document.getElementById('card-link-' + idx).click()\n  }\n\n  const handleMouseEnter = () => {\n    setHover(!hover)\n  }\n\n  const handleMouseLeave = () => {\n    setHover(!hover)\n  }\n\n  return (\n    <article className={'modul-card ' + (item.is_archived ? 'card--archived' : '')}>\n      <header className=\"card__header\">\n        {/* eslint-disable-next-line */}\n        <h2\n          className=\"title title-3\" onClick={handleClick} onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n        >{item.name}\n        </h2>\n        {children ? <>{children}</> : null}\n      </header>\n      <section className=\"card__footer--light\">\n        <CardStats\n          item={item}\n          permissions={permissions}\n          positiveCount={item.positive_rating_count}\n          negativeCount={item.negative_rating_count}\n          commentCount={item.comment_count}\n          voteCount={item.vote_count}\n        />\n        <a href={item.url} id={'card-link-' + idx} className={'card__link more' + (hover ? ' card__link--hover' : '')} data-mainlink=\"true\">{translated.detailsStr}\n          <span className=\"aural\">{translated.toStr} {item.name}</span>\n        </a>\n      </section>\n      {/* <div className=\"list-item__vote\">\n        {permissions.has_voting_permission_and_valid_token && item.vote_allowed && (\n          <VoteButton\n            objectID={item.pk}\n            tokenvoteApiUrl={tokenvoteApiUrl}\n            isChecked={item.session_token_voted}\n            onVoteChange={props.onVoteChange}\n            currentPage={props.currentPage}\n            disabled={!props.votesLeft && !item.session_token_voted}\n          />\n        )}\n      </div> */}\n    </article>\n  )\n}\n","/**\n * react-router v7.15.1\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 {\n  ENABLE_DEV_WARNINGS,\n  ErrorResponseImpl,\n  FrameworkContext,\n  NO_BODY_STATUS_CODES,\n  Outlet,\n  RSCRouterContext,\n  RemixErrorBoundary,\n  RouterContextProvider,\n  RouterProvider,\n  SINGLE_FETCH_REDIRECT_STATUS,\n  SingleFetchRedirectSymbol,\n  StaticRouterProvider,\n  StreamTransfer,\n  URL_LIMIT,\n  convertRoutesToDataRoutes,\n  createMemoryRouter,\n  createServerRoutes,\n  createStaticHandler,\n  createStaticRouter,\n  decodeRedirectErrorDigest,\n  decodeRouteErrorResponseDigest,\n  decodeViaTurboStream,\n  encode,\n  escapeHtml,\n  getManifestPath,\n  getStaticContextFromError,\n  instrumentHandler,\n  isDataWithResponseInit,\n  isMutationMethod,\n  isRedirectResponse,\n  isRedirectStatusCode,\n  isResponse,\n  isRouteErrorResponse,\n  matchRoutes,\n  matchRoutesImpl,\n  redirect,\n  redirectDocument,\n  replace,\n  shouldHydrateRouteLoader,\n  stripBasename,\n  useRouteError,\n  warnOnce,\n  withComponentProps,\n  withErrorBoundaryProps,\n  withHydrateFallbackProps\n} from \"./chunk-4N6VE7H7.mjs\";\n\n// lib/dom/ssr/server.tsx\nimport * as React from \"react\";\nfunction ServerRouter({\n  context,\n  url,\n  nonce\n}) {\n  if (typeof url === \"string\") {\n    url = new URL(url);\n  }\n  let { manifest, routeModules, criticalCss, serverHandoffString } = context;\n  let routes = createServerRoutes(\n    manifest.routes,\n    routeModules,\n    context.future,\n    context.isSpaMode\n  );\n  context.staticHandlerContext.loaderData = {\n    ...context.staticHandlerContext.loaderData\n  };\n  for (let match of context.staticHandlerContext.matches) {\n    let routeId = match.route.id;\n    let route = routeModules[routeId];\n    let manifestRoute = context.manifest.routes[routeId];\n    if (route && manifestRoute && shouldHydrateRouteLoader(\n      routeId,\n      route.clientLoader,\n      manifestRoute.hasLoader,\n      context.isSpaMode\n    ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n      delete context.staticHandlerContext.loaderData[routeId];\n    }\n  }\n  let router = createStaticRouter(routes, context.staticHandlerContext, {\n    branches: context.branches\n  });\n  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n    FrameworkContext.Provider,\n    {\n      value: {\n        manifest,\n        routeModules,\n        criticalCss,\n        serverHandoffString,\n        future: context.future,\n        ssr: context.ssr,\n        isSpaMode: context.isSpaMode,\n        routeDiscovery: context.routeDiscovery,\n        serializeError: context.serializeError,\n        renderMeta: context.renderMeta\n      }\n    },\n    /* @__PURE__ */ React.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React.createElement(\n      StaticRouterProvider,\n      {\n        router,\n        context: context.staticHandlerContext,\n        hydrate: false\n      }\n    ))\n  ), context.serverHandoffStream ? /* @__PURE__ */ React.createElement(React.Suspense, null, /* @__PURE__ */ React.createElement(\n    StreamTransfer,\n    {\n      context,\n      identifier: 0,\n      reader: context.serverHandoffStream.getReader(),\n      textDecoder: new TextDecoder(),\n      nonce\n    }\n  )) : null);\n}\n\n// lib/dom/ssr/routes-test-stub.tsx\nimport * as React2 from \"react\";\nfunction createRoutesStub(routes, _context) {\n  return function RoutesTestStub({\n    initialEntries,\n    initialIndex,\n    hydrationData,\n    future\n  }) {\n    let routerRef = React2.useRef();\n    let frameworkContextRef = React2.useRef();\n    if (routerRef.current == null) {\n      frameworkContextRef.current = {\n        future: {\n          v8_passThroughRequests: future?.v8_passThroughRequests === true,\n          v8_middleware: future?.v8_middleware === true,\n          unstable_trailingSlashAwareDataRequests: future?.unstable_trailingSlashAwareDataRequests === true\n        },\n        manifest: {\n          routes: {},\n          entry: { imports: [], module: \"\" },\n          url: \"\",\n          version: \"\"\n        },\n        routeModules: {},\n        ssr: false,\n        isSpaMode: false,\n        routeDiscovery: { mode: \"lazy\", manifestPath: \"/__manifest\" }\n      };\n      let patched = processRoutes(\n        // @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`\n        // types compared to `RouteObject`\n        convertRoutesToDataRoutes(routes, (r) => r),\n        _context !== void 0 ? _context : future?.v8_middleware ? new RouterContextProvider() : {},\n        frameworkContextRef.current.manifest,\n        frameworkContextRef.current.routeModules\n      );\n      routerRef.current = createMemoryRouter(patched, {\n        initialEntries,\n        initialIndex,\n        hydrationData\n      });\n    }\n    return /* @__PURE__ */ React2.createElement(FrameworkContext.Provider, { value: frameworkContextRef.current }, /* @__PURE__ */ React2.createElement(RouterProvider, { router: routerRef.current }));\n  };\n}\nfunction processRoutes(routes, context, manifest, routeModules, parentId) {\n  return routes.map((route) => {\n    if (!route.id) {\n      throw new Error(\n        \"Expected a route.id in react-router processRoutes() function\"\n      );\n    }\n    let newRoute = {\n      id: route.id,\n      path: route.path,\n      index: route.index,\n      Component: route.Component ? withComponentProps(route.Component) : void 0,\n      HydrateFallback: route.HydrateFallback ? withHydrateFallbackProps(route.HydrateFallback) : void 0,\n      ErrorBoundary: route.ErrorBoundary ? withErrorBoundaryProps(route.ErrorBoundary) : void 0,\n      action: route.action ? (args) => route.action({ ...args, context }) : void 0,\n      loader: route.loader ? (args) => route.loader({ ...args, context }) : void 0,\n      middleware: route.middleware ? route.middleware.map(\n        (mw) => (...args) => mw(\n          { ...args[0], context },\n          args[1]\n        )\n      ) : void 0,\n      handle: route.handle,\n      shouldRevalidate: route.shouldRevalidate\n    };\n    let entryRoute = {\n      id: route.id,\n      path: route.path,\n      index: route.index,\n      parentId,\n      hasAction: route.action != null,\n      hasLoader: route.loader != null,\n      // When testing routes, you should be stubbing loader/action/middleware,\n      // not trying to re-implement the full loader/clientLoader/SSR/hydration\n      // flow. That is better tested via E2E tests.\n      hasClientAction: false,\n      hasClientLoader: false,\n      hasClientMiddleware: false,\n      hasErrorBoundary: route.ErrorBoundary != null,\n      // any need for these?\n      module: \"build/stub-path-to-module.js\",\n      clientActionModule: void 0,\n      clientLoaderModule: void 0,\n      clientMiddlewareModule: void 0,\n      hydrateFallbackModule: void 0\n    };\n    manifest.routes[newRoute.id] = entryRoute;\n    routeModules[route.id] = {\n      default: newRoute.Component || Outlet,\n      ErrorBoundary: newRoute.ErrorBoundary || void 0,\n      handle: route.handle,\n      links: route.links,\n      meta: route.meta,\n      shouldRevalidate: route.shouldRevalidate\n    };\n    if (route.children) {\n      newRoute.children = processRoutes(\n        route.children,\n        context,\n        manifest,\n        routeModules,\n        newRoute.id\n      );\n    }\n    return newRoute;\n  });\n}\n\n// lib/server-runtime/cookies.ts\nimport { parse, serialize } from \"cookie\";\n\n// lib/server-runtime/crypto.ts\nvar encoder = /* @__PURE__ */ new TextEncoder();\nvar sign = async (value, secret) => {\n  let data2 = encoder.encode(value);\n  let key = await createKey(secret, [\"sign\"]);\n  let signature = await crypto.subtle.sign(\"HMAC\", key, data2);\n  let hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n    /=+$/,\n    \"\"\n  );\n  return value + \".\" + hash;\n};\nvar unsign = async (cookie, secret) => {\n  let index = cookie.lastIndexOf(\".\");\n  let value = cookie.slice(0, index);\n  let hash = cookie.slice(index + 1);\n  let data2 = encoder.encode(value);\n  let key = await createKey(secret, [\"verify\"]);\n  try {\n    let signature = byteStringToUint8Array(atob(hash));\n    let valid = await crypto.subtle.verify(\"HMAC\", key, signature, data2);\n    return valid ? value : false;\n  } catch (e) {\n    return false;\n  }\n};\nvar createKey = async (secret, usages) => crypto.subtle.importKey(\n  \"raw\",\n  encoder.encode(secret),\n  { name: \"HMAC\", hash: \"SHA-256\" },\n  false,\n  usages\n);\nfunction byteStringToUint8Array(byteString) {\n  let array = new Uint8Array(byteString.length);\n  for (let i = 0; i < byteString.length; i++) {\n    array[i] = byteString.charCodeAt(i);\n  }\n  return array;\n}\n\n// lib/server-runtime/cookies.ts\nvar createCookie = (name, cookieOptions = {}) => {\n  let { secrets = [], ...options } = {\n    path: \"/\",\n    sameSite: \"lax\",\n    ...cookieOptions\n  };\n  warnOnceAboutExpiresCookie(name, options.expires);\n  return {\n    get name() {\n      return name;\n    },\n    get isSigned() {\n      return secrets.length > 0;\n    },\n    get expires() {\n      return typeof options.maxAge !== \"undefined\" ? new Date(Date.now() + options.maxAge * 1e3) : options.expires;\n    },\n    async parse(cookieHeader, parseOptions) {\n      if (!cookieHeader) return null;\n      let cookies = parse(cookieHeader, { ...options, ...parseOptions });\n      if (name in cookies) {\n        let value = cookies[name];\n        if (typeof value === \"string\" && value !== \"\") {\n          let decoded = await decodeCookieValue(value, secrets);\n          return decoded;\n        } else {\n          return \"\";\n        }\n      } else {\n        return null;\n      }\n    },\n    async serialize(value, serializeOptions) {\n      return serialize(\n        name,\n        value === \"\" ? \"\" : await encodeCookieValue(value, secrets),\n        {\n          ...options,\n          ...serializeOptions\n        }\n      );\n    }\n  };\n};\nvar isCookie = (object) => {\n  return object != null && typeof object.name === \"string\" && typeof object.isSigned === \"boolean\" && typeof object.parse === \"function\" && typeof object.serialize === \"function\";\n};\nasync function encodeCookieValue(value, secrets) {\n  let encoded = encodeData(value);\n  if (secrets.length > 0) {\n    encoded = await sign(encoded, secrets[0]);\n  }\n  return encoded;\n}\nasync function decodeCookieValue(value, secrets) {\n  if (secrets.length > 0) {\n    for (let secret of secrets) {\n      let unsignedValue = await unsign(value, secret);\n      if (unsignedValue !== false) {\n        return decodeData(unsignedValue);\n      }\n    }\n    return null;\n  }\n  return decodeData(value);\n}\nfunction encodeData(value) {\n  return btoa(myUnescape(encodeURIComponent(JSON.stringify(value))));\n}\nfunction decodeData(value) {\n  try {\n    return JSON.parse(decodeURIComponent(myEscape(atob(value))));\n  } catch (e) {\n    return {};\n  }\n}\nfunction myEscape(value) {\n  let str = value.toString();\n  let result = \"\";\n  let index = 0;\n  let chr, code;\n  while (index < str.length) {\n    chr = str.charAt(index++);\n    if (/[\\w*+\\-./@]/.exec(chr)) {\n      result += chr;\n    } else {\n      code = chr.charCodeAt(0);\n      if (code < 256) {\n        result += \"%\" + hex(code, 2);\n      } else {\n        result += \"%u\" + hex(code, 4).toUpperCase();\n      }\n    }\n  }\n  return result;\n}\nfunction hex(code, length) {\n  let result = code.toString(16);\n  while (result.length < length) result = \"0\" + result;\n  return result;\n}\nfunction myUnescape(value) {\n  let str = value.toString();\n  let result = \"\";\n  let index = 0;\n  let chr, part;\n  while (index < str.length) {\n    chr = str.charAt(index++);\n    if (chr === \"%\") {\n      if (str.charAt(index) === \"u\") {\n        part = str.slice(index + 1, index + 5);\n        if (/^[\\da-f]{4}$/i.exec(part)) {\n          result += String.fromCharCode(parseInt(part, 16));\n          index += 5;\n          continue;\n        }\n      } else {\n        part = str.slice(index, index + 2);\n        if (/^[\\da-f]{2}$/i.exec(part)) {\n          result += String.fromCharCode(parseInt(part, 16));\n          index += 2;\n          continue;\n        }\n      }\n    }\n    result += chr;\n  }\n  return result;\n}\nfunction warnOnceAboutExpiresCookie(name, expires) {\n  warnOnce(\n    !expires,\n    `The \"${name}\" cookie has an \"expires\" property set. This will cause the expires value to not be updated when the session is committed. Instead, you should set the expires value when serializing the cookie. You can use \\`commitSession(session, { expires })\\` if using a session storage object, or \\`cookie.serialize(\"value\", { expires })\\` if you're using the cookie directly.`\n  );\n}\n\n// lib/server-runtime/entry.ts\nfunction createEntryRouteModules(manifest) {\n  return Object.keys(manifest).reduce((memo, routeId) => {\n    let route = manifest[routeId];\n    if (route) {\n      memo[routeId] = route.module;\n    }\n    return memo;\n  }, {});\n}\n\n// lib/server-runtime/mode.ts\nvar ServerMode = /* @__PURE__ */ ((ServerMode2) => {\n  ServerMode2[\"Development\"] = \"development\";\n  ServerMode2[\"Production\"] = \"production\";\n  ServerMode2[\"Test\"] = \"test\";\n  return ServerMode2;\n})(ServerMode || {});\nfunction isServerMode(value) {\n  return value === \"development\" /* Development */ || value === \"production\" /* Production */ || value === \"test\" /* Test */;\n}\n\n// lib/server-runtime/errors.ts\nfunction sanitizeError(error, serverMode) {\n  if (error instanceof Error && serverMode !== \"development\" /* Development */) {\n    let sanitized = new Error(\"Unexpected Server Error\");\n    sanitized.stack = void 0;\n    return sanitized;\n  }\n  return error;\n}\nfunction sanitizeErrors(errors, serverMode) {\n  return Object.entries(errors).reduce((acc, [routeId, error]) => {\n    return Object.assign(acc, { [routeId]: sanitizeError(error, serverMode) });\n  }, {});\n}\nfunction serializeError(error, serverMode) {\n  let sanitized = sanitizeError(error, serverMode);\n  return {\n    message: sanitized.message,\n    stack: sanitized.stack\n  };\n}\nfunction serializeErrors(errors, serverMode) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    if (isRouteErrorResponse(val)) {\n      serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n    } else if (val instanceof Error) {\n      let sanitized = sanitizeError(val, serverMode);\n      serialized[key] = {\n        message: sanitized.message,\n        stack: sanitized.stack,\n        __type: \"Error\",\n        // If this is a subclass (i.e., ReferenceError), send up the type so we\n        // can re-create the same type during hydration.  This will only apply\n        // in dev mode since all production errors are sanitized to normal\n        // Error instances\n        ...sanitized.name !== \"Error\" ? {\n          __subType: sanitized.name\n        } : {}\n      };\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\n\n// lib/server-runtime/invariant.ts\nfunction invariant(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    console.error(\n      \"The following error is a bug in React Router; please open an issue! https://github.com/remix-run/react-router/issues/new/choose\"\n    );\n    throw new Error(message);\n  }\n}\n\n// lib/server-runtime/routeMatching.ts\nfunction matchServerRoutes(manifest, dataRoutes, branches, pathname, basename) {\n  let matches = matchRoutesImpl(\n    dataRoutes,\n    pathname,\n    basename ?? \"/\",\n    false,\n    branches\n  );\n  if (!matches) return null;\n  return matches.map((match) => {\n    let route = manifest[match.route.id];\n    invariant(\n      route,\n      `Route with id \"${match.route.id}\" not found in manifest.`\n    );\n    return {\n      params: match.params,\n      pathname: match.pathname,\n      route\n    };\n  });\n}\n\n// lib/server-runtime/data.ts\nasync function callRouteHandler(handler, args, future) {\n  let result = await handler({\n    request: future.v8_passThroughRequests ? args.request : stripRoutesParam(stripIndexParam(args.request)),\n    url: args.url,\n    params: args.params,\n    context: args.context,\n    pattern: args.pattern\n  });\n  if (isDataWithResponseInit(result) && result.init && result.init.status && isRedirectStatusCode(result.init.status)) {\n    throw new Response(null, result.init);\n  }\n  return result;\n}\nfunction stripIndexParam(request) {\n  let url = new URL(request.url);\n  let indexValues = url.searchParams.getAll(\"index\");\n  url.searchParams.delete(\"index\");\n  let indexValuesToKeep = [];\n  for (let indexValue of indexValues) {\n    if (indexValue) {\n      indexValuesToKeep.push(indexValue);\n    }\n  }\n  for (let toKeep of indexValuesToKeep) {\n    url.searchParams.append(\"index\", toKeep);\n  }\n  let init = {\n    method: request.method,\n    body: request.body,\n    headers: request.headers,\n    signal: request.signal\n  };\n  if (init.body) {\n    init.duplex = \"half\";\n  }\n  return new Request(url.href, init);\n}\nfunction stripRoutesParam(request) {\n  let url = new URL(request.url);\n  url.searchParams.delete(\"_routes\");\n  let init = {\n    method: request.method,\n    body: request.body,\n    headers: request.headers,\n    signal: request.signal\n  };\n  if (init.body) {\n    init.duplex = \"half\";\n  }\n  return new Request(url.href, init);\n}\n\n// lib/server-runtime/dev.ts\nvar globalDevServerHooksKey = \"__reactRouterDevServerHooks\";\nfunction setDevServerHooks(devServerHooks) {\n  globalThis[globalDevServerHooksKey] = devServerHooks;\n}\nfunction getDevServerHooks() {\n  return globalThis[globalDevServerHooksKey];\n}\nfunction getBuildTimeHeader(request, headerName) {\n  if (typeof process !== \"undefined\") {\n    try {\n      if (process.env.hasOwnProperty(\"IS_RR_BUILD_REQUEST\") && process.env.IS_RR_BUILD_REQUEST === \"yes\") {\n        return request.headers.get(headerName);\n      }\n    } catch (e) {\n    }\n  }\n  return null;\n}\n\n// lib/server-runtime/routes.ts\nfunction groupRoutesByParentId(manifest) {\n  let routes = {};\n  Object.values(manifest).forEach((route) => {\n    if (route) {\n      let parentId = route.parentId || \"\";\n      if (!routes[parentId]) {\n        routes[parentId] = [];\n      }\n      routes[parentId].push(route);\n    }\n  });\n  return routes;\n}\nfunction createStaticHandlerDataRoutes(manifest, future, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest)) {\n  return (routesByParentId[parentId] || []).map((route) => {\n    let commonRoute = {\n      // Always include root due to default boundaries\n      hasErrorBoundary: route.id === \"root\" || route.module.ErrorBoundary != null,\n      id: route.id,\n      path: route.path,\n      middleware: route.module.middleware,\n      // Need to use RR's version in the param typed here to permit the optional\n      // context even though we know it'll always be provided in remix\n      loader: route.module.loader ? async (args) => {\n        let preRenderedData = getBuildTimeHeader(\n          args.request,\n          \"X-React-Router-Prerender-Data\"\n        );\n        if (preRenderedData != null) {\n          let encoded = preRenderedData ? decodeURI(preRenderedData) : preRenderedData;\n          invariant(encoded, \"Missing prerendered data for route\");\n          let uint8array = new TextEncoder().encode(encoded);\n          let stream = new ReadableStream({\n            start(controller) {\n              controller.enqueue(uint8array);\n              controller.close();\n            }\n          });\n          let decoded = await decodeViaTurboStream(stream, global);\n          let data2 = decoded.value;\n          if (data2 && SingleFetchRedirectSymbol in data2) {\n            let result = data2[SingleFetchRedirectSymbol];\n            let init = { status: result.status };\n            if (result.reload) {\n              throw redirectDocument(result.redirect, init);\n            } else if (result.replace) {\n              throw replace(result.redirect, init);\n            } else {\n              throw redirect(result.redirect, init);\n            }\n          } else {\n            invariant(\n              data2 && route.id in data2,\n              \"Unable to decode prerendered data\"\n            );\n            let result = data2[route.id];\n            invariant(\n              \"data\" in result,\n              \"Unable to process prerendered data\"\n            );\n            return result.data;\n          }\n        }\n        let val = await callRouteHandler(\n          route.module.loader,\n          args,\n          future\n        );\n        return val;\n      } : void 0,\n      action: route.module.action ? (args) => callRouteHandler(route.module.action, args, future) : void 0,\n      handle: route.module.handle\n    };\n    return route.index ? {\n      index: true,\n      ...commonRoute\n    } : {\n      caseSensitive: route.caseSensitive,\n      children: createStaticHandlerDataRoutes(\n        manifest,\n        future,\n        route.id,\n        routesByParentId\n      ),\n      ...commonRoute\n    };\n  });\n}\n\n// lib/server-runtime/serverHandoff.ts\nfunction createServerHandoffString(serverHandoff) {\n  return escapeHtml(JSON.stringify(serverHandoff));\n}\n\n// lib/server-runtime/headers.ts\nimport { splitCookiesString } from \"set-cookie-parser\";\nfunction getDocumentHeaders(context, build) {\n  return getDocumentHeadersImpl(context, (m) => {\n    let route = build.routes[m.route.id];\n    invariant(route, `Route with id \"${m.route.id}\" not found in build`);\n    return route.module.headers;\n  });\n}\nfunction getDocumentHeadersImpl(context, getRouteHeadersFn, _defaultHeaders) {\n  let boundaryIdx = context.errors ? context.matches.findIndex((m) => context.errors[m.route.id]) : -1;\n  let matches = boundaryIdx >= 0 ? context.matches.slice(0, boundaryIdx + 1) : context.matches;\n  let errorHeaders;\n  if (boundaryIdx >= 0) {\n    let { actionHeaders, actionData, loaderHeaders, loaderData } = context;\n    context.matches.slice(boundaryIdx).some((match) => {\n      let id = match.route.id;\n      if (actionHeaders[id] && (!actionData || !actionData.hasOwnProperty(id))) {\n        errorHeaders = actionHeaders[id];\n      } else if (loaderHeaders[id] && !loaderData.hasOwnProperty(id)) {\n        errorHeaders = loaderHeaders[id];\n      }\n      return errorHeaders != null;\n    });\n  }\n  const defaultHeaders = new Headers(_defaultHeaders);\n  return matches.reduce((parentHeaders, match, idx) => {\n    let { id } = match.route;\n    let loaderHeaders = context.loaderHeaders[id] || new Headers();\n    let actionHeaders = context.actionHeaders[id] || new Headers();\n    let includeErrorHeaders = errorHeaders != null && idx === matches.length - 1;\n    let includeErrorCookies = includeErrorHeaders && errorHeaders !== loaderHeaders && errorHeaders !== actionHeaders;\n    let headersFn = getRouteHeadersFn(match);\n    if (headersFn == null) {\n      let headers2 = new Headers(parentHeaders);\n      if (includeErrorCookies) {\n        prependCookies(errorHeaders, headers2);\n      }\n      prependCookies(actionHeaders, headers2);\n      prependCookies(loaderHeaders, headers2);\n      return headers2;\n    }\n    let headers = new Headers(\n      typeof headersFn === \"function\" ? headersFn({\n        loaderHeaders,\n        parentHeaders,\n        actionHeaders,\n        errorHeaders: includeErrorHeaders ? errorHeaders : void 0\n      }) : headersFn\n    );\n    if (includeErrorCookies) {\n      prependCookies(errorHeaders, headers);\n    }\n    prependCookies(actionHeaders, headers);\n    prependCookies(loaderHeaders, headers);\n    prependCookies(parentHeaders, headers);\n    return headers;\n  }, new Headers(defaultHeaders));\n}\nfunction prependCookies(parentHeaders, childHeaders) {\n  let parentSetCookieString = parentHeaders.get(\"Set-Cookie\");\n  if (parentSetCookieString) {\n    let cookies = splitCookiesString(parentSetCookieString);\n    let childCookies = new Set(childHeaders.getSetCookie());\n    cookies.forEach((cookie) => {\n      if (!childCookies.has(cookie)) {\n        childHeaders.append(\"Set-Cookie\", cookie);\n      }\n    });\n  }\n}\n\n// lib/actions.ts\nfunction throwIfPotentialCSRFAttack(headers, allowedActionOrigins) {\n  let originHeader = headers.get(\"origin\");\n  let originDomain = null;\n  try {\n    originDomain = typeof originHeader === \"string\" && originHeader !== \"null\" ? new URL(originHeader).host : originHeader;\n  } catch {\n    throw new Error(\n      `\\`origin\\` header is not a valid URL. Aborting the action.`\n    );\n  }\n  let host = parseHostHeader(headers);\n  if (originDomain && (!host || originDomain !== host.value)) {\n    if (!isAllowedOrigin(originDomain, allowedActionOrigins)) {\n      if (host) {\n        throw new Error(\n          `${host.type} header does not match \\`origin\\` header from a forwarded action request. Aborting the action.`\n        );\n      } else {\n        throw new Error(\n          \"`x-forwarded-host` or `host` headers are not provided. One of these is needed to compare the `origin` header from a forwarded action request. Aborting the action.\"\n        );\n      }\n    }\n  }\n}\nfunction matchWildcardDomain(domain, pattern) {\n  const domainParts = domain.split(\".\");\n  const patternParts = pattern.split(\".\");\n  if (patternParts.length < 1) {\n    return false;\n  }\n  if (domainParts.length < patternParts.length) {\n    return false;\n  }\n  while (patternParts.length) {\n    const patternPart = patternParts.pop();\n    const domainPart = domainParts.pop();\n    switch (patternPart) {\n      case \"\": {\n        return false;\n      }\n      case \"*\": {\n        if (domainPart) {\n          continue;\n        } else {\n          return false;\n        }\n      }\n      case \"**\": {\n        if (patternParts.length > 0) {\n          return false;\n        }\n        return domainPart !== void 0;\n      }\n      case void 0:\n      default: {\n        if (domainPart !== patternPart) {\n          return false;\n        }\n      }\n    }\n  }\n  return domainParts.length === 0;\n}\nfunction isAllowedOrigin(originDomain, allowedActionOrigins = []) {\n  return allowedActionOrigins.some(\n    (allowedOrigin) => allowedOrigin && (allowedOrigin === originDomain || matchWildcardDomain(originDomain, allowedOrigin))\n  );\n}\nfunction parseHostHeader(headers) {\n  let forwardedHostHeader = headers.get(\"x-forwarded-host\");\n  let forwardedHostValue = forwardedHostHeader?.split(\",\")[0]?.trim();\n  let hostHeader = headers.get(\"host\");\n  return forwardedHostValue ? {\n    type: \"x-forwarded-host\",\n    value: forwardedHostValue\n  } : hostHeader ? {\n    type: \"host\",\n    value: hostHeader\n  } : void 0;\n}\n\n// lib/server-runtime/urls.ts\nfunction getNormalizedPath(request, basename, future) {\n  basename = basename || \"/\";\n  let url = new URL(request.url);\n  let pathname = url.pathname;\n  if (future?.unstable_trailingSlashAwareDataRequests) {\n    if (pathname.endsWith(\"/_.data\")) {\n      pathname = pathname.replace(/_\\.data$/, \"\");\n    } else {\n      pathname = pathname.replace(/\\.data$/, \"\");\n    }\n  } else {\n    if (stripBasename(pathname, basename) === \"/_root.data\") {\n      pathname = basename;\n    } else if (pathname.endsWith(\".data\")) {\n      pathname = pathname.replace(/\\.data$/, \"\");\n    }\n    if (stripBasename(pathname, basename) !== \"/\" && pathname.endsWith(\"/\")) {\n      pathname = pathname.slice(0, -1);\n    }\n  }\n  let searchParams = new URLSearchParams(url.search);\n  searchParams.delete(\"_routes\");\n  let search = searchParams.toString();\n  if (search) {\n    search = `?${search}`;\n  }\n  return {\n    pathname,\n    search,\n    // No hashes on the server\n    hash: \"\"\n  };\n}\n\n// lib/server-runtime/single-fetch.ts\nvar SERVER_NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([\n  ...NO_BODY_STATUS_CODES,\n  304\n]);\nasync function singleFetchAction(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {\n  try {\n    try {\n      throwIfPotentialCSRFAttack(\n        request.headers,\n        Array.isArray(build.allowedActionOrigins) ? build.allowedActionOrigins : []\n      );\n    } catch (e) {\n      return handleQueryError(new Error(\"Bad Request\"), 400);\n    }\n    let handlerRequest = build.future.v8_passThroughRequests ? request : new Request(handlerUrl, {\n      method: request.method,\n      body: request.body,\n      headers: request.headers,\n      signal: request.signal,\n      ...request.body ? { duplex: \"half\" } : void 0\n    });\n    let result = await staticHandler.query(handlerRequest, {\n      requestContext: loadContext,\n      skipLoaderErrorBubbling: true,\n      skipRevalidation: true,\n      generateMiddlewareResponse: build.future.v8_middleware ? async (query) => {\n        try {\n          let innerResult = await query(handlerRequest);\n          return handleQueryResult(innerResult);\n        } catch (error) {\n          return handleQueryError(error);\n        }\n      } : void 0,\n      normalizePath: (r) => getNormalizedPath(r, build.basename, build.future)\n    });\n    return handleQueryResult(result);\n  } catch (error) {\n    return handleQueryError(error);\n  }\n  function handleQueryResult(result) {\n    return isResponse(result) ? result : staticContextToResponse(result);\n  }\n  function handleQueryError(error, status = 500) {\n    handleError(error);\n    return generateSingleFetchResponse(request, build, serverMode, {\n      result: { error },\n      headers: new Headers(),\n      status\n    });\n  }\n  function staticContextToResponse(context) {\n    let headers = getDocumentHeaders(context, build);\n    if (isRedirectStatusCode(context.statusCode) && headers.has(\"Location\")) {\n      return new Response(null, { status: context.statusCode, headers });\n    }\n    if (context.errors) {\n      Object.values(context.errors).forEach((err) => {\n        if (!isRouteErrorResponse(err) || err.error) {\n          handleError(err);\n        }\n      });\n      context.errors = sanitizeErrors(context.errors, serverMode);\n    }\n    let singleFetchResult;\n    if (context.errors) {\n      singleFetchResult = { error: Object.values(context.errors)[0] };\n    } else {\n      singleFetchResult = {\n        data: Object.values(context.actionData || {})[0]\n      };\n    }\n    return generateSingleFetchResponse(request, build, serverMode, {\n      result: singleFetchResult,\n      headers,\n      status: context.statusCode\n    });\n  }\n}\nasync function singleFetchLoaders(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {\n  let routesParam = new URL(request.url).searchParams.get(\"_routes\");\n  let loadRouteIds = routesParam ? new Set(routesParam.split(\",\")) : null;\n  try {\n    let handlerRequest = build.future.v8_passThroughRequests ? request : new Request(handlerUrl, {\n      headers: request.headers,\n      signal: request.signal\n    });\n    let result = await staticHandler.query(handlerRequest, {\n      requestContext: loadContext,\n      filterMatchesToLoad: (m) => !loadRouteIds || loadRouteIds.has(m.route.id),\n      skipLoaderErrorBubbling: true,\n      generateMiddlewareResponse: build.future.v8_middleware ? async (query) => {\n        try {\n          let innerResult = await query(handlerRequest);\n          return handleQueryResult(innerResult);\n        } catch (error) {\n          return handleQueryError(error);\n        }\n      } : void 0,\n      normalizePath: (r) => getNormalizedPath(r, build.basename, build.future)\n    });\n    return handleQueryResult(result);\n  } catch (error) {\n    return handleQueryError(error);\n  }\n  function handleQueryResult(result) {\n    return isResponse(result) ? result : staticContextToResponse(result);\n  }\n  function handleQueryError(error) {\n    handleError(error);\n    return generateSingleFetchResponse(request, build, serverMode, {\n      result: { error },\n      headers: new Headers(),\n      status: 500\n    });\n  }\n  function staticContextToResponse(context) {\n    let headers = getDocumentHeaders(context, build);\n    if (isRedirectStatusCode(context.statusCode) && headers.has(\"Location\")) {\n      return new Response(null, { status: context.statusCode, headers });\n    }\n    if (context.errors) {\n      Object.values(context.errors).forEach((err) => {\n        if (!isRouteErrorResponse(err) || err.error) {\n          handleError(err);\n        }\n      });\n      context.errors = sanitizeErrors(context.errors, serverMode);\n    }\n    let results = {};\n    let loadedMatches = new Set(\n      context.matches.filter(\n        (m) => loadRouteIds ? loadRouteIds.has(m.route.id) : m.route.loader != null\n      ).map((m) => m.route.id)\n    );\n    if (context.errors) {\n      for (let [id, error] of Object.entries(context.errors)) {\n        results[id] = { error };\n      }\n    }\n    for (let [id, data2] of Object.entries(context.loaderData)) {\n      if (!(id in results) && loadedMatches.has(id)) {\n        results[id] = { data: data2 };\n      }\n    }\n    return generateSingleFetchResponse(request, build, serverMode, {\n      result: results,\n      headers,\n      status: context.statusCode\n    });\n  }\n}\nfunction generateSingleFetchResponse(request, build, serverMode, {\n  result,\n  headers,\n  status\n}) {\n  let resultHeaders = new Headers(headers);\n  resultHeaders.set(\"X-Remix-Response\", \"yes\");\n  if (SERVER_NO_BODY_STATUS_CODES.has(status)) {\n    return new Response(null, { status, headers: resultHeaders });\n  }\n  resultHeaders.set(\"Content-Type\", \"text/x-script\");\n  resultHeaders.delete(\"Content-Length\");\n  return new Response(\n    encodeViaTurboStream(\n      result,\n      request.signal,\n      build.entry.module.streamTimeout,\n      serverMode\n    ),\n    {\n      status: status || 200,\n      headers: resultHeaders\n    }\n  );\n}\nfunction generateSingleFetchRedirectResponse(redirectResponse, request, build, serverMode) {\n  let redirect2 = getSingleFetchRedirect(\n    redirectResponse.status,\n    redirectResponse.headers,\n    build.basename\n  );\n  let headers = new Headers(redirectResponse.headers);\n  headers.delete(\"Location\");\n  headers.set(\"Content-Type\", \"text/x-script\");\n  return generateSingleFetchResponse(request, build, serverMode, {\n    result: request.method === \"GET\" ? { [SingleFetchRedirectSymbol]: redirect2 } : redirect2,\n    headers,\n    status: SINGLE_FETCH_REDIRECT_STATUS\n  });\n}\nfunction getSingleFetchRedirect(status, headers, basename) {\n  let redirect2 = headers.get(\"Location\");\n  if (basename) {\n    redirect2 = stripBasename(redirect2, basename) || redirect2;\n  }\n  return {\n    redirect: redirect2,\n    status,\n    revalidate: (\n      // Technically X-Remix-Revalidate isn't needed here - that was an implementation\n      // detail of ?_data requests as our way to tell the front end to revalidate when\n      // we didn't have a response body to include that information in.\n      // With single fetch, we tell the front end via this revalidate boolean field.\n      // However, we're respecting it for now because it may be something folks have\n      // used in their own responses\n      // TODO(v3): Consider removing or making this official public API\n      headers.has(\"X-Remix-Revalidate\") || headers.has(\"Set-Cookie\")\n    ),\n    reload: headers.has(\"X-Remix-Reload-Document\"),\n    replace: headers.has(\"X-Remix-Replace\")\n  };\n}\nfunction encodeViaTurboStream(data2, requestSignal, streamTimeout, serverMode) {\n  let controller = new AbortController();\n  let timeoutId = setTimeout(\n    () => {\n      controller.abort(new Error(\"Server Timeout\"));\n      cleanupCallbacks();\n    },\n    typeof streamTimeout === \"number\" ? streamTimeout : 4950\n  );\n  let abortControllerOnRequestAbort = () => {\n    controller.abort(requestSignal.reason);\n    cleanupCallbacks();\n  };\n  requestSignal.addEventListener(\"abort\", abortControllerOnRequestAbort);\n  let cleanupCallbacks = () => {\n    clearTimeout(timeoutId);\n    requestSignal.removeEventListener(\"abort\", abortControllerOnRequestAbort);\n  };\n  return encode(data2, {\n    signal: controller.signal,\n    onComplete: cleanupCallbacks,\n    plugins: [\n      (value) => {\n        if (value instanceof Error) {\n          let { name, message, stack } = serverMode === \"production\" /* Production */ ? sanitizeError(value, serverMode) : value;\n          return [\"SanitizedError\", name, message, stack];\n        }\n        if (value instanceof ErrorResponseImpl) {\n          let { data: data3, status, statusText } = value;\n          return [\"ErrorResponse\", data3, status, statusText];\n        }\n        if (value && typeof value === \"object\" && SingleFetchRedirectSymbol in value) {\n          return [\"SingleFetchRedirect\", value[SingleFetchRedirectSymbol]];\n        }\n      }\n    ],\n    postPlugins: [\n      (value) => {\n        if (!value) return;\n        if (typeof value !== \"object\") return;\n        return [\n          \"SingleFetchClassInstance\",\n          Object.fromEntries(Object.entries(value))\n        ];\n      },\n      () => [\"SingleFetchFallback\"]\n    ]\n  });\n}\n\n// lib/server-runtime/server.ts\nfunction derive(build, mode) {\n  let dataRoutes = createStaticHandlerDataRoutes(build.routes, build.future);\n  let serverMode = isServerMode(mode) ? mode : \"production\" /* Production */;\n  let staticHandler = createStaticHandler(dataRoutes, {\n    basename: build.basename,\n    instrumentations: build.entry.module.instrumentations,\n    future: build.future\n  });\n  let errorHandler = build.entry.module.handleError || ((error, { request }) => {\n    if (serverMode !== \"test\" /* Test */ && !request.signal.aborted) {\n      console.error(\n        // @ts-expect-error This is \"private\" from users but intended for internal use\n        isRouteErrorResponse(error) && error.error ? error.error : error\n      );\n    }\n  });\n  let requestHandler = async (request, initialContext) => {\n    let params = {};\n    let loadContext;\n    let handleError = (error) => {\n      if (mode === \"development\" /* Development */) {\n        getDevServerHooks()?.processRequestError?.(error);\n      }\n      errorHandler(error, {\n        context: loadContext,\n        params,\n        request\n      });\n    };\n    if (build.future.v8_middleware) {\n      if (initialContext && !(initialContext instanceof RouterContextProvider)) {\n        let error = new Error(\n          \"Invalid `context` value provided to `handleRequest`. When middleware is enabled you must return an instance of `RouterContextProvider` from your `getLoadContext` function.\"\n        );\n        handleError(error);\n        return returnLastResortErrorResponse(error, serverMode);\n      }\n      loadContext = initialContext || new RouterContextProvider();\n    } else {\n      loadContext = initialContext || {};\n    }\n    let requestUrl = new URL(request.url);\n    let normalizedPathname = getNormalizedPath(\n      request,\n      build.basename,\n      build.future\n    ).pathname;\n    let isSpaMode = getBuildTimeHeader(request, \"X-React-Router-SPA-Mode\") === \"yes\";\n    if (!build.ssr) {\n      let decodedPath = decodeURI(normalizedPathname);\n      if (build.basename && build.basename !== \"/\") {\n        let strippedPath = stripBasename(decodedPath, build.basename);\n        if (strippedPath == null) {\n          errorHandler(\n            new ErrorResponseImpl(\n              404,\n              \"Not Found\",\n              `Refusing to prerender the \\`${decodedPath}\\` path because it does not start with the basename \\`${build.basename}\\``\n            ),\n            {\n              context: loadContext,\n              params,\n              request\n            }\n          );\n          return new Response(\"Not Found\", {\n            status: 404,\n            statusText: \"Not Found\"\n          });\n        }\n        decodedPath = strippedPath;\n      }\n      if (build.prerender.length === 0) {\n        isSpaMode = true;\n      } else if (!build.prerender.includes(decodedPath) && !build.prerender.includes(decodedPath + \"/\")) {\n        if (requestUrl.pathname.endsWith(\".data\")) {\n          errorHandler(\n            new ErrorResponseImpl(\n              404,\n              \"Not Found\",\n              `Refusing to SSR the path \\`${decodedPath}\\` because \\`ssr:false\\` is set and the path is not included in the \\`prerender\\` config, so in production the path will be a 404.`\n            ),\n            {\n              context: loadContext,\n              params,\n              request\n            }\n          );\n          return new Response(\"Not Found\", {\n            status: 404,\n            statusText: \"Not Found\"\n          });\n        } else {\n          isSpaMode = true;\n        }\n      }\n    }\n    let manifestUrl = getManifestPath(\n      build.routeDiscovery.manifestPath,\n      build.basename\n    );\n    if (requestUrl.pathname === manifestUrl) {\n      try {\n        let res = await handleManifestRequest(\n          build,\n          staticHandler.dataRoutes,\n          staticHandler._internalRouteBranches,\n          requestUrl\n        );\n        return res;\n      } catch (e) {\n        handleError(e);\n        return new Response(\"Unknown Server Error\", { status: 500 });\n      }\n    }\n    let matches = matchServerRoutes(\n      build.routes,\n      staticHandler.dataRoutes,\n      staticHandler._internalRouteBranches,\n      normalizedPathname,\n      build.basename\n    );\n    if (matches && matches.length > 0) {\n      Object.assign(params, matches[0].params);\n    }\n    let response;\n    if (requestUrl.pathname.endsWith(\".data\")) {\n      response = await handleSingleFetchRequest(\n        serverMode,\n        build,\n        staticHandler,\n        request,\n        normalizedPathname,\n        loadContext,\n        handleError\n      );\n      if (isRedirectResponse(response)) {\n        response = generateSingleFetchRedirectResponse(\n          response,\n          request,\n          build,\n          serverMode\n        );\n      }\n      if (build.entry.module.handleDataRequest) {\n        response = await build.entry.module.handleDataRequest(response, {\n          context: loadContext,\n          params: matches ? matches[0].params : {},\n          request\n        });\n        if (isRedirectResponse(response)) {\n          response = generateSingleFetchRedirectResponse(\n            response,\n            request,\n            build,\n            serverMode\n          );\n        }\n      }\n    } else if (!isSpaMode && matches && matches[matches.length - 1].route.module.default == null && matches[matches.length - 1].route.module.ErrorBoundary == null) {\n      response = await handleResourceRequest(\n        serverMode,\n        build,\n        staticHandler,\n        matches.slice(-1)[0].route.id,\n        request,\n        loadContext,\n        handleError\n      );\n    } else {\n      let { pathname } = requestUrl;\n      let criticalCss = void 0;\n      if (build.unstable_getCriticalCss) {\n        criticalCss = await build.unstable_getCriticalCss({ pathname });\n      } else if (mode === \"development\" /* Development */ && getDevServerHooks()?.getCriticalCss) {\n        criticalCss = await getDevServerHooks()?.getCriticalCss?.(pathname);\n      }\n      response = await handleDocumentRequest(\n        serverMode,\n        build,\n        staticHandler,\n        request,\n        loadContext,\n        handleError,\n        isSpaMode,\n        criticalCss\n      );\n    }\n    if (request.method === \"HEAD\") {\n      return new Response(null, {\n        headers: response.headers,\n        status: response.status,\n        statusText: response.statusText\n      });\n    }\n    return response;\n  };\n  if (build.entry.module.instrumentations) {\n    requestHandler = instrumentHandler(\n      requestHandler,\n      build.entry.module.instrumentations.map((i) => i.handler).filter(Boolean)\n    );\n  }\n  return {\n    serverMode,\n    staticHandler,\n    errorHandler,\n    requestHandler\n  };\n}\nvar createRequestHandler = (build, mode) => {\n  let _build;\n  let serverMode;\n  let staticHandler;\n  let errorHandler;\n  let _requestHandler;\n  return async function requestHandler(request, initialContext) {\n    _build = typeof build === \"function\" ? await build() : build;\n    if (typeof build === \"function\") {\n      let derived = derive(_build, mode);\n      serverMode = derived.serverMode;\n      staticHandler = derived.staticHandler;\n      errorHandler = derived.errorHandler;\n      _requestHandler = derived.requestHandler;\n    } else if (!serverMode || !staticHandler || !errorHandler || !_requestHandler) {\n      let derived = derive(_build, mode);\n      serverMode = derived.serverMode;\n      staticHandler = derived.staticHandler;\n      errorHandler = derived.errorHandler;\n      _requestHandler = derived.requestHandler;\n    }\n    return _requestHandler(request, initialContext);\n  };\n};\nasync function handleManifestRequest(build, dataRoutes, branches, url) {\n  if (build.assets.version !== url.searchParams.get(\"version\")) {\n    return new Response(null, {\n      status: 204,\n      headers: {\n        \"X-Remix-Reload-Document\": \"true\"\n      }\n    });\n  }\n  if (url.toString().length > URL_LIMIT) {\n    return new Response(null, {\n      statusText: \"Bad Request\",\n      status: 400\n    });\n  }\n  let patches = {};\n  if (url.searchParams.has(\"paths\")) {\n    let paths = /* @__PURE__ */ new Set();\n    let pathParam = url.searchParams.get(\"paths\") || \"\";\n    let requestedPaths = pathParam.split(\",\").filter(Boolean);\n    requestedPaths.forEach((path) => {\n      if (!path.startsWith(\"/\")) {\n        path = `/${path}`;\n      }\n      let segments = path.split(\"/\").slice(1);\n      segments.forEach((_, i) => {\n        let partialPath = segments.slice(0, i + 1).join(\"/\");\n        paths.add(`/${partialPath}`);\n      });\n    });\n    for (let path of paths) {\n      let matches = matchServerRoutes(\n        build.routes,\n        dataRoutes,\n        branches,\n        path,\n        build.basename\n      );\n      if (matches) {\n        for (let match of matches) {\n          let routeId = match.route.id;\n          let route = build.assets.routes[routeId];\n          if (route) {\n            patches[routeId] = route;\n          }\n        }\n      }\n    }\n    return Response.json(patches, {\n      headers: {\n        \"Cache-Control\": \"public, max-age=31536000, immutable\"\n      }\n    });\n  }\n  return new Response(\"Invalid Request\", { status: 400 });\n}\nasync function handleSingleFetchRequest(serverMode, build, staticHandler, request, normalizedPath, loadContext, handleError) {\n  let handlerUrl = new URL(request.url);\n  handlerUrl.pathname = normalizedPath;\n  let response = isMutationMethod(request.method) ? await singleFetchAction(\n    build,\n    serverMode,\n    staticHandler,\n    request,\n    handlerUrl,\n    loadContext,\n    handleError\n  ) : await singleFetchLoaders(\n    build,\n    serverMode,\n    staticHandler,\n    request,\n    handlerUrl,\n    loadContext,\n    handleError\n  );\n  return response;\n}\nasync function handleDocumentRequest(serverMode, build, staticHandler, request, loadContext, handleError, isSpaMode, criticalCss) {\n  try {\n    if (isMutationMethod(request.method)) {\n      try {\n        throwIfPotentialCSRFAttack(\n          request.headers,\n          Array.isArray(build.allowedActionOrigins) ? build.allowedActionOrigins : []\n        );\n      } catch (e) {\n        handleError(e);\n        return new Response(\"Bad Request\", { status: 400 });\n      }\n    }\n    let result = await staticHandler.query(request, {\n      requestContext: loadContext,\n      generateMiddlewareResponse: build.future.v8_middleware ? async (query) => {\n        try {\n          let innerResult = await query(request);\n          if (!isResponse(innerResult)) {\n            innerResult = await renderHtml(innerResult, isSpaMode);\n          }\n          return innerResult;\n        } catch (error) {\n          handleError(error);\n          return new Response(null, { status: 500 });\n        }\n      } : void 0,\n      normalizePath: (r) => getNormalizedPath(r, build.basename, build.future)\n    });\n    if (!isResponse(result)) {\n      result = await renderHtml(result, isSpaMode);\n    }\n    return result;\n  } catch (error) {\n    handleError(error);\n    return new Response(null, { status: 500 });\n  }\n  async function renderHtml(context, isSpaMode2) {\n    let headers = getDocumentHeaders(context, build);\n    if (SERVER_NO_BODY_STATUS_CODES.has(context.statusCode)) {\n      return new Response(null, { status: context.statusCode, headers });\n    }\n    if (context.errors) {\n      Object.values(context.errors).forEach((err) => {\n        if (!isRouteErrorResponse(err) || err.error) {\n          handleError(err);\n        }\n      });\n      context.errors = sanitizeErrors(context.errors, serverMode);\n    }\n    let state = {\n      loaderData: context.loaderData,\n      actionData: context.actionData,\n      errors: serializeErrors(context.errors, serverMode)\n    };\n    let baseServerHandoff = {\n      basename: build.basename,\n      future: build.future,\n      routeDiscovery: build.routeDiscovery,\n      ssr: build.ssr,\n      isSpaMode: isSpaMode2\n    };\n    let entryContext = {\n      manifest: build.assets,\n      branches: staticHandler._internalRouteBranches,\n      routeModules: createEntryRouteModules(build.routes),\n      staticHandlerContext: context,\n      criticalCss,\n      serverHandoffString: createServerHandoffString({\n        ...baseServerHandoff,\n        criticalCss\n      }),\n      serverHandoffStream: encodeViaTurboStream(\n        state,\n        request.signal,\n        build.entry.module.streamTimeout,\n        serverMode\n      ),\n      renderMeta: {},\n      future: build.future,\n      ssr: build.ssr,\n      routeDiscovery: build.routeDiscovery,\n      isSpaMode: isSpaMode2,\n      serializeError: (err) => serializeError(err, serverMode)\n    };\n    let handleDocumentRequestFunction = build.entry.module.default;\n    try {\n      return await handleDocumentRequestFunction(\n        request,\n        context.statusCode,\n        headers,\n        entryContext,\n        loadContext\n      );\n    } catch (error) {\n      handleError(error);\n      let errorForSecondRender = error;\n      if (isResponse(error)) {\n        try {\n          let data2 = await unwrapResponse(error);\n          errorForSecondRender = new ErrorResponseImpl(\n            error.status,\n            error.statusText,\n            data2\n          );\n        } catch (e) {\n        }\n      }\n      context = getStaticContextFromError(\n        staticHandler.dataRoutes,\n        context,\n        errorForSecondRender\n      );\n      if (context.errors) {\n        context.errors = sanitizeErrors(context.errors, serverMode);\n      }\n      let state2 = {\n        loaderData: context.loaderData,\n        actionData: context.actionData,\n        errors: serializeErrors(context.errors, serverMode)\n      };\n      entryContext = {\n        ...entryContext,\n        staticHandlerContext: context,\n        serverHandoffString: createServerHandoffString(baseServerHandoff),\n        serverHandoffStream: encodeViaTurboStream(\n          state2,\n          request.signal,\n          build.entry.module.streamTimeout,\n          serverMode\n        ),\n        renderMeta: {}\n      };\n      try {\n        return await handleDocumentRequestFunction(\n          request,\n          context.statusCode,\n          headers,\n          entryContext,\n          loadContext\n        );\n      } catch (error2) {\n        handleError(error2);\n        return returnLastResortErrorResponse(error2, serverMode);\n      }\n    }\n  }\n}\nasync function handleResourceRequest(serverMode, build, staticHandler, routeId, request, loadContext, handleError) {\n  try {\n    let result = await staticHandler.queryRoute(request, {\n      routeId,\n      requestContext: loadContext,\n      generateMiddlewareResponse: build.future.v8_middleware ? async (queryRoute) => {\n        try {\n          let innerResult = await queryRoute(request);\n          return handleQueryRouteResult(innerResult);\n        } catch (error) {\n          return handleQueryRouteError(error);\n        }\n      } : void 0,\n      normalizePath: (r) => getNormalizedPath(r, build.basename, build.future)\n    });\n    return handleQueryRouteResult(result);\n  } catch (error) {\n    return handleQueryRouteError(error);\n  }\n  function handleQueryRouteResult(result) {\n    if (isResponse(result)) {\n      return result;\n    }\n    if (typeof result === \"string\") {\n      return new Response(result);\n    }\n    return Response.json(result);\n  }\n  function handleQueryRouteError(error) {\n    if (isResponse(error)) {\n      return error;\n    }\n    if (isRouteErrorResponse(error)) {\n      handleError(error);\n      return errorResponseToJson(error, serverMode);\n    }\n    if (error instanceof Error && error.message === \"Expected a response from queryRoute\") {\n      let newError = new Error(\n        \"Expected a Response to be returned from resource route handler\"\n      );\n      handleError(newError);\n      return returnLastResortErrorResponse(newError, serverMode);\n    }\n    handleError(error);\n    return returnLastResortErrorResponse(error, serverMode);\n  }\n}\nfunction errorResponseToJson(errorResponse, serverMode) {\n  return Response.json(\n    serializeError(\n      // @ts-expect-error This is \"private\" from users but intended for internal use\n      errorResponse.error || new Error(\"Unexpected Server Error\"),\n      serverMode\n    ),\n    {\n      status: errorResponse.status,\n      statusText: errorResponse.statusText\n    }\n  );\n}\nfunction returnLastResortErrorResponse(error, serverMode) {\n  let message = \"Unexpected Server Error\";\n  if (serverMode !== \"production\" /* Production */) {\n    message += `\n\n${String(error)}`;\n  }\n  return new Response(message, {\n    status: 500,\n    headers: {\n      \"Content-Type\": \"text/plain\"\n    }\n  });\n}\nfunction unwrapResponse(response) {\n  let contentType = response.headers.get(\"Content-Type\");\n  return contentType && /\\bapplication\\/json\\b/.test(contentType) ? response.body == null ? null : response.json() : response.text();\n}\n\n// lib/server-runtime/sessions.ts\nfunction flash(name) {\n  return `__flash_${name}__`;\n}\nvar createSession = (initialData = {}, id = \"\") => {\n  let map = new Map(Object.entries(initialData));\n  return {\n    get id() {\n      return id;\n    },\n    get data() {\n      return Object.fromEntries(map);\n    },\n    has(name) {\n      return map.has(name) || map.has(flash(name));\n    },\n    get(name) {\n      if (map.has(name)) return map.get(name);\n      let flashName = flash(name);\n      if (map.has(flashName)) {\n        let value = map.get(flashName);\n        map.delete(flashName);\n        return value;\n      }\n      return void 0;\n    },\n    set(name, value) {\n      map.set(name, value);\n    },\n    flash(name, value) {\n      map.set(flash(name), value);\n    },\n    unset(name) {\n      map.delete(name);\n    }\n  };\n};\nvar isSession = (object) => {\n  return object != null && typeof object.id === \"string\" && typeof object.data !== \"undefined\" && typeof object.has === \"function\" && typeof object.get === \"function\" && typeof object.set === \"function\" && typeof object.flash === \"function\" && typeof object.unset === \"function\";\n};\nfunction createSessionStorage({\n  cookie: cookieArg,\n  createData,\n  readData,\n  updateData,\n  deleteData\n}) {\n  let cookie = isCookie(cookieArg) ? cookieArg : createCookie(cookieArg?.name || \"__session\", cookieArg);\n  warnOnceAboutSigningSessionCookie(cookie);\n  return {\n    async getSession(cookieHeader, options) {\n      let id = cookieHeader && await cookie.parse(cookieHeader, options);\n      let data2 = id && await readData(id);\n      return createSession(data2 || {}, id || \"\");\n    },\n    async commitSession(session, options) {\n      let { id, data: data2 } = session;\n      let expires = options?.maxAge != null ? new Date(Date.now() + options.maxAge * 1e3) : options?.expires != null ? options.expires : cookie.expires;\n      if (id) {\n        await updateData(id, data2, expires);\n      } else {\n        id = await createData(data2, expires);\n      }\n      return cookie.serialize(id, options);\n    },\n    async destroySession(session, options) {\n      await deleteData(session.id);\n      return cookie.serialize(\"\", {\n        ...options,\n        maxAge: void 0,\n        expires: /* @__PURE__ */ new Date(0)\n      });\n    }\n  };\n}\nfunction warnOnceAboutSigningSessionCookie(cookie) {\n  warnOnce(\n    cookie.isSigned,\n    `The \"${cookie.name}\" cookie is not signed, but session cookies should be signed to prevent tampering on the client before they are sent back to the server. See https://reactrouter.com/explanation/sessions-and-cookies#signing-cookies for more information.`\n  );\n}\n\n// lib/server-runtime/sessions/cookieStorage.ts\nfunction createCookieSessionStorage({ cookie: cookieArg } = {}) {\n  let cookie = isCookie(cookieArg) ? cookieArg : createCookie(cookieArg?.name || \"__session\", cookieArg);\n  warnOnceAboutSigningSessionCookie(cookie);\n  return {\n    async getSession(cookieHeader, options) {\n      return createSession(\n        cookieHeader && await cookie.parse(cookieHeader, options) || {}\n      );\n    },\n    async commitSession(session, options) {\n      let serializedCookie = await cookie.serialize(session.data, options);\n      if (serializedCookie.length > 4096) {\n        throw new Error(\n          \"Cookie length will exceed browser maximum. Length: \" + serializedCookie.length\n        );\n      }\n      return serializedCookie;\n    },\n    async destroySession(_session, options) {\n      return cookie.serialize(\"\", {\n        ...options,\n        maxAge: void 0,\n        expires: /* @__PURE__ */ new Date(0)\n      });\n    }\n  };\n}\n\n// lib/server-runtime/sessions/memoryStorage.ts\nfunction createMemorySessionStorage({ cookie } = {}) {\n  let map = /* @__PURE__ */ new Map();\n  return createSessionStorage({\n    cookie,\n    async createData(data2, expires) {\n      let id = Math.random().toString(36).substring(2, 10);\n      map.set(id, { data: data2, expires });\n      return id;\n    },\n    async readData(id) {\n      if (map.has(id)) {\n        let { data: data2, expires } = map.get(id);\n        if (!expires || expires > /* @__PURE__ */ new Date()) {\n          return data2;\n        }\n        if (expires) map.delete(id);\n      }\n      return null;\n    },\n    async updateData(id, data2, expires) {\n      map.set(id, { data: data2, expires });\n    },\n    async deleteData(id) {\n      map.delete(id);\n    }\n  });\n}\n\n// lib/href.ts\nfunction href(path, ...args) {\n  let params = args[0];\n  let result = trimTrailingSplat(path).replace(\n    /\\/:([\\w-]+)(\\?)?/g,\n    // same regex as in .\\router\\utils.ts: compilePath().\n    (_, param, questionMark) => {\n      const isRequired = questionMark === void 0;\n      const value = params?.[param];\n      if (isRequired && value === void 0) {\n        throw new Error(\n          `Path '${path}' requires param '${param}' but it was not provided`\n        );\n      }\n      return value === void 0 ? \"\" : \"/\" + value;\n    }\n  );\n  if (path.endsWith(\"*\")) {\n    const value = params?.[\"*\"];\n    if (value !== void 0) {\n      result += \"/\" + value;\n    }\n  }\n  return result || \"/\";\n}\nfunction trimTrailingSplat(path) {\n  let i = path.length - 1;\n  let char = path[i];\n  if (char !== \"*\" && char !== \"/\") return path;\n  i--;\n  for (; i >= 0; i--) {\n    if (path[i] !== \"/\") break;\n  }\n  return path.slice(0, i + 1);\n}\n\n// lib/rsc/server.ssr.tsx\nimport * as React4 from \"react\";\n\n// lib/rsc/html-stream/server.ts\nvar encoder2 = new TextEncoder();\nvar trailer = \"</body></html>\";\nfunction injectRSCPayload(rscStream) {\n  let decoder = new TextDecoder();\n  let resolveFlightDataPromise;\n  let flightDataPromise = new Promise(\n    (resolve) => resolveFlightDataPromise = resolve\n  );\n  let startedRSC = false;\n  let buffered = [];\n  let timeout = null;\n  function flushBufferedChunks(controller) {\n    for (let chunk of buffered) {\n      let buf = decoder.decode(chunk, { stream: true });\n      if (buf.endsWith(trailer)) {\n        buf = buf.slice(0, -trailer.length);\n      }\n      controller.enqueue(encoder2.encode(buf));\n    }\n    buffered.length = 0;\n    timeout = null;\n  }\n  return new TransformStream({\n    transform(chunk, controller) {\n      buffered.push(chunk);\n      if (timeout) {\n        return;\n      }\n      timeout = setTimeout(async () => {\n        flushBufferedChunks(controller);\n        if (!startedRSC) {\n          startedRSC = true;\n          writeRSCStream(rscStream, controller).catch((err) => controller.error(err)).then(resolveFlightDataPromise);\n        }\n      }, 0);\n    },\n    async flush(controller) {\n      await flightDataPromise;\n      if (timeout) {\n        clearTimeout(timeout);\n        flushBufferedChunks(controller);\n      }\n      controller.enqueue(encoder2.encode(\"</body></html>\"));\n    }\n  });\n}\nasync function writeRSCStream(rscStream, controller) {\n  let decoder = new TextDecoder(\"utf-8\", { fatal: true });\n  const reader = rscStream.getReader();\n  try {\n    let read;\n    while ((read = await reader.read()) && !read.done) {\n      const chunk = read.value;\n      try {\n        writeChunk(\n          JSON.stringify(decoder.decode(chunk, { stream: true })),\n          controller\n        );\n      } catch (e) {\n        let base64 = JSON.stringify(btoa(String.fromCodePoint(...chunk)));\n        writeChunk(\n          `Uint8Array.from(atob(${base64}), m => m.codePointAt(0))`,\n          controller\n        );\n      }\n    }\n  } finally {\n    reader.releaseLock();\n  }\n  let remaining = decoder.decode();\n  if (remaining.length) {\n    writeChunk(JSON.stringify(remaining), controller);\n  }\n}\nfunction writeChunk(chunk, controller) {\n  controller.enqueue(\n    encoder2.encode(\n      `<script>${escapeScript(\n        `(self.__FLIGHT_DATA||=[]).push(${chunk})`\n      )}</script>`\n    )\n  );\n}\nfunction escapeScript(script) {\n  return script.replace(/<!--/g, \"<\\\\!--\").replace(/<\\/(script)/gi, \"</\\\\$1\");\n}\n\n// lib/rsc/errorBoundaries.tsx\nimport React3 from \"react\";\nvar RSCRouterGlobalErrorBoundary = class extends React3.Component {\n  constructor(props) {\n    super(props);\n    this.state = { error: null, location: props.location };\n  }\n  static getDerivedStateFromError(error) {\n    return { error };\n  }\n  static getDerivedStateFromProps(props, state) {\n    if (state.location !== props.location) {\n      return { error: null, location: props.location };\n    }\n    return { error: state.error, location: state.location };\n  }\n  render() {\n    if (this.state.error) {\n      return /* @__PURE__ */ React3.createElement(\n        RSCDefaultRootErrorBoundaryImpl,\n        {\n          error: this.state.error,\n          renderAppShell: true\n        }\n      );\n    } else {\n      return this.props.children;\n    }\n  }\n};\nfunction ErrorWrapper({\n  renderAppShell,\n  title,\n  children\n}) {\n  if (!renderAppShell) {\n    return children;\n  }\n  return /* @__PURE__ */ React3.createElement(\"html\", { lang: \"en\" }, /* @__PURE__ */ React3.createElement(\"head\", null, /* @__PURE__ */ React3.createElement(\"meta\", { charSet: \"utf-8\" }), /* @__PURE__ */ React3.createElement(\n    \"meta\",\n    {\n      name: \"viewport\",\n      content: \"width=device-width,initial-scale=1,viewport-fit=cover\"\n    }\n  ), /* @__PURE__ */ React3.createElement(\"title\", null, title)), /* @__PURE__ */ React3.createElement(\"body\", null, /* @__PURE__ */ React3.createElement(\"main\", { style: { fontFamily: \"system-ui, sans-serif\", padding: \"2rem\" } }, children)));\n}\nfunction RSCDefaultRootErrorBoundaryImpl({\n  error,\n  renderAppShell\n}) {\n  console.error(error);\n  let heyDeveloper = /* @__PURE__ */ React3.createElement(\n    \"script\",\n    {\n      dangerouslySetInnerHTML: {\n        __html: `\n        console.log(\n          \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://reactrouter.com/how-to/error-boundary for more information.\"\n        );\n      `\n      }\n    }\n  );\n  if (isRouteErrorResponse(error)) {\n    return /* @__PURE__ */ React3.createElement(\n      ErrorWrapper,\n      {\n        renderAppShell,\n        title: \"Unhandled Thrown Response!\"\n      },\n      /* @__PURE__ */ React3.createElement(\"h1\", { style: { fontSize: \"24px\" } }, error.status, \" \", error.statusText),\n      ENABLE_DEV_WARNINGS ? heyDeveloper : null\n    );\n  }\n  let errorInstance;\n  if (error instanceof Error) {\n    errorInstance = error;\n  } else {\n    let errorString = error == null ? \"Unknown Error\" : typeof error === \"object\" && \"toString\" in error ? error.toString() : JSON.stringify(error);\n    errorInstance = new Error(errorString);\n  }\n  return /* @__PURE__ */ React3.createElement(ErrorWrapper, { renderAppShell, title: \"Application Error!\" }, /* @__PURE__ */ React3.createElement(\"h1\", { style: { fontSize: \"24px\" } }, \"Application Error\"), /* @__PURE__ */ React3.createElement(\n    \"pre\",\n    {\n      style: {\n        padding: \"2rem\",\n        background: \"hsla(10, 50%, 50%, 0.1)\",\n        color: \"red\",\n        overflow: \"auto\"\n      }\n    },\n    errorInstance.stack\n  ), heyDeveloper);\n}\nfunction RSCDefaultRootErrorBoundary({\n  hasRootLayout\n}) {\n  let error = useRouteError();\n  if (hasRootLayout === void 0) {\n    throw new Error(\"Missing 'hasRootLayout' prop\");\n  }\n  return /* @__PURE__ */ React3.createElement(\n    RSCDefaultRootErrorBoundaryImpl,\n    {\n      renderAppShell: !hasRootLayout,\n      error\n    }\n  );\n}\n\n// lib/rsc/route-modules.ts\nfunction createRSCRouteModules(payload) {\n  const routeModules = {};\n  for (const match of payload.matches) {\n    populateRSCRouteModules(routeModules, match);\n  }\n  return routeModules;\n}\nfunction populateRSCRouteModules(routeModules, matches) {\n  matches = Array.isArray(matches) ? matches : [matches];\n  for (const match of matches) {\n    routeModules[match.id] = {\n      links: match.links,\n      meta: match.meta,\n      default: noopComponent\n    };\n  }\n}\nvar noopComponent = () => null;\n\n// lib/rsc/server.ssr.tsx\nvar defaultManifestPath = \"/__manifest\";\nvar REACT_USE = \"use\";\nvar useImpl = React4[REACT_USE];\nfunction useSafe(promise) {\n  if (useImpl) {\n    return useImpl(promise);\n  }\n  throw new Error(\"React Router v7 requires React 19+ for RSC features.\");\n}\nasync function routeRSCServerRequest({\n  request,\n  serverResponse,\n  createFromReadableStream,\n  renderHTML,\n  hydrate = true\n}) {\n  const url = new URL(request.url);\n  const isDataRequest = isReactServerRequest(url);\n  const respondWithRSCPayload = isDataRequest || isManifestRequest(url) || request.headers.has(\"rsc-action-id\");\n  if (respondWithRSCPayload || serverResponse.headers.get(\"React-Router-Resource\") === \"true\") {\n    return serverResponse;\n  }\n  if (!serverResponse.body) {\n    throw new Error(\"Missing body in server response\");\n  }\n  const detectRedirectResponse = serverResponse.clone();\n  let serverResponseB = null;\n  if (hydrate) {\n    serverResponseB = serverResponse.clone();\n  }\n  const body = serverResponse.body;\n  let buffer;\n  let streamControllers = [];\n  const createStream = () => {\n    if (!buffer) {\n      buffer = [];\n      return body.pipeThrough(\n        new TransformStream({\n          transform(chunk, controller) {\n            buffer.push(chunk);\n            controller.enqueue(chunk);\n            streamControllers.forEach((c) => c.enqueue(chunk));\n          },\n          flush() {\n            streamControllers.forEach((c) => c.close());\n            streamControllers = [];\n          }\n        })\n      );\n    }\n    return new ReadableStream({\n      start(controller) {\n        buffer.forEach((chunk) => controller.enqueue(chunk));\n        streamControllers.push(controller);\n      }\n    });\n  };\n  let deepestRenderedBoundaryId = null;\n  const getPayload = () => {\n    const payloadPromise = Promise.resolve(\n      createFromReadableStream(createStream())\n    );\n    return Object.defineProperties(payloadPromise, {\n      _deepestRenderedBoundaryId: {\n        get() {\n          return deepestRenderedBoundaryId;\n        },\n        set(boundaryId) {\n          deepestRenderedBoundaryId = boundaryId;\n        }\n      },\n      formState: {\n        get() {\n          return payloadPromise.then(\n            (payload) => payload.type === \"render\" ? payload.formState : void 0\n          );\n        }\n      }\n    });\n  };\n  let renderRedirect;\n  let renderError;\n  try {\n    if (!detectRedirectResponse.body) {\n      throw new Error(\"Failed to clone server response\");\n    }\n    const payload = await createFromReadableStream(\n      detectRedirectResponse.body\n    );\n    if (serverResponse.status === SINGLE_FETCH_REDIRECT_STATUS && payload.type === \"redirect\") {\n      const headers2 = new Headers(serverResponse.headers);\n      headers2.delete(\"Content-Encoding\");\n      headers2.delete(\"Content-Length\");\n      headers2.delete(\"Content-Type\");\n      headers2.delete(\"X-Remix-Response\");\n      headers2.set(\"Location\", payload.location);\n      return new Response(serverResponseB?.body || \"\", {\n        headers: headers2,\n        status: payload.status,\n        statusText: serverResponse.statusText\n      });\n    }\n    let reactHeaders = new Headers();\n    let status = serverResponse.status;\n    let statusText = serverResponse.statusText;\n    let html = await renderHTML(getPayload, {\n      onError(error) {\n        if (typeof error === \"object\" && error && \"digest\" in error && typeof error.digest === \"string\") {\n          renderRedirect = decodeRedirectErrorDigest(error.digest);\n          if (renderRedirect) {\n            return error.digest;\n          }\n          let routeErrorResponse = decodeRouteErrorResponseDigest(error.digest);\n          if (routeErrorResponse) {\n            renderError = routeErrorResponse;\n            status = routeErrorResponse.status;\n            statusText = routeErrorResponse.statusText;\n            return error.digest;\n          }\n        }\n      },\n      onHeaders(headers2) {\n        for (const [key, value] of headers2) {\n          reactHeaders.append(key, value);\n        }\n      }\n    });\n    const headers = new Headers(reactHeaders);\n    for (const [key, value] of serverResponse.headers) {\n      headers.append(key, value);\n    }\n    headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n    if (renderRedirect) {\n      headers.set(\"Location\", renderRedirect.location);\n      return new Response(html, {\n        status: renderRedirect.status,\n        headers\n      });\n    }\n    const redirectTransform = new TransformStream({\n      flush(controller) {\n        if (renderRedirect) {\n          controller.enqueue(\n            new TextEncoder().encode(\n              `<meta http-equiv=\"refresh\" content=\"0;url=${escapeHtml(renderRedirect.location)}\"/>`\n            )\n          );\n        }\n      }\n    });\n    if (!hydrate) {\n      return new Response(html.pipeThrough(redirectTransform), {\n        status,\n        statusText,\n        headers\n      });\n    }\n    if (!serverResponseB?.body) {\n      throw new Error(\"Failed to clone server response\");\n    }\n    const body2 = html.pipeThrough(injectRSCPayload(serverResponseB.body)).pipeThrough(redirectTransform);\n    return new Response(body2, {\n      status,\n      statusText,\n      headers\n    });\n  } catch (error) {\n    if (error instanceof Response) {\n      return error;\n    }\n    if (renderRedirect) {\n      return new Response(`Redirect: ${renderRedirect.location}`, {\n        status: renderRedirect.status,\n        headers: {\n          Location: renderRedirect.location\n        }\n      });\n    }\n    try {\n      let normalizedError = renderError ?? error;\n      let [status, statusText] = isRouteErrorResponse(normalizedError) ? [normalizedError.status, normalizedError.statusText] : [500, \"\"];\n      let retryRedirect;\n      let reactHeaders = new Headers();\n      const html = await renderHTML(\n        () => {\n          const decoded = Promise.resolve(\n            createFromReadableStream(createStream())\n          );\n          const payloadPromise = decoded.then(\n            (payload) => Object.assign(payload, {\n              status,\n              errors: deepestRenderedBoundaryId ? {\n                [deepestRenderedBoundaryId]: normalizedError\n              } : {}\n            })\n          );\n          return Object.defineProperties(payloadPromise, {\n            _deepestRenderedBoundaryId: {\n              get() {\n                return deepestRenderedBoundaryId;\n              },\n              set(boundaryId) {\n                deepestRenderedBoundaryId = boundaryId;\n              }\n            },\n            formState: {\n              get() {\n                return payloadPromise.then(\n                  (payload) => payload.type === \"render\" ? payload.formState : void 0\n                );\n              }\n            }\n          });\n        },\n        {\n          onError(error2) {\n            if (typeof error2 === \"object\" && error2 && \"digest\" in error2 && typeof error2.digest === \"string\") {\n              retryRedirect = decodeRedirectErrorDigest(error2.digest);\n              if (retryRedirect) {\n                return error2.digest;\n              }\n              let routeErrorResponse = decodeRouteErrorResponseDigest(\n                error2.digest\n              );\n              if (routeErrorResponse) {\n                status = routeErrorResponse.status;\n                statusText = routeErrorResponse.statusText;\n                return error2.digest;\n              }\n            }\n          },\n          onHeaders(headers2) {\n            for (const [key, value] of headers2) {\n              reactHeaders.append(key, value);\n            }\n          }\n        }\n      );\n      const headers = new Headers(reactHeaders);\n      for (const [key, value] of serverResponse.headers) {\n        headers.append(key, value);\n      }\n      headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n      if (retryRedirect) {\n        headers.set(\"Location\", retryRedirect.location);\n        return new Response(html, {\n          status: retryRedirect.status,\n          headers\n        });\n      }\n      const retryRedirectTransform = new TransformStream({\n        flush(controller) {\n          if (retryRedirect) {\n            controller.enqueue(\n              new TextEncoder().encode(\n                `<meta http-equiv=\"refresh\" content=\"0;url=${escapeHtml(retryRedirect.location)}\"/>`\n              )\n            );\n          }\n        }\n      });\n      if (!hydrate) {\n        return new Response(html.pipeThrough(retryRedirectTransform), {\n          status,\n          statusText,\n          headers\n        });\n      }\n      if (!serverResponseB?.body) {\n        throw new Error(\"Failed to clone server response\");\n      }\n      const body2 = html.pipeThrough(injectRSCPayload(serverResponseB.body)).pipeThrough(retryRedirectTransform);\n      return new Response(body2, {\n        status,\n        statusText,\n        headers\n      });\n    } catch (error2) {\n    }\n    throw error;\n  }\n}\nfunction RSCStaticRouter({ getPayload }) {\n  const decoded = getPayload();\n  const payload = useSafe(decoded);\n  if (payload.type === \"redirect\") {\n    throw new Response(null, {\n      status: payload.status,\n      headers: {\n        Location: payload.location\n      }\n    });\n  }\n  if (payload.type !== \"render\") return null;\n  let patchedLoaderData = { ...payload.loaderData };\n  for (const match of payload.matches) {\n    if (shouldHydrateRouteLoader(\n      match.id,\n      match.clientLoader,\n      match.hasLoader,\n      false\n    ) && (match.hydrateFallbackElement || !match.hasLoader)) {\n      delete patchedLoaderData[match.id];\n    }\n  }\n  const context = {\n    get _deepestRenderedBoundaryId() {\n      return decoded._deepestRenderedBoundaryId ?? null;\n    },\n    set _deepestRenderedBoundaryId(boundaryId) {\n      decoded._deepestRenderedBoundaryId = boundaryId;\n    },\n    actionData: payload.actionData,\n    actionHeaders: {},\n    basename: payload.basename,\n    errors: payload.errors,\n    loaderData: patchedLoaderData,\n    loaderHeaders: {},\n    location: payload.location,\n    statusCode: 200,\n    matches: payload.matches.map((match) => ({\n      params: match.params,\n      pathname: match.pathname,\n      pathnameBase: match.pathnameBase,\n      route: {\n        id: match.id,\n        action: match.hasAction || !!match.clientAction,\n        handle: match.handle,\n        hasErrorBoundary: match.hasErrorBoundary,\n        loader: match.hasLoader || !!match.clientLoader,\n        index: match.index,\n        path: match.path,\n        shouldRevalidate: match.shouldRevalidate\n      }\n    }))\n  };\n  const router = createStaticRouter(\n    payload.matches.reduceRight((previous, match) => {\n      const route = {\n        id: match.id,\n        action: match.hasAction || !!match.clientAction,\n        element: match.element,\n        errorElement: match.errorElement,\n        handle: match.handle,\n        hasErrorBoundary: !!match.errorElement,\n        hydrateFallbackElement: match.hydrateFallbackElement,\n        index: match.index,\n        loader: match.hasLoader || !!match.clientLoader,\n        path: match.path,\n        shouldRevalidate: match.shouldRevalidate\n      };\n      if (previous.length > 0) {\n        route.children = previous;\n      }\n      return [route];\n    }, []),\n    context\n  );\n  const frameworkContext = {\n    future: {\n      // These flags have no runtime impact so can always be false.  If we add\n      // flags that drive runtime behavior they'll need to be proxied through.\n      v8_middleware: false,\n      unstable_trailingSlashAwareDataRequests: true,\n      // always on for RSC\n      v8_passThroughRequests: true\n      // always on for RSC\n    },\n    isSpaMode: false,\n    ssr: true,\n    criticalCss: \"\",\n    manifest: {\n      routes: {},\n      version: \"1\",\n      url: \"\",\n      entry: {\n        module: \"\",\n        imports: []\n      }\n    },\n    routeDiscovery: payload.routeDiscovery.mode === \"initial\" ? { mode: \"initial\", manifestPath: defaultManifestPath } : {\n      mode: \"lazy\",\n      manifestPath: payload.routeDiscovery.manifestPath || defaultManifestPath\n    },\n    routeModules: createRSCRouteModules(payload)\n  };\n  return /* @__PURE__ */ React4.createElement(RSCRouterContext.Provider, { value: true }, /* @__PURE__ */ React4.createElement(RSCRouterGlobalErrorBoundary, { location: payload.location }, /* @__PURE__ */ React4.createElement(FrameworkContext.Provider, { value: frameworkContext }, /* @__PURE__ */ React4.createElement(\n    StaticRouterProvider,\n    {\n      context,\n      router,\n      hydrate: false,\n      nonce: payload.nonce\n    }\n  ))));\n}\nfunction isReactServerRequest(url) {\n  return url.pathname.endsWith(\".rsc\");\n}\nfunction isManifestRequest(url) {\n  return url.pathname.endsWith(\".manifest\");\n}\n\n// lib/dom/ssr/errors.ts\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    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new ErrorResponseImpl(\n        val.status,\n        val.statusText,\n        val.data,\n        val.internal === true\n      );\n    } else if (val && val.__type === \"Error\") {\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            let error = new ErrorConstructor(val.message);\n            error.stack = val.stack;\n            serialized[key] = error;\n          } catch (e) {\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        error.stack = val.stack;\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\n\n// lib/dom/ssr/hydration.tsx\nfunction getHydrationData({\n  state,\n  routes,\n  getRouteInfo,\n  location,\n  basename,\n  isSpaMode\n}) {\n  let hydrationData = {\n    ...state,\n    loaderData: { ...state.loaderData }\n  };\n  let initialMatches = matchRoutes(routes, location, basename);\n  if (initialMatches) {\n    for (let match of initialMatches) {\n      let routeId = match.route.id;\n      let routeInfo = getRouteInfo(routeId);\n      if (shouldHydrateRouteLoader(\n        routeId,\n        routeInfo.clientLoader,\n        routeInfo.hasLoader,\n        isSpaMode\n      ) && (routeInfo.hasHydrateFallback || !routeInfo.hasLoader)) {\n        delete hydrationData.loaderData[routeId];\n      } else if (!routeInfo.hasLoader) {\n        hydrationData.loaderData[routeId] = null;\n      }\n    }\n  }\n  return hydrationData;\n}\n\nexport {\n  ServerRouter,\n  createRoutesStub,\n  createCookie,\n  isCookie,\n  ServerMode,\n  setDevServerHooks,\n  createRequestHandler,\n  createSession,\n  isSession,\n  createSessionStorage,\n  createCookieSessionStorage,\n  createMemorySessionStorage,\n  href,\n  RSCRouterGlobalErrorBoundary,\n  RSCDefaultRootErrorBoundary,\n  populateRSCRouteModules,\n  routeRSCServerRequest,\n  RSCStaticRouter,\n  deserializeErrors,\n  getHydrationData\n};\n","import React from 'react'\nimport { classNames } from 'adhocracy4'\n\nexport const IconSwitch = ({ buttons, viewModeStr, fullWidth, className }) => (\n  <div className={classNames('icon-switch', fullWidth && 'icon-switch--full-width', className)}>\n    {viewModeStr && <span className=\"text--strong\">{viewModeStr}</span>}\n    <div className=\"icon-switch__group\" role=\"group\">\n      {buttons.map((button) => (\n        <button\n          className={'button button--light' + (button.isActive ? ' button--fulltone' : '')}\n          onClick={button.handleClick}\n          aria-label={button.ariaLabel}\n          aria-pressed={button.isActive ? 'true' : 'false'}\n          key={button.id}\n        >\n          <span className={button.icon + ' mr-1'} aria-hidden=\"true\" />\n          {button.label}\n        </button>\n      ))}\n    </div>\n  </div>\n)\n","import React from 'react'\nimport django from 'django'\n\nconst loading = django.gettext('loading')\n\nexport default function Spinner () {\n  return (\n    <div className=\"align--center\">\n      <svg className=\"spinner-land\" viewBox=\"0 0 50 50\" aria-label={loading}>\n        <circle className=\"stroke\" />\n      </svg>\n    </div>\n  )\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCookie = parseCookie;\nexports.parse = parseCookie;\nexports.stringifyCookie = stringifyCookie;\nexports.stringifySetCookie = stringifySetCookie;\nexports.serialize = stringifySetCookie;\nexports.parseSetCookie = parseSetCookie;\nexports.stringifySetCookie = stringifySetCookie;\nexports.serialize = stringifySetCookie;\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n *\n * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191\n * Allow same range as cookie value, except `=`, which delimits end of name.\n */\nconst cookieNameRegExp = /^[\\u0021-\\u003A\\u003C\\u003E-\\u007E]+$/;\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n *\n * Allowing more characters: https://github.com/jshttp/cookie/issues/191\n * Comma, backslash, and DQUOTE are not part of the parsing algorithm.\n */\nconst cookieValueRegExp = /^[\\u0021-\\u003A\\u003C-\\u007E]*$/;\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\nconst domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\nconst pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n/**\n * RegExp to match max-age-value in RFC 6265 sec 5.6.2\n */\nconst maxAgeRegExp = /^-?\\d+$/;\nconst __toString = Object.prototype.toString;\nconst NullObject = /* @__PURE__ */ (() => {\n    const C = function () { };\n    C.prototype = Object.create(null);\n    return C;\n})();\n/**\n * Parse a `Cookie` header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n */\nfunction parseCookie(str, options) {\n    const obj = new NullObject();\n    const len = str.length;\n    // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n    if (len < 2)\n        return obj;\n    const dec = options?.decode || decode;\n    let index = 0;\n    do {\n        const eqIdx = eqIndex(str, index, len);\n        if (eqIdx === -1)\n            break; // No more cookie pairs.\n        const endIdx = endIndex(str, index, len);\n        if (eqIdx > endIdx) {\n            // backtrack on prior semicolon\n            index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n            continue;\n        }\n        const key = valueSlice(str, index, eqIdx);\n        // only assign once\n        if (obj[key] === undefined) {\n            obj[key] = dec(valueSlice(str, eqIdx + 1, endIdx));\n        }\n        index = endIdx + 1;\n    } while (index < len);\n    return obj;\n}\n/**\n * Stringifies an object into an HTTP `Cookie` header.\n */\nfunction stringifyCookie(cookie, options) {\n    const enc = options?.encode || encodeURIComponent;\n    const cookieStrings = [];\n    for (const name of Object.keys(cookie)) {\n        const val = cookie[name];\n        if (val === undefined)\n            continue;\n        if (!cookieNameRegExp.test(name)) {\n            throw new TypeError(`cookie name is invalid: ${name}`);\n        }\n        const value = enc(val);\n        if (!cookieValueRegExp.test(value)) {\n            throw new TypeError(`cookie val is invalid: ${val}`);\n        }\n        cookieStrings.push(`${name}=${value}`);\n    }\n    return cookieStrings.join(\"; \");\n}\nfunction stringifySetCookie(_name, _val, _opts) {\n    const cookie = typeof _name === \"object\"\n        ? _name\n        : { ..._opts, name: _name, value: String(_val) };\n    const options = typeof _val === \"object\" ? _val : _opts;\n    const enc = options?.encode || encodeURIComponent;\n    if (!cookieNameRegExp.test(cookie.name)) {\n        throw new TypeError(`argument name is invalid: ${cookie.name}`);\n    }\n    const value = cookie.value ? enc(cookie.value) : \"\";\n    if (!cookieValueRegExp.test(value)) {\n        throw new TypeError(`argument val is invalid: ${cookie.value}`);\n    }\n    let str = cookie.name + \"=\" + value;\n    if (cookie.maxAge !== undefined) {\n        if (!Number.isInteger(cookie.maxAge)) {\n            throw new TypeError(`option maxAge is invalid: ${cookie.maxAge}`);\n        }\n        str += \"; Max-Age=\" + cookie.maxAge;\n    }\n    if (cookie.domain) {\n        if (!domainValueRegExp.test(cookie.domain)) {\n            throw new TypeError(`option domain is invalid: ${cookie.domain}`);\n        }\n        str += \"; Domain=\" + cookie.domain;\n    }\n    if (cookie.path) {\n        if (!pathValueRegExp.test(cookie.path)) {\n            throw new TypeError(`option path is invalid: ${cookie.path}`);\n        }\n        str += \"; Path=\" + cookie.path;\n    }\n    if (cookie.expires) {\n        if (!isDate(cookie.expires) || !Number.isFinite(cookie.expires.valueOf())) {\n            throw new TypeError(`option expires is invalid: ${cookie.expires}`);\n        }\n        str += \"; Expires=\" + cookie.expires.toUTCString();\n    }\n    if (cookie.httpOnly) {\n        str += \"; HttpOnly\";\n    }\n    if (cookie.secure) {\n        str += \"; Secure\";\n    }\n    if (cookie.partitioned) {\n        str += \"; Partitioned\";\n    }\n    if (cookie.priority) {\n        const priority = typeof cookie.priority === \"string\"\n            ? cookie.priority.toLowerCase()\n            : undefined;\n        switch (priority) {\n            case \"low\":\n                str += \"; Priority=Low\";\n                break;\n            case \"medium\":\n                str += \"; Priority=Medium\";\n                break;\n            case \"high\":\n                str += \"; Priority=High\";\n                break;\n            default:\n                throw new TypeError(`option priority is invalid: ${cookie.priority}`);\n        }\n    }\n    if (cookie.sameSite) {\n        const sameSite = typeof cookie.sameSite === \"string\"\n            ? cookie.sameSite.toLowerCase()\n            : cookie.sameSite;\n        switch (sameSite) {\n            case true:\n            case \"strict\":\n                str += \"; SameSite=Strict\";\n                break;\n            case \"lax\":\n                str += \"; SameSite=Lax\";\n                break;\n            case \"none\":\n                str += \"; SameSite=None\";\n                break;\n            default:\n                throw new TypeError(`option sameSite is invalid: ${cookie.sameSite}`);\n        }\n    }\n    return str;\n}\n/**\n * Deserialize a `Set-Cookie` header into an object.\n *\n * deserialize('foo=bar; httpOnly')\n *   => { name: 'foo', value: 'bar', httpOnly: true }\n */\nfunction parseSetCookie(str, options) {\n    const dec = options?.decode || decode;\n    const len = str.length;\n    const endIdx = endIndex(str, 0, len);\n    const eqIdx = eqIndex(str, 0, endIdx);\n    const setCookie = eqIdx === -1\n        ? { name: \"\", value: dec(valueSlice(str, 0, endIdx)) }\n        : {\n            name: valueSlice(str, 0, eqIdx),\n            value: dec(valueSlice(str, eqIdx + 1, endIdx)),\n        };\n    let index = endIdx + 1;\n    while (index < len) {\n        const endIdx = endIndex(str, index, len);\n        const eqIdx = eqIndex(str, index, endIdx);\n        const attr = eqIdx === -1\n            ? valueSlice(str, index, endIdx)\n            : valueSlice(str, index, eqIdx);\n        const val = eqIdx === -1 ? undefined : valueSlice(str, eqIdx + 1, endIdx);\n        switch (attr.toLowerCase()) {\n            case \"httponly\":\n                setCookie.httpOnly = true;\n                break;\n            case \"secure\":\n                setCookie.secure = true;\n                break;\n            case \"partitioned\":\n                setCookie.partitioned = true;\n                break;\n            case \"domain\":\n                setCookie.domain = val;\n                break;\n            case \"path\":\n                setCookie.path = val;\n                break;\n            case \"max-age\":\n                if (val && maxAgeRegExp.test(val))\n                    setCookie.maxAge = Number(val);\n                break;\n            case \"expires\":\n                if (!val)\n                    break;\n                const date = new Date(val);\n                if (Number.isFinite(date.valueOf()))\n                    setCookie.expires = date;\n                break;\n            case \"priority\":\n                if (!val)\n                    break;\n                const priority = val.toLowerCase();\n                if (priority === \"low\" ||\n                    priority === \"medium\" ||\n                    priority === \"high\") {\n                    setCookie.priority = priority;\n                }\n                break;\n            case \"samesite\":\n                if (!val)\n                    break;\n                const sameSite = val.toLowerCase();\n                if (sameSite === \"lax\" ||\n                    sameSite === \"strict\" ||\n                    sameSite === \"none\") {\n                    setCookie.sameSite = sameSite;\n                }\n                break;\n        }\n        index = endIdx + 1;\n    }\n    return setCookie;\n}\n/**\n * Find the `;` character between `min` and `len` in str.\n */\nfunction endIndex(str, min, len) {\n    const index = str.indexOf(\";\", min);\n    return index === -1 ? len : index;\n}\n/**\n * Find the `=` character between `min` and `max` in str.\n */\nfunction eqIndex(str, min, max) {\n    const index = str.indexOf(\"=\", min);\n    return index < max ? index : -1;\n}\n/**\n * Slice out a value between startPod to max.\n */\nfunction valueSlice(str, min, max) {\n    let start = min;\n    let end = max;\n    do {\n        const code = str.charCodeAt(start);\n        if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */)\n            break;\n    } while (++start < end);\n    while (end > start) {\n        const code = str.charCodeAt(end - 1);\n        if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */)\n            break;\n        end--;\n    }\n    return str.slice(start, end);\n}\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n */\nfunction decode(str) {\n    if (str.indexOf(\"%\") === -1)\n        return str;\n    try {\n        return decodeURIComponent(str);\n    }\n    catch (e) {\n        return str;\n    }\n}\n/**\n * Determine if value is a Date.\n */\nfunction isDate(val) {\n    return __toString.call(val) === \"[object Date]\";\n}\n//# sourceMappingURL=index.js.map","import cookie from 'js-cookie'\nimport django from 'django'\n\nexport function updateItem (data, url, method) {\n  return fetch(url, {\n    headers: {\n      'Content-Type': 'application/json; charset=utf-8',\n      'X-CSRFToken': cookie.get('csrftoken')\n    },\n    method,\n    body: JSON.stringify(data)\n  }\n  )\n}\n\n// toLocaleDate returns a formatted and internationalized\n// date string. Fallback formatting is the German variant.\n// input: 2021-11-11T15:37:19.490201+01:00\n// output: 11. November 2021 (depending on locale)\nexport const toLocaleDate = (\n  isodate,\n  locale = 'de-DE',\n  formatStyle = { month: 'short', day: 'numeric', year: 'numeric' }\n) => {\n  const date = new Date(isodate)\n  return new Intl.DateTimeFormat(locale, formatStyle).format(date)\n}\n\n/*\n * checks if two arrays are equal\n *\n * @param {array} a\n * @param {array} b\n * @returns {boolean}\n */\nexport const arraysEqual = (a, b) => {\n  if (a === b) return true\n  if (a == null || b == null) return false\n  if (a.length !== b.length) return false\n\n  const aSorted = [...a].sort()\n  const bSorted = [...b].sort()\n\n  for (let i = 0; i < aSorted.length; ++i) {\n    if (aSorted[i] !== bSorted[i]) return false\n  }\n  return true\n}\n\n/*\n * converts an object to URLSearchParams\n *\n * This function takes an object and converts it into a URLSearchParams\n * instance, which can be used for query string formatting in URLs.\n * It handles arrays by appending each value to the parameter, and ignores\n * any null or undefined values.\n *\n * Example:\n * For the input:\n *   { search: 'apple', category: 'fruit', tags: ['red', 'green'], page: null }\n * The output will be:\n *   \"search=apple&category=fruit&tags=red&tags=green\"\n *\n * @param {Object} params - The object to convert into URLSearchParams\n * @returns {URLSearchParams} - The resulting URLSearchParams instance\n */\nexport const toSearchParams = (params) => {\n  return Object.entries(params).reduce((acc, [key, value]) => {\n    if (value == null || value === '') return acc\n\n    if (Array.isArray(value)) {\n      value.forEach(val => (val != null && val !== '') && acc.append(key, val))\n    } else {\n      acc.set(key, value)\n    }\n\n    return acc\n  }, new URLSearchParams())\n}\n\n/*\n * Calculates the geographical distance between two points using the Haversine formula.\n *\n * This function computes the shortest distance between two latitude/longitude coordinates\n * on Earth's surface, returning the result in meters.\n *\n * Example:\n * getDistanceBetweenPoints([13.405, 52.52], [9.9937, 53.5511])\n * returns: ~255600 meters (distance between Berlin and Hamburg)\n *\n * @param {number[]} coords1 - [longitude, latitude] of the first point\n * @param {number[]} coords2 - [longitude, latitude] of the second point\n * @returns {number} - Distance between the two points in meters\n */\nexport const getDistanceBetweenPoints = (coords1, coords2) => {\n  const toRad = (angle) => (angle * Math.PI) / 180\n\n  const [lon1, lat1] = coords1\n  const [lon2, lat2] = coords2\n\n  const earthRadiusInMeters = 6371000\n  const deltaLat = toRad(lat2 - lat1)\n  const deltaLon = toRad(lon2 - lon1)\n\n  const haversineFormula =\n    Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +\n    Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2)\n\n  const centralAngle = 2 * Math.atan2(Math.sqrt(haversineFormula), Math.sqrt(1 - haversineFormula))\n\n  return earthRadiusInMeters * centralAngle\n}\n\nconst statusNames = [django.gettext('ongoing'), django.gettext('upcoming'), django.gettext('done')]\nconst plansText = django.gettext('Plans')\n\n/*\n * Converts a search profile object into a structured list of filters.\n *\n * This function extracts relevant filtering criteria from a given search profile\n * and returns them as an array of arrays, where each sub-array represents a different\n * filter category. Empty filters are removed to ensure a clean output.\n *\n * Example:\n * Given a search profile:\n * {\n *   query_text: \"Lichtenberg\",\n *   districts: [{ name: \"Charlottenburg-Wilmersdorf\" }, { name: \"Friedrichshain-Kreuzberg\" }],\n *   topics: [{ name: \"Work & economy\" }],\n *   project_types: [{ name: \"information (no participation)\" }],\n *   status: [{ name: \"ongoing\" }],\n *   organisations: [{ name: \"liqd\" }],\n *   kiezradars: [{ name: \"Kiezradar 1\" }],\n *   plans_only: true\n * }\n *\n * The output will be:\n * [\n *   [\"Lichtenberg\"],\n *   [\"Charlottenburg-Wilmersdorf\", \"Friedrichshain-Kreuzberg\"],\n *   [\"Work & economy\"],\n *   [\"information (no participation)\"],\n *   [\"ongoing\"],\n *   [\"liqd\"],\n *   [\"Kiezradar 1\"],\n *   [\"Plans\"]\n * ]\n *\n * @param {Object} searchProfile - The search profile containing filter criteria\n * @returns {string[][]} - A structured list of filter values\n */\nexport const toFilterList = (searchProfile) => {\n  const filters = [\n    searchProfile.districts,\n    searchProfile.topics,\n    searchProfile.project_types,\n    searchProfile.status.map((status) => ({ name: statusNames[status.status] })),\n    searchProfile.organisations,\n    searchProfile.kiezradars\n  ].map((filter) => filter.map(({ name }) => name))\n\n  return [\n    [searchProfile.query_text],\n    ...filters,\n    [searchProfile.plans_only ? plansText : null]\n  ].filter(arr => arr.some(value => value))\n}\n","import L from 'leaflet'\nimport 'leaflet.markercluster'\nimport {\n  createElementObject,\n  createLayerComponent, extendContext, updateGridLayer\n} from '@react-leaflet/core'\n\nconst createMarkerClusterLayer = (props, context) => {\n  const instance = L.markerClusterGroup({ showCoverageOnHover: false })\n\n  return createElementObject(instance, extendContext(context, { layerContainer: instance }))\n}\n\nconst updateMarkerClusterLayer = (instance, props, prevProps) => {\n  updateGridLayer(instance, props, prevProps)\n}\n\nconst MarkerClusterLayer = createLayerComponent(createMarkerClusterLayer, updateMarkerClusterLayer)\nexport default MarkerClusterLayer\n","import React from 'react'\nimport django from 'django'\nimport {\n  MapPopup\n} from 'adhocracy4/adhocracy4/maps_react/static/a4maps_react/MapPopup'\nimport { useFetchedItems } from '../contexts/FetchItemsProvider'\n\nconst translations = {\n  getVotes: (count) => {\n    const countText = django.ngettext('Vote', 'Votes', count)\n    return django.interpolate(countText, [count])\n  },\n  getComments: (count) => {\n    const countText = django.ngettext('Comment', 'Comments', count)\n    return django.interpolate(countText, [count])\n  },\n  getLikes: (count) => {\n    const countText = django.ngettext('Like', 'Likes', count)\n    return django.interpolate(countText, [count])\n  },\n  getDislikes: (count) => {\n    const countText = django.ngettext('Dislike', 'Dislikes', count)\n    return django.interpolate(countText, [count])\n  },\n  support: django.gettext('Support'),\n  detailsStr: django.gettext('Show'),\n  toStr: django.gettext('to:')\n}\n\nconst Ratings = ({ feature }) => (\n  <>\n    <div className=\"stat-items\">\n      <dt>{translations.getLikes(feature.properties.positive_rating_count)}</dt>\n      <dd>{feature.properties.positive_rating_count}</dd>\n    </div>\n    <div className=\"map-popup-downvotes stat-items\">\n      <dt>{translations.getDislikes(feature.properties.negative_rating_count)}</dt>\n      <dd>{feature.properties.negative_rating_count}</dd>\n    </div>\n  </>\n)\n\nconst Support = ({ feature }) => (\n  <>\n    <div className=\"map-popup-upvotes stat-items\">\n      <dt>{translations.support}</dt>\n      <dd>{feature.properties.positive_rating_count}</dd>\n    </div>\n  </>\n)\n\n// FIXME: This might not be needed anymore, it's not visible in the design\nconst VoteCount = ({ feature }) => (\n  <>\n    <div className=\"stat-items\">\n      <dt>{translations.getVotes(feature.properties.vote_count)}</dt>\n      <dd>{feature.properties.vote_count}</dd>\n    </div>\n  </>\n)\n\nconst CommentCount = ({ feature }) => (\n  <>\n    <div className=\"stat-items\">\n      <dt>{translations.getComments(feature.properties.comment_count)}</dt>\n      <dd>{feature.properties.comment_count}</dd>\n    </div>\n  </>\n)\n\n/**\n * Renders a popup for an item feature on a map.\n *\n * @param {Object} props - The component props.\n * @param {Object} props.feature - The geojson feature.\n * @returns {JSX.Element} The JSX element representing the popup.\n */\nexport const ItemPopup = ({ feature }) => {\n  const fetchedItemsReturn = useFetchedItems()\n\n  const viewRates = fetchedItemsReturn?.results.list?.permissions.view_rate_count\n  const viewSupport = fetchedItemsReturn?.results.list?.permissions.view_support_count\n  const viewVoteCount = fetchedItemsReturn?.results.list?.permissions.view_vote_count\n  return (\n    <MapPopup feature={feature}>\n      <div className=\"maps-popups-popup-name\">\n        <a href={feature.properties.url}>\n          {feature.properties.name}\n        </a>\n      </div>\n      <dl className=\"maps-popups-popup-meta stats-dl\">\n        {viewRates && <Ratings feature={feature} />}\n        {viewSupport && <Support feature={feature} />}\n        {viewVoteCount && <VoteCount feature={feature} />}\n        <CommentCount feature={feature} />\n      </dl>\n      <a href={feature.properties.url} className=\"more\">{translations.detailsStr}\n        <span className=\"aural\">{translations.toStr} {feature.properties.name}</span>\n      </a>\n    </MapPopup>\n  )\n}\n","\"use strict\";\n\nvar defaultParseOptions = {\n  decodeValues: true,\n  map: false,\n  silent: false,\n};\n\nfunction isForbiddenKey(key) {\n  return typeof key !== \"string\" || key in {};\n}\n\nfunction createNullObj() {\n  return Object.create(null);\n}\n\nfunction isNonEmptyString(str) {\n  return typeof str === \"string\" && !!str.trim();\n}\n\nfunction parseString(setCookieValue, options) {\n  var parts = setCookieValue.split(\";\").filter(isNonEmptyString);\n\n  var nameValuePairStr = parts.shift();\n  var parsed = parseNameValuePair(nameValuePairStr);\n  var name = parsed.name;\n  var value = parsed.value;\n\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (isForbiddenKey(name)) {\n    return null;\n  }\n\n  try {\n    value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value\n  } catch (e) {\n    console.error(\n      \"set-cookie-parser: failed to decode cookie value. Set options.decodeValues=false to disable decoding.\",\n      e\n    );\n  }\n\n  var cookie = createNullObj();\n  cookie.name = name;\n  cookie.value = value;\n\n  parts.forEach(function (part) {\n    var sides = part.split(\"=\");\n    var key = sides.shift().trimLeft().toLowerCase();\n    if (isForbiddenKey(key)) {\n      return;\n    }\n    var value = sides.join(\"=\");\n    if (key === \"expires\") {\n      cookie.expires = new Date(value);\n    } else if (key === \"max-age\") {\n      var n = parseInt(value, 10);\n      if (!Number.isNaN(n)) cookie.maxAge = n;\n    } else if (key === \"secure\") {\n      cookie.secure = true;\n    } else if (key === \"httponly\") {\n      cookie.httpOnly = true;\n    } else if (key === \"samesite\") {\n      cookie.sameSite = value;\n    } else if (key === \"partitioned\") {\n      cookie.partitioned = true;\n    } else if (key) {\n      cookie[key] = value;\n    }\n  });\n\n  return cookie;\n}\n\nfunction parseNameValuePair(nameValuePairStr) {\n  // Parses name-value-pair according to rfc6265bis draft\n\n  var name = \"\";\n  var value = \"\";\n  var nameValueArr = nameValuePairStr.split(\"=\");\n  if (nameValueArr.length > 1) {\n    name = nameValueArr.shift();\n    value = nameValueArr.join(\"=\"); // everything after the first =, joined by a \"=\" if there was more than one part\n  } else {\n    value = nameValuePairStr;\n  }\n\n  return { name: name, value: value };\n}\n\nfunction parse(input, options) {\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (!input) {\n    if (!options.map) {\n      return [];\n    } else {\n      return createNullObj();\n    }\n  }\n\n  if (input.headers) {\n    if (typeof input.headers.getSetCookie === \"function\") {\n      // for fetch responses - they combine headers of the same type in the headers array,\n      // but getSetCookie returns an uncombined array\n      input = input.headers.getSetCookie();\n    } else if (input.headers[\"set-cookie\"]) {\n      // fast-path for node.js (which automatically normalizes header names to lower-case)\n      input = input.headers[\"set-cookie\"];\n    } else {\n      // slow-path for other environments - see #25\n      var sch =\n        input.headers[\n          Object.keys(input.headers).find(function (key) {\n            return key.toLowerCase() === \"set-cookie\";\n          })\n        ];\n      // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36\n      if (!sch && input.headers.cookie && !options.silent) {\n        console.warn(\n          \"Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.\"\n        );\n      }\n      input = sch;\n    }\n  }\n  if (!Array.isArray(input)) {\n    input = [input];\n  }\n\n  if (!options.map) {\n    return input\n      .filter(isNonEmptyString)\n      .map(function (str) {\n        return parseString(str, options);\n      })\n      .filter(Boolean);\n  } else {\n    var cookies = createNullObj();\n    return input.filter(isNonEmptyString).reduce(function (cookies, str) {\n      var cookie = parseString(str, options);\n      if (cookie && !isForbiddenKey(cookie.name)) {\n        cookies[cookie.name] = cookie;\n      }\n      return cookies;\n    }, cookies);\n  }\n}\n\n/*\n  Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n  that are within a single set-cookie field-value, such as in the Expires portion.\n\n  This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n  Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n  React Native's fetch does this for *every* header, including set-cookie.\n\n  Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n  Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nfunction splitCookiesString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString;\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n\n  var cookiesStrings = [];\n  var pos = 0;\n  var start;\n  var ch;\n  var lastComma;\n  var nextStart;\n  var cookiesSeparatorFound;\n\n  function skipWhitespace() {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  }\n\n  function notSpecialChar() {\n    ch = cookiesString.charAt(pos);\n\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  }\n\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        // ',' is a cookie separator if we have later first '=', not ';' or ','\n        lastComma = pos;\n        pos += 1;\n\n        skipWhitespace();\n        nextStart = pos;\n\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n\n        // currently special character\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          // we found cookies separator\n          cookiesSeparatorFound = true;\n          // pos is inside the next cookie, so back up and return it.\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.substring(start, lastComma));\n          start = pos;\n        } else {\n          // in param ',' or param separator ';',\n          // we continue from that comma\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n    }\n  }\n\n  return cookiesStrings;\n}\n\nmodule.exports = parse;\nmodule.exports.parse = parse;\nmodule.exports.parseString = parseString;\nmodule.exports.splitCookiesString = splitCookiesString;\n","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","function shallowEqualArrays(arrA, arrB) {\n  if (arrA === arrB) {\n    return true;\n  }\n  if (!arrA || !arrB) {\n    return false;\n  }\n  const len = arrA.length;\n  if (arrB.length !== len) {\n    return false;\n  }\n  for (let i = 0; i < len; i++) {\n    if (arrA[i] !== arrB[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction shallowEqualObjects(objA, objB) {\n  if (objA === objB) {\n    return true;\n  }\n  if (!objA || !objB) {\n    return false;\n  }\n  const aKeys = Object.keys(objA);\n  const bKeys = Object.keys(objB);\n  const len = aKeys.length;\n  if (bKeys.length !== len) {\n    return false;\n  }\n  for (let i = 0; i < len; i++) {\n    const key = aKeys[i];\n    if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction shallowEqual(a, b) {\n  const aIsArr = Array.isArray(a);\n  const bIsArr = Array.isArray(b);\n  if (aIsArr !== bIsArr) {\n    return false;\n  }\n  if (aIsArr && bIsArr) {\n    return shallowEqualArrays(a, b);\n  }\n  return shallowEqualObjects(a, b);\n}\n\nexport { shallowEqual, shallowEqualArrays, shallowEqualObjects };\n//# sourceMappingURL=index.modern.mjs.map\n","import { createContext, useRef, useEffect, useContext, useState } from 'react';\nimport matchMedia from 'matchmediaquery';\nimport hyphenate from 'hyphenate-style-name';\nimport { shallowEqualObjects } from 'shallow-equal';\nimport PropTypes from 'prop-types';\n\nconst stringOrNumber = PropTypes.oneOfType([PropTypes.string, PropTypes.number]);\n// media types\nconst types = {\n    all: PropTypes.bool,\n    grid: PropTypes.bool,\n    aural: PropTypes.bool,\n    braille: PropTypes.bool,\n    handheld: PropTypes.bool,\n    print: PropTypes.bool,\n    projection: PropTypes.bool,\n    screen: PropTypes.bool,\n    tty: PropTypes.bool,\n    tv: PropTypes.bool,\n    embossed: PropTypes.bool\n};\n// properties that match media queries\nconst matchers = {\n    orientation: PropTypes.oneOf(['portrait', 'landscape']),\n    scan: PropTypes.oneOf(['progressive', 'interlace']),\n    aspectRatio: PropTypes.string,\n    deviceAspectRatio: PropTypes.string,\n    height: stringOrNumber,\n    deviceHeight: stringOrNumber,\n    width: stringOrNumber,\n    deviceWidth: stringOrNumber,\n    color: PropTypes.bool,\n    colorIndex: PropTypes.bool,\n    monochrome: PropTypes.bool,\n    resolution: stringOrNumber,\n    type: Object.keys(types)\n};\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst { type, ...featureMatchers } = matchers;\n// media features\nconst features = {\n    minAspectRatio: PropTypes.string,\n    maxAspectRatio: PropTypes.string,\n    minDeviceAspectRatio: PropTypes.string,\n    maxDeviceAspectRatio: PropTypes.string,\n    minHeight: stringOrNumber,\n    maxHeight: stringOrNumber,\n    minDeviceHeight: stringOrNumber,\n    maxDeviceHeight: stringOrNumber,\n    minWidth: stringOrNumber,\n    maxWidth: stringOrNumber,\n    minDeviceWidth: stringOrNumber,\n    maxDeviceWidth: stringOrNumber,\n    minColor: PropTypes.number,\n    maxColor: PropTypes.number,\n    minColorIndex: PropTypes.number,\n    maxColorIndex: PropTypes.number,\n    minMonochrome: PropTypes.number,\n    maxMonochrome: PropTypes.number,\n    minResolution: stringOrNumber,\n    maxResolution: stringOrNumber,\n    ...featureMatchers\n};\nconst all = { ...types, ...features };\nvar mq = {\n    all: all,\n    types: types,\n    matchers: matchers,\n    features: features\n};\n\nconst negate = (cond) => `not ${cond}`;\nconst keyVal = (k, v) => {\n    const realKey = hyphenate(k);\n    // px shorthand\n    if (typeof v === 'number') {\n        v = `${v}px`;\n    }\n    if (v === true) {\n        return realKey;\n    }\n    if (v === false) {\n        return negate(realKey);\n    }\n    return `(${realKey}: ${v})`;\n};\nconst join = (conds) => conds.join(' and ');\nconst toQuery = (obj) => {\n    const rules = [];\n    Object.keys(mq.all).forEach((k) => {\n        const v = obj[k];\n        if (v != null) {\n            rules.push(keyVal(k, v));\n        }\n    });\n    return join(rules);\n};\n\nconst Context = createContext(undefined);\n\nconst makeQuery = (settings) => settings.query || toQuery(settings);\nconst hyphenateKeys = (obj) => {\n    if (!obj)\n        return undefined;\n    const keys = Object.keys(obj);\n    return keys.reduce((result, key) => {\n        result[hyphenate(key)] = obj[key];\n        return result;\n    }, {});\n};\nconst useIsUpdate = () => {\n    const ref = useRef(false);\n    useEffect(() => {\n        ref.current = true;\n    }, []);\n    return ref.current;\n};\nconst useDevice = (deviceFromProps) => {\n    const deviceFromContext = useContext(Context);\n    const getDevice = () => hyphenateKeys(deviceFromProps) || hyphenateKeys(deviceFromContext);\n    const [device, setDevice] = useState(getDevice);\n    useEffect(() => {\n        const newDevice = getDevice();\n        if (!shallowEqualObjects(device, newDevice)) {\n            setDevice(newDevice);\n        }\n    }, [deviceFromProps, deviceFromContext]);\n    return device;\n};\nconst useQuery = (settings) => {\n    const getQuery = () => makeQuery(settings);\n    const [query, setQuery] = useState(getQuery);\n    useEffect(() => {\n        const newQuery = getQuery();\n        if (query !== newQuery) {\n            setQuery(newQuery);\n        }\n    }, [settings]);\n    return query;\n};\nconst useMatchMedia = (query, device) => {\n    const getMatchMedia = () => matchMedia(query, device || {}, !!device);\n    const [mq, setMq] = useState(getMatchMedia);\n    const isUpdate = useIsUpdate();\n    useEffect(() => {\n        if (isUpdate) {\n            // skip on mounting, it has already been set\n            const newMq = getMatchMedia();\n            setMq(newMq);\n            return () => {\n                if (newMq) {\n                    newMq.dispose();\n                }\n            };\n        }\n    }, [query, device]);\n    return mq;\n};\nconst useMatches = (mediaQuery) => {\n    const [matches, setMatches] = useState(mediaQuery.matches);\n    useEffect(() => {\n        const updateMatches = (ev) => {\n            setMatches(ev.matches);\n        };\n        mediaQuery.addListener(updateMatches);\n        setMatches(mediaQuery.matches);\n        return () => {\n            mediaQuery.removeListener(updateMatches);\n        };\n    }, [mediaQuery]);\n    return matches;\n};\nconst useMediaQuery = (settings, device, onChange) => {\n    const deviceSettings = useDevice(device);\n    const query = useQuery(settings);\n    if (!query)\n        throw new Error('Invalid or missing MediaQuery!');\n    const mq = useMatchMedia(query, deviceSettings);\n    const matches = useMatches(mq);\n    const isUpdate = useIsUpdate();\n    useEffect(() => {\n        if (isUpdate && onChange) {\n            onChange(matches);\n        }\n    }, [matches]);\n    useEffect(() => () => {\n        if (mq) {\n            mq.dispose();\n        }\n    }, []);\n    return matches;\n};\n\n// ReactNode and ReactElement typings are a little funky for functional components, so the ReactElement cast is needed on the return\nconst MediaQuery = ({ children, device, onChange, ...settings }) => {\n    const matches = useMediaQuery(settings, device, onChange);\n    if (typeof children === 'function') {\n        return children(matches);\n    }\n    return matches ? children : null;\n};\n\nexport { Context, MediaQuery, MediaQuery as default, toQuery, useMediaQuery };\n//# sourceMappingURL=index.js.map\n","import React, { useRef } from 'react'\nimport django from 'django'\nimport { Card } from './Card'\nimport { CardMeta } from './CardMeta'\nimport { CardStatus } from './CardStatus'\nimport { Pagination } from '../Pagination'\nimport { useFetchedItems } from '../contexts/FetchItemsProvider'\nimport { ControlBar } from '../ControlBar'\n\nexport const CardList = (props) => {\n  const { results, currentPage, isMapAndList } = useFetchedItems()\n  const container = useRef(null)\n  const data = results.list\n  const translations = {\n    noResults: django.gettext('Nothing to show'),\n    pillList: django.gettext('Pill List')\n  }\n\n  return (\n    <>\n      {!isMapAndList && <ControlBar />}\n      <h2 className=\"aural\">{props.listStr}</h2>\n      {data?.results && data.results.length > 0\n        ? (\n          <ul className=\"list--clean\" ref={container}>\n            {data.results.map((item, idx) => (\n              <li key={idx}>\n                <Card item={item} idx={idx} permissions={data?.permissions} currentPage={currentPage}>\n                  {item.item_badges_for_list?.length > 0 && (\n                    <CardStatus\n                      pills={item.item_badges_for_list}\n                      proposal={item}\n                      numOfMorePills={item.additional_item_badges_for_list_count}\n                      itemUrl={item.url}\n                      pillHeader={translations.pillList}\n                    />\n                  )}\n                  {props.cardMeta &&\n                    <CardMeta\n                      item={item}\n                    />}\n                </Card>\n              </li>\n            ))}\n          </ul>\n          )\n        : (<p>{translations.noResults}</p>)}\n      {data?.page_count > 1 && (\n        <Pagination\n          elidedRange={data.page_elided_range}\n          nextPage={data.next}\n          prevPage={data.previous}\n          pageCount={data.page_count}\n          containerTop={container.current?.offsetTop}\n        />\n      )}\n    </>\n  )\n}\n","'use strict';\n\nvar staticMatch = require('css-mediaquery').match;\nvar dynamicMatch = typeof window !== 'undefined' ? window.matchMedia : null;\n\n// our fake MediaQueryList\nfunction Mql(query, values, forceStatic){\n  var self = this;\n  var mql;\n\n  // matchMedia will return null in FF when it's called in a hidden iframe\n  // ref: https://stackoverflow.com/a/12330568\n  if(dynamicMatch && !forceStatic) mql = dynamicMatch.call(window, query);\n\n  if (mql) {\n    this.matches = mql.matches;\n    this.media = mql.media;\n    // TODO: is there a time it makes sense to remove this listener?\n    mql.addListener(update);\n  } else {\n    this.matches = staticMatch(query, values);\n    this.media = query;\n  }\n\n  this.addListener = addListener;\n  this.removeListener = removeListener;\n  this.dispose = dispose;\n\n  function addListener(listener){\n    if(mql){\n      mql.addListener(listener);\n    }\n  }\n\n  function removeListener(listener){\n    if(mql){\n      mql.removeListener(listener);\n    }\n  }\n\n  // update ourselves!\n  function update(evt){\n    self.matches = evt.matches;\n    self.media = evt.media;\n  }\n\n  function dispose(){\n    if(mql){\n      mql.removeListener(update);\n    }\n  }\n}\n\nfunction matchMedia(query, values, forceStatic){\n  return new Mql(query, values, forceStatic);\n}\n\nmodule.exports = matchMedia;\n","import React from 'react'\nimport django from 'django'\nimport { useSearchParams } from 'react-router'\nimport { IconSwitch } from './IconSwitch'\n\nconst translated = {\n  viewMode: django.gettext('View mode'),\n  viewList: django.gettext('View as list'),\n  list: django.gettext('List'),\n  viewMap: django.gettext('View as map'),\n  map: django.gettext('Map')\n}\n\nexport const ControlBarListMapSwitch = ({ mapListViewMode }) => {\n  const [queryParams, setQueryParams] = useSearchParams()\n  const viewMode = queryParams.get('mode') || mapListViewMode || 'list'\n\n  const handleClick = () => {\n    queryParams.set('mode', viewMode === 'list' ? 'map' : 'list')\n    setQueryParams(queryParams)\n  }\n\n  return (\n    <IconSwitch\n      viewModeStr={translated.viewMode}\n      buttons={[\n        {\n          ariaLabel: translated.viewList,\n          label: translated.list,\n          icon: 'fa fa-list',\n          id: 'show_list',\n          isActive: viewMode === 'list',\n          handleClick\n        },\n        {\n          ariaLabel: translated.viewMap,\n          label: translated.map,\n          icon: 'fa fa-map',\n          id: 'show_map',\n          isActive: viewMode === 'map',\n          handleClick\n        }\n      ]}\n    />\n  )\n}\n","/*\n * Leaflet.markercluster 1.5.4+main.159090a,\n * Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps.\n * https://github.com/Leaflet/Leaflet.markercluster\n * (c) 2012-2017, Dave Leaver, smartrak\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory((global.Leaflet = global.Leaflet || {}, global.Leaflet.markercluster = {})));\n}(this, (function (exports) { 'use strict';\n\n\t/*\n\t * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within\n\t */\n\n\tvar MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({\n\n\t\toptions: {\n\t\t\tmaxClusterRadius: 80, //A cluster will cover at most this many pixels from its center\n\t\t\ticonCreateFunction: null,\n\t\t\tclusterPane: L.Marker.prototype.options.pane,\n\n\t\t\tspiderfyOnEveryZoom: false,\n\t\t\tspiderfyOnMaxZoom: true,\n\t\t\tshowCoverageOnHover: true,\n\t\t\tzoomToBoundsOnClick: true,\n\t\t\tsingleMarkerMode: false,\n\n\t\t\tdisableClusteringAtZoom: null,\n\n\t\t\t// Setting this to false prevents the removal of any clusters outside of the viewpoint, which\n\t\t\t// is the default behaviour for performance reasons.\n\t\t\tremoveOutsideVisibleBounds: true,\n\n\t\t\t// Set to false to disable all animations (zoom and spiderfy).\n\t\t\t// If false, option animateAddingMarkers below has no effect.\n\t\t\t// If L.DomUtil.TRANSITION is falsy, this option has no effect.\n\t\t\tanimate: true,\n\n\t\t\t//Whether to animate adding markers after adding the MarkerClusterGroup to the map\n\t\t\t// If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.\n\t\t\tanimateAddingMarkers: false,\n\n\t\t\t// Make it possible to provide custom function to calculate spiderfy shape positions\n\t\t\tspiderfyShapePositions: null,\n\n\t\t\t//Increase to increase the distance away that spiderfied markers appear from the center\n\t\t\tspiderfyDistanceMultiplier: 1,\n\n\t\t\t// Make it possible to specify a polyline options on a spider leg\n\t\t\tspiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 },\n\n\t\t\t// When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts\n\t\t\tchunkedLoading: false,\n\t\t\tchunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)\n\t\t\tchunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser\n\t\t\tchunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)\n\n\t\t\t//Options to pass to the L.Polygon constructor\n\t\t\tpolygonOptions: {}\n\t\t},\n\n\t\tinitialize: function (options) {\n\t\t\tL.Util.setOptions(this, options);\n\t\t\tif (!this.options.iconCreateFunction) {\n\t\t\t\tthis.options.iconCreateFunction = this._defaultIconCreateFunction;\n\t\t\t}\n\n\t\t\tthis._featureGroup = L.featureGroup();\n\t\t\tthis._featureGroup.addEventParent(this);\n\n\t\t\tthis._nonPointGroup = L.featureGroup();\n\t\t\tthis._nonPointGroup.addEventParent(this);\n\n\t\t\tthis._inZoomAnimation = 0;\n\t\t\tthis._needsClustering = [];\n\t\t\tthis._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of\n\t\t\t//The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move\n\t\t\tthis._currentShownBounds = null;\n\n\t\t\tthis._queue = [];\n\n\t\t\tthis._childMarkerEventHandlers = {\n\t\t\t\t'dragstart': this._childMarkerDragStart,\n\t\t\t\t'move': this._childMarkerMoved,\n\t\t\t\t'dragend': this._childMarkerDragEnd,\n\t\t\t};\n\n\t\t\t// Hook the appropriate animation methods.\n\t\t\tvar animate = L.DomUtil.TRANSITION && this.options.animate;\n\t\t\tL.extend(this, animate ? this._withAnimation : this._noAnimation);\n\t\t\t// Remember which MarkerCluster class to instantiate (animated or not).\n\t\t\tthis._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated;\n\t\t},\n\n\t\taddLayer: function (layer) {\n\n\t\t\tif (layer instanceof L.LayerGroup) {\n\t\t\t\treturn this.addLayers([layer]);\n\t\t\t}\n\n\t\t\t//Don't cluster non point data\n\t\t\tif (!layer.getLatLng) {\n\t\t\t\tthis._nonPointGroup.addLayer(layer);\n\t\t\t\tthis.fire('layeradd', { layer: layer });\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!this._map) {\n\t\t\t\tthis._needsClustering.push(layer);\n\t\t\t\tthis.fire('layeradd', { layer: layer });\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (this.hasLayer(layer)) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\n\t\t\t//If we have already clustered we'll need to add this one to a cluster\n\n\t\t\tif (this._unspiderfy) {\n\t\t\t\tthis._unspiderfy();\n\t\t\t}\n\n\t\t\tthis._addLayer(layer, this._maxZoom);\n\t\t\tthis.fire('layeradd', { layer: layer });\n\n\t\t\t// Refresh bounds and weighted positions.\n\t\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\t\tthis._refreshClustersIcons();\n\n\t\t\t//Work out what is visible\n\t\t\tvar visibleLayer = layer,\n\t\t\t    currentZoom = this._zoom;\n\t\t\tif (layer.__parent) {\n\t\t\t\twhile (visibleLayer.__parent._zoom >= currentZoom) {\n\t\t\t\t\t// Check if visibleLayer.__parent is undefined to avoid crashing in the next loop.\n\t\t\t\t\tif (visibleLayer.__parent === undefined) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvisibleLayer = visibleLayer.__parent;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._currentShownBounds.contains(visibleLayer.getLatLng())) {\n\t\t\t\tif (this.options.animateAddingMarkers) {\n\t\t\t\t\tthis._animationAddLayer(layer, visibleLayer);\n\t\t\t\t} else {\n\t\t\t\t\tthis._animationAddLayerNonAnimated(layer, visibleLayer);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveLayer: function (layer) {\n\n\t\t\tif (layer instanceof L.LayerGroup) {\n\t\t\t\treturn this.removeLayers([layer]);\n\t\t\t}\n\n\t\t\t//Non point layers\n\t\t\tif (!layer.getLatLng) {\n\t\t\t\tthis._nonPointGroup.removeLayer(layer);\n\t\t\t\tthis.fire('layerremove', { layer: layer });\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!this._map) {\n\t\t\t\tif (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {\n\t\t\t\t\tthis._needsRemoving.push({ layer: layer, latlng: layer._latlng });\n\t\t\t\t}\n\t\t\t\tthis.fire('layerremove', { layer: layer });\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!layer.__parent) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (this._unspiderfy) {\n\t\t\t\tthis._unspiderfy();\n\t\t\t\tthis._unspiderfyLayer(layer);\n\t\t\t}\n\n\t\t\t//Remove the marker from clusters\n\t\t\tthis._removeLayer(layer, true);\n\t\t\tthis.fire('layerremove', { layer: layer });\n\n\t\t\t// Refresh bounds and weighted positions.\n\t\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\t\tthis._refreshClustersIcons();\n\n\t\t\tlayer.off(this._childMarkerEventHandlers, this);\n\n\t\t\tif (this._featureGroup.hasLayer(layer)) {\n\t\t\t\tthis._featureGroup.removeLayer(layer);\n\t\t\t\tif (layer.clusterShow) {\n\t\t\t\t\tlayer.clusterShow();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t//Takes an array of markers and adds them in bulk\n\t\taddLayers: function (layersArray, skipLayerAddEvent) {\n\t\t\tif (!L.Util.isArray(layersArray)) {\n\t\t\t\treturn this.addLayer(layersArray);\n\t\t\t}\n\n\t\t\tvar fg = this._featureGroup,\n\t\t\t    npg = this._nonPointGroup,\n\t\t\t    chunked = this.options.chunkedLoading,\n\t\t\t    chunkInterval = this.options.chunkInterval,\n\t\t\t    chunkProgress = this.options.chunkProgress,\n\t\t\t    l = layersArray.length,\n\t\t\t    offset = 0,\n\t\t\t    originalArray = true,\n\t\t\t    m;\n\n\t\t\tif (this._map) {\n\t\t\t\tvar started = (new Date()).getTime();\n\t\t\t\tvar process = L.bind(function () {\n\t\t\t\t\tvar start = (new Date()).getTime();\n\n\t\t\t\t\t// Make sure to unspiderfy before starting to add some layers\n\t\t\t\t\tif (this._map && this._unspiderfy) {\n\t\t\t\t\t\tthis._unspiderfy();\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; offset < l; offset++) {\n\t\t\t\t\t\tif (chunked && offset % 200 === 0) {\n\t\t\t\t\t\t\t// every couple hundred markers, instrument the time elapsed since processing started:\n\t\t\t\t\t\t\tvar elapsed = (new Date()).getTime() - start;\n\t\t\t\t\t\t\tif (elapsed > chunkInterval) {\n\t\t\t\t\t\t\t\tbreak; // been working too hard, time to take a break :-)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tm = layersArray[offset];\n\n\t\t\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\t\t\t// Side effects:\n\t\t\t\t\t\t// - Total increases, so chunkProgress ratio jumps backward.\n\t\t\t\t\t\t// - Groups are not included in this group, only their non-group child layers (hasLayer).\n\t\t\t\t\t\t// Changing array length while looping does not affect performance in current browsers:\n\t\t\t\t\t\t// http://jsperf.com/for-loop-changing-length/6\n\t\t\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//Not point data, can't be clustered\n\t\t\t\t\t\tif (!m.getLatLng) {\n\t\t\t\t\t\t\tnpg.addLayer(m);\n\t\t\t\t\t\t\tif (!skipLayerAddEvent) {\n\t\t\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.hasLayer(m)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._addLayer(m, this._maxZoom);\n\t\t\t\t\t\tif (!skipLayerAddEvent) {\n\t\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will\n\t\t\t\t\t\tif (m.__parent) {\n\t\t\t\t\t\t\tif (m.__parent.getChildCount() === 2) {\n\t\t\t\t\t\t\t\tvar markers = m.__parent.getAllChildMarkers(),\n\t\t\t\t\t\t\t\t    otherMarker = markers[0] === m ? markers[1] : markers[0];\n\t\t\t\t\t\t\t\tfg.removeLayer(otherMarker);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunkProgress) {\n\t\t\t\t\t\t// report progress and time elapsed:\n\t\t\t\t\t\tchunkProgress(offset, l, (new Date()).getTime() - started);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Completed processing all markers.\n\t\t\t\t\tif (offset === l) {\n\n\t\t\t\t\t\t// Refresh bounds and weighted positions.\n\t\t\t\t\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\t\t\t\t\tthis._refreshClustersIcons();\n\n\t\t\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetTimeout(process, this.options.chunkDelay);\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\tprocess();\n\t\t\t} else {\n\t\t\t\tvar needsClustering = new Array(l - offset);\t// improve performance by preallocating the maximum size of our array\n\t\t\t\tvar tail = 0;\n\n\t\t\t\tfor (; offset < l; offset++) {\n\t\t\t\t\tm = layersArray[offset];\n\n\t\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t//Not point data, can't be clustered\n\t\t\t\t\tif (!m.getLatLng) {\n\t\t\t\t\t\tnpg.addLayer(m);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.hasLayer(m)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsClustering[tail++] = m;\n\t\t\t\t}\n\n\t\t\t\tneedsClustering = needsClustering.slice(0, tail);\t// truncate empty elements\n\t\t\t\tthis._needsClustering = this._needsClustering.concat(needsClustering);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t//Takes an array of markers and removes them in bulk\n\t\tremoveLayers: function (layersArray) {\n\t\t\tvar i, m,\n\t\t\t    l = layersArray.length,\n\t\t\t    fg = this._featureGroup,\n\t\t\t    npg = this._nonPointGroup,\n\t\t\t    originalArray = true;\n\n\t\t\tif (!this._map) {\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tm = layersArray[i];\n\n\t\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._arraySplice(this._needsClustering, m);\n\t\t\t\t\tnpg.removeLayer(m);\n\t\t\t\t\tif (this.hasLayer(m)) {\n\t\t\t\t\t\tthis._needsRemoving.push({ layer: m, latlng: m._latlng });\n\t\t\t\t\t}\n\t\t\t\t\tthis.fire('layerremove', { layer: m });\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (this._unspiderfy) {\n\t\t\t\tthis._unspiderfy();\n\n\t\t\t\t// Work on a copy of the array, so that next loop is not affected.\n\t\t\t\tvar layersArray2 = layersArray.slice(),\n\t\t\t\t    l2 = l;\n\t\t\t\tfor (i = 0; i < l2; i++) {\n\t\t\t\t\tm = layersArray2[i];\n\n\t\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray2);\n\t\t\t\t\t\tl2 = layersArray2.length;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._unspiderfyLayer(m);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tm = layersArray[i];\n\n\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!m.__parent) {\n\t\t\t\t\tnpg.removeLayer(m);\n\t\t\t\t\tthis.fire('layerremove', { layer: m });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis._removeLayer(m, true, true);\n\t\t\t\tthis.fire('layerremove', { layer: m });\n\n\t\t\t\tif (fg.hasLayer(m)) {\n\t\t\t\t\tfg.removeLayer(m);\n\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Refresh bounds and weighted positions.\n\t\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\t\tthis._refreshClustersIcons();\n\n\t\t\t//Fix up the clusters and markers on the map\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t//Removes all layers from the MarkerClusterGroup\n\t\tclearLayers: function () {\n\t\t\t//Need our own special implementation as the LayerGroup one doesn't work for us\n\n\t\t\t//If we aren't on the map (yet), blow away the markers we know of\n\t\t\tif (!this._map) {\n\t\t\t\tthis._needsClustering = [];\n\t\t\t\tthis._needsRemoving = [];\n\t\t\t\tdelete this._gridClusters;\n\t\t\t\tdelete this._gridUnclustered;\n\t\t\t}\n\n\t\t\tif (this._noanimationUnspiderfy) {\n\t\t\t\tthis._noanimationUnspiderfy();\n\t\t\t}\n\n\t\t\t//Remove all the visible layers\n\t\t\tthis._featureGroup.clearLayers();\n\t\t\tthis._nonPointGroup.clearLayers();\n\n\t\t\tthis.eachLayer(function (marker) {\n\t\t\t\tmarker.off(this._childMarkerEventHandlers, this);\n\t\t\t\tdelete marker.__parent;\n\t\t\t}, this);\n\n\t\t\tif (this._map) {\n\t\t\t\t//Reset _topClusterLevel and the DistanceGrids\n\t\t\t\tthis._generateInitialClusters();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t//Override FeatureGroup.getBounds as it doesn't work\n\t\tgetBounds: function () {\n\t\t\tvar bounds = new L.LatLngBounds();\n\n\t\t\tif (this._topClusterLevel) {\n\t\t\t\tbounds.extend(this._topClusterLevel._bounds);\n\t\t\t}\n\n\t\t\tfor (var i = this._needsClustering.length - 1; i >= 0; i--) {\n\t\t\t\tbounds.extend(this._needsClustering[i].getLatLng());\n\t\t\t}\n\n\t\t\tbounds.extend(this._nonPointGroup.getBounds());\n\n\t\t\treturn bounds;\n\t\t},\n\n\t\t//Overrides LayerGroup.eachLayer\n\t\teachLayer: function (method, context) {\n\t\t\tvar markers = this._needsClustering.slice(),\n\t\t\t\tneedsRemoving = this._needsRemoving,\n\t\t\t\tthisNeedsRemoving, i, j;\n\n\t\t\tif (this._topClusterLevel) {\n\t\t\t\tthis._topClusterLevel.getAllChildMarkers(markers);\n\t\t\t}\n\n\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\n\t\t\t\tthisNeedsRemoving = true;\n\n\t\t\t\tfor (j = needsRemoving.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (needsRemoving[j].layer === markers[i]) {\n\t\t\t\t\t\tthisNeedsRemoving = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (thisNeedsRemoving) {\n\t\t\t\t\tmethod.call(context, markers[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._nonPointGroup.eachLayer(method, context);\n\t\t},\n\n\t\t//Overrides LayerGroup.getLayers\n\t\tgetLayers: function () {\n\t\t\tvar layers = [];\n\t\t\tthis.eachLayer(function (l) {\n\t\t\t\tlayers.push(l);\n\t\t\t});\n\t\t\treturn layers;\n\t\t},\n\n\t\t//Overrides LayerGroup.getLayer, WARNING: Really bad performance\n\t\tgetLayer: function (id) {\n\t\t\tvar result = null;\n\n\t\t\tid = parseInt(id, 10);\n\n\t\t\tthis.eachLayer(function (l) {\n\t\t\t\tif (L.stamp(l) === id) {\n\t\t\t\t\tresult = l;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn result;\n\t\t},\n\n\t\t//Returns true if the given layer is in this MarkerClusterGroup\n\t\thasLayer: function (layer) {\n\t\t\tif (!layer) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar i, anArray = this._needsClustering;\n\n\t\t\tfor (i = anArray.length - 1; i >= 0; i--) {\n\t\t\t\tif (anArray[i] === layer) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tanArray = this._needsRemoving;\n\t\t\tfor (i = anArray.length - 1; i >= 0; i--) {\n\t\t\t\tif (anArray[i].layer === layer) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);\n\t\t},\n\n\t\t//Zoom down to show the given layer (spiderfying if necessary) then calls the callback\n\t\tzoomToShowLayer: function (layer, callback) {\n\n\t\t\tvar map = this._map;\n\n\t\t\tif (typeof callback !== 'function') {\n\t\t\t\tcallback = function () {};\n\t\t\t}\n\n\t\t\tvar showMarker = function () {\n\t\t\t\t// Assumes that map.hasLayer checks for direct appearance on map, not recursively calling\n\t\t\t\t// hasLayer on Layer Groups that are on map (typically not calling this MarkerClusterGroup.hasLayer, which would always return true)\n\t\t\t\tif ((map.hasLayer(layer) || map.hasLayer(layer.__parent)) && !this._inZoomAnimation) {\n\t\t\t\t\tthis._map.off('moveend', showMarker, this);\n\t\t\t\t\tthis.off('animationend', showMarker, this);\n\n\t\t\t\t\tif (map.hasLayer(layer)) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if (layer.__parent._icon) {\n\t\t\t\t\t\tthis.once('spiderfied', callback, this);\n\t\t\t\t\t\tlayer.__parent.spiderfy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {\n\t\t\t\t//Layer is visible ond on screen, immediate return\n\t\t\t\tcallback();\n\t\t\t} else if (layer.__parent._zoom < Math.round(this._map._zoom)) {\n\t\t\t\t//Layer should be visible at this zoom level. It must not be on screen so just pan over to it\n\t\t\t\tthis._map.on('moveend', showMarker, this);\n\t\t\t\tthis._map.panTo(layer.getLatLng());\n\t\t\t} else {\n\t\t\t\tthis._map.on('moveend', showMarker, this);\n\t\t\t\tthis.on('animationend', showMarker, this);\n\t\t\t\tlayer.__parent.zoomToBounds();\n\t\t\t}\n\t\t},\n\n\t\t//Overrides FeatureGroup.onAdd\n\t\tonAdd: function (map) {\n\t\t\tthis._map = map;\n\t\t\tvar i, l, layer;\n\n\t\t\tif (!isFinite(this._map.getMaxZoom())) {\n\t\t\t\tthrow \"Map has no maxZoom specified\";\n\t\t\t}\n\n\t\t\tthis._featureGroup.addTo(map);\n\t\t\tthis._nonPointGroup.addTo(map);\n\n\t\t\tif (!this._gridClusters) {\n\t\t\t\tthis._generateInitialClusters();\n\t\t\t}\n\n\t\t\tthis._maxLat = map.options.crs.projection.MAX_LATITUDE;\n\n\t\t\t//Restore all the positions as they are in the MCG before removing them\n\t\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\n\t\t\t\tlayer = this._needsRemoving[i];\n\t\t\t\tlayer.newlatlng = layer.layer._latlng;\n\t\t\t\tlayer.layer._latlng = layer.latlng;\n\t\t\t}\n\t\t\t//Remove them, then restore their new positions\n\t\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\n\t\t\t\tlayer = this._needsRemoving[i];\n\t\t\t\tthis._removeLayer(layer.layer, true);\n\t\t\t\tlayer.layer._latlng = layer.newlatlng;\n\t\t\t}\n\t\t\tthis._needsRemoving = [];\n\n\t\t\t//Remember the current zoom level and bounds\n\t\t\tthis._zoom = Math.round(this._map._zoom);\n\t\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\n\n\t\t\tthis._map.on('zoomend', this._zoomEnd, this);\n\t\t\tthis._map.on('moveend', this._moveEnd, this);\n\n\t\t\tif (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\n\t\t\t\tthis._spiderfierOnAdd();\n\t\t\t}\n\n\t\t\tthis._bindEvents();\n\n\t\t\t//Actually add our markers to the map:\n\t\t\tl = this._needsClustering;\n\t\t\tthis._needsClustering = [];\n\t\t\tthis.addLayers(l, true);\n\t\t},\n\n\t\t//Overrides FeatureGroup.onRemove\n\t\tonRemove: function (map) {\n\t\t\tmap.off('zoomend', this._zoomEnd, this);\n\t\t\tmap.off('moveend', this._moveEnd, this);\n\n\t\t\tthis._unbindEvents();\n\n\t\t\t//In case we are in a cluster animation\n\t\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\n\n\t\t\tif (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\n\t\t\t\tthis._spiderfierOnRemove();\n\t\t\t}\n\n\t\t\tdelete this._maxLat;\n\n\t\t\t//Clean up all the layers we added to the map\n\t\t\tthis._hideCoverage();\n\t\t\tthis._featureGroup.remove();\n\t\t\tthis._nonPointGroup.remove();\n\n\t\t\tthis._featureGroup.clearLayers();\n\n\t\t\tthis._map = null;\n\t\t},\n\n\t\tgetVisibleParent: function (marker) {\n\t\t\tvar vMarker = marker;\n\t\t\twhile (vMarker && !vMarker._icon) {\n\t\t\t\tvMarker = vMarker.__parent;\n\t\t\t}\n\t\t\treturn vMarker || null;\n\t\t},\n\n\t\t//Remove the given object from the given array\n\t\t_arraySplice: function (anArray, obj) {\n\t\t\tfor (var i = anArray.length - 1; i >= 0; i--) {\n\t\t\t\tif (anArray[i] === obj) {\n\t\t\t\t\tanArray.splice(i, 1);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.\n\t\t * @param marker to be removed from _gridUnclustered.\n\t\t * @param z integer bottom start zoom level (included)\n\t\t * @private\n\t\t */\n\t\t_removeFromGridUnclustered: function (marker, z) {\n\t\t\tvar map = this._map,\n\t\t\t    gridUnclustered = this._gridUnclustered,\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom());\n\n\t\t\tfor (; z >= minZoom; z--) {\n\t\t\t\tif (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_childMarkerDragStart: function (e) {\n\t\t\te.target.__dragStart = e.target._latlng;\n\t\t},\n\n\t\t_childMarkerMoved: function (e) {\n\t\t\tif (!this._ignoreMove && !e.target.__dragStart) {\n\t\t\t\tvar isPopupOpen = e.target._popup && e.target._popup.isOpen();\n\n\t\t\t\tthis._moveChild(e.target, e.oldLatLng, e.latlng);\n\n\t\t\t\tif (isPopupOpen) {\n\t\t\t\t\te.target.openPopup();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_moveChild: function (layer, from, to) {\n\t\t\tlayer._latlng = from;\n\t\t\tthis.removeLayer(layer);\n\n\t\t\tlayer._latlng = to;\n\t\t\tthis.addLayer(layer);\n\t\t},\n\n\t\t_childMarkerDragEnd: function (e) {\n\t\t\tvar dragStart = e.target.__dragStart;\n\t\t\tdelete e.target.__dragStart;\n\t\t\tif (dragStart) {\n\t\t\t\tthis._moveChild(e.target, dragStart, e.target._latlng);\n\t\t\t}\n\t\t},\n\n\n\t\t//Internal function for removing a marker from everything.\n\t\t//dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)\n\t\t_removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {\n\t\t\tvar gridClusters = this._gridClusters,\n\t\t\t\tgridUnclustered = this._gridUnclustered,\n\t\t\t\tfg = this._featureGroup,\n\t\t\t\tmap = this._map,\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom());\n\n\t\t\t//Remove the marker from distance clusters it might be in\n\t\t\tif (removeFromDistanceGrid) {\n\t\t\t\tthis._removeFromGridUnclustered(marker, this._maxZoom);\n\t\t\t}\n\n\t\t\t//Work our way up the clusters removing them as we go if required\n\t\t\tvar cluster = marker.__parent,\n\t\t\t\tmarkers = cluster._markers,\n\t\t\t\totherMarker;\n\n\t\t\t//Remove the marker from the immediate parents marker list\n\t\t\tthis._arraySplice(markers, marker);\n\n\t\t\twhile (cluster) {\n\t\t\t\tcluster._childCount--;\n\t\t\t\tcluster._boundsNeedUpdate = true;\n\n\t\t\t\tif (cluster._zoom < minZoom) {\n\t\t\t\t\t//Top level, do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required\n\t\t\t\t\t//We need to push the other marker up to the parent\n\t\t\t\t\totherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];\n\n\t\t\t\t\t//Update distance grid\n\t\t\t\t\tgridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));\n\t\t\t\t\tgridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));\n\n\t\t\t\t\t//Move otherMarker up to parent\n\t\t\t\t\tthis._arraySplice(cluster.__parent._childClusters, cluster);\n\t\t\t\t\tcluster.__parent._markers.push(otherMarker);\n\t\t\t\t\totherMarker.__parent = cluster.__parent;\n\n\t\t\t\t\tif (cluster._icon) {\n\t\t\t\t\t\t//Cluster is currently on the map, need to put the marker on the map instead\n\t\t\t\t\t\tfg.removeLayer(cluster);\n\t\t\t\t\t\tif (!dontUpdateMap) {\n\t\t\t\t\t\t\tfg.addLayer(otherMarker);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcluster._iconNeedsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tcluster = cluster.__parent;\n\t\t\t}\n\n\t\t\tdelete marker.__parent;\n\t\t},\n\n\t\t_isOrIsParent: function (el, oel) {\n\t\t\twhile (oel) {\n\t\t\t\tif (el === oel) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\toel = oel.parentNode;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t//Override L.Evented.fire\n\t\tfire: function (type, data, propagate) {\n\t\t\tif (data && data.layer instanceof L.MarkerCluster) {\n\t\t\t\t//Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)\n\t\t\t\tif (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttype = 'cluster' + type;\n\t\t\t}\n\n\t\t\tL.FeatureGroup.prototype.fire.call(this, type, data, propagate);\n\t\t},\n\n\t\t//Override L.Evented.listens\n\t\tlistens: function (type, propagate) {\n\t\t\treturn L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);\n\t\t},\n\n\t\t//Default functionality\n\t\t_defaultIconCreateFunction: function (cluster) {\n\t\t\tvar childCount = cluster.getChildCount();\n\n\t\t\tvar c = ' marker-cluster-';\n\t\t\tif (childCount < 10) {\n\t\t\t\tc += 'small';\n\t\t\t} else if (childCount < 100) {\n\t\t\t\tc += 'medium';\n\t\t\t} else {\n\t\t\t\tc += 'large';\n\t\t\t}\n\n\t\t\treturn new L.DivIcon({ html: '<div><span>' + childCount + ' <span aria-label=\"markers\"></span>' + '</span></div>', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });\n\t\t},\n\n\t\t_bindEvents: function () {\n\t\t\tvar map = this._map,\n\t\t\t    spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\n\t\t\t    showCoverageOnHover = this.options.showCoverageOnHover,\n\t\t\t    zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,\n\t\t\t    spiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom;\n\n\t\t\t//Zoom on cluster click or spiderfy if we are at the lowest level\n\t\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {\n\t\t\t\tthis.on('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);\n\t\t\t}\n\n\t\t\t//Show convex hull (boundary) polygon on mouse over\n\t\t\tif (showCoverageOnHover) {\n\t\t\t\tthis.on('clustermouseover', this._showCoverage, this);\n\t\t\t\tthis.on('clustermouseout', this._hideCoverage, this);\n\t\t\t\tmap.on('zoomend', this._hideCoverage, this);\n\t\t\t}\n\t\t},\n\n\t\t_zoomOrSpiderfy: function (e) {\n\t\t\tvar cluster = e.layer,\n\t\t\t    bottomCluster = cluster;\n\n\t\t\tif (e.type === 'clusterkeypress' && e.originalEvent && e.originalEvent.keyCode !== 13) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (bottomCluster._childClusters.length === 1) {\n\t\t\t\tbottomCluster = bottomCluster._childClusters[0];\n\t\t\t}\n\n\t\t\tif (bottomCluster._zoom === this._maxZoom &&\n\t\t\t\tbottomCluster._childCount === cluster._childCount &&\n\t\t\t\tthis.options.spiderfyOnMaxZoom) {\n\n\t\t\t\t// All child markers are contained in a single cluster from this._maxZoom to this cluster.\n\t\t\t\tcluster.spiderfy();\n\t\t\t} else if (this.options.zoomToBoundsOnClick) {\n\t\t\t\tcluster.zoomToBounds();\n\t\t\t}\n\n\t\t\tif (this.options.spiderfyOnEveryZoom) {\n\t\t\t\tcluster.spiderfy();\n\t\t\t}\n\n\t\t\t// Focus the map again for keyboard users.\n\t\t\tif (e.originalEvent && e.originalEvent.keyCode === 13) {\n\t\t\t\tthis._map._container.focus();\n\t\t\t}\n\t\t},\n\n\t\t_showCoverage: function (e) {\n\t\t\tvar map = this._map;\n\t\t\tif (this._inZoomAnimation) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._shownPolygon) {\n\t\t\t\tmap.removeLayer(this._shownPolygon);\n\t\t\t}\n\t\t\tif (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {\n\t\t\t\tthis._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);\n\t\t\t\tmap.addLayer(this._shownPolygon);\n\t\t\t}\n\t\t},\n\n\t\t_hideCoverage: function () {\n\t\t\tif (this._shownPolygon) {\n\t\t\t\tthis._map.removeLayer(this._shownPolygon);\n\t\t\t\tthis._shownPolygon = null;\n\t\t\t}\n\t\t},\n\n\t\t_unbindEvents: function () {\n\t\t\tvar spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\n\t\t\t\tshowCoverageOnHover = this.options.showCoverageOnHover,\n\t\t\t\tzoomToBoundsOnClick = this.options.zoomToBoundsOnClick,\n\t\t\t\tspiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom,\n\t\t\t\tmap = this._map;\n\n\t\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {\n\t\t\t\tthis.off('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);\n\t\t\t}\n\t\t\tif (showCoverageOnHover) {\n\t\t\t\tthis.off('clustermouseover', this._showCoverage, this);\n\t\t\t\tthis.off('clustermouseout', this._hideCoverage, this);\n\t\t\t\tmap.off('zoomend', this._hideCoverage, this);\n\t\t\t}\n\t\t},\n\n\t\t_zoomEnd: function () {\n\t\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._mergeSplitClusters();\n\n\t\t\tthis._zoom = Math.round(this._map._zoom);\n\t\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\n\t\t},\n\n\t\t_moveEnd: function () {\n\t\t\tif (this._inZoomAnimation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newBounds = this._getExpandedVisibleBounds();\n\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds);\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);\n\n\t\t\tthis._currentShownBounds = newBounds;\n\t\t\treturn;\n\t\t},\n\n\t\t_generateInitialClusters: function () {\n\t\t\tvar maxZoom = Math.ceil(this._map.getMaxZoom()),\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\n\t\t\t\tradius = this.options.maxClusterRadius,\n\t\t\t\tradiusFn = radius;\n\n\t\t\t//If we just set maxClusterRadius to a single number, we need to create\n\t\t\t//a simple function to return that number. Otherwise, we just have to\n\t\t\t//use the function we've passed in.\n\t\t\tif (typeof radius !== \"function\") {\n\t\t\t\tradiusFn = function () { return radius; };\n\t\t\t}\n\n\t\t\tif (this.options.disableClusteringAtZoom !== null) {\n\t\t\t\tmaxZoom = this.options.disableClusteringAtZoom - 1;\n\t\t\t}\n\t\t\tthis._maxZoom = maxZoom;\n\t\t\tthis._gridClusters = {};\n\t\t\tthis._gridUnclustered = {};\n\n\t\t\t//Set up DistanceGrids for each zoom\n\t\t\tfor (var zoom = maxZoom; zoom >= minZoom; zoom--) {\n\t\t\t\tthis._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));\n\t\t\t\tthis._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));\n\t\t\t}\n\n\t\t\t// Instantiate the appropriate L.MarkerCluster class (animated or not).\n\t\t\tthis._topClusterLevel = new this._markerCluster(this, minZoom - 1);\n\t\t},\n\n\t\t//Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)\n\t\t_addLayer: function (layer, zoom) {\n\t\t\tvar gridClusters = this._gridClusters,\n\t\t\t    gridUnclustered = this._gridUnclustered,\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\n\t\t\t    markerPoint, z;\n\n\t\t\tif (this.options.singleMarkerMode) {\n\t\t\t\tthis._overrideMarkerIcon(layer);\n\t\t\t}\n\n\t\t\tlayer.on(this._childMarkerEventHandlers, this);\n\n\t\t\t//Find the lowest zoom level to slot this one in\n\t\t\tfor (; zoom >= minZoom; zoom--) {\n\t\t\t\tmarkerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position\n\n\t\t\t\t//Try find a cluster close by\n\t\t\t\tvar closest = gridClusters[zoom].getNearObject(markerPoint);\n\t\t\t\tif (closest) {\n\t\t\t\t\tclosest._addChild(layer);\n\t\t\t\t\tlayer.__parent = closest;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Try find a marker close by to form a new cluster with\n\t\t\t\tclosest = gridUnclustered[zoom].getNearObject(markerPoint);\n\t\t\t\tif (closest) {\n\t\t\t\t\tvar parent = closest.__parent;\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tthis._removeLayer(closest, false);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Create new cluster with these 2 in it\n\n\t\t\t\t\tvar newCluster = new this._markerCluster(this, zoom, closest, layer);\n\t\t\t\t\tgridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));\n\t\t\t\t\tclosest.__parent = newCluster;\n\t\t\t\t\tlayer.__parent = newCluster;\n\n\t\t\t\t\t//First create any new intermediate parent clusters that don't exist\n\t\t\t\t\tvar lastParent = newCluster;\n\t\t\t\t\tfor (z = zoom - 1; z > parent._zoom; z--) {\n\t\t\t\t\t\tlastParent = new this._markerCluster(this, z, lastParent);\n\t\t\t\t\t\tgridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));\n\t\t\t\t\t}\n\t\t\t\t\tparent._addChild(lastParent);\n\n\t\t\t\t\t//Remove closest from this zoom level and any above that it is in, replace with newCluster\n\t\t\t\t\tthis._removeFromGridUnclustered(closest, zoom);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards\n\t\t\t\tgridUnclustered[zoom].addObject(layer, markerPoint);\n\t\t\t}\n\n\t\t\t//Didn't get in anything, add us to the top\n\t\t\tthis._topClusterLevel._addChild(layer);\n\t\t\tlayer.__parent = this._topClusterLevel;\n\t\t\treturn;\n\t\t},\n\n\t\t/**\n\t\t * Refreshes the icon of all \"dirty\" visible clusters.\n\t\t * Non-visible \"dirty\" clusters will be updated when they are added to the map.\n\t\t * @private\n\t\t */\n\t\t_refreshClustersIcons: function () {\n\t\t\tthis._featureGroup.eachLayer(function (c) {\n\t\t\t\tif (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {\n\t\t\t\t\tc._updateIcon();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t//Enqueue code to fire after the marker expand/contract has happened\n\t\t_enqueue: function (fn) {\n\t\t\tthis._queue.push(fn);\n\t\t\tif (!this._queueTimeout) {\n\t\t\t\tthis._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);\n\t\t\t}\n\t\t},\n\t\t_processQueue: function () {\n\t\t\tfor (var i = 0; i < this._queue.length; i++) {\n\t\t\t\tthis._queue[i].call(this);\n\t\t\t}\n\t\t\tthis._queue.length = 0;\n\t\t\tclearTimeout(this._queueTimeout);\n\t\t\tthis._queueTimeout = null;\n\t\t},\n\n\t\t//Merge and split any existing clusters that are too big or small\n\t\t_mergeSplitClusters: function () {\n\t\t\tvar mapZoom = Math.round(this._map._zoom);\n\n\t\t\t//In case we are starting to split before the animation finished\n\t\t\tthis._processQueue();\n\n\t\t\tif (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split\n\t\t\t\tthis._animationStart();\n\t\t\t\t//Remove clusters now off screen\n\t\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds());\n\n\t\t\t\tthis._animationZoomIn(this._zoom, mapZoom);\n\n\t\t\t} else if (this._zoom > mapZoom) { //Zoom out, merge\n\t\t\t\tthis._animationStart();\n\n\t\t\t\tthis._animationZoomOut(this._zoom, mapZoom);\n\t\t\t} else {\n\t\t\t\tthis._moveEnd();\n\t\t\t}\n\t\t},\n\n\t\t//Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)\n\t\t_getExpandedVisibleBounds: function () {\n\t\t\tif (!this.options.removeOutsideVisibleBounds) {\n\t\t\t\treturn this._mapBoundsInfinite;\n\t\t\t} else if (L.Browser.mobile) {\n\t\t\t\treturn this._checkBoundsMaxLat(this._map.getBounds());\n\t\t\t}\n\n\t\t\treturn this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.\n\t\t},\n\n\t\t/**\n\t\t * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude\n\t\t * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).\n\t\t * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without\n\t\t * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,\n\t\t * making the user think that MCG \"eats\" them and never displays them again.\n\t\t * @param bounds L.LatLngBounds\n\t\t * @returns {L.LatLngBounds}\n\t\t * @private\n\t\t */\n\t\t_checkBoundsMaxLat: function (bounds) {\n\t\t\tvar maxLat = this._maxLat;\n\n\t\t\tif (maxLat !== undefined) {\n\t\t\t\tif (bounds.getNorth() >= maxLat) {\n\t\t\t\t\tbounds._northEast.lat = Infinity;\n\t\t\t\t}\n\t\t\t\tif (bounds.getSouth() <= -maxLat) {\n\t\t\t\t\tbounds._southWest.lat = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn bounds;\n\t\t},\n\n\t\t//Shared animation code\n\t\t_animationAddLayerNonAnimated: function (layer, newCluster) {\n\t\t\tif (newCluster === layer) {\n\t\t\t\tthis._featureGroup.addLayer(layer);\n\t\t\t} else if (newCluster._childCount === 2) {\n\t\t\t\tnewCluster._addToMap();\n\n\t\t\t\tvar markers = newCluster.getAllChildMarkers();\n\t\t\t\tthis._featureGroup.removeLayer(markers[0]);\n\t\t\t\tthis._featureGroup.removeLayer(markers[1]);\n\t\t\t} else {\n\t\t\t\tnewCluster._updateIcon();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extracts individual (i.e. non-group) layers from a Layer Group.\n\t\t * @param group to extract layers from.\n\t\t * @param output {Array} in which to store the extracted layers.\n\t\t * @returns {*|Array}\n\t\t * @private\n\t\t */\n\t\t_extractNonGroupLayers: function (group, output) {\n\t\t\tvar layers = group.getLayers(),\n\t\t\t    i = 0,\n\t\t\t    layer;\n\n\t\t\toutput = output || [];\n\n\t\t\tfor (; i < layers.length; i++) {\n\t\t\t\tlayer = layers[i];\n\n\t\t\t\tif (layer instanceof L.LayerGroup) {\n\t\t\t\t\tthis._extractNonGroupLayers(layer, output);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\toutput.push(layer);\n\t\t\t}\n\n\t\t\treturn output;\n\t\t},\n\n\t\t/**\n\t\t * Implements the singleMarkerMode option.\n\t\t * @param layer Marker to re-style using the Clusters iconCreateFunction.\n\t\t * @returns {L.Icon} The newly created icon.\n\t\t * @private\n\t\t */\n\t\t_overrideMarkerIcon: function (layer) {\n\t\t\tvar icon = layer.options.icon = this.options.iconCreateFunction({\n\t\t\t\tgetChildCount: function () {\n\t\t\t\t\treturn 1;\n\t\t\t\t},\n\t\t\t\tgetAllChildMarkers: function () {\n\t\t\t\t\treturn [layer];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn icon;\n\t\t}\n\t});\n\n\t// Constant bounds used in case option \"removeOutsideVisibleBounds\" is set to false.\n\tL.MarkerClusterGroup.include({\n\t\t_mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))\n\t});\n\n\tL.MarkerClusterGroup.include({\n\t\t_noAnimation: {\n\t\t\t//Non Animated versions of everything\n\t\t\t_animationStart: function () {\n\t\t\t\t//Do nothing...\n\t\t\t},\n\t\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\n\t\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\n\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\n\n\t\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\n\t\t\t\tthis.fire('animationend');\n\t\t\t},\n\t\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\n\t\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\n\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\n\n\t\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\n\t\t\t\tthis.fire('animationend');\n\t\t\t},\n\t\t\t_animationAddLayer: function (layer, newCluster) {\n\t\t\t\tthis._animationAddLayerNonAnimated(layer, newCluster);\n\t\t\t}\n\t\t},\n\n\t\t_withAnimation: {\n\t\t\t//Animated versions here\n\t\t\t_animationStart: function () {\n\t\t\t\tthis._map._mapPane.className += ' leaflet-cluster-anim';\n\t\t\t\tthis._inZoomAnimation++;\n\t\t\t},\n\n\t\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\n\t\t\t\tvar bounds = this._getExpandedVisibleBounds(),\n\t\t\t\t    fg = this._featureGroup,\n\t\t\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\n\t\t\t\t    i;\n\n\t\t\t\tthis._ignoreMove = true;\n\n\t\t\t\t//Add all children of current clusters to map and remove those clusters from map\n\t\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\n\t\t\t\t\tvar startPos = c._latlng,\n\t\t\t\t\t    markers  = c._markers,\n\t\t\t\t\t    m;\n\n\t\t\t\t\tif (!bounds.contains(startPos)) {\n\t\t\t\t\t\tstartPos = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us\n\t\t\t\t\t\tfg.removeLayer(c);\n\t\t\t\t\t\tc._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//Fade out old cluster\n\t\t\t\t\t\tc.clusterHide();\n\t\t\t\t\t\tc._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Remove all markers that aren't visible any more\n\t\t\t\t\t//TODO: Do we actually need to do this on the higher levels too?\n\t\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tm = markers[i];\n\t\t\t\t\t\tif (!bounds.contains(m._latlng)) {\n\t\t\t\t\t\t\tfg.removeLayer(m);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\tthis._forceLayout();\n\n\t\t\t\t//Update opacities\n\t\t\t\tthis._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);\n\t\t\t\t//TODO Maybe? Update markers in _recursivelyBecomeVisible\n\t\t\t\tfg.eachLayer(function (n) {\n\t\t\t\t\tif (!(n instanceof L.MarkerCluster) && n._icon) {\n\t\t\t\t\t\tn.clusterShow();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//update the positions of the just added clusters/markers\n\t\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {\n\t\t\t\t\tc._recursivelyRestoreChildPositions(newZoomLevel);\n\t\t\t\t});\n\n\t\t\t\tthis._ignoreMove = false;\n\n\t\t\t\t//Remove the old clusters and close the zoom animation\n\t\t\t\tthis._enqueue(function () {\n\t\t\t\t\t//update the positions of the just added clusters/markers\n\t\t\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\n\t\t\t\t\t\tfg.removeLayer(c);\n\t\t\t\t\t\tc.clusterShow();\n\t\t\t\t\t});\n\n\t\t\t\t\tthis._animationEnd();\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\n\t\t\t\tthis._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);\n\n\t\t\t\t//Need to add markers for those that weren't on the map before but are now\n\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\n\t\t\t\t//Remove markers that were on the map before but won't be now\n\t\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds());\n\t\t\t},\n\n\t\t\t_animationAddLayer: function (layer, newCluster) {\n\t\t\t\tvar me = this,\n\t\t\t\t    fg = this._featureGroup;\n\n\t\t\t\tfg.addLayer(layer);\n\t\t\t\tif (newCluster !== layer) {\n\t\t\t\t\tif (newCluster._childCount > 2) { //Was already a cluster\n\n\t\t\t\t\t\tnewCluster._updateIcon();\n\t\t\t\t\t\tthis._forceLayout();\n\t\t\t\t\t\tthis._animationStart();\n\n\t\t\t\t\t\tlayer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));\n\t\t\t\t\t\tlayer.clusterHide();\n\n\t\t\t\t\t\tthis._enqueue(function () {\n\t\t\t\t\t\t\tfg.removeLayer(layer);\n\t\t\t\t\t\t\tlayer.clusterShow();\n\n\t\t\t\t\t\t\tme._animationEnd();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t} else { //Just became a cluster\n\t\t\t\t\t\tthis._forceLayout();\n\n\t\t\t\t\t\tme._animationStart();\n\t\t\t\t\t\tme._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Private methods for animated versions.\n\t\t_animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {\n\t\t\tvar bounds = this._getExpandedVisibleBounds(),\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom());\n\n\t\t\t//Animate all of the markers in the clusters to move to their cluster center point\n\t\t\tcluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel);\n\n\t\t\tvar me = this;\n\n\t\t\t//Update the opacity (If we immediately set it they won't animate)\n\t\t\tthis._forceLayout();\n\t\t\tcluster._recursivelyBecomeVisible(bounds, newZoomLevel);\n\n\t\t\t//TODO: Maybe use the transition timing stuff to make this more reliable\n\t\t\t//When the animations are done, tidy up\n\t\t\tthis._enqueue(function () {\n\n\t\t\t\t//This cluster stopped being a cluster before the timeout fired\n\t\t\t\tif (cluster._childCount === 1) {\n\t\t\t\t\tvar m = cluster._markers[0];\n\t\t\t\t\t//If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it\n\t\t\t\t\tthis._ignoreMove = true;\n\t\t\t\t\tm.setLatLng(m.getLatLng());\n\t\t\t\t\tthis._ignoreMove = false;\n\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcluster._recursively(bounds, newZoomLevel, minZoom, function (c) {\n\t\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tme._animationEnd();\n\t\t\t});\n\t\t},\n\n\t\t_animationEnd: function () {\n\t\t\tif (this._map) {\n\t\t\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\n\t\t\t}\n\t\t\tthis._inZoomAnimation--;\n\t\t\tthis.fire('animationend');\n\t\t},\n\n\t\t//Force a browser layout of stuff in the map\n\t\t// Should apply the current opacity and location to all elements so we can update them again for an animation\n\t\t_forceLayout: function () {\n\t\t\t//In my testing this works, infact offsetWidth of any element seems to work.\n\t\t\t//Could loop all this._layers and do this for each _icon if it stops working\n\n\t\t\tL.Util.falseFn(document.body.offsetWidth);\n\t\t}\n\t});\n\n\tL.markerClusterGroup = function (options) {\n\t\treturn new L.MarkerClusterGroup(options);\n\t};\n\n\tvar MarkerCluster = L.MarkerCluster = L.Marker.extend({\n\t\toptions: L.Icon.prototype.options,\n\n\t\tinitialize: function (group, zoom, a, b) {\n\n\t\t\tL.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0),\n\t            { icon: this, pane: group.options.clusterPane });\n\n\t\t\tthis._group = group;\n\t\t\tthis._zoom = zoom;\n\n\t\t\tthis._markers = [];\n\t\t\tthis._childClusters = [];\n\t\t\tthis._childCount = 0;\n\t\t\tthis._iconNeedsUpdate = true;\n\t\t\tthis._boundsNeedUpdate = true;\n\n\t\t\tthis._bounds = new L.LatLngBounds();\n\n\t\t\tif (a) {\n\t\t\t\tthis._addChild(a);\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\tthis._addChild(b);\n\t\t\t}\n\t\t},\n\n\t\t//Recursively retrieve all child markers of this cluster\n\t\tgetAllChildMarkers: function (storageArray, ignoreDraggedMarker) {\n\t\t\tstorageArray = storageArray || [];\n\n\t\t\tfor (var i = this._childClusters.length - 1; i >= 0; i--) {\n\t\t\t\tthis._childClusters[i].getAllChildMarkers(storageArray, ignoreDraggedMarker);\n\t\t\t}\n\n\t\t\tfor (var j = this._markers.length - 1; j >= 0; j--) {\n\t\t\t\tif (ignoreDraggedMarker && this._markers[j].__dragStart) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstorageArray.push(this._markers[j]);\n\t\t\t}\n\n\t\t\treturn storageArray;\n\t\t},\n\n\t\t//Returns the count of how many child markers we have\n\t\tgetChildCount: function () {\n\t\t\treturn this._childCount;\n\t\t},\n\n\t\t//Zoom to the minimum of showing all of the child markers, or the extents of this cluster\n\t\tzoomToBounds: function (fitBoundsOptions) {\n\t\t\tvar childClusters = this._childClusters.slice(),\n\t\t\t\tmap = this._group._map,\n\t\t\t\tboundsZoom = map.getBoundsZoom(this._bounds),\n\t\t\t\tzoom = this._zoom + 1,\n\t\t\t\tmapZoom = map.getZoom(),\n\t\t\t\ti;\n\n\t\t\t//calculate how far we need to zoom down to see all of the markers\n\t\t\twhile (childClusters.length > 0 && boundsZoom > zoom) {\n\t\t\t\tzoom++;\n\t\t\t\tvar newClusters = [];\n\t\t\t\tfor (i = 0; i < childClusters.length; i++) {\n\t\t\t\t\tnewClusters = newClusters.concat(childClusters[i]._childClusters);\n\t\t\t\t}\n\t\t\t\tchildClusters = newClusters;\n\t\t\t}\n\n\t\t\tif (boundsZoom > zoom) {\n\t\t\t\tthis._group._map.setView(this._latlng, zoom);\n\t\t\t} else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead\n\t\t\t\tthis._group._map.setView(this._latlng, mapZoom + 1);\n\t\t\t} else {\n\t\t\t\tthis._group._map.fitBounds(this._bounds, fitBoundsOptions);\n\t\t\t}\n\t\t},\n\n\t\tgetBounds: function () {\n\t\t\tvar bounds = new L.LatLngBounds();\n\t\t\tbounds.extend(this._bounds);\n\t\t\treturn bounds;\n\t\t},\n\n\t\t_updateIcon: function () {\n\t\t\tthis._iconNeedsUpdate = true;\n\t\t\tif (this._icon) {\n\t\t\t\tthis.setIcon(this);\n\t\t\t}\n\t\t},\n\n\t\t//Cludge for Icon, we pretend to be an icon for performance\n\t\tcreateIcon: function () {\n\t\t\tif (this._iconNeedsUpdate) {\n\t\t\t\tthis._iconObj = this._group.options.iconCreateFunction(this);\n\t\t\t\tthis._iconNeedsUpdate = false;\n\t\t\t}\n\t\t\treturn this._iconObj.createIcon();\n\t\t},\n\t\tcreateShadow: function () {\n\t\t\treturn this._iconObj.createShadow();\n\t\t},\n\n\n\t\t_addChild: function (new1, isNotificationFromChild) {\n\n\t\t\tthis._iconNeedsUpdate = true;\n\n\t\t\tthis._boundsNeedUpdate = true;\n\t\t\tthis._setClusterCenter(new1);\n\n\t\t\tif (new1 instanceof L.MarkerCluster) {\n\t\t\t\tif (!isNotificationFromChild) {\n\t\t\t\t\tthis._childClusters.push(new1);\n\t\t\t\t\tnew1.__parent = this;\n\t\t\t\t}\n\t\t\t\tthis._childCount += new1._childCount;\n\t\t\t} else {\n\t\t\t\tif (!isNotificationFromChild) {\n\t\t\t\t\tthis._markers.push(new1);\n\t\t\t\t}\n\t\t\t\tthis._childCount++;\n\t\t\t}\n\n\t\t\tif (this.__parent) {\n\t\t\t\tthis.__parent._addChild(new1, true);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.\n\t\t * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.\n\t\t * @private\n\t\t */\n\t\t_setClusterCenter: function (child) {\n\t\t\tif (!this._cLatLng) {\n\t\t\t\t// when clustering, take position of the first point as the cluster center\n\t\t\t\tthis._cLatLng = child._cLatLng || child._latlng;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Assigns impossible bounding values so that the next extend entirely determines the new bounds.\n\t\t * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.\n\t\t * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.\n\t\t * @private\n\t\t */\n\t\t_resetBounds: function () {\n\t\t\tvar bounds = this._bounds;\n\n\t\t\tif (bounds._southWest) {\n\t\t\t\tbounds._southWest.lat = Infinity;\n\t\t\t\tbounds._southWest.lng = Infinity;\n\t\t\t}\n\t\t\tif (bounds._northEast) {\n\t\t\t\tbounds._northEast.lat = -Infinity;\n\t\t\t\tbounds._northEast.lng = -Infinity;\n\t\t\t}\n\t\t},\n\n\t\t_recalculateBounds: function () {\n\t\t\tvar markers = this._markers,\n\t\t\t    childClusters = this._childClusters,\n\t\t\t    latSum = 0,\n\t\t\t    lngSum = 0,\n\t\t\t    totalCount = this._childCount,\n\t\t\t    i, child, childLatLng, childCount;\n\n\t\t\t// Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.\n\t\t\tif (totalCount === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Reset rather than creating a new object, for performance.\n\t\t\tthis._resetBounds();\n\n\t\t\t// Child markers.\n\t\t\tfor (i = 0; i < markers.length; i++) {\n\t\t\t\tchildLatLng = markers[i]._latlng;\n\n\t\t\t\tthis._bounds.extend(childLatLng);\n\n\t\t\t\tlatSum += childLatLng.lat;\n\t\t\t\tlngSum += childLatLng.lng;\n\t\t\t}\n\n\t\t\t// Child clusters.\n\t\t\tfor (i = 0; i < childClusters.length; i++) {\n\t\t\t\tchild = childClusters[i];\n\n\t\t\t\t// Re-compute child bounds and weighted position first if necessary.\n\t\t\t\tif (child._boundsNeedUpdate) {\n\t\t\t\t\tchild._recalculateBounds();\n\t\t\t\t}\n\n\t\t\t\tthis._bounds.extend(child._bounds);\n\n\t\t\t\tchildLatLng = child._wLatLng;\n\t\t\t\tchildCount = child._childCount;\n\n\t\t\t\tlatSum += childLatLng.lat * childCount;\n\t\t\t\tlngSum += childLatLng.lng * childCount;\n\t\t\t}\n\n\t\t\tthis._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);\n\n\t\t\t// Reset dirty flag.\n\t\t\tthis._boundsNeedUpdate = false;\n\t\t},\n\n\t\t//Set our markers position as given and add it to the map\n\t\t_addToMap: function (startPos) {\n\t\t\tif (startPos) {\n\t\t\t\tthis._backupLatlng = this._latlng;\n\t\t\t\tthis.setLatLng(startPos);\n\t\t\t}\n\t\t\tthis._group._featureGroup.addLayer(this);\n\t\t},\n\n\t\t_recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {\n\t\t\tthis._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1,\n\t\t\t\tfunction (c) {\n\t\t\t\t\tvar markers = c._markers,\n\t\t\t\t\t\ti, m;\n\t\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tm = markers[i];\n\n\t\t\t\t\t\t//Only do it if the icon is still on the map\n\t\t\t\t\t\tif (m._icon) {\n\t\t\t\t\t\t\tm._setPos(center);\n\t\t\t\t\t\t\tm.clusterHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfunction (c) {\n\t\t\t\t\tvar childClusters = c._childClusters,\n\t\t\t\t\t\tj, cm;\n\t\t\t\t\tfor (j = childClusters.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tcm = childClusters[j];\n\t\t\t\t\t\tif (cm._icon) {\n\t\t\t\t\t\t\tcm._setPos(center);\n\t\t\t\t\t\t\tcm.clusterHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t_recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) {\n\t\t\tthis._recursively(bounds, newZoomLevel, mapMinZoom,\n\t\t\t\tfunction (c) {\n\t\t\t\t\tc._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);\n\n\t\t\t\t\t//TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.\n\t\t\t\t\t//As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate\n\t\t\t\t\tif (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {\n\t\t\t\t\t\tc.clusterShow();\n\t\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds\n\t\t\t\t\t} else {\n\t\t\t\t\t\tc.clusterHide();\n\t\t\t\t\t}\n\n\t\t\t\t\tc._addToMap();\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t_recursivelyBecomeVisible: function (bounds, zoomLevel) {\n\t\t\tthis._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) {\n\t\t\t\tc.clusterShow();\n\t\t\t});\n\t\t},\n\n\t\t_recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {\n\t\t\tthis._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel,\n\t\t\t\tfunction (c) {\n\t\t\t\t\tif (zoomLevel === c._zoom) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//Add our child markers at startPos (so they can be animated out)\n\t\t\t\t\tfor (var i = c._markers.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tvar nm = c._markers[i];\n\n\t\t\t\t\t\tif (!bounds.contains(nm._latlng)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (startPos) {\n\t\t\t\t\t\t\tnm._backupLatlng = nm.getLatLng();\n\n\t\t\t\t\t\t\tnm.setLatLng(startPos);\n\t\t\t\t\t\t\tif (nm.clusterHide) {\n\t\t\t\t\t\t\t\tnm.clusterHide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tc._group._featureGroup.addLayer(nm);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfunction (c) {\n\t\t\t\t\tc._addToMap(startPos);\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t_recursivelyRestoreChildPositions: function (zoomLevel) {\n\t\t\t//Fix positions of child markers\n\t\t\tfor (var i = this._markers.length - 1; i >= 0; i--) {\n\t\t\t\tvar nm = this._markers[i];\n\t\t\t\tif (nm._backupLatlng) {\n\t\t\t\t\tnm.setLatLng(nm._backupLatlng);\n\t\t\t\t\tdelete nm._backupLatlng;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (zoomLevel - 1 === this._zoom) {\n\t\t\t\t//Reposition child clusters\n\t\t\t\tfor (var j = this._childClusters.length - 1; j >= 0; j--) {\n\t\t\t\t\tthis._childClusters[j]._restorePosition();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var k = this._childClusters.length - 1; k >= 0; k--) {\n\t\t\t\t\tthis._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_restorePosition: function () {\n\t\t\tif (this._backupLatlng) {\n\t\t\t\tthis.setLatLng(this._backupLatlng);\n\t\t\t\tdelete this._backupLatlng;\n\t\t\t}\n\t\t},\n\n\t\t//exceptBounds: If set, don't remove any markers/clusters in it\n\t\t_recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) {\n\t\t\tvar m, i;\n\t\t\tthis._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1,\n\t\t\t\tfunction (c) {\n\t\t\t\t\t//Remove markers at every level\n\t\t\t\t\tfor (i = c._markers.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tm = c._markers[i];\n\t\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\n\t\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\n\t\t\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfunction (c) {\n\t\t\t\t\t//Remove child clusters at just the bottom level\n\t\t\t\t\tfor (i = c._childClusters.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tm = c._childClusters[i];\n\t\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\n\t\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\n\t\t\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t//Run the given functions recursively to this and child clusters\n\t\t// boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to\n\t\t// zoomLevelToStart: zoom level to start running functions (inclusive)\n\t\t// zoomLevelToStop: zoom level to stop running functions (inclusive)\n\t\t// runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level\n\t\t// runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level\n\t\t_recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {\n\t\t\tvar childClusters = this._childClusters,\n\t\t\t    zoom = this._zoom,\n\t\t\t    i, c;\n\n\t\t\tif (zoomLevelToStart <= zoom) {\n\t\t\t\tif (runAtEveryLevel) {\n\t\t\t\t\trunAtEveryLevel(this);\n\t\t\t\t}\n\t\t\t\tif (runAtBottomLevel && zoom === zoomLevelToStop) {\n\t\t\t\t\trunAtBottomLevel(this);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (zoom < zoomLevelToStart || zoom < zoomLevelToStop) {\n\t\t\t\tfor (i = childClusters.length - 1; i >= 0; i--) {\n\t\t\t\t\tc = childClusters[i];\n\t\t\t\t\tif (c._boundsNeedUpdate) {\n\t\t\t\t\t\tc._recalculateBounds();\n\t\t\t\t\t}\n\t\t\t\t\tif (boundsToApplyTo.intersects(c._bounds)) {\n\t\t\t\t\t\tc._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t//Returns true if we are the parent of only one cluster and that cluster is the same as us\n\t\t_isSingleParent: function () {\n\t\t\t//Don't need to check this._markers as the rest won't work if there are any\n\t\t\treturn this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;\n\t\t}\n\t});\n\n\t/*\n\t* Extends L.Marker to include two extra methods: clusterHide and clusterShow.\n\t* \n\t* They work as setOpacity(0) and setOpacity(1) respectively, but\n\t* don't overwrite the options.opacity\n\t* \n\t*/\n\n\tL.Marker.include({\n\t\tclusterHide: function () {\n\t\t\tvar backup = this.options.opacity;\n\t\t\tthis.setOpacity(0);\n\t\t\tthis.options.opacity = backup;\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tclusterShow: function () {\n\t\t\treturn this.setOpacity(this.options.opacity);\n\t\t}\n\t});\n\n\tL.DistanceGrid = function (cellSize) {\n\t\tthis._cellSize = cellSize;\n\t\tthis._sqCellSize = cellSize * cellSize;\n\t\tthis._grid = {};\n\t\tthis._objectPoint = { };\n\t};\n\n\tL.DistanceGrid.prototype = {\n\n\t\taddObject: function (obj, point) {\n\t\t\tvar x = this._getCoord(point.x),\n\t\t\t    y = this._getCoord(point.y),\n\t\t\t    grid = this._grid,\n\t\t\t    row = grid[y] = grid[y] || {},\n\t\t\t    cell = row[x] = row[x] || [],\n\t\t\t    stamp = L.Util.stamp(obj);\n\n\t\t\tthis._objectPoint[stamp] = point;\n\n\t\t\tcell.push(obj);\n\t\t},\n\n\t\tupdateObject: function (obj, point) {\n\t\t\tthis.removeObject(obj);\n\t\t\tthis.addObject(obj, point);\n\t\t},\n\n\t\t//Returns true if the object was found\n\t\tremoveObject: function (obj, point) {\n\t\t\tvar x = this._getCoord(point.x),\n\t\t\t    y = this._getCoord(point.y),\n\t\t\t    grid = this._grid,\n\t\t\t    row = grid[y] = grid[y] || {},\n\t\t\t    cell = row[x] = row[x] || [],\n\t\t\t    i, len;\n\n\t\t\tdelete this._objectPoint[L.Util.stamp(obj)];\n\n\t\t\tfor (i = 0, len = cell.length; i < len; i++) {\n\t\t\t\tif (cell[i] === obj) {\n\n\t\t\t\t\tcell.splice(i, 1);\n\n\t\t\t\t\tif (len === 1) {\n\t\t\t\t\t\tdelete row[x];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\n\t\teachObject: function (fn, context) {\n\t\t\tvar i, j, k, len, row, cell, removed,\n\t\t\t    grid = this._grid;\n\n\t\t\tfor (i in grid) {\n\t\t\t\trow = grid[i];\n\n\t\t\t\tfor (j in row) {\n\t\t\t\t\tcell = row[j];\n\n\t\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\n\t\t\t\t\t\tremoved = fn.call(context, cell[k]);\n\t\t\t\t\t\tif (removed) {\n\t\t\t\t\t\t\tk--;\n\t\t\t\t\t\t\tlen--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetNearObject: function (point) {\n\t\t\tvar x = this._getCoord(point.x),\n\t\t\t    y = this._getCoord(point.y),\n\t\t\t    i, j, k, row, cell, len, obj, dist,\n\t\t\t    objectPoint = this._objectPoint,\n\t\t\t    closestDistSq = this._sqCellSize,\n\t\t\t    closest = null;\n\n\t\t\tfor (i = y - 1; i <= y + 1; i++) {\n\t\t\t\trow = this._grid[i];\n\t\t\t\tif (row) {\n\n\t\t\t\t\tfor (j = x - 1; j <= x + 1; j++) {\n\t\t\t\t\t\tcell = row[j];\n\t\t\t\t\t\tif (cell) {\n\n\t\t\t\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\n\t\t\t\t\t\t\t\tobj = cell[k];\n\t\t\t\t\t\t\t\tdist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);\n\t\t\t\t\t\t\t\tif (dist < closestDistSq ||\n\t\t\t\t\t\t\t\t\tdist <= closestDistSq && closest === null) {\n\t\t\t\t\t\t\t\t\tclosestDistSq = dist;\n\t\t\t\t\t\t\t\t\tclosest = obj;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn closest;\n\t\t},\n\n\t\t_getCoord: function (x) {\n\t\t\tvar coord = Math.floor(x / this._cellSize);\n\t\t\treturn isFinite(coord) ? coord : x;\n\t\t},\n\n\t\t_sqDist: function (p, p2) {\n\t\t\tvar dx = p2.x - p.x,\n\t\t\t    dy = p2.y - p.y;\n\t\t\treturn dx * dx + dy * dy;\n\t\t}\n\t};\n\n\t/* Copyright (c) 2012 the authors listed at the following URL, and/or\n\tthe authors of referenced articles or incorporated external code:\n\thttp://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256\n\n\tPermission is hereby granted, free of charge, to any person obtaining\n\ta copy of this software and associated documentation files (the\n\t\"Software\"), to deal in the Software without restriction, including\n\twithout limitation the rights to use, copy, modify, merge, publish,\n\tdistribute, sublicense, and/or sell copies of the Software, and to\n\tpermit persons to whom the Software is furnished to do so, subject to\n\tthe following conditions:\n\n\tThe above copyright notice and this permission notice shall be\n\tincluded in all copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n\tEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\tMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\tIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\tCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\tTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\tSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\tRetrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434\n\t*/\n\n\t(function () {\n\t\tL.QuickHull = {\n\n\t\t\t/*\n\t\t\t * @param {Object} cpt a point to be measured from the baseline\n\t\t\t * @param {Array} bl the baseline, as represented by a two-element\n\t\t\t *   array of latlng objects.\n\t\t\t * @returns {Number} an approximate distance measure\n\t\t\t */\n\t\t\tgetDistant: function (cpt, bl) {\n\t\t\t\tvar vY = bl[1].lat - bl[0].lat,\n\t\t\t\t\tvX = bl[0].lng - bl[1].lng;\n\t\t\t\treturn (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));\n\t\t\t},\n\n\t\t\t/*\n\t\t\t * @param {Array} baseLine a two-element array of latlng objects\n\t\t\t *   representing the baseline to project from\n\t\t\t * @param {Array} latLngs an array of latlng objects\n\t\t\t * @returns {Object} the maximum point and all new points to stay\n\t\t\t *   in consideration for the hull.\n\t\t\t */\n\t\t\tfindMostDistantPointFromBaseLine: function (baseLine, latLngs) {\n\t\t\t\tvar maxD = 0,\n\t\t\t\t\tmaxPt = null,\n\t\t\t\t\tnewPoints = [],\n\t\t\t\t\ti, pt, d;\n\n\t\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\n\t\t\t\t\tpt = latLngs[i];\n\t\t\t\t\td = this.getDistant(pt, baseLine);\n\n\t\t\t\t\tif (d > 0) {\n\t\t\t\t\t\tnewPoints.push(pt);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (d > maxD) {\n\t\t\t\t\t\tmaxD = d;\n\t\t\t\t\t\tmaxPt = pt;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { maxPoint: maxPt, newPoints: newPoints };\n\t\t\t},\n\n\n\t\t\t/*\n\t\t\t * Given a baseline, compute the convex hull of latLngs as an array\n\t\t\t * of latLngs.\n\t\t\t *\n\t\t\t * @param {Array} latLngs\n\t\t\t * @returns {Array}\n\t\t\t */\n\t\t\tbuildConvexHull: function (baseLine, latLngs) {\n\t\t\t\tvar convexHullBaseLines = [],\n\t\t\t\t\tt = this.findMostDistantPointFromBaseLine(baseLine, latLngs);\n\n\t\t\t\tif (t.maxPoint) { // if there is still a point \"outside\" the base line\n\t\t\t\t\tconvexHullBaseLines =\n\t\t\t\t\t\tconvexHullBaseLines.concat(\n\t\t\t\t\t\t\tthis.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)\n\t\t\t\t\t\t);\n\t\t\t\t\tconvexHullBaseLines =\n\t\t\t\t\t\tconvexHullBaseLines.concat(\n\t\t\t\t\t\t\tthis.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)\n\t\t\t\t\t\t);\n\t\t\t\t\treturn convexHullBaseLines;\n\t\t\t\t} else {  // if there is no more point \"outside\" the base line, the current base line is part of the convex hull\n\t\t\t\t\treturn [baseLine[0]];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/*\n\t\t\t * Given an array of latlngs, compute a convex hull as an array\n\t\t\t * of latlngs\n\t\t\t *\n\t\t\t * @param {Array} latLngs\n\t\t\t * @returns {Array}\n\t\t\t */\n\t\t\tgetConvexHull: function (latLngs) {\n\t\t\t\t// find first baseline\n\t\t\t\tvar maxLat = false, minLat = false,\n\t\t\t\t\tmaxLng = false, minLng = false,\n\t\t\t\t\tmaxLatPt = null, minLatPt = null,\n\t\t\t\t\tmaxLngPt = null, minLngPt = null,\n\t\t\t\t\tmaxPt = null, minPt = null,\n\t\t\t\t\ti;\n\n\t\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar pt = latLngs[i];\n\t\t\t\t\tif (maxLat === false || pt.lat > maxLat) {\n\t\t\t\t\t\tmaxLatPt = pt;\n\t\t\t\t\t\tmaxLat = pt.lat;\n\t\t\t\t\t}\n\t\t\t\t\tif (minLat === false || pt.lat < minLat) {\n\t\t\t\t\t\tminLatPt = pt;\n\t\t\t\t\t\tminLat = pt.lat;\n\t\t\t\t\t}\n\t\t\t\t\tif (maxLng === false || pt.lng > maxLng) {\n\t\t\t\t\t\tmaxLngPt = pt;\n\t\t\t\t\t\tmaxLng = pt.lng;\n\t\t\t\t\t}\n\t\t\t\t\tif (minLng === false || pt.lng < minLng) {\n\t\t\t\t\t\tminLngPt = pt;\n\t\t\t\t\t\tminLng = pt.lng;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (minLat !== maxLat) {\n\t\t\t\t\tminPt = minLatPt;\n\t\t\t\t\tmaxPt = maxLatPt;\n\t\t\t\t} else {\n\t\t\t\t\tminPt = minLngPt;\n\t\t\t\t\tmaxPt = maxLngPt;\n\t\t\t\t}\n\n\t\t\t\tvar ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),\n\t\t\t\t\t\t\t\t\tthis.buildConvexHull([maxPt, minPt], latLngs));\n\t\t\t\treturn ch;\n\t\t\t}\n\t\t};\n\t}());\n\n\tL.MarkerCluster.include({\n\t\tgetConvexHull: function () {\n\t\t\tvar childMarkers = this.getAllChildMarkers(),\n\t\t\t\tpoints = [],\n\t\t\t\tp, i;\n\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\tp = childMarkers[i].getLatLng();\n\t\t\t\tpoints.push(p);\n\t\t\t}\n\n\t\t\treturn L.QuickHull.getConvexHull(points);\n\t\t}\n\t});\n\n\t//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet\n\t//Huge thanks to jawj for implementing it first to make my job easy :-)\n\n\tL.MarkerCluster.include({\n\n\t\t_2PI: Math.PI * 2,\n\t\t_circleFootSeparation: 25, //related to circumference of circle\n\t\t_circleStartAngle: 0,\n\n\t\t_spiralFootSeparation:  28, //related to size of spiral (experiment!)\n\t\t_spiralLengthStart: 11,\n\t\t_spiralLengthFactor: 5,\n\n\t\t_circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.\n\t\t\t\t\t\t\t\t\t// 0 -> always spiral; Infinity -> always circle\n\n\t\tspiderfy: function () {\n\t\t\tif (this._group._spiderfied === this || this._group._inZoomAnimation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar childMarkers = this.getAllChildMarkers(null, true),\n\t\t\t\tgroup = this._group,\n\t\t\t\tmap = group._map,\n\t\t\t\tcenter = map.latLngToLayerPoint(this._latlng),\n\t\t\t\tpositions;\n\n\t\t\tthis._group._unspiderfy();\n\t\t\tthis._group._spiderfied = this;\n\n\t\t\t//TODO Maybe: childMarkers order by distance to center\n\n\t\t\tif (this._group.options.spiderfyShapePositions) {\n\t\t\t\tpositions = this._group.options.spiderfyShapePositions(childMarkers.length, center);\n\t\t\t} else if (childMarkers.length >= this._circleSpiralSwitchover) {\n\t\t\t\tpositions = this._generatePointsSpiral(childMarkers.length, center);\n\t\t\t} else {\n\t\t\t\tcenter.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.\n\t\t\t\tpositions = this._generatePointsCircle(childMarkers.length, center);\n\t\t\t}\n\n\t\t\tthis._animationSpiderfy(childMarkers, positions);\n\t\t},\n\n\t\tunspiderfy: function (zoomDetails) {\n\t\t\t/// <param Name=\"zoomDetails\">Argument from zoomanim if being called in a zoom animation or null otherwise</param>\n\t\t\tif (this._group._inZoomAnimation) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._animationUnspiderfy(zoomDetails);\n\n\t\t\tthis._group._spiderfied = null;\n\t\t},\n\n\t\t_generatePointsCircle: function (count, centerPt) {\n\t\t\tvar circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),\n\t\t\t\tlegLength = circumference / this._2PI,  //radius from circumference\n\t\t\t\tangleStep = this._2PI / count,\n\t\t\t\tres = [],\n\t\t\t\ti, angle;\n\n\t\t\tlegLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon.\n\n\t\t\tres.length = count;\n\n\t\t\tfor (i = 0; i < count; i++) { // Clockwise, like spiral.\n\t\t\t\tangle = this._circleStartAngle + i * angleStep;\n\t\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\n\t\t\t}\n\n\t\t\treturn res;\n\t\t},\n\n\t\t_generatePointsSpiral: function (count, centerPt) {\n\t\t\tvar spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,\n\t\t\t\tlegLength = spiderfyDistanceMultiplier * this._spiralLengthStart,\n\t\t\t\tseparation = spiderfyDistanceMultiplier * this._spiralFootSeparation,\n\t\t\t\tlengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,\n\t\t\t\tangle = 0,\n\t\t\t\tres = [],\n\t\t\t\ti;\n\n\t\t\tres.length = count;\n\n\t\t\t// Higher index, closer position to cluster center.\n\t\t\tfor (i = count; i >= 0; i--) {\n\t\t\t\t// Skip the first position, so that we are already farther from center and we avoid\n\t\t\t\t// being under the default cluster icon (especially important for Circle Markers).\n\t\t\t\tif (i < count) {\n\t\t\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\n\t\t\t\t}\n\t\t\t\tangle += separation / legLength + i * 0.0005;\n\t\t\t\tlegLength += lengthFactor / angle;\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\n\t\t_noanimationUnspiderfy: function () {\n\t\t\tvar group = this._group,\n\t\t\t\tmap = group._map,\n\t\t\t\tfg = group._featureGroup,\n\t\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\n\t\t\t\tm, i;\n\n\t\t\tgroup._ignoreMove = true;\n\n\t\t\tthis.setOpacity(1);\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\tm = childMarkers[i];\n\n\t\t\t\tfg.removeLayer(m);\n\n\t\t\t\tif (m._preSpiderfyLatlng) {\n\t\t\t\t\tm.setLatLng(m._preSpiderfyLatlng);\n\t\t\t\t\tdelete m._preSpiderfyLatlng;\n\t\t\t\t}\n\t\t\t\tif (m.setZIndexOffset) {\n\t\t\t\t\tm.setZIndexOffset(0);\n\t\t\t\t}\n\n\t\t\t\tif (m._spiderLeg) {\n\t\t\t\t\tmap.removeLayer(m._spiderLeg);\n\t\t\t\t\tdelete m._spiderLeg;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgroup.fire('unspiderfied', {\n\t\t\t\tcluster: this,\n\t\t\t\tmarkers: childMarkers\n\t\t\t});\n\t\t\tgroup._ignoreMove = false;\n\t\t\tgroup._spiderfied = null;\n\t\t}\n\t});\n\n\t//Non Animated versions of everything\n\tL.MarkerClusterNonAnimated = L.MarkerCluster.extend({\n\t\t_animationSpiderfy: function (childMarkers, positions) {\n\t\t\tvar group = this._group,\n\t\t\t\tmap = group._map,\n\t\t\t\tfg = group._featureGroup,\n\t\t\t\tlegOptions = this._group.options.spiderLegPolylineOptions,\n\t\t\t\ti, m, leg, newPos;\n\n\t\t\tgroup._ignoreMove = true;\n\n\t\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\n\t\t\t// The reverse order trick no longer improves performance on modern browsers.\n\t\t\tfor (i = 0; i < childMarkers.length; i++) {\n\t\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\n\t\t\t\tm = childMarkers[i];\n\n\t\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\n\t\t\t\tleg = new L.Polyline([this._latlng, newPos], legOptions);\n\t\t\t\tmap.addLayer(leg);\n\t\t\t\tm._spiderLeg = leg;\n\n\t\t\t\t// Now add the marker.\n\t\t\t\tm._preSpiderfyLatlng = m._latlng;\n\t\t\t\tm.setLatLng(newPos);\n\t\t\t\tif (m.setZIndexOffset) {\n\t\t\t\t\tm.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING\n\t\t\t\t}\n\n\t\t\t\tfg.addLayer(m);\n\t\t\t}\n\t\t\tthis.setOpacity(0.3);\n\n\t\t\tgroup._ignoreMove = false;\n\t\t\tgroup.fire('spiderfied', {\n\t\t\t\tcluster: this,\n\t\t\t\tmarkers: childMarkers\n\t\t\t});\n\t\t},\n\n\t\t_animationUnspiderfy: function () {\n\t\t\tthis._noanimationUnspiderfy();\n\t\t}\n\t});\n\n\t//Animated versions here\n\tL.MarkerCluster.include({\n\n\t\t_animationSpiderfy: function (childMarkers, positions) {\n\t\t\tvar me = this,\n\t\t\t\tgroup = this._group,\n\t\t\t\tmap = group._map,\n\t\t\t\tfg = group._featureGroup,\n\t\t\t\tthisLayerLatLng = this._latlng,\n\t\t\t\tthisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),\n\t\t\t\tsvg = L.Path.SVG,\n\t\t\t\tlegOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.\n\t\t\t\tfinalLegOpacity = legOptions.opacity,\n\t\t\t\ti, m, leg, legPath, legLength, newPos;\n\n\t\t\tif (finalLegOpacity === undefined) {\n\t\t\t\tfinalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;\n\t\t\t}\n\n\t\t\tif (svg) {\n\t\t\t\t// If the initial opacity of the spider leg is not 0 then it appears before the animation starts.\n\t\t\t\tlegOptions.opacity = 0;\n\n\t\t\t\t// Add the class for CSS transitions.\n\t\t\t\tlegOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';\n\t\t\t} else {\n\t\t\t\t// Make sure we have a defined opacity.\n\t\t\t\tlegOptions.opacity = finalLegOpacity;\n\t\t\t}\n\n\t\t\tgroup._ignoreMove = true;\n\n\t\t\t// Add markers and spider legs to map, hidden at our center point.\n\t\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\n\t\t\t// The reverse order trick no longer improves performance on modern browsers.\n\t\t\tfor (i = 0; i < childMarkers.length; i++) {\n\t\t\t\tm = childMarkers[i];\n\n\t\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\n\n\t\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\n\t\t\t\tleg = new L.Polyline([thisLayerLatLng, newPos], legOptions);\n\t\t\t\tmap.addLayer(leg);\n\t\t\t\tm._spiderLeg = leg;\n\n\t\t\t\t// Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/\n\t\t\t\t// In our case the transition property is declared in the CSS file.\n\t\t\t\tif (svg) {\n\t\t\t\t\tlegPath = leg._path;\n\t\t\t\t\tlegLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.\n\t\t\t\t\tlegPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.\n\t\t\t\t\tlegPath.style.strokeDashoffset = legLength;\n\t\t\t\t}\n\n\t\t\t\t// If it is a marker, add it now and we'll animate it out\n\t\t\t\tif (m.setZIndexOffset) {\n\t\t\t\t\tm.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING\n\t\t\t\t}\n\t\t\t\tif (m.clusterHide) {\n\t\t\t\t\tm.clusterHide();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Vectors just get immediately added\n\t\t\t\tfg.addLayer(m);\n\n\t\t\t\tif (m._setPos) {\n\t\t\t\t\tm._setPos(thisLayerPos);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgroup._forceLayout();\n\t\t\tgroup._animationStart();\n\n\t\t\t// Reveal markers and spider legs.\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\n\t\t\t\tm = childMarkers[i];\n\n\t\t\t\t//Move marker to new position\n\t\t\t\tm._preSpiderfyLatlng = m._latlng;\n\t\t\t\tm.setLatLng(newPos);\n\t\t\t\t\n\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\tm.clusterShow();\n\t\t\t\t}\n\n\t\t\t\t// Animate leg (animation is actually delegated to CSS transition).\n\t\t\t\tif (svg) {\n\t\t\t\t\tleg = m._spiderLeg;\n\t\t\t\t\tlegPath = leg._path;\n\t\t\t\t\tlegPath.style.strokeDashoffset = 0;\n\t\t\t\t\t//legPath.style.strokeOpacity = finalLegOpacity;\n\t\t\t\t\tleg.setStyle({opacity: finalLegOpacity});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.setOpacity(0.3);\n\n\t\t\tgroup._ignoreMove = false;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tgroup._animationEnd();\n\t\t\t\tgroup.fire('spiderfied', {\n\t\t\t\t\tcluster: me,\n\t\t\t\t\tmarkers: childMarkers\n\t\t\t\t});\n\t\t\t}, 200);\n\t\t},\n\n\t\t_animationUnspiderfy: function (zoomDetails) {\n\t\t\tvar me = this,\n\t\t\t\tgroup = this._group,\n\t\t\t\tmap = group._map,\n\t\t\t\tfg = group._featureGroup,\n\t\t\t\tthisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),\n\t\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\n\t\t\t\tsvg = L.Path.SVG,\n\t\t\t\tm, i, leg, legPath, legLength, nonAnimatable;\n\n\t\t\tgroup._ignoreMove = true;\n\t\t\tgroup._animationStart();\n\n\t\t\t//Make us visible and bring the child markers back in\n\t\t\tthis.setOpacity(1);\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\tm = childMarkers[i];\n\n\t\t\t\t//Marker was added to us after we were spiderfied\n\t\t\t\tif (!m._preSpiderfyLatlng) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t//Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll\n\t\t\t\tm.closePopup();\n\n\t\t\t\t//Fix up the location to the real one\n\t\t\t\tm.setLatLng(m._preSpiderfyLatlng);\n\t\t\t\tdelete m._preSpiderfyLatlng;\n\n\t\t\t\t//Hack override the location to be our center\n\t\t\t\tnonAnimatable = true;\n\t\t\t\tif (m._setPos) {\n\t\t\t\t\tm._setPos(thisLayerPos);\n\t\t\t\t\tnonAnimatable = false;\n\t\t\t\t}\n\t\t\t\tif (m.clusterHide) {\n\t\t\t\t\tm.clusterHide();\n\t\t\t\t\tnonAnimatable = false;\n\t\t\t\t}\n\t\t\t\tif (nonAnimatable) {\n\t\t\t\t\tfg.removeLayer(m);\n\t\t\t\t}\n\n\t\t\t\t// Animate the spider leg back in (animation is actually delegated to CSS transition).\n\t\t\t\tif (svg) {\n\t\t\t\t\tleg = m._spiderLeg;\n\t\t\t\t\tlegPath = leg._path;\n\t\t\t\t\tlegLength = legPath.getTotalLength() + 0.1;\n\t\t\t\t\tlegPath.style.strokeDashoffset = legLength;\n\t\t\t\t\tleg.setStyle({opacity: 0});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgroup._ignoreMove = false;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\t//If we have only <= one child left then that marker will be shown on the map so don't remove it!\n\t\t\t\tvar stillThereChildCount = 0;\n\t\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\t\tm = childMarkers[i];\n\t\t\t\t\tif (m._spiderLeg) {\n\t\t\t\t\t\tstillThereChildCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\t\tm = childMarkers[i];\n\n\t\t\t\t\tif (!m._spiderLeg) { //Has already been unspiderfied\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t}\n\t\t\t\t\tif (m.setZIndexOffset) {\n\t\t\t\t\t\tm.setZIndexOffset(0);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stillThereChildCount > 1) {\n\t\t\t\t\t\tfg.removeLayer(m);\n\t\t\t\t\t}\n\n\t\t\t\t\tmap.removeLayer(m._spiderLeg);\n\t\t\t\t\tdelete m._spiderLeg;\n\t\t\t\t}\n\t\t\t\tgroup._animationEnd();\n\t\t\t\tgroup.fire('unspiderfied', {\n\t\t\t\t\tcluster: me,\n\t\t\t\t\tmarkers: childMarkers\n\t\t\t\t});\n\t\t\t}, 200);\n\t\t}\n\t});\n\n\n\tL.MarkerClusterGroup.include({\n\t\t//The MarkerCluster currently spiderfied (if any)\n\t\t_spiderfied: null,\n\n\t\tunspiderfy: function () {\n\t\t\tthis._unspiderfy.apply(this, arguments);\n\t\t},\n\n\t\t_spiderfierOnAdd: function () {\n\t\t\tthis._map.on('click', this._unspiderfyWrapper, this);\n\n\t\t\tif (this._map.options.zoomAnimation) {\n\t\t\t\tthis._map.on('zoomstart', this._unspiderfyZoomStart, this);\n\t\t\t}\n\t\t\t//Browsers without zoomAnimation or a big zoom don't fire zoomstart\n\t\t\tthis._map.on('zoomend', this._noanimationUnspiderfy, this);\n\n\t\t\tif (!L.Browser.touch) {\n\t\t\t\tthis._map.getRenderer(this);\n\t\t\t\t//Needs to happen in the pageload, not after, or animations don't work in webkit\n\t\t\t\t//  http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements\n\t\t\t\t//Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable\n\t\t\t}\n\t\t},\n\n\t\t_spiderfierOnRemove: function () {\n\t\t\tthis._map.off('click', this._unspiderfyWrapper, this);\n\t\t\tthis._map.off('zoomstart', this._unspiderfyZoomStart, this);\n\t\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\n\t\t\tthis._map.off('zoomend', this._noanimationUnspiderfy, this);\n\n\t\t\t//Ensure that markers are back where they should be\n\t\t\t// Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane\n\t\t\tthis._noanimationUnspiderfy();\n\t\t},\n\n\t\t//On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)\n\t\t//This means we can define the animation they do rather than Markers doing an animation to their actual location\n\t\t_unspiderfyZoomStart: function () {\n\t\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._map.on('zoomanim', this._unspiderfyZoomAnim, this);\n\t\t},\n\n\t\t_unspiderfyZoomAnim: function (zoomDetails) {\n\t\t\t//Wait until the first zoomanim after the user has finished touch-zooming before running the animation\n\t\t\tif (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\n\t\t\tthis._unspiderfy(zoomDetails);\n\t\t},\n\n\t\t_unspiderfyWrapper: function () {\n\t\t\t/// <summary>_unspiderfy but passes no arguments</summary>\n\t\t\tthis._unspiderfy();\n\t\t},\n\n\t\t_unspiderfy: function (zoomDetails) {\n\t\t\tif (this._spiderfied) {\n\t\t\t\tthis._spiderfied.unspiderfy(zoomDetails);\n\t\t\t}\n\t\t},\n\n\t\t_noanimationUnspiderfy: function () {\n\t\t\tif (this._spiderfied) {\n\t\t\t\tthis._spiderfied._noanimationUnspiderfy();\n\t\t\t}\n\t\t},\n\n\t\t//If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc\n\t\t_unspiderfyLayer: function (layer) {\n\t\t\tif (layer._spiderLeg) {\n\t\t\t\tthis._featureGroup.removeLayer(layer);\n\n\t\t\t\tif (layer.clusterShow) {\n\t\t\t\t\tlayer.clusterShow();\n\t\t\t\t}\n\t\t\t\t\t//Position will be fixed up immediately in _animationUnspiderfy\n\t\t\t\tif (layer.setZIndexOffset) {\n\t\t\t\t\tlayer.setZIndexOffset(0);\n\t\t\t\t}\n\n\t\t\t\tthis._map.removeLayer(layer._spiderLeg);\n\t\t\t\tdelete layer._spiderLeg;\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing\n\t * markers' icon options and refreshing their icon and their parent clusters\n\t * accordingly (case where their iconCreateFunction uses data of childMarkers\n\t * to make up the cluster icon).\n\t */\n\n\n\tL.MarkerClusterGroup.include({\n\t\t/**\n\t\t * Updates the icon of all clusters which are parents of the given marker(s).\n\t\t * In singleMarkerMode, also updates the given marker(s) icon.\n\t\t * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|\n\t\t * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent\n\t\t * clusters need to be updated. If not provided, retrieves all child markers of this.\n\t\t * @returns {L.MarkerClusterGroup}\n\t\t */\n\t\trefreshClusters: function (layers) {\n\t\t\tif (!layers) {\n\t\t\t\tlayers = this._topClusterLevel.getAllChildMarkers();\n\t\t\t} else if (layers instanceof L.MarkerClusterGroup) {\n\t\t\t\tlayers = layers._topClusterLevel.getAllChildMarkers();\n\t\t\t} else if (layers instanceof L.LayerGroup) {\n\t\t\t\tlayers = layers._layers;\n\t\t\t} else if (layers instanceof L.MarkerCluster) {\n\t\t\t\tlayers = layers.getAllChildMarkers();\n\t\t\t} else if (layers instanceof L.Marker) {\n\t\t\t\tlayers = [layers];\n\t\t\t} // else: must be an Array(L.Marker)|Map(L.Marker)\n\t\t\tthis._flagParentsIconsNeedUpdate(layers);\n\t\t\tthis._refreshClustersIcons();\n\n\t\t\t// In case of singleMarkerMode, also re-draw the markers.\n\t\t\tif (this.options.singleMarkerMode) {\n\t\t\t\tthis._refreshSingleMarkerModeMarkers(layers);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Simply flags all parent clusters of the given markers as having a \"dirty\" icon.\n\t\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\n\t\t * @private\n\t\t */\n\t\t_flagParentsIconsNeedUpdate: function (layers) {\n\t\t\tvar id, parent;\n\n\t\t\t// Assumes layers is an Array or an Object whose prototype is non-enumerable.\n\t\t\tfor (id in layers) {\n\t\t\t\t// Flag parent clusters' icon as \"dirty\", all the way up.\n\t\t\t\t// Dumb process that flags multiple times upper parents, but still\n\t\t\t\t// much more efficient than trying to be smart and make short lists,\n\t\t\t\t// at least in the case of a hierarchy following a power law:\n\t\t\t\t// http://jsperf.com/flag-nodes-in-power-hierarchy/2\n\t\t\t\tparent = layers[id].__parent;\n\t\t\t\twhile (parent) {\n\t\t\t\t\tparent._iconNeedsUpdate = true;\n\t\t\t\t\tparent = parent.__parent;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Re-draws the icon of the supplied markers.\n\t\t * To be used in singleMarkerMode only.\n\t\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\n\t\t * @private\n\t\t */\n\t\t_refreshSingleMarkerModeMarkers: function (layers) {\n\t\t\tvar id, layer;\n\n\t\t\tfor (id in layers) {\n\t\t\t\tlayer = layers[id];\n\n\t\t\t\t// Make sure we do not override markers that do not belong to THIS group.\n\t\t\t\tif (this.hasLayer(layer)) {\n\t\t\t\t\t// Need to re-create the icon first, then re-draw the marker.\n\t\t\t\t\tlayer.setIcon(this._overrideMarkerIcon(layer));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tL.Marker.include({\n\t\t/**\n\t\t * Updates the given options in the marker's icon and refreshes the marker.\n\t\t * @param options map object of icon options.\n\t\t * @param directlyRefreshClusters boolean (optional) true to trigger\n\t\t * MCG.refreshClustersOf() right away with this single marker.\n\t\t * @returns {L.Marker}\n\t\t */\n\t\trefreshIconOptions: function (options, directlyRefreshClusters) {\n\t\t\tvar icon = this.options.icon;\n\n\t\t\tL.setOptions(icon, options);\n\n\t\t\tthis.setIcon(icon);\n\n\t\t\t// Shortcut to refresh the associated MCG clusters right away.\n\t\t\t// To be used when refreshing a single marker.\n\t\t\t// Otherwise, better use MCG.refreshClusters() once at the end with\n\t\t\t// the list of modified markers.\n\t\t\tif (directlyRefreshClusters && this.__parent) {\n\t\t\t\tthis.__parent._group.refreshClusters(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t});\n\n\texports.MarkerCluster = MarkerCluster;\n\texports.MarkerClusterGroup = MarkerClusterGroup;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=leaflet.markercluster-src.js.map\n","import React from 'react'\nimport { classNames } from 'adhocracy4'\n\nexport const PaginationButton = ({\n  ariaLabel, total, isActive, isDisabled, isNoButton, onClick, pageIndex, prevString, type, className = ''\n}) => {\n  const disabledClass = isDisabled\n    ? 'disabled'\n    : undefined\n\n  let itemClass = ''\n\n  itemClass += ' ' + className\n\n  if (type === 'prev') {\n    itemClass += ' pager-item-previous'\n  } else if (type === 'next') {\n    itemClass += ' pager-item-next'\n  } else if (type === 'current-num') {\n    itemClass += ' mobile-counter'\n  }\n\n  const getLabel = () => {\n    if (type === 'num') {\n      return pageIndex\n    } else if (type === 'current-num') {\n      return pageIndex + '/' + total\n    } else if (type === 'prev') {\n      return (\n        <>\n          <i className=\"fa fa-chevron-left\" aria-hidden=\"true\" />\n          <span className=\"aural\">{prevString}</span>\n        </>\n      )\n    } else if (type === 'next') {\n      return <i className=\"fa fa-chevron-right\" aria-hidden=\"true\" />\n    }\n  }\n\n  return (\n    <li\n      className={itemClass}\n    >\n      {isNoButton\n        ? (\n          <div>\n            {getLabel()}\n          </div>\n          )\n        : (\n          <button\n            className={classNames(disabledClass, isActive && 'active')}\n            onClick={() => onClick(pageIndex)}\n            aria-label={ariaLabel}\n            disabled={isDisabled}\n          >\n            {getLabel()}\n          </button>\n          )}\n    </li>\n  )\n}\n","import React from 'react'\nimport django from 'django'\n\nconst translated = {\n  status: django.gettext('Status: '),\n  ariaLabel: django.gettext('Status Indicator')\n}\n\nexport const ModeratorStatus = ({ modStatus, modStatusDisplay }) => {\n  if (!modStatus || !modStatusDisplay) {\n    return null // Don't render the component if either prop is missing\n  }\n\n  const modTypeClass = 'moderator-status__label--' + modStatus.toLowerCase()\n\n  return (\n    <div className=\"moderator-status\" aria-label={translated.ariaLabel}>\n      <span className={'moderator-status__color-indicator ' + modTypeClass} aria-hidden=\"true\" />\n      <span>\n        <strong>\n          {translated.status}\n        </strong>\n        {modStatusDisplay.length > 1 && modStatusDisplay}\n      </span>\n    </div>\n  )\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n'use strict';\n\nexports.match = matchQuery;\nexports.parse = parseQuery;\n\n// -----------------------------------------------------------------------------\n\nvar RE_MEDIA_QUERY     = /(?:(only|not)?\\s*([^\\s\\(\\)]+)(?:\\s*and)?\\s*)?(.+)?/i,\n    RE_MQ_EXPRESSION   = /\\(\\s*([^\\s\\:\\)]+)\\s*(?:\\:\\s*([^\\s\\)]+))?\\s*\\)/,\n    RE_MQ_FEATURE      = /^(?:(min|max)-)?(.+)/,\n    RE_LENGTH_UNIT     = /(em|rem|px|cm|mm|in|pt|pc)?$/,\n    RE_RESOLUTION_UNIT = /(dpi|dpcm|dppx)?$/;\n\nfunction matchQuery(mediaQuery, values) {\n    return parseQuery(mediaQuery).some(function (query) {\n        var inverse = query.inverse;\n\n        // Either the parsed or specified `type` is \"all\", or the types must be\n        // equal for a match.\n        var typeMatch = query.type === 'all' || values.type === query.type;\n\n        // Quit early when `type` doesn't match, but take \"not\" into account.\n        if ((typeMatch && inverse) || !(typeMatch || inverse)) {\n            return false;\n        }\n\n        var expressionsMatch = query.expressions.every(function (expression) {\n            var feature  = expression.feature,\n                modifier = expression.modifier,\n                expValue = expression.value,\n                value    = values[feature];\n\n            // Missing or falsy values don't match.\n            if (!value) { return false; }\n\n            switch (feature) {\n                case 'orientation':\n                case 'scan':\n                    return value.toLowerCase() === expValue.toLowerCase();\n\n                case 'width':\n                case 'height':\n                case 'device-width':\n                case 'device-height':\n                    expValue = toPx(expValue);\n                    value    = toPx(value);\n                    break;\n\n                case 'resolution':\n                    expValue = toDpi(expValue);\n                    value    = toDpi(value);\n                    break;\n\n                case 'aspect-ratio':\n                case 'device-aspect-ratio':\n                case /* Deprecated */ 'device-pixel-ratio':\n                    expValue = toDecimal(expValue);\n                    value    = toDecimal(value);\n                    break;\n\n                case 'grid':\n                case 'color':\n                case 'color-index':\n                case 'monochrome':\n                    expValue = parseInt(expValue, 10) || 1;\n                    value    = parseInt(value, 10) || 0;\n                    break;\n            }\n\n            switch (modifier) {\n                case 'min': return value >= expValue;\n                case 'max': return value <= expValue;\n                default   : return value === expValue;\n            }\n        });\n\n        return (expressionsMatch && !inverse) || (!expressionsMatch && inverse);\n    });\n}\n\nfunction parseQuery(mediaQuery) {\n    return mediaQuery.split(',').map(function (query) {\n        query = query.trim();\n\n        var captures    = query.match(RE_MEDIA_QUERY),\n            modifier    = captures[1],\n            type        = captures[2],\n            expressions = captures[3] || '',\n            parsed      = {};\n\n        parsed.inverse = !!modifier && modifier.toLowerCase() === 'not';\n        parsed.type    = type ? type.toLowerCase() : 'all';\n\n        // Split expressions into a list.\n        expressions = expressions.match(/\\([^\\)]+\\)/g) || [];\n\n        parsed.expressions = expressions.map(function (expression) {\n            var captures = expression.match(RE_MQ_EXPRESSION),\n                feature  = captures[1].toLowerCase().match(RE_MQ_FEATURE);\n\n            return {\n                modifier: feature[1],\n                feature : feature[2],\n                value   : captures[2]\n            };\n        });\n\n        return parsed;\n    });\n}\n\n// -- Utilities ----------------------------------------------------------------\n\nfunction toDecimal(ratio) {\n    var decimal = Number(ratio),\n        numbers;\n\n    if (!decimal) {\n        numbers = ratio.match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n        decimal = numbers[1] / numbers[2];\n    }\n\n    return decimal;\n}\n\nfunction toDpi(resolution) {\n    var value = parseFloat(resolution),\n        units = String(resolution).match(RE_RESOLUTION_UNIT)[1];\n\n    switch (units) {\n        case 'dpcm': return value / 2.54;\n        case 'dppx': return value * 96;\n        default    : return value;\n    }\n}\n\nfunction toPx(length) {\n    var value = parseFloat(length),\n        units = String(length).match(RE_LENGTH_UNIT)[1];\n\n    switch (units) {\n        case 'em' : return value * 16;\n        case 'rem': return value * 16;\n        case 'cm' : return value * 96 / 2.54;\n        case 'mm' : return value * 96 / 2.54 / 10;\n        case 'in' : return value * 96;\n        case 'pt' : return value * 72;\n        case 'pc' : return value * 72 / 12;\n        default   : return value;\n    }\n}\n","import React from 'react'\nimport django from 'django'\nimport { PaginationButton } from './PaginationButton'\nimport { useSearchParams } from 'react-router'\n\nconst pageNavigationStr = django.gettext('Page navigation')\nconst pageNextStr = django.gettext('next page')\nconst pagePrevStr = django.gettext('prev page')\n\nexport const Pagination = ({\n  elidedRange,\n  nextPage,\n  prevPage,\n  containerTop\n}) => {\n  const [queryParams, setQueryParams] = useSearchParams()\n  const currPage = parseInt(queryParams.get('page')) || 1\n\n  const onPaginate = (pageIndex) => {\n    queryParams.set('page', pageIndex)\n    setQueryParams(queryParams)\n\n    if (typeof containerTop === 'number') {\n      window.scrollTo({ top: containerTop })\n    }\n  }\n\n  return (\n    <nav className=\"pagination\" aria-label={pageNavigationStr}>\n      <ul>\n        <PaginationButton\n          type=\"prev\"\n          key=\"pagination-item-prev\"\n          pageIndex={currPage - 1}\n          isDisabled={!prevPage}\n          ariaLabel={pagePrevStr}\n          onClick={onPaginate}\n        />\n        <PaginationButton\n          type=\"current-num\"\n          pageIndex={currPage}\n          total={elidedRange.length}\n          onClick={onPaginate}\n        />\n\n        {elidedRange.map((num, idx) => (\n          <PaginationButton\n            type=\"num\"\n            key={'pagination-item-' + idx}\n            isActive={num === currPage}\n            pageIndex={num}\n            onClick={onPaginate}\n            isNoButton={num === '…'}\n          />\n        ))}\n\n        <PaginationButton\n          type=\"next\"\n          key=\"pagination-item-next\"\n          pageIndex={currPage + 1}\n          isDisabled={!nextPage}\n          ariaLabel={pageNextStr}\n          onClick={onPaginate}\n        />\n      </ul>\n    </nav>\n  )\n}\n","import React from 'react'\n\nexport const Pill = (props) => {\n  const {\n    pillClass,\n    children\n  } = props\n\n  return (\n    <li className={pillClass}>\n      {children}\n    </li>\n  )\n}\n","import React from 'react'\nimport django from 'django'\nimport { createRoot } from 'react-dom/client'\nimport { widget as ReactWidget } from 'adhocracy4'\nimport { BrowserRouter } from 'react-router'\nimport { ListMapView } from '../contrib/map/ListMapView'\nimport { FetchItemsProvider } from '../contrib/contexts/FetchItemsProvider'\n\nfunction init () {\n  ReactWidget.initialise('mb', 'map-topics',\n    function (el) {\n      const props = JSON.parse(el.getAttribute('data-attributes'))\n      const root = createRoot(el)\n      root.render(\n        <React.StrictMode>\n          <BrowserRouter>\n            <FetchItemsProvider {...props} isMapAndList>\n              <ListMapView {...props} listStr={django.gettext('Map topics list')} mode=\"map\" />\n            </FetchItemsProvider>\n          </BrowserRouter>\n        </React.StrictMode>\n      )\n    }\n  )\n}\n\ndocument.addEventListener('DOMContentLoaded', init, false)\n","import React from 'react'\nimport django from 'django'\nimport BaseMap from 'adhocracy4/adhocracy4/maps_react/static/a4maps_react/Map'\nimport MarkerClusterLayer\n  from 'adhocracy4/adhocracy4/maps_react/static/a4maps_react/MarkerClusterLayer'\nimport GeoJsonMarker\n  from 'adhocracy4/adhocracy4/maps_react/static/a4maps_react/GeoJsonMarker'\nimport { ItemPopup } from './ItemPopup'\n\nconst translations = {\n  beginningMap: django.gettext('A map representation follows.'),\n  endMap: django.gettext('End of map.'),\n  skipMap: django.gettext('Skip map')\n}\n\n/**\n * Creates a Map component.\n *\n * @param {object} props - The properties for the Map component.\n * @param {string} props.id - The unique identifier for the Map component.\n * @param {string} props.title - The title for the Map component.\n * @returns {React.Element} - The rendered Map component.\n * @throws {Error} - If id is not defined.\n */\nexport const Map = React.forwardRef(function Map ({ id, title, ...props }, ref) {\n  if (!id) {\n    throw new Error('id must be defined when using Map')\n  }\n\n  return (\n    <div className=\"modul-geomap\" id={id}>\n      {title && <h2 className=\"title\">{title}</h2>}\n      <div className=\"geomap-main\">\n        <p className=\"skipmap\">\n          <span className=\"aural\">{translations.beginningMap}</span>\n          <a href={'#' + id + '_skipmap'}>{translations.skipMap}</a>\n        </p>\n        <div className=\"geomap-container\">\n          <BaseMap {...props} ref={ref} />\n        </div>\n      </div>\n\n      <div id={id + '_skipmap'}>\n        <p className=\"aural\">{translations.endMap}</p>\n      </div>\n    </div>\n  )\n})\n\n/**\n * Represents a map component with markers.\n *\n * @param {object} props - The properties to pass to the Map component.\n * @param {Array<object>} points - The array of points to create markers from.\n * @param {boolean} withoutPopup - Indicates whether to exclude the popup for each marker.\n * @param {ReactNode} children - Any additional controls etc. to be added to the map\n * @returns {JSX.Element} - The rendered map component with markers.\n */\nexport const MapWithMarkers = ({ points, withoutPopup, children, ...props }) => {\n  const markers = points.map((feature, index) => (\n    <GeoJsonMarker key={index} feature={feature}>\n      {!withoutPopup && <ItemPopup feature={feature} />}\n    </GeoJsonMarker>\n  ))\n  return (\n    <Map\n      {...props}\n    >\n      {points.length > 1 ? <MarkerClusterLayer>{markers}</MarkerClusterLayer> : markers}\n      {children}\n    </Map>\n  )\n}\n","import React, {\n  useState,\n  useEffect,\n  createContext,\n  useContext\n} from 'react'\nimport { useLocation, useSearchParams } from 'react-router'\nimport Spinner from '../Spinner'\n\nconst DataContext = createContext()\n\n/**\n * Custom Hook to fetch and return items using Context\n * @returns {Object} The fetched items\n */\nexport const useFetchedItems = () => {\n  // Use the useContext hook to access the DataContext\n  return useContext(DataContext)\n}\n\nconst fetchItems = async (url, urlParams = '') => {\n  const response = await fetch(url + urlParams)\n  return await response.json()\n}\n\n/**\n * A provider component for fetching and managing items data from an API.\n * Wrap this around a component that needs to fetch and manage items data and\n * then use the `useFetchedItems` hook to access the data anywhere in the\n * component tree within the provider.\n *\n * Usage:\n * Use the FetchItemsProvider Component as a wrapper for any component that needs\n * access to fetched items. Provide the necessary props: `apiUrl` (API endpoint),\n * `isMapAndList` (true/false), and `children` (components you want to provide data for)\n *\n * Example:\n *  <FetchItemsProvider apiUrl=\"/api/items\" isMapAndList>\n *    <YourComponent />\n *  </FetchItemsProvider>\n *\n * Then in the child component (`YourComponent` in this case) you can use the\n * `useFetchedItems` hook to get the fetched data.\n *\n * Example:\n *  const YourComponent = () => {\n *    const {results, currentPage, isMapAndList, viewMode} = useFetchedItems();\n *    // Now you have access to `results`, `currentPage`, `viewMode` and `isMapAndList` data\n *    return <div>Your JSX goes here</div>\n *  }\n *\n * @see https://react.dev/learn/passing-data-deeply-with-context\n *\n * @param {string} apiUrl - The URL of the API endpoint.\n * @param {boolean} isMapAndList - Flag indicating whether both map and list views are supported.\n * @param {React.ReactNode} children - The child components to render.\n * @returns {React.ReactNode} - The rendered child components.\n */\nexport function FetchItemsProvider ({ apiUrl, isMapAndList, children }) {\n  const location = useLocation()\n  const [queryParams] = useSearchParams()\n  const [data, setData] = useState({ list: null, map: null })\n  const [currentPage, setCurrentPage] = useState(1)\n  const viewMode = queryParams.get('mode') || 'list'\n  const value = { results: data, currentPage, viewMode, isMapAndList: !!isMapAndList }\n\n  const fetchAndUpdate = async (url, key) => {\n    const params = new URLSearchParams(location.search)\n    params.delete('mode')\n\n    if (key === 'map') {\n      params.append('page_size', '10000')\n      params.delete('page')\n    }\n    try {\n      const json = await fetchItems(url, '?' + params)\n      setData(prevData => ({ ...prevData, [key]: json }))\n      setCurrentPage(queryParams.get('page') || 1)\n    } catch (error) {\n      console.error(error)\n    }\n  }\n\n  useEffect(() => {\n    // fetches and updates data from an API. For each view mode ('list', 'map'),\n    // it calls fetchAndUpdate directly if it's the current mode, else it sets\n    // an idle callback.\n    const views = isMapAndList ? ['list', 'map'] : ['list']\n\n    for (const view of views) {\n      if (viewMode === view) {\n        fetchAndUpdate(apiUrl, view)\n      } else {\n        if (typeof requestIdleCallback === 'function') {\n          requestIdleCallback(() => fetchAndUpdate(apiUrl, view), { timeout: 1000 })\n        } else {\n          setTimeout(() => fetchAndUpdate(apiUrl, view), 1000)\n        }\n      }\n    }\n  }, [apiUrl, location.search])\n\n  if (data[viewMode] === null) {\n    return <Spinner />\n  }\n\n  return (\n    <DataContext.Provider value={value}>\n      {children}\n    </DataContext.Provider>\n  )\n}\n","import React, { useEffect } from 'react'\nimport { useSearchParams } from 'react-router'\nimport { ControlBar } from '../ControlBar'\nimport { CardList } from '../card/CardList'\nimport { useFetchedItems } from '../contexts/FetchItemsProvider'\nimport { MapWithMarkers } from './Map'\nimport { useMediaQuery } from 'react-responsive'\n\n/**\n * Component that displays a list or map view based on the selected mode. It\n * needs to be used in conjunction with the `FetchItemsProvider` component.\n * @param {Object} map - props that are passed to the Map component.\n * @param {string} listStr - accessible text for the list\n */\nexport const ListMapView = ({ map, listStr, mode, desktopMode }) => {\n  const [queryParams, setQueryParams] = useSearchParams()\n  const { results } = useFetchedItems()\n  const viewMode = queryParams.get('mode') || mode || 'list'\n  const desktopViewMode = queryParams.get('desktopMode') || 'map'\n\n  // Responsive Hook\n  const isDesktop = useMediaQuery({ minWidth: 768 })\n\n  // Sets the mode to \"map\" if it's a desktop and no mode is set\n  useEffect(() => {\n    if (isDesktop && !queryParams.get('page_size')) {\n      const newSearchParams = new URLSearchParams(queryParams.toString())\n      newSearchParams.set('page_size', '8')\n      setQueryParams(newSearchParams, { replace: true })\n    }\n  }, [isDesktop, queryParams, setQueryParams])\n\n  // Function to toggle map mode\n  const handleToggle = () => {\n    const newSearchParams = new URLSearchParams(queryParams.toString())\n    if (desktopViewMode === 'map') {\n      newSearchParams.set('desktopMode', 'list')\n    } else {\n      newSearchParams.set('desktopMode', 'map')\n    }\n    setQueryParams(newSearchParams, { replace: true })\n  }\n\n  if (!results || !results.map || !results.list) {\n    return (\n      <>\n        <div className=\"block block--halfgap\" />\n        <div>Loading...</div>\n      </>\n    )\n  }\n\n  // Desktop: Always both views\n  if (isDesktop) {\n    return (\n      <>\n        <div className=\"block block--halfgap\">\n          <ControlBar\n            mapListViewMode={viewMode}\n            showViewModeSwitch={false}\n            desktopViewMode={desktopViewMode}\n            handleToggle={handleToggle}\n          />\n        </div>\n        <div className=\"desktop-combined-view\">\n          {desktopViewMode === 'map' && (\n            <div className=\"map-section\">\n              <MapWithMarkers\n                {...map}\n                points={results.map.results.map(f => ({ ...f.point, properties: f }))}\n                className=\"map--list\"\n                id=\"map-list\"\n              />\n            </div>\n          )}\n          <div className=\"list-section\">\n            <CardList data={results.list} listStr={listStr} />\n          </div>\n        </div>\n      </>\n    )\n  }\n\n  // Mobile: Switch as before\n  const switchDisplays = () => {\n    if (viewMode === 'map') {\n      // If results are not jet loaded show a loading message and wait to prevent JS Errors\n      if (!results.map || !results.map.results) {\n        return <div>Loading map...</div>\n      }\n      return (\n        <MapWithMarkers\n          {...map}\n          points={results.map.results.map(f => ({ ...f.point, properties: f }))}\n          className=\"map--list\"\n          id=\"map-list\"\n        />\n      )\n    } else {\n      return <CardList data={results.list} listStr={listStr} />\n    }\n  }\n\n  return (\n    <>\n      <div className=\"block block--halfgap\">\n        <ControlBar mapListViewMode={viewMode} />\n      </div>\n      {switchDisplays()}\n    </>\n  )\n}\n","import React from 'react'\nimport { classNames } from 'adhocracy4'\n\nexport const ToggleSwitch = ({\n  switchStr,\n  uniqueId,\n  toggleSwitch,\n  defaultChecked,\n  checked,\n  className,\n  labelLeft = true,\n  size = 'large',\n  ariaLabelledBy\n}) => (\n  <div className={classNames('toggle-switch form-check', className)}>\n    {labelLeft && switchStr && !ariaLabelledBy && <label className=\"toggle-switch__label\" htmlFor={uniqueId}>{switchStr}</label>}\n    <input\n      type=\"checkbox\"\n      name={uniqueId}\n      id={uniqueId}\n      className=\"toggle-switch__input\"\n      onChange={toggleSwitch}\n      defaultChecked={defaultChecked}\n      checked={checked}\n      aria-labelledby={ariaLabelledBy || (labelLeft && switchStr ? undefined : uniqueId + '-label')}\n    />\n    <span className={classNames('toggle-switch__display', size === 'small' && 'toggle-switch__display--small')} hidden>\n      <i className=\"bicon bicon-check toggle-switch__icon toggle-switch__icon--on\" aria-hidden=\"true\" />\n      <i className=\"bicon bicon-times toggle-switch__icon toggle-switch__icon--off\" aria-hidden=\"true\" />\n    </span>\n    {!labelLeft && !ariaLabelledBy && switchStr && (\n      <label id={uniqueId + '-label'} className={classNames('toggle-switch__label', size !== 'small' && 'toggle-switch__label--right', size === 'small' && 'toggle-switch__label--small')} htmlFor={uniqueId}>{switchStr}</label>\n    )}\n  </div>\n)\n"],"names":["_react","_interopRequireDefault","require","_reactLeaflet","_excluded","exports","_ref","feature","className","children","rest","_objectWithoutProperties2","default","_className","createElement","Popup","_extends2","closeButton","style","backgroundImage","properties","image","_django","_Pill","translated","filterRemove","django","gettext","getFilterRemoveText","label","interpolate","_filters","filters","onRemove","filter","f","value","length","map","choices","find","choice","Pill","key","type","pillClass","onClick","title","_helpers","props","item","safeLocale","locale","undefined","dateTime","modified","created","date","toLocaleDate","creator","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","module","shim","propName","componentName","location","propFullName","secret","err","Error","name","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","_map","__typeError","msg","TypeError","__accessCheck","obj","member","has","__privateGet","getter","call","get","__privateAdd","WeakSet","add","set","__privateSet","setter","Action","Action2","PopStateEventType","isLocation","createMemoryHistory","options","entries","initialEntries","initialIndex","v5Compat","entry","index2","createMemoryLocation","state","mask","index","clampIndex","action","listener","n","Math","min","max","getCurrentLocation","to","createLocation","pathname","warning","charAt","JSON","stringify","createHref2","createPath","createHref","createURL","URL","encodeLocation","path","parsePath","search","hash","push","nextLocation","splice","delta","replace","go","nextIndex","listen","fn","createBrowserHistory","getUrlBasedHistory","window2","globalHistory","maskedLocation","masked","usr","createHashHistory","substring","startsWith","base","document","querySelector","href","getAttribute","url","hashIndex","indexOf","slice","invariant","message","cond","console","warn","e","getHistoryState","idx","current","random","toString","parsedPath","searchIndex","getLocation","validateLocation","window","defaultView","history","getIndex","handlePop","createBrowserURLImpl","replaceState","addEventListener","removeEventListener","historyState","pushState","error","DOMException","assign","isAbsolute","origin","createContext","defaultValue","RouterContextProvider","constructor","init","this","Map","context","WeakMap","unsupportedLazyRouteObjectKeys","Set","unsupportedLazyRouteFunctionKeys","isUnsupportedLazyRouteFunctionKey","convertRoutesToDataRoutes","routes","mapRouteProperties2","parentPath","manifest","allowInPlaceMutations","route","treePath","String","id","join","isIndexRoute","indexRoute","mergeRouteUpdates","pathOrLayoutRoute","updates","Object","lazy","matchRoutes","locationArg","basename","matchRoutesImpl","allowPartial","precomputedBranches","stripBasename","branches","flattenAndRankRoutes","matches","decoded","decodePath","i","matchRouteBranch","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","flattenRoutes","sort","a","b","score","siblings","every","compareIndexes","routesMeta","meta","childrenIndex","rankRouteBranches","parentsMeta","_hasParentOptionalSegments","flattenRoute","hasParentOptionalSegments","relativePath","caseSensitive","joinPaths","concat","computeScore","forEach","includes","exploded","explodeOptionalSegments","segments","split","first","isOptional","endsWith","required","restExploded","result","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","s","initialScore","some","reduce","segment","test","branch","matchedParams","matchedPathname","end","remainingPathname","matchPath","pathnameBase","normalizePathname","generatePath","originalPath","prefix","stringify2","p","keyMatch","optional","suffix","param","encodeURIComponent","pattern","matcher","compiledParams","compilePath","captureGroups","memo2","paramName","splatValue","regexpSource","str","nextChar","RegExp","v","decodeURIComponent","toLowerCase","startIndex","ABSOLUTE_URL_REGEX","isAbsoluteUrl","resolvePath","fromPathname","toPathname","removeDoubleSlashes","resolvePathname","normalizeSearch","normalizeHash","removeTrailingSlash","pop","getInvalidPathError","char","field","dest","getPathContributingMatches","getResolveToMatches","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","from","isEmptyPath","routePathnameIndex","toSegments","shift","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","DataWithResponseInit","data2","status","redirect","responseInit","headers","Headers","Response","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","getRoutePattern","parts","m","Boolean","isBrowser","parseToInfo","_to","absoluteURL","isExternal","currentUrl","targetUrl","protocol","UninstrumentedSymbol","Symbol","getRouteInstrumentationUpdates","fns","aggregated","middleware","loader","instrument","keys","instrumented","wrapImpl","lazyObject","lazyFn","instrumentations","handler","original","args","getHandlerInfo","hydrate","instrumentHandler","request","instrumentedHandler","getReadonlyRequest","getReadonlyContext","impls","getInfo","async","recurseRight","info","impl","handlerPromise","callHandler","getRouterInfo","router","opts","formMethod","formEncType","formData","body","method","thing","proto","getPrototypeOf","prototype","getOwnPropertyNames","objectProtoNames","isPlainObject","frozen","freeze","ctx","_routes","_branches","_hmrRoutes","_hmrBranches","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","historyAction","formAction","json","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","defaultMapRouteProperties","hasErrorBoundary","TRANSITIONS_STORAGE_KEY","ResetLoaderDataSymbol","DataRoutes","stableRoutes","activeRoutes","hasHMRRoutes","setRoutes","setHmrRoutes","commitHmrRoutes","createRouter","routerWindow","isBrowser3","hydrationRouteProperties2","hydrationRouteProperties","_mapRouteProperties","mapRouteProperties","dataRoutes","initialized","renderFallback","dataStrategyImpl","dataStrategy","defaultDataStrategyWithMiddleware","future","unlistenHistory","subscribers","bufferedInitialStateUpdate","savedScrollPositions2","getScrollRestorationKey2","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialMatchesIsFOW","initialErrors","patchRoutesOnNavigation","checkFogOfWar","active","routeHasLoaderOrMiddleware","errors","relevantMatches","findIndex","getRouteHydrationStatus","shouldLoad","fogOfWar","getInternalRouterError","getShortCircuitMatches","pendingNavigationController","unblockBlockerHistoryUpdate","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","fetchers","blockers","pendingAction","pendingPopstateNavigationDfd","pendingPreventScrollReset","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","fetchersQueuedForDeletion","blockerFunctions","pendingRevalidationDfd","updateState","newState","matchRoute","errorElement","hydrateFallbackElement","unmountedFetchers","mountedFetchers","fetcher","size","newErrors","subscriber","deletedFetchers","viewTransitionOpts","flushSync","deleteFetcher","delete","completeNavigation","isActionReload","isMutationMethod","_isRedirect","mergeLoaderData","_","k","getSavedScrollPosition","priorPaths","currentLocation","toPaths","resolve","startNavigation","abort","startUninterruptedRevalidation","getScrollKey","saveScrollPosition","enableViewTransition","routesToUse","initialHydration","isHashChangeOnly","submission","notFoundMatches","handleNavigational404","loadingNavigation","overrideNavigation","AbortController","pendingActionResult","createClientSideRequest","signal","scopedContext","getContext","pendingError","findNearestBoundary","actionResult","isFogOfWar","interruptActiveLoads","getSubmittingNavigation","discoverResult","discoverRoutes","shortCircuited","partialMatches","matches2","boundaryId","actionMatch","getTargetMatch","dsMatches","getTargetedDataStrategyMatches","results","callDataStrategy","aborted","routeId","isRedirectResult","replace2","normalizeRedirectLocation","startRedirectNavigation","isErrorResult","boundaryMatch","handleAction","getLoadingNavigation","updatedMatches","workingFetchers","fetcherSubmission","callSiteDefaultShouldRevalidate","activeSubmission","getSubmissionFromNavigation","shouldUpdateNavigationState","getUpdatedActionData","revalidatingFetchers","getMatchesToLoad","workingFetchers2","didUpdateFetcherRedirects2","markFetchRedirectsDone","getActionDataForCommit","rf","revalidatingFetcher","getLoadingFetcher","getUpdatedRevalidatingFetchers","abortFetcher","controller","abortPendingFetchRevalidations","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","redirect2","findRedirect","processLoaderData","didUpdateFetcherRedirects","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","handleLoaders","isNavigation","redirectLocation","isDocumentReload","redirectNavigationType","fetcherKey","dataResults","callDataStrategyImpl","hasOwnProperty","shouldCallHandler","isRedirectDataStrategyResult","normalizeRelativeRoutingRedirectResponse","convertDataStrategyResultToDataResult","fetchersToLoad","loaderResultsPromise","fetcherResultsPromise","Promise","all","acc","r","updateFetcherState","setFetcherError","reason","markFetchersDone","doneFetcher","getDoneFetcher","doneKeys","didUpdateFetchers","landedId","yeetedKeys","deleteBlocker","updateBlocker","newBlocker","blocker","shouldBlockNavigation","Array","blockerKey","blockerFunction","y","activeBranches","localManifest","patch","patchRoutesImpl","newMatches","newPartialMatches","compareMatches","initialize","nextHistoryUpdatePromise","then","_window","transitions","sessionPositions","sessionStorage","getItem","parse","isArray","restoreAppliedTransitions","_saveAppliedTransitions","setItem","persistAppliedTransitions","subscribe","enableScrollRestoration","positions","getPosition","getKey","navigate","createDeferred","promise","maskPath","normalizedPath","normalizeTo","fromRouteId","relative","normalizeNavigateOptions","userReplace","viewTransition","defaultShouldRevalidate","fetch","requestMatches","existingFetcher","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","fetchMatches","actionResults","match2","revalidationRequest","loadId","loadFetcher","staleKey","existingFetcher2","fetcherIsMounted","getRedirectStateWithDoneFetcher","finalFetchers","handleFetcherAction","handleFetcherLoader","revalidate","getFetcher","resetFetcher","count","dispose","clear","getBlocker","patchRoutes","unstable_allowElementMutations","_internalFetchControllers","_internalSetRoutes","newRoutes","_internalSetStateDoNotUseOrYouWillBreakYourApp","instrumentedNavigate","fetch2","instrumentedFetch","instrumentClientSideRouter","createStaticHandler","routeBranches","queryImpl","requestContext","skipLoaderErrorBubbling","routeMatch","filterMatchesToLoad","skipRevalidation","result2","isRouteRequest","throwStaticHandlerAbortedError","Location","statusCode","loaderHeaders","actionHeaders","loaderRequest","Request","loadRouteData","handlerContext","submit","isResponse","isDataStrategyResult","isRedirectResponse","maxIdx","getDataStrategyMatch","processRouteLoaderData","defaultDataStrategy","isDataWithResponseInit","dataWithResponseInitToResponse","_internalRouteBranches","query","generateMiddlewareResponse","normalizePath","normalizePathImpl","defaultNormalizePath","isValidMethod","methodNotAllowedMatches","staticContext","renderedStaticContext","loadLazyMiddlewareForMatches","runServerMiddlewarePipeline","createDataFunctionUrl","opts2","parseResponseBody","dataWithResponseInitToErrorResponse","getStaticContextFromError","boundaryRouteId","queryRoute","innerRequest","processed","handleQueryResult","values","errorBoundaryId","_deepestRenderedBoundaryId","contextualMatches","activeRouteMatch","nakedIndex","hasNakedIndexQuery","URLSearchParams","indexValues","getAll","append","qs","prependBasename","isFetcher","isSubmissionNavigation","searchParams","getInvalidBodyError","toUpperCase","stripHashFromPath","FormData","convertFormDataToSearchParams","convertSearchParamsToFormData","lazyRoutePropertiesToSkip","hasPatchRoutesOnNavigation","nextUrl","actionStatus","shouldSkipRevalidation","baseShouldRevalidateArgs","currentParams","nextParams","forceShouldLoad","shouldLoad2","currentLoaderData","currentMatch","isNew","isMissingData","isNewLoader","currentPath","isNewRouteInstance","shouldRevalidateArgs","shouldRevalidateLoader","isMidInitialLoad","fetcherMatches","fetcherMatch","fetchController","fetcherDsMatches","hasData","hasError","loaderMatch","arg","shouldRevalidate","routeChoice","allowElementMutations","childrenToPatch","uniqueChildren","existingChildren","newRoute","existingRoute","existingRoute2","isSameRoute","existingRouteTyped","newRouteTyped","aChild","bChild","lazyRoutePropertyCache","loadLazyRouteProperty","routeToUpdate","cache","cachedPromise","propertyPromise","isUnsupported","isUnsupportedLazyRouteObjectKey","isStaticallyDefined","lazyRouteFunctionCache","isNonNullable","promises","matchesToLoad","keyedResults","runClientMiddlewarePipeline","errorHandler","runMiddlewarePipeline","isDataStrategyResults","nextResult","maxBoundaryIdx","processResult","isResult","dataFnArgs","tuples","flatMap","callRouteMiddleware","middlewares","tuple","next","getDataStrategyMatchLazyPromises","lazyMiddlewarePromise","lazyRoutePromises","lazyRoutePromise","lazyHandlerPromise","lazyRoutePromise2","lazyRoute","routeUpdates","lazyRouteProperty","lazyValue","catch","lazyKeys","lazyPropertyPromises","loadLazyRoute","isUsingNewApi","_lazyPromises","handlerOverride","isMiddlewareOnlyRoute","onReject","isAction","runHandler","reject","abortPromise","actualHandler","race","handlerError","handler2","callLoaderOrAction","targetMatch","isStaticHandler","dataStrategyArgs","runClientMiddleware","cb","typedDataStrategyArgs","contentType","dataStrategyResult","trimmedMatches","invalidProtocols","historyInstance","normalizedLocation","isSameBasename","parsed","foundError","newLoaderData","mergedLoaderData","merged","reverse","errorMessage","isRedirectStatusCode","res","rej","val","DataRouterContext","displayName","DataRouterStateContext","RSCRouterContext","useIsRSCRouterContext","ViewTransitionContext","isTransitioning","FetchersContext","AwaitContext","AwaitContextProvider","Provider","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","ENABLE_DEV_WARNINGS","ERROR_DIGEST_BASE","ERROR_DIGEST_REDIRECT","ERROR_DIGEST_ROUTE_ERROR_RESPONSE","decodeRedirectErrorDigest","digest","reloadDocument","decodeRouteErrorResponseDigest","useHref","useInRouterContext","navigator","useResolvedPath","joinedPathname","useLocation","useNavigationType","navigationType","useMatch","navigateEffectWarning","useIsomorphicLayoutEffect","static","useNavigate","useDataRouterContext","useCurrentRouteId","activeRef","useNavigateStable","dataRouterContext","routePathnamesJson","useNavigateUnstable","OutletContext","useOutletContext","useOutlet","useParams","useRoutes","useRoutesImpl","dataRouterOpts","parentMatches","parentParams","parentPathname","parentPathnameBase","parentRoute","warningOnce","locationFromContext","parsedLocationArg","parentSegments","Component","renderedMatches","_renderMatches","DefaultErrorComponent","useRouteError","stack","lightgrey","preStyles","padding","backgroundColor","codeStyles","devInfo","fontStyle","defaultErrorElement","RenderErrorBoundary","super","getDerivedStateFromError","getDerivedStateFromProps","componentDidCatch","errorInfo","onError","render","routeContext","component","RSCErrorHandler","contextType","errorRedirectHandledMap","existingRedirect","redirectPromise","__reactRouterDataRouter","httpEquiv","content","RenderedRoute","ErrorBoundary","dataRouterState","errorIndex","fallbackIndex","HydrateFallback","errors2","needsToRunLoader","isStatic","onErrorHandler","reduceRight","shouldRenderHydrateFallback","getChildren","getDataRouterConsoleError","hookName","useDataRouterState","useRouteContext","thisRoute","useNavigation","useRevalidator","useMatches","useLoaderData","useRouteLoaderData","useActionData","useAsyncValue","_data","useAsyncError","_error","blockerId","useBlocker","shouldBlock","setBlockerKey","alreadyWarned","useRoute","currentRouteId","route2","toRouterStateMatch","useRouterState","pending","shared","alreadyWarned2","warnOnce","condition","useOptimisticImpl","stableUseOptimisticSetter","createMemoryRouter","Deferred","RouterProvider","reactDomFlushSyncImpl","useTransitions","unstable_rsc","_state","setStateImpl","setOptimisticState","pendingState","setPendingState","vtContext","setVtContext","renderDfd","setRenderDfd","transition","setTransition","interruption","setInterruption","fetcherData","setState","isViewTransitionAvailable","startViewTransition","skipTransition","t","finished","finally","getOptimisticRouterState","renderPromise","transition2","state2","Router","MemoizedDataRoutes","currentState","DataRoutes2","MemoryRouter","historyRef","Navigate","jsonPath","Outlet","Route","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","createRoutesFromChildren","Await","dataRouterStateContext","AwaitErrorBoundary","ResolveAwait","renderError","defineProperty","_tracked","toRender","apply","createRoutesFromElements","renderMatches","useRouteComponentProps","WithComponentProps","withComponentProps","Component4","useHydrateFallbackProps","WithHydrateFallbackProps","withHydrateFallbackProps","useErrorBoundaryProps","WithErrorBoundaryProps","withErrorBoundaryProps","defaultMethod","defaultEncType","isHtmlElement","HTMLElement","createSearchParams","_formDataSupportsSubmitter","supportedFormEncTypes","getFormEncType","encType","getFormSubmissionInfo","target","tagName","attr","isButtonElement","isInputElement","form","isFormDataSubmitterSupported","HOLE","NAN","NEGATIVE_INFINITY","NEGATIVE_ZERO","NULL","POSITIVE_INFINITY","UNDEFINED","TYPE_BIGINT","TYPE_DATE","TYPE_ERROR","TYPE_MAP","TYPE_NULL_OBJECT","TYPE_PROMISE","TYPE_REGEXP","TYPE_SET","TYPE_SYMBOL","TYPE_URL","TYPE_PREVIOUS_RESOLVED","SUPPORTED_ERROR_TYPES","Deferred2","TIME_LIMIT_MS","getNow","Date","now","yieldToMain","setTimeout","flatten","input","indices","existing","Number","isNaN","deferred","plugins","postPlugins","stringified","lastYieldTime","flattenValue","partsForObj","keyFor","pluginHandled","plugin","pluginResult","pluginIdentifier","i2","getTime","source","flags","isPlainObject2","objectProtoNames2","globalObj","globalThis","unflatten","hydrated","SyntaxError","postRun","NaN","Infinity","c","BigInt","for","newSet","create","d","errorType","vals","v2","decode","readable","done","reader","pipeThrough","decoder","TextDecoder","leftover","TransformStream","transform","chunk","stream","part","enqueue","flush","createLineSplittingTransform","getReader","decodeInitial","donePromise","decodeDeferred","closed","read","line","colonIndex","deferredId","lineData","jsonLine","encode","onComplete","encoder","textEncoder","TextEncoder","lastSentIndex","ReadableStream","start","seenPromises","processingChain","raceDone","racePromise","rejectPromise","event","resolved","id2","close","createRequestInit","ESCAPE_LOOKUP","ESCAPE_REGEX","escapeHtml","html","invariant2","_isPreloadSupported","SingleFetchRedirectSymbol","SingleFetchNoResultError","SINGLE_FETCH_REDIRECT_STATUS","NO_BODY_STATUS_CODES","StreamTransfer","identifier","textDecoder","nonce","renderMeta","didRenderScripts","streamCache","scriptTag","dangerouslySetInnerHTML","__html","getTurboStreamSingleFetchDataStrategy","getRouter","routeModules","ssr","trailingSlashAware","getSingleFetchDataStrategyImpl","manifestRoute","hasLoader","hasClientLoader","fetchAndDecodeViaTurboStream","getRouteInfo","fetchAndDecode","shouldAllowOptOut","unwrapSingleFetchResult","singleFetchActionStrategy","foundRevalidatingServerLoader","singleFetchLoaderFetcherStrategy","routesParams","foundOptOutRoute","routeDfds","createDeferred2","singleFetchDfd","resolvePromise","isInitialLoad","__reactRouterHdrActive","targetRoutes","singleFetchPromise","middlewareError","fetchedData","routeResult","bubbleMiddlewareErrors","singleFetchLoaderNavigationStrategy","nonSsrStrategy","stripIndexParam","indexValuesToKeep","indexValue","toKeep","singleFetchUrl","reqUrl","extension","reload","decodeViaTurboStream","typed","global","Constructor","loadRouteModule","routeModulesCache","routeModule","import","__reactRouterContext","isSpaMode","getRouteCssDescriptors","css","rel","prefetchStyleLinks","links","el","relList","supports","isPreloadSupported","descriptors","styleLinks","descriptor","isPageLinkDescriptor","as","prefetchStyleLink","media","matchMedia","link","removeLink","head","contains","removeChild","onload","onerror","appendChild","page","isHtmlLinkDescriptor","imageSrcSet","imageSizes","getNewMatchesForLinks","nextMatches","currentMatches","mode","matchPathChanged","getModuleLinkHrefs","includeHydrateFallback","hrefs","clientActionModule","clientLoaderModule","hydrateFallbackModule","imports","flat","dedupeLinkDescriptors","preloads","preloadsSet","deduped","sorted","sortKeys","RemixRootDefaultHydrateFallback","BoundaryShell","renderScripts","groupRoutesByParentId","parentId","getRouteComponents","getRouteModuleComponent","RemixRootDefaultErrorBoundary","Layout","createServerRoutes","routesByParentId","spaModeLazyPromise","dataRoute","createClientRoutesWithHMRRevalidationOptOut","needsRevalidation","initialState","createClientRoutes","preventInvalidServerHandlerCall","hasAction","noActionDefinedError","article","fetchServerHandler","singleFetch","fetchServerLoader","fetchServerAction","prefetchModule","modulePath","prefetchRouteModuleChunks","prefetchStylesAndCallHandler","cachedModule","linkPrefetchPromise","clientMiddleware","getShouldRevalidateFunction","hasInitialData","initialData","hasInitialError","initialError","isHydrationRequest","clientLoader","_isHydrationRequest","serverLoader","shouldHydrateRouteLoader","clientAction","serverAction","getLazyRoute","routeModulePromise","prefetchRouteCssPromise","prefetchRouteCss","loadRouteModuleWithBlockingLinks","hasClientAction","clientActionPromise","hasClientMiddleware","clientMiddlewareModule","routeShouldRevalidate","handledRevalidation","wrapShouldRevalidateForHdr","myParams","didParamsChange","nextPaths","discoveredPathsMaxSize","discoveredPaths","URL_LIMIT","isFogOfWarEnabled","routeDiscovery","getPatchRoutesOnNavigationFunction","fetchAndApplyManifestPatches","manifestPath","useFogOFWarDiscovery","connection","saveData","registerElement","fetchPatches","querySelectorAll","lazyPaths","debouncedFetchPatches","callback","wait","timeoutId","clearTimeout","debounce","observer","MutationObserver","observe","documentElement","subtree","childList","attributes","attributeFilter","disconnect","getManifestPath","_manifestPath","MANIFEST_VERSION_STORAGE_KEY","errorReloadPath","version","serverPatches","ok","removeItem","knownRoutes","patches","queue","addToFifoQueue","parentIds","useDataRouterContext2","useDataRouterStateContext","FrameworkContext","useFrameworkContext","composeEventHandlers","theirHandler","ourHandler","defaultPrevented","getActiveMatches","isHydrated","errorIdx","CRITICAL_CSS_DATA_ATTRIBUTE","Links","crossOrigin","criticalCss","routerMatches","keyedLinks","getKeyedLinksForMatches","PrefetchPageLinks","linkProps","rsc","RSCPrefetchPageLinksImpl","PrefetchPageLinksImpl","useKeyedPrefetchLinks","keyedPrefetchLinks","setKeyedPrefetchLinks","interrupted","mod","getKeyedPrefetchLinks","dataHrefs","unstable_trailingSlashAwareDataRequests","hasSomeRoutesWithShouldRevalidate","newMatchesForData","newMatchesForAssets","m2","moduleHrefs","Meta","_matches","leafMeta","_match","routeMeta","metaProps","isValidMetaTag","Comp","charSet","charset","setIsHydrated","Scripts","scriptProps","serverHandoffString","isRSCRouterContext","enableFogOfWar","initialScripts","contextScript","routeModulesScript","hmr","runtime","routeIndex","routeVarName","manifestEntry","chunks","varName","sri","routeIds","initialRoutes","getPartialManifest","suppressHydrationWarning","integrity","mergeRefs","refs","ref","RemixErrorBoundary","isOutsideRemixApp","errorInstance","heyDeveloper","fontSize","errorString","background","color","overflow","root","lang","fontFamily","isBrowser2","__reactRouterVersion","createBrowserRouter","parseHydrationData","createHashRouter","__staticRouterHydrationData","deserializeErrors","serialized","__type","__subType","ErrorConstructor","BrowserRouter","HashRouter","HistoryRouter","ABSOLUTE_URL_REGEX2","Link","discover","prefetch","forwardedRef","maskedHref","shouldPrefetch","prefetchRef","prefetchHandlers","theirElementProps","frameworkContext","maybePrefetch","setMaybePrefetch","setShouldPrefetch","onFocus","onBlur","onMouseEnter","onMouseLeave","onTouchStart","IntersectionObserver","isIntersecting","threshold","setIntent","cancelIntent","usePrefetchBehavior","internalOnClick","useLinkClickHandler","isSpaLink","NavLink","ariaCurrentProp","classNameProp","styleProp","routerState","useViewTransitionState","nextLocationPathname","endSlashPosition","isActive","isPending","renderProps","ariaCurrent","Form","onSubmit","useSubmit","useFormAction","preventDefault","submitter","nativeEvent","submitMethod","doSubmit","currentTarget","ScrollRestoration","storageKey","remixContext","useScrollRestoration","ssrKey","userKey","getScrollRestorationKey","restoreScroll","storageKey2","restoreKey","storedY","scrollTo","SCROLL_RESTORATION_STORAGE_KEY","getDataRouterConsoleError2","useDataRouterContext3","useDataRouterState2","replaceProp","button","metaKey","altKey","ctrlKey","shiftKey","isModifiedEvent","shouldProcessLinkClick","doNavigate","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","locationSearch","defaultSearchParams","setSearchParams","nextInit","navigateOptions","newSearchParams","fetcherId","getUniqueFetcherId","routerFetch","routerNavigate","useFetcher","defaultKey","setFetcherKey","load","submitImpl","FetcherForm","FetcherForm2","useFetchers","savedScrollPositions","scrollRestoration","capture","usePageHide","scrollY","disableScrollRestoration","location2","getElementById","scrollIntoView","useBeforeUnload","usePrompt","when","confirm","nextPath","StaticRouter","staticNavigator","getStatelessNavigator","StaticRouterProvider","hydrate2","fetchersContext","hydrateScript","serializeErrors","back","forward","createStaticHandler2","createStaticRouter","v8_middleware","v8_passThroughRequests","encoded","ABSOLUTE_URL_REGEX3","_ModeratorStatus","getClass","pill","pillHeader","pills","hasPointLabelIcon","numOfMorePills","proposal","is_archived","ModeratorStatus","modStatus","moderator_status","modStatusDisplay","get_moderator_status_display","__esModule","o","__proto__","_typeof","_t","getOwnPropertyDescriptor","_interopRequireWildcard","_adhocracy","_ControlBarListMapSwitch","_ToggleSwitch","_reactRouter","_ControlBarFilterPills","_FetchItemsProvider","_Spinner","ownKeys","getOwnPropertySymbols","enumerable","_objectSpread","arguments","_defineProperty2","getOwnPropertyDescriptors","defineProperties","showFilters","hideFilters","nav","showMap","_list$filters","mapListViewMode","_ref$showViewModeSwit","showViewModeSwitch","desktopViewMode","handleToggle","_useFetchedItems","useFetchedItems","list","isMapAndList","viewMode","_useState","useState","_useState2","_slicedToArray2","expandFilters","setExpandFilters","_useSearchParams","_useSearchParams2","queryParams","setQueryParams","term","_useState3","_useState4","setFilters","appliedFilters","_f$choices","matchedChoice","nonOrderingFilters","useEffect","updatedFilters","foundProposalsText","applyQuery","handleFilterChange","ControlBarSearch","onSearch","handleSearch","placeholder","searchPlaceholder","ordering","ControlBarDropdown","filterId","onSelectFilter","ngettext","ControlBarFilterPills","ControlBarListMapSwitch","ToggleSwitch","uniqueId","switchStr","defaultChecked","isChecked","toggleSwitch","permissions","positiveRatingsStr","positiveCount","negativeRatingsStr","negativeCount","supportStr","commentsStr","npgettext","commentCount","votesStr","voteCount","view_rate_count","Fragment","view_support_count","view_vote_count","view_comment_count","_CardStats","detailsStr","toStr","hover","setHover","click","CardStats","positive_rating_count","negative_rating_count","comment_count","vote_count","ServerRouter","staticHandlerContext","serializeError","serverHandoffStream","createRoutesStub","_context","routerRef","frameworkContextRef","patched","processRoutes","mw","entryRoute","unsign","cookie","lastIndexOf","createKey","signature","byteString","Uint8Array","charCodeAt","byteStringToUint8Array","atob","crypto","subtle","verify","usages","importKey","createCookie","cookieOptions","secrets","sameSite","expires","warnOnceAboutExpiresCookie","isSigned","maxAge","cookieHeader","parseOptions","cookies","unsignedValue","decodeData","decodeCookieValue","serialize","serializeOptions","btoa","chr","exec","fromCharCode","parseInt","myUnescape","encodeData","sign","encodeCookieValue","isCookie","code","hex","myEscape","createEntryRouteModules","memo","ServerMode","ServerMode2","sanitizeError","serverMode","sanitized","sanitizeErrors","matchServerRoutes","callRouteHandler","stripRoutesParam","duplex","globalDevServerHooksKey","setDevServerHooks","devServerHooks","getDevServerHooks","getBuildTimeHeader","headerName","process","env","IS_RR_BUILD_REQUEST","createStaticHandlerDataRoutes","commonRoute","preRenderedData","decodeURI","uint8array","g","createServerHandoffString","serverHandoff","getDocumentHeaders","build","getRouteHeadersFn","_defaultHeaders","errorHeaders","boundaryIdx","defaultHeaders","parentHeaders","includeErrorHeaders","includeErrorCookies","headersFn","headers2","prependCookies","getDocumentHeadersImpl","childHeaders","parentSetCookieString","splitCookiesString","childCookies","getSetCookie","throwIfPotentialCSRFAttack","allowedActionOrigins","originHeader","originDomain","host","forwardedHostHeader","forwardedHostValue","trim","hostHeader","parseHostHeader","allowedOrigin","domain","domainParts","patternParts","patternPart","domainPart","matchWildcardDomain","isAllowedOrigin","getNormalizedPath","SERVER_NO_BODY_STATUS_CODES","singleFetchAction","staticHandler","handlerUrl","loadContext","handleError","handleQueryError","handlerRequest","singleFetchResult","generateSingleFetchResponse","staticContextToResponse","singleFetchLoaders","routesParam","loadRouteIds","loadedMatches","resultHeaders","encodeViaTurboStream","streamTimeout","generateSingleFetchRedirectResponse","redirectResponse","getSingleFetchRedirect","requestSignal","cleanupCallbacks","abortControllerOnRequestAbort","data3","fromEntries","derive","requestHandler","initialContext","processRequestError","returnLastResortErrorResponse","requestUrl","normalizedPathname","decodedPath","strippedPath","prerender","manifestUrl","assets","partialPath","handleManifestRequest","handleSingleFetchRequest","handleDataRequest","handleQueryRouteResult","handleQueryRouteError","errorResponse","errorResponseToJson","newError","handleResourceRequest","unstable_getCriticalCss","getCriticalCss","innerResult","renderHtml","isSpaMode2","baseServerHandoff","entryContext","handleDocumentRequestFunction","errorForSecondRender","unwrapResponse","error2","handleDocumentRequest","createRequestHandler","_build","_requestHandler","derived","flash","createSession","flashName","unset","isSession","createSessionStorage","cookieArg","createData","readData","updateData","deleteData","warnOnceAboutSigningSessionCookie","getSession","commitSession","session","destroySession","createCookieSessionStorage","serializedCookie","_session","createMemorySessionStorage","trimTrailingSplat","questionMark","encoder2","trailer","injectRSCPayload","rscStream","resolveFlightDataPromise","flightDataPromise","startedRSC","buffered","timeout","flushBufferedChunks","buf","fatal","writeChunk","fromCodePoint","releaseLock","remaining","writeRSCStream","script","RSCRouterGlobalErrorBoundary","RSCDefaultRootErrorBoundaryImpl","renderAppShell","ErrorWrapper","RSCDefaultRootErrorBoundary","hasRootLayout","createRSCRouteModules","payload","populateRSCRouteModules","noopComponent","defaultManifestPath","useImpl","routeRSCServerRequest","serverResponse","createFromReadableStream","renderHTML","isDataRequest","isReactServerRequest","respondWithRSCPayload","isManifestRequest","detectRedirectResponse","clone","serverResponseB","buffer","streamControllers","createStream","deepestRenderedBoundaryId","getPayload","payloadPromise","formState","renderRedirect","reactHeaders","routeErrorResponse","onHeaders","redirectTransform","body2","retryRedirect","normalizedError","retryRedirectTransform","RSCStaticRouter","useSafe","patchedLoaderData","previous","getHydrationData","routeInfo","hasHydrateFallback","buttons","viewModeStr","fullWidth","classNames","role","handleClick","ariaLabel","icon","viewBox","loading","parseCookie","stringifySetCookie","cookieNameRegExp","cookieValueRegExp","domainValueRegExp","pathValueRegExp","maxAgeRegExp","__toString","NullObject","C","len","dec","eqIdx","eqIndex","endIdx","endIndex","valueSlice","_name","_val","_opts","enc","isInteger","isFinite","valueOf","toUTCString","httpOnly","secure","partitioned","priority","_jsCookie","isodate","formatStyle","month","day","year","Intl","DateTimeFormat","format","aSorted","_toConsumableArray2","bSorted","_ref2","coords1","coords2","toRad","angle","PI","_coords","lon1","lat1","_coords2","lon2","lat2","deltaLat","deltaLon","haversineFormula","sin","cos","atan2","sqrt","statusNames","plansText","searchProfile","districts","topics","project_types","organisations","kiezradars","_ref3","query_text","plans_only","arr","_leaflet","_core","MarkerClusterLayer","createLayerComponent","instance","L","markerClusterGroup","showCoverageOnHover","createElementObject","extendContext","layerContainer","prevProps","updateGridLayer","_MapPopup","translations","getVotes","countText","getComments","getLikes","getDislikes","support","Ratings","Support","VoteCount","CommentCount","_ref4","_ref5","_fetchedItemsReturn$r","_fetchedItemsReturn$r2","_fetchedItemsReturn$r3","fetchedItemsReturn","viewRates","viewSupport","viewVoteCount","MapPopup","defaultParseOptions","decodeValues","silent","isForbiddenKey","createNullObj","isNonEmptyString","parseString","setCookieValue","nameValuePairStr","nameValueArr","parseNameValuePair","sides","trimLeft","sch","cookiesString","ch","lastComma","nextStart","cookiesSeparatorFound","cookiesStrings","pos","skipWhitespace","notSpecialChar","uppercasePattern","msPattern","toHyphenLower","hName","shallowEqualObjects","objA","objB","aKeys","bKeys","stringOrNumber","types","grid","aural","braille","handheld","print","projection","screen","tty","tv","embossed","matchers","orientation","scan","aspectRatio","deviceAspectRatio","height","deviceHeight","width","deviceWidth","colorIndex","monochrome","resolution","featureMatchers","features","minAspectRatio","maxAspectRatio","minDeviceAspectRatio","maxDeviceAspectRatio","minHeight","maxHeight","minDeviceHeight","maxDeviceHeight","minWidth","maxWidth","minDeviceWidth","maxDeviceWidth","minColor","maxColor","minColorIndex","maxColorIndex","minMonochrome","maxMonochrome","minResolution","maxResolution","mq","toQuery","rules","realKey","keyVal","Context","hyphenateKeys","useIsUpdate","useRef","useQuery","settings","getQuery","makeQuery","setQuery","newQuery","useMediaQuery","device","onChange","deviceSettings","deviceFromProps","deviceFromContext","useContext","getDevice","setDevice","newDevice","useDevice","getMatchMedia","setMq","isUpdate","newMq","useMatchMedia","mediaQuery","setMatches","updateMatches","ev","addListener","removeListener","MediaQuery","_Card","_CardMeta","_CardStatus","_Pagination","_ControlBar","_container$current","currentPage","container","noResults","pillList","ControlBar","listStr","_item$item_badges_for","Card","item_badges_for_list","CardStatus","additional_item_badges_for_list_count","itemUrl","cardMeta","CardMeta","page_count","Pagination","elidedRange","page_elided_range","nextPage","prevPage","pageCount","containerTop","offsetTop","staticMatch","dynamicMatch","Mql","forceStatic","mql","self","update","evt","_IconSwitch","viewList","viewMap","IconSwitch","MarkerClusterGroup","FeatureGroup","extend","maxClusterRadius","iconCreateFunction","clusterPane","Marker","pane","spiderfyOnEveryZoom","spiderfyOnMaxZoom","zoomToBoundsOnClick","singleMarkerMode","disableClusteringAtZoom","removeOutsideVisibleBounds","animate","animateAddingMarkers","spiderfyShapePositions","spiderfyDistanceMultiplier","spiderLegPolylineOptions","weight","opacity","chunkedLoading","chunkInterval","chunkDelay","chunkProgress","polygonOptions","Util","setOptions","_defaultIconCreateFunction","_featureGroup","featureGroup","addEventParent","_nonPointGroup","_inZoomAnimation","_needsClustering","_needsRemoving","_currentShownBounds","_queue","_childMarkerEventHandlers","_childMarkerDragStart","_childMarkerMoved","_childMarkerDragEnd","DomUtil","TRANSITION","_withAnimation","_noAnimation","_markerCluster","MarkerCluster","MarkerClusterNonAnimated","addLayer","layer","LayerGroup","addLayers","getLatLng","fire","hasLayer","_unspiderfy","_addLayer","_maxZoom","_topClusterLevel","_recalculateBounds","_refreshClustersIcons","visibleLayer","currentZoom","_zoom","__parent","_animationAddLayer","_animationAddLayerNonAnimated","removeLayer","removeLayers","_unspiderfyLayer","_removeLayer","off","clusterShow","_arraySplice","latlng","_latlng","layersArray","skipLayerAddEvent","fg","npg","chunked","l","offset","originalArray","started","bind","_extractNonGroupLayers","getChildCount","markers","getAllChildMarkers","otherMarker","_recursivelyAddChildrenToMap","needsClustering","tail","layersArray2","l2","clearLayers","_gridClusters","_gridUnclustered","_noanimationUnspiderfy","eachLayer","marker","_generateInitialClusters","getBounds","bounds","LatLngBounds","_bounds","thisNeedsRemoving","j","needsRemoving","getLayers","layers","getLayer","stamp","anArray","_group","zoomToShowLayer","showMarker","_icon","once","spiderfy","round","on","panTo","zoomToBounds","onAdd","getMaxZoom","addTo","_maxLat","crs","MAX_LATITUDE","newlatlng","_getExpandedVisibleBounds","_zoomEnd","_moveEnd","_spiderfierOnAdd","_bindEvents","_unbindEvents","_mapPane","_spiderfierOnRemove","_hideCoverage","remove","getVisibleParent","vMarker","_removeFromGridUnclustered","z","gridUnclustered","minZoom","floor","getMinZoom","removeObject","project","__dragStart","_ignoreMove","isPopupOpen","_popup","isOpen","_moveChild","oldLatLng","openPopup","dragStart","removeFromDistanceGrid","dontUpdateMap","gridClusters","cluster","_markers","_childCount","_boundsNeedUpdate","_cLatLng","addObject","_childClusters","_iconNeedsUpdate","_isOrIsParent","oel","parentNode","propagate","originalEvent","relatedTarget","listens","childCount","DivIcon","iconSize","Point","_zoomOrSpiderfy","_showCoverage","bottomCluster","keyCode","_container","focus","_shownPolygon","_spiderfied","Polygon","getConvexHull","_mergeSplitClusters","newBounds","_recursivelyRemoveChildrenFromMap","maxZoom","ceil","radius","radiusFn","zoom","DistanceGrid","markerPoint","_overrideMarkerIcon","closest","getNearObject","_addChild","parent","newCluster","lastParent","_updateIcon","_enqueue","_queueTimeout","_processQueue","mapZoom","intersects","_animationStart","_animationZoomIn","_animationZoomOut","Browser","mobile","_checkBoundsMaxLat","pad","_mapBoundsInfinite","maxLat","getNorth","_northEast","lat","getSouth","_southWest","_addToMap","group","output","include","LatLng","previousZoomLevel","newZoomLevel","_recursively","startPos","_isSingleParent","clusterHide","_forceLayout","_recursivelyBecomeVisible","_recursivelyRestoreChildPositions","_animationEnd","_animationZoomOutSingle","me","_setPos","latLngToLayerPoint","_recursivelyAnimateChildrenInAndAddSelfToMap","setLatLng","falseFn","offsetWidth","Icon","storageArray","ignoreDraggedMarker","fitBoundsOptions","childClusters","boundsZoom","getBoundsZoom","getZoom","newClusters","setView","fitBounds","setIcon","createIcon","_iconObj","createShadow","new1","isNotificationFromChild","_setClusterCenter","child","_resetBounds","lng","childLatLng","latSum","lngSum","totalCount","_wLatLng","_backupLatlng","_recursivelyAnimateChildrenIn","center","cm","mapMinZoom","zoomLevel","nm","_restorePosition","previousBounds","exceptBounds","boundsToApplyTo","zoomLevelToStart","zoomLevelToStop","runAtEveryLevel","runAtBottomLevel","backup","setOpacity","cellSize","_cellSize","_sqCellSize","_grid","_objectPoint","point","x","_getCoord","row","cell","updateObject","eachObject","dist","objectPoint","closestDistSq","_sqDist","coord","p2","dx","dy","QuickHull","getDistant","cpt","bl","vY","findMostDistantPointFromBaseLine","baseLine","latLngs","pt","maxD","maxPt","newPoints","maxPoint","buildConvexHull","convexHullBaseLines","minLat","maxLng","minLng","maxLatPt","minLatPt","maxLngPt","minLngPt","minPt","childMarkers","points","_2PI","_circleFootSeparation","_circleStartAngle","_spiralFootSeparation","_spiralLengthStart","_spiralLengthFactor","_circleSpiralSwitchover","_generatePointsSpiral","_generatePointsCircle","_animationSpiderfy","unspiderfy","zoomDetails","_animationUnspiderfy","centerPt","legLength","angleStep","_round","separation","lengthFactor","_preSpiderfyLatlng","setZIndexOffset","_spiderLeg","leg","newPos","legOptions","layerPointToLatLng","Polyline","legPath","thisLayerLatLng","thisLayerPos","svg","Path","SVG","finalLegOpacity","_path","getTotalLength","strokeDasharray","strokeDashoffset","setStyle","nonAnimatable","_latLngToNewLayerPoint","closePopup","stillThereChildCount","_unspiderfyWrapper","zoomAnimation","_unspiderfyZoomStart","touch","getRenderer","_unspiderfyZoomAnim","hasClass","refreshClusters","_layers","_flagParentsIconsNeedUpdate","_refreshSingleMarkerModeMarkers","refreshIconOptions","directlyRefreshClusters","factory","total","isDisabled","isNoButton","pageIndex","prevString","_ref$className","disabledClass","itemClass","getLabel","disabled","modTypeClass","parseQuery","inverse","typeMatch","expressionsMatch","expressions","expression","modifier","expValue","toPx","toDpi","toDecimal","RE_MEDIA_QUERY","RE_MQ_EXPRESSION","RE_MQ_FEATURE","RE_LENGTH_UNIT","RE_RESOLUTION_UNIT","captures","ratio","numbers","decimal","parseFloat","_PaginationButton","pageNavigationStr","pageNextStr","pagePrevStr","currPage","onPaginate","top","PaginationButton","num","_client","_ListMapView","ReactWidget","initialise","createRoot","StrictMode","FetchItemsProvider","ListMapView","_Map","_MarkerClusterLayer","_GeoJsonMarker","_ItemPopup","_excluded2","beginningMap","endMap","skipMap","React","forwardRef","withoutPopup","ItemPopup","apiUrl","setData","setCurrentPage","fetchAndUpdate","_asyncToGenerator2","_regenerator","_callee2","w","_context2","fetchItems","prevData","_x2","_x3","_loop","view","_views","_i","requestIdleCallback","DataContext","_t2","iterator","toStringTag","Generator","u","_regeneratorDefine2","G","return","GeneratorFunction","GeneratorFunctionPrototype","setPrototypeOf","_invoke","configurable","writable","_callee","urlParams","_args","_x","_CardList","_reactResponsive","desktopMode","isDesktop","MapWithMarkers","CardList","checked","_ref$labelLeft","labelLeft","_ref$size","ariaLabelledBy","htmlFor","hidden"],"ignoreList":[],"sourceRoot":""}