{"version":3,"sources":["jsdelivr-header.js","/npm/@solidjs/router@0.15.3/dist/index.js"],"names":[],"mappings":"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","file":"/npm/@solidjs/router@0.15.3/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@solidjs/router@0.15.3/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { isServer, getRequestEvent, createComponent as createComponent$1, memo, delegateEvents, spread, mergeProps as mergeProps$1, template } from 'solid-js/web';\nimport { getOwner, runWithOwner, createMemo, createContext, onCleanup, useContext, untrack, createSignal, createRenderEffect, on, startTransition, resetErrorBoundaries, batch, createComponent, children, mergeProps, Show, createRoot, sharedConfig, getListener, $TRACK, splitProps, createResource } from 'solid-js';\nimport { createStore, reconcile, unwrap } from 'solid-js/store';\n\nfunction createBeforeLeave() {\n  let listeners = new Set();\n  function subscribe(listener) {\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  }\n  let ignore = false;\n  function confirm(to, options) {\n    if (ignore) return !(ignore = false);\n    const e = {\n      to,\n      options,\n      defaultPrevented: false,\n      preventDefault: () => e.defaultPrevented = true\n    };\n    for (const l of listeners) l.listener({\n      ...e,\n      from: l.location,\n      retry: force => {\n        force && (ignore = true);\n        l.navigate(to, {\n          ...options,\n          resolve: false\n        });\n      }\n    });\n    return !e.defaultPrevented;\n  }\n  return {\n    subscribe,\n    confirm\n  };\n}\n\n// The following supports browser initiated blocking (eg back/forward)\n\nlet depth;\nfunction saveCurrentDepth() {\n  if (!window.history.state || window.history.state._depth == null) {\n    window.history.replaceState({\n      ...window.history.state,\n      _depth: window.history.length - 1\n    }, \"\");\n  }\n  depth = window.history.state._depth;\n}\nif (!isServer) {\n  saveCurrentDepth();\n}\nfunction keepDepth(state) {\n  return {\n    ...state,\n    _depth: window.history.state && window.history.state._depth\n  };\n}\nfunction notifyIfNotBlocked(notify, block) {\n  let ignore = false;\n  return () => {\n    const prevDepth = depth;\n    saveCurrentDepth();\n    const delta = prevDepth == null ? null : depth - prevDepth;\n    if (ignore) {\n      ignore = false;\n      return;\n    }\n    if (delta && block(delta)) {\n      ignore = true;\n      window.history.go(-delta);\n    } else {\n      notify();\n    }\n  };\n}\n\nconst hasSchemeRegex = /^(?:[a-z0-9]+:)?\\/\\//i;\nconst trimPathRegex = /^\\/+|(\\/)\\/+$/g;\nconst mockBase = \"http://sr\";\nfunction normalizePath(path, omitSlash = false) {\n  const s = path.replace(trimPathRegex, \"$1\");\n  return s ? omitSlash || /^[?#]/.test(s) ? s : \"/\" + s : \"\";\n}\nfunction resolvePath(base, path, from) {\n  if (hasSchemeRegex.test(path)) {\n    return undefined;\n  }\n  const basePath = normalizePath(base);\n  const fromPath = from && normalizePath(from);\n  let result = \"\";\n  if (!fromPath || path.startsWith(\"/\")) {\n    result = basePath;\n  } else if (fromPath.toLowerCase().indexOf(basePath.toLowerCase()) !== 0) {\n    result = basePath + fromPath;\n  } else {\n    result = fromPath;\n  }\n  return (result || \"/\") + normalizePath(path, !result);\n}\nfunction invariant(value, message) {\n  if (value == null) {\n    throw new Error(message);\n  }\n  return value;\n}\nfunction joinPaths(from, to) {\n  return normalizePath(from).replace(/\\/*(\\*.*)?$/g, \"\") + normalizePath(to);\n}\nfunction extractSearchParams(url) {\n  const params = {};\n  url.searchParams.forEach((value, key) => {\n    if (key in params) {\n      if (Array.isArray(params[key])) params[key].push(value);else params[key] = [params[key], value];\n    } else params[key] = value;\n  });\n  return params;\n}\nfunction createMatcher(path, partial, matchFilters) {\n  const [pattern, splat] = path.split(\"/*\", 2);\n  const segments = pattern.split(\"/\").filter(Boolean);\n  const len = segments.length;\n  return location => {\n    const locSegments = location.split(\"/\").filter(Boolean);\n    const lenDiff = locSegments.length - len;\n    if (lenDiff < 0 || lenDiff > 0 && splat === undefined && !partial) {\n      return null;\n    }\n    const match = {\n      path: len ? \"\" : \"/\",\n      params: {}\n    };\n    const matchFilter = s => matchFilters === undefined ? undefined : matchFilters[s];\n    for (let i = 0; i < len; i++) {\n      const segment = segments[i];\n      const dynamic = segment[0] === \":\";\n      const locSegment = dynamic ? locSegments[i] : locSegments[i].toLowerCase();\n      const key = dynamic ? segment.slice(1) : segment.toLowerCase();\n      if (dynamic && matchSegment(locSegment, matchFilter(key))) {\n        match.params[key] = locSegment;\n      } else if (dynamic || !matchSegment(locSegment, key)) {\n        return null;\n      }\n      match.path += `/${locSegment}`;\n    }\n    if (splat) {\n      const remainder = lenDiff ? locSegments.slice(-lenDiff).join(\"/\") : \"\";\n      if (matchSegment(remainder, matchFilter(splat))) {\n        match.params[splat] = remainder;\n      } else {\n        return null;\n      }\n    }\n    return match;\n  };\n}\nfunction matchSegment(input, filter) {\n  const isEqual = s => s === input;\n  if (filter === undefined) {\n    return true;\n  } else if (typeof filter === \"string\") {\n    return isEqual(filter);\n  } else if (typeof filter === \"function\") {\n    return filter(input);\n  } else if (Array.isArray(filter)) {\n    return filter.some(isEqual);\n  } else if (filter instanceof RegExp) {\n    return filter.test(input);\n  }\n  return false;\n}\nfunction scoreRoute(route) {\n  const [pattern, splat] = route.pattern.split(\"/*\", 2);\n  const segments = pattern.split(\"/\").filter(Boolean);\n  return segments.reduce((score, segment) => score + (segment.startsWith(\":\") ? 2 : 3), segments.length - (splat === undefined ? 0 : 1));\n}\nfunction createMemoObject(fn) {\n  const map = new Map();\n  const owner = getOwner();\n  return new Proxy({}, {\n    get(_, property) {\n      if (!map.has(property)) {\n        runWithOwner(owner, () => map.set(property, createMemo(() => fn()[property])));\n      }\n      return map.get(property)();\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    },\n    ownKeys() {\n      return Reflect.ownKeys(fn());\n    }\n  });\n}\nfunction mergeSearchString(search, params) {\n  const merged = new URLSearchParams(search);\n  Object.entries(params).forEach(([key, value]) => {\n    if (value == null || value === \"\" || value instanceof Array && !value.length) {\n      merged.delete(key);\n    } else {\n      if (value instanceof Array) {\n        // Delete all instances of the key before appending\n        merged.delete(key);\n        value.forEach(v => {\n          merged.append(key, String(v));\n        });\n      } else {\n        merged.set(key, String(value));\n      }\n    }\n  });\n  const s = merged.toString();\n  return s ? `?${s}` : \"\";\n}\nfunction expandOptionals(pattern) {\n  let match = /(\\/?\\:[^\\/]+)\\?/.exec(pattern);\n  if (!match) return [pattern];\n  let prefix = pattern.slice(0, match.index);\n  let suffix = pattern.slice(match.index + match[0].length);\n  const prefixes = [prefix, prefix += match[1]];\n\n  // This section handles adjacent optional params. We don't actually want all permuations since\n  // that will lead to equivalent routes which have the same number of params. For example\n  // `/:a?/:b?/:c`? only has the unique expansion: `/`, `/:a`, `/:a/:b`, `/:a/:b/:c` and we can\n  // discard `/:b`, `/:c`, `/:b/:c` by building them up in order and not recursing. This also helps\n  // ensure predictability where earlier params have precidence.\n  while (match = /^(\\/\\:[^\\/]+)\\?/.exec(suffix)) {\n    prefixes.push(prefix += match[1]);\n    suffix = suffix.slice(match[0].length);\n  }\n  return expandOptionals(suffix).reduce((results, expansion) => [...results, ...prefixes.map(p => p + expansion)], []);\n}\n\nconst MAX_REDIRECTS = 100;\nconst RouterContextObj = createContext();\nconst RouteContextObj = createContext();\nconst useRouter = () => invariant(useContext(RouterContextObj), \"<A> and 'use' router primitives can be only used inside a Route.\");\nconst useRoute = () => useContext(RouteContextObj) || useRouter().base;\nconst useResolvedPath = path => {\n  const route = useRoute();\n  return createMemo(() => route.resolvePath(path()));\n};\nconst useHref = to => {\n  const router = useRouter();\n  return createMemo(() => {\n    const to_ = to();\n    return to_ !== undefined ? router.renderPath(to_) : to_;\n  });\n};\n\n/**\n * Retrieves method to do navigation. The method accepts a path to navigate to and an optional object with the following options:\n * \n * - resolve (*boolean*, default `true`): resolve the path against the current route\n * - replace (*boolean*, default `false`): replace the history entry\n * - scroll (*boolean*, default `true`): scroll to top after navigation\n * - state (*any*, default `undefined`): pass custom state to `location.state`\n * \n * **Note**: The state is serialized using the structured clone algorithm which does not support all object types.\n * \n * @example\n * ```js\n * const navigate = useNavigate();\n * \n * if (unauthorized) {\n *   navigate(\"/login\", { replace: true });\n * }\n * ```\n */\nconst useNavigate = () => useRouter().navigatorFactory();\n\n/**\n * Retrieves reactive `location` object useful for getting things like `pathname`.\n * \n * @example\n * ```js\n * const location = useLocation();\n * \n * const pathname = createMemo(() => parsePath(location.pathname));\n * ```\n */\nconst useLocation = () => useRouter().location;\n\n/**\n * Retrieves signal that indicates whether the route is currently in a *Transition*.\n * Useful for showing stale/pending state when the route resolution is *Suspended* during concurrent rendering.\n * \n * @example\n * ```js\n * const isRouting = useIsRouting();\n * \n * return (\n *   <div classList={{ \"grey-out\": isRouting() }}>\n *     <MyAwesomeContent />\n *   </div>\n * );\n * ```\n */\nconst useIsRouting = () => useRouter().isRouting;\n\n/**\n * usePreloadRoute returns a function that can be used to preload a route manual.\n * This is what happens automatically with link hovering and similar focus based behavior, but it is available here as an API.\n * \n * @example\n * ```js\n * const preload = usePreloadRoute();\n * \n * preload(`/users/settings`, { preloadData: true });\n * ```\n */\nconst usePreloadRoute = () => {\n  const pre = useRouter().preloadRoute;\n  return (url, options = {}) => pre(url instanceof URL ? url : new URL(url, mockBase), options.preloadData);\n};\n\n/**\n * `useMatch` takes an accessor that returns the path and creates a `Memo` that returns match information if the current path matches the provided path.\n * Useful for determining if a given path matches the current route.\n * \n * @example\n * ```js\n * const match = useMatch(() => props.href);\n * \n * return <div classList={{ active: Boolean(match()) }} />;\n * ```\n */\nconst useMatch = (path, matchFilters) => {\n  const location = useLocation();\n  const matchers = createMemo(() => expandOptionals(path()).map(path => createMatcher(path, undefined, matchFilters)));\n  return createMemo(() => {\n    for (const matcher of matchers()) {\n      const match = matcher(location.pathname);\n      if (match) return match;\n    }\n  });\n};\n\n/**\n * `useCurrentMatches` returns all the matches for the current matched route.\n * Useful for getting all the route information.\n * \n * @example\n * ```js\n * const matches = useCurrentMatches();\n * \n * const breadcrumbs = createMemo(() => matches().map(m => m.route.info.breadcrumb))\n * ```\n */\nconst useCurrentMatches = () => useRouter().matches;\n\n/**\n * Retrieves a reactive, store-like object containing the current route path parameters as defined in the Route.\n * \n * @example\n * ```js\n * const params = useParams();\n * \n * // fetch user based on the id path parameter\n * const [user] = createResource(() => params.id, fetchUser);\n * ```\n */\nconst useParams = () => useRouter().params;\n\n/**\n * Retrieves a tuple containing a reactive object to read the current location's query parameters and a method to update them.\n * The object is a proxy so you must access properties to subscribe to reactive updates.\n * **Note** that values will be strings and property names will retain their casing.\n * \n * The setter method accepts an object whose entries will be merged into the current query string.\n * Values `''`, `undefined` and `null` will remove the key from the resulting query string.\n * Updates will behave just like a navigation and the setter accepts the same optional second parameter as `navigate` and auto-scrolling is disabled by default.\n * \n * @examples\n * ```js\n * const [searchParams, setSearchParams] = useSearchParams();\n * \n * return (\n *   <div>\n *     <span>Page: {searchParams.page}</span>\n *     <button\n *       onClick={() =>\n *         setSearchParams({ page: (parseInt(searchParams.page) || 0) + 1 })\n *       }\n *     >\n *       Next Page\n *     </button>\n *   </div>\n * );\n * ```\n */\nconst useSearchParams = () => {\n  const location = useLocation();\n  const navigate = useNavigate();\n  const setSearchParams = (params, options) => {\n    const searchString = untrack(() => mergeSearchString(location.search, params) + location.hash);\n    navigate(searchString, {\n      scroll: false,\n      resolve: false,\n      ...options\n    });\n  };\n  return [location.query, setSearchParams];\n};\n\n/**\n * useBeforeLeave takes a function that will be called prior to leaving a route.\n * The function will be called with:\n * \n * - from (*Location*): current location (before change).\n * - to (*string | number*): path passed to `navigate`.\n * - options (*NavigateOptions*): options passed to navigate.\n * - preventDefault (*function*): call to block the route change.\n * - defaultPrevented (*readonly boolean*): `true` if any previously called leave handlers called `preventDefault`.\n * - retry (*function*, force?: boolean ): call to retry the same navigation, perhaps after confirming with the user. Pass `true` to skip running the leave handlers again (i.e. force navigate without confirming).\n * \n * @example\n * ```js\n * useBeforeLeave((e: BeforeLeaveEventArgs) => {\n *   if (form.isDirty && !e.defaultPrevented) {\n *     // preventDefault to block immediately and prompt user async\n *     e.preventDefault();\n *     setTimeout(() => {\n *       if (window.confirm(\"Discard unsaved changes - are you sure?\")) {\n *         // user wants to proceed anyway so retry with force=true\n *         e.retry(true);\n *       }\n *     }, 100);\n *   }\n * });\n * ```\n */\nconst useBeforeLeave = listener => {\n  const s = useRouter().beforeLeave.subscribe({\n    listener,\n    location: useLocation(),\n    navigate: useNavigate()\n  });\n  onCleanup(s);\n};\nfunction createRoutes(routeDef, base = \"\") {\n  const {\n    component,\n    preload,\n    load,\n    children,\n    info\n  } = routeDef;\n  const isLeaf = !children || Array.isArray(children) && !children.length;\n  const shared = {\n    key: routeDef,\n    component,\n    preload: preload || load,\n    info\n  };\n  return asArray(routeDef.path).reduce((acc, originalPath) => {\n    for (const expandedPath of expandOptionals(originalPath)) {\n      const path = joinPaths(base, expandedPath);\n      let pattern = isLeaf ? path : path.split(\"/*\", 1)[0];\n      pattern = pattern.split(\"/\").map(s => {\n        return s.startsWith(\":\") || s.startsWith(\"*\") ? s : encodeURIComponent(s);\n      }).join(\"/\");\n      acc.push({\n        ...shared,\n        originalPath,\n        pattern,\n        matcher: createMatcher(pattern, !isLeaf, routeDef.matchFilters)\n      });\n    }\n    return acc;\n  }, []);\n}\nfunction createBranch(routes, index = 0) {\n  return {\n    routes,\n    score: scoreRoute(routes[routes.length - 1]) * 10000 - index,\n    matcher(location) {\n      const matches = [];\n      for (let i = routes.length - 1; i >= 0; i--) {\n        const route = routes[i];\n        const match = route.matcher(location);\n        if (!match) {\n          return null;\n        }\n        matches.unshift({\n          ...match,\n          route\n        });\n      }\n      return matches;\n    }\n  };\n}\nfunction asArray(value) {\n  return Array.isArray(value) ? value : [value];\n}\nfunction createBranches(routeDef, base = \"\", stack = [], branches = []) {\n  const routeDefs = asArray(routeDef);\n  for (let i = 0, len = routeDefs.length; i < len; i++) {\n    const def = routeDefs[i];\n    if (def && typeof def === \"object\") {\n      if (!def.hasOwnProperty(\"path\")) def.path = \"\";\n      const routes = createRoutes(def, base);\n      for (const route of routes) {\n        stack.push(route);\n        const isEmptyArray = Array.isArray(def.children) && def.children.length === 0;\n        if (def.children && !isEmptyArray) {\n          createBranches(def.children, route.pattern, stack, branches);\n        } else {\n          const branch = createBranch([...stack], branches.length);\n          branches.push(branch);\n        }\n        stack.pop();\n      }\n    }\n  }\n\n  // Stack will be empty on final return\n  return stack.length ? branches : branches.sort((a, b) => b.score - a.score);\n}\nfunction getRouteMatches(branches, location) {\n  for (let i = 0, len = branches.length; i < len; i++) {\n    const match = branches[i].matcher(location);\n    if (match) {\n      return match;\n    }\n  }\n  return [];\n}\nfunction createLocation(path, state, queryWrapper) {\n  const origin = new URL(mockBase);\n  const url = createMemo(prev => {\n    const path_ = path();\n    try {\n      return new URL(path_, origin);\n    } catch (err) {\n      console.error(`Invalid path ${path_}`);\n      return prev;\n    }\n  }, origin, {\n    equals: (a, b) => a.href === b.href\n  });\n  const pathname = createMemo(() => url().pathname);\n  const search = createMemo(() => url().search, true);\n  const hash = createMemo(() => url().hash);\n  const key = () => \"\";\n  const queryFn = on(search, () => extractSearchParams(url()));\n  return {\n    get pathname() {\n      return pathname();\n    },\n    get search() {\n      return search();\n    },\n    get hash() {\n      return hash();\n    },\n    get state() {\n      return state();\n    },\n    get key() {\n      return key();\n    },\n    query: queryWrapper ? queryWrapper(queryFn) : createMemoObject(queryFn)\n  };\n}\nlet intent;\nfunction getIntent() {\n  return intent;\n}\nlet inPreloadFn = false;\nfunction getInPreloadFn() {\n  return inPreloadFn;\n}\nfunction setInPreloadFn(value) {\n  inPreloadFn = value;\n}\nfunction createRouterContext(integration, branches, getContext, options = {}) {\n  const {\n    signal: [source, setSource],\n    utils = {}\n  } = integration;\n  const parsePath = utils.parsePath || (p => p);\n  const renderPath = utils.renderPath || (p => p);\n  const beforeLeave = utils.beforeLeave || createBeforeLeave();\n  const basePath = resolvePath(\"\", options.base || \"\");\n  if (basePath === undefined) {\n    throw new Error(`${basePath} is not a valid base path`);\n  } else if (basePath && !source().value) {\n    setSource({\n      value: basePath,\n      replace: true,\n      scroll: false\n    });\n  }\n  const [isRouting, setIsRouting] = createSignal(false);\n\n  // Keep track of last target, so that last call to transition wins\n  let lastTransitionTarget;\n\n  // Transition the location to a new value\n  const transition = (newIntent, newTarget) => {\n    if (newTarget.value === reference() && newTarget.state === state()) return;\n    if (lastTransitionTarget === undefined) setIsRouting(true);\n    intent = newIntent;\n    lastTransitionTarget = newTarget;\n    startTransition(() => {\n      if (lastTransitionTarget !== newTarget) return;\n      setReference(lastTransitionTarget.value);\n      setState(lastTransitionTarget.state);\n      resetErrorBoundaries();\n      if (!isServer) submissions[1](subs => subs.filter(s => s.pending));\n    }).finally(() => {\n      if (lastTransitionTarget !== newTarget) return;\n\n      // Batch, in order for isRouting and final source update to happen together\n      batch(() => {\n        intent = undefined;\n        if (newIntent === \"navigate\") navigateEnd(lastTransitionTarget);\n        setIsRouting(false);\n        lastTransitionTarget = undefined;\n      });\n    });\n  };\n  const [reference, setReference] = createSignal(source().value);\n  const [state, setState] = createSignal(source().state);\n  const location = createLocation(reference, state, utils.queryWrapper);\n  const referrers = [];\n  const submissions = createSignal(isServer ? initFromFlash() : []);\n  const matches = createMemo(() => {\n    if (typeof options.transformUrl === \"function\") {\n      return getRouteMatches(branches(), options.transformUrl(location.pathname));\n    }\n    return getRouteMatches(branches(), location.pathname);\n  });\n  const buildParams = () => {\n    const m = matches();\n    const params = {};\n    for (let i = 0; i < m.length; i++) {\n      Object.assign(params, m[i].params);\n    }\n    return params;\n  };\n  const params = utils.paramsWrapper ? utils.paramsWrapper(buildParams, branches) : createMemoObject(buildParams);\n  const baseRoute = {\n    pattern: basePath,\n    path: () => basePath,\n    outlet: () => null,\n    resolvePath(to) {\n      return resolvePath(basePath, to);\n    }\n  };\n\n  // Create a native transition, when source updates\n  createRenderEffect(on(source, source => transition(\"native\", source), {\n    defer: true\n  }));\n  return {\n    base: baseRoute,\n    location,\n    params,\n    isRouting,\n    renderPath,\n    parsePath,\n    navigatorFactory,\n    matches,\n    beforeLeave,\n    preloadRoute,\n    singleFlight: options.singleFlight === undefined ? true : options.singleFlight,\n    submissions\n  };\n  function navigateFromRoute(route, to, options) {\n    // Untrack in case someone navigates in an effect - don't want to track `reference` or route paths\n    untrack(() => {\n      if (typeof to === \"number\") {\n        if (!to) ; else if (utils.go) {\n          utils.go(to);\n        } else {\n          console.warn(\"Router integration does not support relative routing\");\n        }\n        return;\n      }\n      const queryOnly = !to || to[0] === \"?\";\n      const {\n        replace,\n        resolve,\n        scroll,\n        state: nextState\n      } = {\n        replace: false,\n        resolve: !queryOnly,\n        scroll: true,\n        ...options\n      };\n      const resolvedTo = resolve ? route.resolvePath(to) : resolvePath(queryOnly && location.pathname || \"\", to);\n      if (resolvedTo === undefined) {\n        throw new Error(`Path '${to}' is not a routable path`);\n      } else if (referrers.length >= MAX_REDIRECTS) {\n        throw new Error(\"Too many redirects\");\n      }\n      const current = reference();\n      if (resolvedTo !== current || nextState !== state()) {\n        if (isServer) {\n          const e = getRequestEvent();\n          e && (e.response = {\n            status: 302,\n            headers: new Headers({\n              Location: resolvedTo\n            })\n          });\n          setSource({\n            value: resolvedTo,\n            replace,\n            scroll,\n            state: nextState\n          });\n        } else if (beforeLeave.confirm(resolvedTo, options)) {\n          referrers.push({\n            value: current,\n            replace,\n            scroll,\n            state: state()\n          });\n          transition(\"navigate\", {\n            value: resolvedTo,\n            state: nextState\n          });\n        }\n      }\n    });\n  }\n  function navigatorFactory(route) {\n    // Workaround for vite issue (https://github.com/vitejs/vite/issues/3803)\n    route = route || useContext(RouteContextObj) || baseRoute;\n    return (to, options) => navigateFromRoute(route, to, options);\n  }\n  function navigateEnd(next) {\n    const first = referrers[0];\n    if (first) {\n      setSource({\n        ...next,\n        replace: first.replace,\n        scroll: first.scroll\n      });\n      referrers.length = 0;\n    }\n  }\n  function preloadRoute(url, preloadData) {\n    const matches = getRouteMatches(branches(), url.pathname);\n    const prevIntent = intent;\n    intent = \"preload\";\n    for (let match in matches) {\n      const {\n        route,\n        params\n      } = matches[match];\n      route.component && route.component.preload && route.component.preload();\n      const {\n        preload\n      } = route;\n      inPreloadFn = true;\n      preloadData && preload && runWithOwner(getContext(), () => preload({\n        params,\n        location: {\n          pathname: url.pathname,\n          search: url.search,\n          hash: url.hash,\n          query: extractSearchParams(url),\n          state: null,\n          key: \"\"\n        },\n        intent: \"preload\"\n      }));\n      inPreloadFn = false;\n    }\n    intent = prevIntent;\n  }\n  function initFromFlash() {\n    const e = getRequestEvent();\n    return e && e.router && e.router.submission ? [e.router.submission] : [];\n  }\n}\nfunction createRouteContext(router, parent, outlet, match) {\n  const {\n    base,\n    location,\n    params\n  } = router;\n  const {\n    pattern,\n    component,\n    preload\n  } = match().route;\n  const path = createMemo(() => match().path);\n  component && component.preload && component.preload();\n  inPreloadFn = true;\n  const data = preload ? preload({\n    params,\n    location,\n    intent: intent || \"initial\"\n  }) : undefined;\n  inPreloadFn = false;\n  const route = {\n    parent,\n    pattern,\n    path,\n    outlet: () => component ? createComponent(component, {\n      params,\n      location,\n      data,\n      get children() {\n        return outlet();\n      }\n    }) : outlet(),\n    resolvePath(to) {\n      return resolvePath(base.path(), to, path());\n    }\n  };\n  return route;\n}\n\nconst createRouterComponent = router => props => {\n  const {\n    base\n  } = props;\n  const routeDefs = children(() => props.children);\n  const branches = createMemo(() => createBranches(routeDefs(), props.base || \"\"));\n  let context;\n  const routerState = createRouterContext(router, branches, () => context, {\n    base,\n    singleFlight: props.singleFlight,\n    transformUrl: props.transformUrl\n  });\n  router.create && router.create(routerState);\n  return createComponent$1(RouterContextObj.Provider, {\n    value: routerState,\n    get children() {\n      return createComponent$1(Root, {\n        routerState: routerState,\n        get root() {\n          return props.root;\n        },\n        get preload() {\n          return props.rootPreload || props.rootLoad;\n        },\n        get children() {\n          return [memo(() => (context = getOwner()) && null), createComponent$1(Routes, {\n            routerState: routerState,\n            get branches() {\n              return branches();\n            }\n          })];\n        }\n      });\n    }\n  });\n};\nfunction Root(props) {\n  const location = props.routerState.location;\n  const params = props.routerState.params;\n  const data = createMemo(() => props.preload && untrack(() => {\n    setInPreloadFn(true);\n    props.preload({\n      params,\n      location,\n      intent: getIntent() || \"initial\"\n    });\n    setInPreloadFn(false);\n  }));\n  return createComponent$1(Show, {\n    get when() {\n      return props.root;\n    },\n    keyed: true,\n    get fallback() {\n      return props.children;\n    },\n    children: Root => createComponent$1(Root, {\n      params: params,\n      location: location,\n      get data() {\n        return data();\n      },\n      get children() {\n        return props.children;\n      }\n    })\n  });\n}\nfunction Routes(props) {\n  if (isServer) {\n    const e = getRequestEvent();\n    if (e && e.router && e.router.dataOnly) {\n      dataOnly(e, props.routerState, props.branches);\n      return;\n    }\n    e && ((e.router || (e.router = {})).matches || (e.router.matches = props.routerState.matches().map(({\n      route,\n      path,\n      params\n    }) => ({\n      path: route.originalPath,\n      pattern: route.pattern,\n      match: path,\n      params,\n      info: route.info\n    }))));\n  }\n  const disposers = [];\n  let root;\n  const routeStates = createMemo(on(props.routerState.matches, (nextMatches, prevMatches, prev) => {\n    let equal = prevMatches && nextMatches.length === prevMatches.length;\n    const next = [];\n    for (let i = 0, len = nextMatches.length; i < len; i++) {\n      const prevMatch = prevMatches && prevMatches[i];\n      const nextMatch = nextMatches[i];\n      if (prev && prevMatch && nextMatch.route.key === prevMatch.route.key) {\n        next[i] = prev[i];\n      } else {\n        equal = false;\n        if (disposers[i]) {\n          disposers[i]();\n        }\n        createRoot(dispose => {\n          disposers[i] = dispose;\n          next[i] = createRouteContext(props.routerState, next[i - 1] || props.routerState.base, createOutlet(() => routeStates()[i + 1]), () => props.routerState.matches()[i]);\n        });\n      }\n    }\n    disposers.splice(nextMatches.length).forEach(dispose => dispose());\n    if (prev && equal) {\n      return prev;\n    }\n    root = next[0];\n    return next;\n  }));\n  return createOutlet(() => routeStates() && root)();\n}\nconst createOutlet = child => {\n  return () => createComponent$1(Show, {\n    get when() {\n      return child();\n    },\n    keyed: true,\n    children: child => createComponent$1(RouteContextObj.Provider, {\n      value: child,\n      get children() {\n        return child.outlet();\n      }\n    })\n  });\n};\nconst Route = props => {\n  const childRoutes = children(() => props.children);\n  return mergeProps(props, {\n    get children() {\n      return childRoutes();\n    }\n  });\n};\n\n// for data only mode with single flight mutations\nfunction dataOnly(event, routerState, branches) {\n  const url = new URL(event.request.url);\n  const prevMatches = getRouteMatches(branches, new URL(event.router.previousUrl || event.request.url).pathname);\n  const matches = getRouteMatches(branches, url.pathname);\n  for (let match = 0; match < matches.length; match++) {\n    if (!prevMatches[match] || matches[match].route !== prevMatches[match].route) event.router.dataOnly = true;\n    const {\n      route,\n      params\n    } = matches[match];\n    route.preload && route.preload({\n      params,\n      location: routerState.location,\n      intent: \"preload\"\n    });\n  }\n}\n\nfunction intercept([value, setValue], get, set) {\n  return [value, set ? v => setValue(set(v)) : setValue];\n}\nfunction createRouter(config) {\n  let ignore = false;\n  const wrap = value => typeof value === \"string\" ? {\n    value\n  } : value;\n  const signal = intercept(createSignal(wrap(config.get()), {\n    equals: (a, b) => a.value === b.value && a.state === b.state\n  }), undefined, next => {\n    !ignore && config.set(next);\n    if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = true;\n    return next;\n  });\n  config.init && onCleanup(config.init((value = config.get()) => {\n    ignore = true;\n    signal[1](wrap(value));\n    ignore = false;\n  }));\n  return createRouterComponent({\n    signal,\n    create: config.create,\n    utils: config.utils\n  });\n}\nfunction bindEvent(target, type, handler) {\n  target.addEventListener(type, handler);\n  return () => target.removeEventListener(type, handler);\n}\nfunction scrollToHash(hash, fallbackTop) {\n  const el = hash && document.getElementById(hash);\n  if (el) {\n    el.scrollIntoView();\n  } else if (fallbackTop) {\n    window.scrollTo(0, 0);\n  }\n}\n\nfunction getPath(url) {\n  const u = new URL(url);\n  return u.pathname + u.search;\n}\nfunction StaticRouter(props) {\n  let e;\n  const obj = {\n    value: props.url || (e = getRequestEvent()) && getPath(e.request.url) || \"\"\n  };\n  return createRouterComponent({\n    signal: [() => obj, next => Object.assign(obj, next)]\n  })(props);\n}\n\nconst LocationHeader = \"Location\";\nconst PRELOAD_TIMEOUT = 5000;\nconst CACHE_TIMEOUT = 180000;\nlet cacheMap = new Map();\n\n// cleanup forward/back cache\nif (!isServer) {\n  setInterval(() => {\n    const now = Date.now();\n    for (let [k, v] of cacheMap.entries()) {\n      if (!v[4].count && now - v[0] > CACHE_TIMEOUT) {\n        cacheMap.delete(k);\n      }\n    }\n  }, 300000);\n}\nfunction getCache() {\n  if (!isServer) return cacheMap;\n  const req = getRequestEvent();\n  if (!req) throw new Error(\"Cannot find cache context\");\n  return (req.router || (req.router = {})).cache || (req.router.cache = new Map());\n}\n\n/**\n * Revalidates the given cache entry/entries.\n */\nfunction revalidate(key, force = true) {\n  return startTransition(() => {\n    const now = Date.now();\n    cacheKeyOp(key, entry => {\n      force && (entry[0] = 0); //force cache miss\n      entry[4][1](now); // retrigger live signals\n    });\n  });\n}\nfunction cacheKeyOp(key, fn) {\n  key && !Array.isArray(key) && (key = [key]);\n  for (let k of cacheMap.keys()) {\n    if (key === undefined || matchKey(k, key)) fn(cacheMap.get(k));\n  }\n}\nfunction query(fn, name) {\n  // prioritize GET for server functions\n  if (fn.GET) fn = fn.GET;\n  const cachedFn = (...args) => {\n    const cache = getCache();\n    const intent = getIntent();\n    const inPreloadFn = getInPreloadFn();\n    const owner = getOwner();\n    const navigate = owner ? useNavigate() : undefined;\n    const now = Date.now();\n    const key = name + hashKey(args);\n    let cached = cache.get(key);\n    let tracking;\n    if (isServer) {\n      const e = getRequestEvent();\n      if (e) {\n        const dataOnly = (e.router || (e.router = {})).dataOnly;\n        if (dataOnly) {\n          const data = e && (e.router.data || (e.router.data = {}));\n          if (data && key in data) return data[key];\n          if (Array.isArray(dataOnly) && !matchKey(key, dataOnly)) {\n            data[key] = undefined;\n            return Promise.resolve();\n          }\n        }\n      }\n    }\n    if (getListener() && !isServer) {\n      tracking = true;\n      onCleanup(() => cached[4].count--);\n    }\n    if (cached && cached[0] && (isServer || intent === \"native\" || cached[4].count || Date.now() - cached[0] < PRELOAD_TIMEOUT)) {\n      if (tracking) {\n        cached[4].count++;\n        cached[4][0](); // track\n      }\n      if (cached[3] === \"preload\" && intent !== \"preload\") {\n        cached[0] = now;\n      }\n      let res = cached[1];\n      if (intent !== \"preload\") {\n        res = \"then\" in cached[1] ? cached[1].then(handleResponse(false), handleResponse(true)) : handleResponse(false)(cached[1]);\n        !isServer && intent === \"navigate\" && startTransition(() => cached[4][1](cached[0])); // update version\n      }\n      inPreloadFn && \"then\" in res && res.catch(() => {});\n      return res;\n    }\n    let res;\n    if (!isServer && sharedConfig.has && sharedConfig.has(key)) {\n      res = sharedConfig.load(key); // hydrating\n      // @ts-ignore at least until we add a delete method to sharedConfig\n      delete globalThis._$HY.r[key];\n    } else res = fn(...args);\n    if (cached) {\n      cached[0] = now;\n      cached[1] = res;\n      cached[3] = intent;\n      !isServer && intent === \"navigate\" && startTransition(() => cached[4][1](cached[0])); // update version\n    } else {\n      cache.set(key, cached = [now, res,, intent, createSignal(now)]);\n      cached[4].count = 0;\n    }\n    if (tracking) {\n      cached[4].count++;\n      cached[4][0](); // track\n    }\n    if (isServer) {\n      const e = getRequestEvent();\n      if (e && e.router.dataOnly) return e.router.data[key] = res;\n    }\n    if (intent !== \"preload\") {\n      res = \"then\" in res ? res.then(handleResponse(false), handleResponse(true)) : handleResponse(false)(res);\n    }\n    inPreloadFn && \"then\" in res && res.catch(() => {});\n    // serialize on server\n    if (isServer && sharedConfig.context && sharedConfig.context.async && !sharedConfig.context.noHydrate) {\n      const e = getRequestEvent();\n      (!e || !e.serverOnly) && sharedConfig.context.serialize(key, res);\n    }\n    return res;\n    function handleResponse(error) {\n      return async v => {\n        if (v instanceof Response) {\n          const url = v.headers.get(LocationHeader);\n          if (url !== null) {\n            // client + server relative redirect\n            if (navigate && url.startsWith(\"/\")) startTransition(() => {\n              navigate(url, {\n                replace: true\n              });\n            });else if (!isServer) window.location.href = url;else if (isServer) {\n              const e = getRequestEvent();\n              if (e) e.response = {\n                status: 302,\n                headers: new Headers({\n                  Location: url\n                })\n              };\n            }\n            return;\n          }\n          if (v.customBody) v = await v.customBody();\n        }\n        if (error) throw v;\n        cached[2] = v;\n        return v;\n      };\n    }\n  };\n  cachedFn.keyFor = (...args) => name + hashKey(args);\n  cachedFn.key = name;\n  return cachedFn;\n}\nquery.get = key => {\n  const cached = getCache().get(key);\n  return cached[2];\n};\nquery.set = (key, value) => {\n  const cache = getCache();\n  const now = Date.now();\n  let cached = cache.get(key);\n  if (cached) {\n    cached[0] = now;\n    cached[1] = Promise.resolve(value);\n    cached[2] = value;\n    cached[3] = \"preload\";\n  } else {\n    cache.set(key, cached = [now, Promise.resolve(value), value, \"preload\", createSignal(now)]);\n    cached[4].count = 0;\n  }\n};\nquery.delete = key => getCache().delete(key);\nquery.clear = () => getCache().clear();\n\n/** @deprecated use query instead */\nconst cache = query;\nfunction matchKey(key, keys) {\n  for (let k of keys) {\n    if (k && key.startsWith(k)) return true;\n  }\n  return false;\n}\n\n// Modified from the amazing Tanstack Query library (MIT)\n// https://github.com/TanStack/query/blob/main/packages/query-core/src/utils.ts#L168\nfunction hashKey(args) {\n  return JSON.stringify(args, (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n    result[key] = val[key];\n    return result;\n  }, {}) : val);\n}\nfunction isPlainObject(obj) {\n  let proto;\n  return obj != null && typeof obj === \"object\" && (!(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype);\n}\n\nconst actions = /* #__PURE__ */new Map();\nfunction useSubmissions(fn, filter) {\n  const router = useRouter();\n  const subs = createMemo(() => router.submissions[0]().filter(s => s.url === fn.base && (!filter || filter(s.input))));\n  return new Proxy([], {\n    get(_, property) {\n      if (property === $TRACK) return subs();\n      if (property === \"pending\") return subs().some(sub => !sub.result);\n      return subs()[property];\n    },\n    has(_, property) {\n      return property in subs();\n    }\n  });\n}\nfunction useSubmission(fn, filter) {\n  const submissions = useSubmissions(fn, filter);\n  return new Proxy({}, {\n    get(_, property) {\n      if (submissions.length === 0 && property === \"clear\" || property === \"retry\") return () => {};\n      return submissions[submissions.length - 1]?.[property];\n    }\n  });\n}\nfunction useAction(action) {\n  const r = useRouter();\n  return (...args) => action.apply({\n    r\n  }, args);\n}\nfunction action(fn, options = {}) {\n  function mutate(...variables) {\n    const router = this.r;\n    const form = this.f;\n    const p = (router.singleFlight && fn.withOptions ? fn.withOptions({\n      headers: {\n        \"X-Single-Flight\": \"true\"\n      }\n    }) : fn)(...variables);\n    const [result, setResult] = createSignal();\n    let submission;\n    function handler(error) {\n      return async res => {\n        const result = await handleResponse(res, error, router.navigatorFactory());\n        let retry = null;\n        o.onComplete?.({\n          ...submission,\n          result: result?.data,\n          error: result?.error,\n          pending: false,\n          retry() {\n            return retry = submission.retry();\n          }\n        });\n        if (retry) return retry;\n        if (!result) return submission.clear();\n        setResult(result);\n        if (result.error && !form) throw result.error;\n        return result.data;\n      };\n    }\n    router.submissions[1](s => [...s, submission = {\n      input: variables,\n      url,\n      get result() {\n        return result()?.data;\n      },\n      get error() {\n        return result()?.error;\n      },\n      get pending() {\n        return !result();\n      },\n      clear() {\n        router.submissions[1](v => v.filter(i => i !== submission));\n      },\n      retry() {\n        setResult(undefined);\n        const p = fn(...variables);\n        return p.then(handler(), handler(true));\n      }\n    }]);\n    return p.then(handler(), handler(true));\n  }\n  const o = typeof options === \"string\" ? {\n    name: options\n  } : options;\n  const url = fn.url || o.name && `https://action/${o.name}` || (!isServer ? `https://action/${hashString(fn.toString())}` : \"\");\n  mutate.base = url;\n  return toAction(mutate, url);\n}\nfunction toAction(fn, url) {\n  fn.toString = () => {\n    if (!url) throw new Error(\"Client Actions need explicit names if server rendered\");\n    return url;\n  };\n  fn.with = function (...args) {\n    const newFn = function (...passedArgs) {\n      return fn.call(this, ...args, ...passedArgs);\n    };\n    newFn.base = fn.base;\n    const uri = new URL(url, mockBase);\n    uri.searchParams.set(\"args\", hashKey(args));\n    return toAction(newFn, (uri.origin === \"https://action\" ? uri.origin : \"\") + uri.pathname + uri.search);\n  };\n  fn.url = url;\n  if (!isServer) {\n    actions.set(url, fn);\n    getOwner() && onCleanup(() => actions.delete(url));\n  }\n  return fn;\n}\nconst hashString = s => s.split(\"\").reduce((a, b) => (a << 5) - a + b.charCodeAt(0) | 0, 0);\nasync function handleResponse(response, error, navigate) {\n  let data;\n  let custom;\n  let keys;\n  let flightKeys;\n  if (response instanceof Response) {\n    if (response.headers.has(\"X-Revalidate\")) keys = response.headers.get(\"X-Revalidate\").split(\",\");\n    if (response.customBody) {\n      data = custom = await response.customBody();\n      if (response.headers.has(\"X-Single-Flight\")) {\n        data = data._$value;\n        delete custom._$value;\n        flightKeys = Object.keys(custom);\n      }\n    }\n    if (response.headers.has(\"Location\")) {\n      const locationUrl = response.headers.get(\"Location\") || \"/\";\n      if (locationUrl.startsWith(\"http\")) {\n        window.location.href = locationUrl;\n      } else {\n        navigate(locationUrl);\n      }\n    }\n  } else if (error) return {\n    error: response\n  };else data = response;\n  // invalidate\n  cacheKeyOp(keys, entry => entry[0] = 0);\n  // set cache\n  flightKeys && flightKeys.forEach(k => query.set(k, custom[k]));\n  // trigger revalidation\n  await revalidate(keys, false);\n  return data != null ? {\n    data\n  } : undefined;\n}\n\nfunction setupNativeEvents(preload = true, explicitLinks = false, actionBase = \"/_server\", transformUrl) {\n  return router => {\n    const basePath = router.base.path();\n    const navigateFromRoute = router.navigatorFactory(router.base);\n    let preloadTimeout;\n    let lastElement;\n    function isSvg(el) {\n      return el.namespaceURI === \"http://www.w3.org/2000/svg\";\n    }\n    function handleAnchor(evt) {\n      if (evt.defaultPrevented || evt.button !== 0 || evt.metaKey || evt.altKey || evt.ctrlKey || evt.shiftKey) return;\n      const a = evt.composedPath().find(el => el instanceof Node && el.nodeName.toUpperCase() === \"A\");\n      if (!a || explicitLinks && !a.hasAttribute(\"link\")) return;\n      const svg = isSvg(a);\n      const href = svg ? a.href.baseVal : a.href;\n      const target = svg ? a.target.baseVal : a.target;\n      if (target || !href && !a.hasAttribute(\"state\")) return;\n      const rel = (a.getAttribute(\"rel\") || \"\").split(/\\s+/);\n      if (a.hasAttribute(\"download\") || rel && rel.includes(\"external\")) return;\n      const url = svg ? new URL(href, document.baseURI) : new URL(href);\n      if (url.origin !== window.location.origin || basePath && url.pathname && !url.pathname.toLowerCase().startsWith(basePath.toLowerCase())) return;\n      return [a, url];\n    }\n    function handleAnchorClick(evt) {\n      const res = handleAnchor(evt);\n      if (!res) return;\n      const [a, url] = res;\n      const to = router.parsePath(url.pathname + url.search + url.hash);\n      const state = a.getAttribute(\"state\");\n      evt.preventDefault();\n      navigateFromRoute(to, {\n        resolve: false,\n        replace: a.hasAttribute(\"replace\"),\n        scroll: !a.hasAttribute(\"noscroll\"),\n        state: state ? JSON.parse(state) : undefined\n      });\n    }\n    function handleAnchorPreload(evt) {\n      const res = handleAnchor(evt);\n      if (!res) return;\n      const [a, url] = res;\n      transformUrl && (url.pathname = transformUrl(url.pathname));\n      router.preloadRoute(url, a.getAttribute(\"preload\") !== \"false\");\n    }\n    function handleAnchorMove(evt) {\n      clearTimeout(preloadTimeout);\n      const res = handleAnchor(evt);\n      if (!res) return lastElement = null;\n      const [a, url] = res;\n      if (lastElement === a) return;\n      transformUrl && (url.pathname = transformUrl(url.pathname));\n      preloadTimeout = setTimeout(() => {\n        router.preloadRoute(url, a.getAttribute(\"preload\") !== \"false\");\n        lastElement = a;\n      }, 20);\n    }\n    function handleFormSubmit(evt) {\n      if (evt.defaultPrevented) return;\n      let actionRef = evt.submitter && evt.submitter.hasAttribute(\"formaction\") ? evt.submitter.getAttribute(\"formaction\") : evt.target.getAttribute(\"action\");\n      if (!actionRef) return;\n      if (!actionRef.startsWith(\"https://action/\")) {\n        // normalize server actions\n        const url = new URL(actionRef, mockBase);\n        actionRef = router.parsePath(url.pathname + url.search);\n        if (!actionRef.startsWith(actionBase)) return;\n      }\n      if (evt.target.method.toUpperCase() !== \"POST\") throw new Error(\"Only POST forms are supported for Actions\");\n      const handler = actions.get(actionRef);\n      if (handler) {\n        evt.preventDefault();\n        const data = new FormData(evt.target, evt.submitter);\n        handler.call({\n          r: router,\n          f: evt.target\n        }, evt.target.enctype === \"multipart/form-data\" ? data : new URLSearchParams(data));\n      }\n    }\n\n    // ensure delegated event run first\n    delegateEvents([\"click\", \"submit\"]);\n    document.addEventListener(\"click\", handleAnchorClick);\n    if (preload) {\n      document.addEventListener(\"mousemove\", handleAnchorMove, {\n        passive: true\n      });\n      document.addEventListener(\"focusin\", handleAnchorPreload, {\n        passive: true\n      });\n      document.addEventListener(\"touchstart\", handleAnchorPreload, {\n        passive: true\n      });\n    }\n    document.addEventListener(\"submit\", handleFormSubmit);\n    onCleanup(() => {\n      document.removeEventListener(\"click\", handleAnchorClick);\n      if (preload) {\n        document.removeEventListener(\"mousemove\", handleAnchorMove);\n        document.removeEventListener(\"focusin\", handleAnchorPreload);\n        document.removeEventListener(\"touchstart\", handleAnchorPreload);\n      }\n      document.removeEventListener(\"submit\", handleFormSubmit);\n    });\n  };\n}\n\nfunction Router(props) {\n  if (isServer) return StaticRouter(props);\n  const getSource = () => {\n    const url = window.location.pathname.replace(/^\\/+/, \"/\") + window.location.search;\n    const state = window.history.state && window.history.state._depth && Object.keys(window.history.state).length === 1 ? undefined : window.history.state;\n    return {\n      value: url + window.location.hash,\n      state\n    };\n  };\n  const beforeLeave = createBeforeLeave();\n  return createRouter({\n    get: getSource,\n    set({\n      value,\n      replace,\n      scroll,\n      state\n    }) {\n      if (replace) {\n        window.history.replaceState(keepDepth(state), \"\", value);\n      } else {\n        window.history.pushState(state, \"\", value);\n      }\n      scrollToHash(decodeURIComponent(window.location.hash.slice(1)), scroll);\n      saveCurrentDepth();\n    },\n    init: notify => bindEvent(window, \"popstate\", notifyIfNotBlocked(notify, delta => {\n      if (delta && delta < 0) {\n        return !beforeLeave.confirm(delta);\n      } else {\n        const s = getSource();\n        return !beforeLeave.confirm(s.value, {\n          state: s.state\n        });\n      }\n    })),\n    create: setupNativeEvents(props.preload, props.explicitLinks, props.actionBase, props.transformUrl),\n    utils: {\n      go: delta => window.history.go(delta),\n      beforeLeave\n    }\n  })(props);\n}\n\nfunction hashParser(str) {\n  const to = str.replace(/^.*?#/, \"\");\n  // Hash-only hrefs like `#foo` from plain anchors will come in as `/#foo` whereas a link to\n  // `/foo` will be `/#/foo`. Check if the to starts with a `/` and if not append it as a hash\n  // to the current path so we can handle these in-page anchors correctly.\n  if (!to.startsWith(\"/\")) {\n    const [, path = \"/\"] = window.location.hash.split(\"#\", 2);\n    return `${path}#${to}`;\n  }\n  return to;\n}\nfunction HashRouter(props) {\n  const getSource = () => window.location.hash.slice(1);\n  const beforeLeave = createBeforeLeave();\n  return createRouter({\n    get: getSource,\n    set({\n      value,\n      replace,\n      scroll,\n      state\n    }) {\n      if (replace) {\n        window.history.replaceState(keepDepth(state), \"\", \"#\" + value);\n      } else {\n        window.history.pushState(state, \"\", \"#\" + value);\n      }\n      const hashIndex = value.indexOf(\"#\");\n      const hash = hashIndex >= 0 ? value.slice(hashIndex + 1) : \"\";\n      scrollToHash(hash, scroll);\n      saveCurrentDepth();\n    },\n    init: notify => bindEvent(window, \"hashchange\", notifyIfNotBlocked(notify, delta => !beforeLeave.confirm(delta && delta < 0 ? delta : getSource()))),\n    create: setupNativeEvents(props.preload, props.explicitLinks, props.actionBase),\n    utils: {\n      go: delta => window.history.go(delta),\n      renderPath: path => `#${path}`,\n      parsePath: hashParser,\n      beforeLeave\n    }\n  })(props);\n}\n\nfunction createMemoryHistory() {\n  const entries = [\"/\"];\n  let index = 0;\n  const listeners = [];\n  const go = n => {\n    // https://github.com/remix-run/react-router/blob/682810ca929d0e3c64a76f8d6e465196b7a2ac58/packages/router/history.ts#L245\n    index = Math.max(0, Math.min(index + n, entries.length - 1));\n    const value = entries[index];\n    listeners.forEach(listener => listener(value));\n  };\n  return {\n    get: () => entries[index],\n    set: ({\n      value,\n      scroll,\n      replace\n    }) => {\n      if (replace) {\n        entries[index] = value;\n      } else {\n        entries.splice(index + 1, entries.length - index, value);\n        index++;\n      }\n      listeners.forEach(listener => listener(value));\n      setTimeout(() => {\n        if (scroll) {\n          scrollToHash(value.split(\"#\")[1] || \"\", true);\n        }\n      }, 0);\n    },\n    back: () => {\n      go(-1);\n    },\n    forward: () => {\n      go(1);\n    },\n    go,\n    listen: listener => {\n      listeners.push(listener);\n      return () => {\n        const index = listeners.indexOf(listener);\n        listeners.splice(index, 1);\n      };\n    }\n  };\n}\nfunction MemoryRouter(props) {\n  const memoryHistory = props.history || createMemoryHistory();\n  return createRouter({\n    get: memoryHistory.get,\n    set: memoryHistory.set,\n    init: memoryHistory.listen,\n    create: setupNativeEvents(props.preload, props.explicitLinks, props.actionBase),\n    utils: {\n      go: memoryHistory.go\n    }\n  })(props);\n}\n\nvar _tmpl$ = /*#__PURE__*/template(`<a>`);\nfunction A(props) {\n  props = mergeProps({\n    inactiveClass: \"inactive\",\n    activeClass: \"active\"\n  }, props);\n  const [, rest] = splitProps(props, [\"href\", \"state\", \"class\", \"activeClass\", \"inactiveClass\", \"end\"]);\n  const to = useResolvedPath(() => props.href);\n  const href = useHref(to);\n  const location = useLocation();\n  const isActive = createMemo(() => {\n    const to_ = to();\n    if (to_ === undefined) return [false, false];\n    const path = normalizePath(to_.split(/[?#]/, 1)[0]).toLowerCase();\n    const loc = decodeURI(normalizePath(location.pathname).toLowerCase());\n    return [props.end ? path === loc : loc.startsWith(path + \"/\") || loc === path, path === loc];\n  });\n  return (() => {\n    var _el$ = _tmpl$();\n    spread(_el$, mergeProps$1(rest, {\n      get href() {\n        return href() || props.href;\n      },\n      get state() {\n        return JSON.stringify(props.state);\n      },\n      get classList() {\n        return {\n          ...(props.class && {\n            [props.class]: true\n          }),\n          [props.inactiveClass]: !isActive()[0],\n          [props.activeClass]: isActive()[0],\n          ...rest.classList\n        };\n      },\n      \"link\": \"\",\n      get [\"aria-current\"]() {\n        return isActive()[1] ? \"page\" : undefined;\n      }\n    }), false, false);\n    return _el$;\n  })();\n}\nfunction Navigate(props) {\n  const navigate = useNavigate();\n  const location = useLocation();\n  const {\n    href,\n    state\n  } = props;\n  const path = typeof href === \"function\" ? href({\n    navigate,\n    location\n  }) : href;\n  navigate(path, {\n    replace: true,\n    state\n  });\n  return null;\n}\n\n/**\n * This is mock of the eventual Solid 2.0 primitive. It is not fully featured.\n */\n\n/**\n * As `createAsync` and `createAsyncStore` are wrappers for `createResource`,\n * this type allows to support `latest` field for these primitives.\n * It will be removed in the future.\n */\n\nfunction createAsync(fn, options) {\n  let resource;\n  let prev = () => !resource || resource.state === \"unresolved\" ? undefined : resource.latest;\n  [resource] = createResource(() => subFetch(fn, untrack(prev)), v => v, options);\n  const resultAccessor = () => resource();\n  Object.defineProperty(resultAccessor, 'latest', {\n    get() {\n      return resource.latest;\n    }\n  });\n  return resultAccessor;\n}\nfunction createAsyncStore(fn, options = {}) {\n  let resource;\n  let prev = () => !resource || resource.state === \"unresolved\" ? undefined : unwrap(resource.latest);\n  [resource] = createResource(() => subFetch(fn, untrack(prev)), v => v, {\n    ...options,\n    storage: init => createDeepSignal(init, options.reconcile)\n  });\n  const resultAccessor = () => resource();\n  Object.defineProperty(resultAccessor, 'latest', {\n    get() {\n      return resource.latest;\n    }\n  });\n  return resultAccessor;\n}\nfunction createDeepSignal(value, options) {\n  const [store, setStore] = createStore({\n    value: structuredClone(value)\n  });\n  return [() => store.value, v => {\n    typeof v === \"function\" && (v = v());\n    setStore(\"value\", reconcile(structuredClone(v), options));\n    return store.value;\n  }];\n}\n\n// mock promise while hydrating to prevent fetching\nclass MockPromise {\n  static all() {\n    return new MockPromise();\n  }\n  static allSettled() {\n    return new MockPromise();\n  }\n  static any() {\n    return new MockPromise();\n  }\n  static race() {\n    return new MockPromise();\n  }\n  static reject() {\n    return new MockPromise();\n  }\n  static resolve() {\n    return new MockPromise();\n  }\n  catch() {\n    return new MockPromise();\n  }\n  then() {\n    return new MockPromise();\n  }\n  finally() {\n    return new MockPromise();\n  }\n}\nfunction subFetch(fn, prev) {\n  if (isServer || !sharedConfig.context) return fn(prev);\n  const ogFetch = fetch;\n  const ogPromise = Promise;\n  try {\n    window.fetch = () => new MockPromise();\n    Promise = MockPromise;\n    return fn(prev);\n  } finally {\n    window.fetch = ogFetch;\n    Promise = ogPromise;\n  }\n}\n\nfunction redirect(url, init = 302) {\n  let responseInit;\n  let revalidate;\n  if (typeof init === \"number\") {\n    responseInit = {\n      status: init\n    };\n  } else {\n    ({\n      revalidate,\n      ...responseInit\n    } = init);\n    if (typeof responseInit.status === \"undefined\") {\n      responseInit.status = 302;\n    }\n  }\n  const headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n  revalidate !== undefined && headers.set(\"X-Revalidate\", revalidate.toString());\n  const response = new Response(null, {\n    ...responseInit,\n    headers: headers\n  });\n  return response;\n}\nfunction reload(init = {}) {\n  const {\n    revalidate,\n    ...responseInit\n  } = init;\n  const headers = new Headers(responseInit.headers);\n  revalidate !== undefined && headers.set(\"X-Revalidate\", revalidate.toString());\n  return new Response(null, {\n    ...responseInit,\n    headers\n  });\n}\nfunction json(data, init = {}) {\n  const {\n    revalidate,\n    ...responseInit\n  } = init;\n  const headers = new Headers(responseInit.headers);\n  revalidate !== undefined && headers.set(\"X-Revalidate\", revalidate.toString());\n  headers.set(\"Content-Type\", \"application/json\");\n  const response = new Response(JSON.stringify(data), {\n    ...responseInit,\n    headers\n  });\n  response.customBody = () => data;\n  return response;\n}\n\nexport { A, HashRouter, MemoryRouter, Navigate, Route, Router, StaticRouter, mergeSearchString as _mergeSearchString, action, cache, createAsync, createAsyncStore, createBeforeLeave, createMemoryHistory, createRouter, json, keepDepth, notifyIfNotBlocked, query, redirect, reload, revalidate, saveCurrentDepth, useAction, useBeforeLeave, useCurrentMatches, useHref, useIsRouting, useLocation, useMatch, useNavigate, useParams, usePreloadRoute, useResolvedPath, useSearchParams, useSubmission, useSubmissions };\n"]}