@rpcbase/router 0.120.0 → 0.122.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -99,8 +99,21 @@ Returned API:
99
99
  - `value`: parsed value from the query param (`T | null`)
100
100
  - `isOpen`: `true` when `value !== null`
101
101
  - `buildHref(nextValue)`: builds next URL for links/prefetch
102
- - `openOverlay(nextValue)`: navigates with the query param set (`replace: true`)
103
- - `closeOverlay()`: navigates with the query param removed (`replace: true`)
102
+ - `openOverlay(nextValue)`: replaces the current URL with the query param set
103
+ - `closeOverlay()`: replaces the current URL with the query param removed
104
+
105
+ Overlay query updates use `history.replaceState` instead of a router navigation. This keeps the URL shareable without forcing the current route tree to re-render when only an overlay param changes.
106
+
107
+ For overlays that need to update multiple query params at once, use `replaceQueryParams`:
108
+
109
+ ```tsx
110
+ import { replaceQueryParams } from "@rpcbase/router"
111
+
112
+ replaceQueryParams((params) => {
113
+ params.set("booking_flow_step", "summary")
114
+ params.delete("booking_flow_payment_step")
115
+ })
116
+ ```
104
117
 
105
118
  ## Shortcut prefetch + navigate
106
119
 
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { UNSAFE_DataRouterContext, matchRoutes, Link as Link$1, useLocation, use
2
2
  export * from "react-router";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { c } from "react/compiler-runtime";
5
- import { createContext, useContext, useRef, forwardRef, useEffect } from "react";
5
+ import { createContext, useContext, useRef, forwardRef, useEffect, useSyncExternalStore } from "react";
6
6
  const ROUTE_MODULE_IMPORTER_HANDLE = "__rpcbaseRouteModuleImporter";
7
7
  const ROUTE_PREFETCH_DATA_HANDLE = "prefetchData";
8
8
  const isHandleObject = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -117,7 +117,7 @@ const RoutePrefetchProvider = (t0) => {
117
117
  if (!lazyRouteLoader && !routeModuleImporter) {
118
118
  return null;
119
119
  }
120
- const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter()).then(_temp$2).catch((error) => {
120
+ const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter()).then(_temp$3).catch((error) => {
121
121
  routeModuleCacheRef.current.delete(routeId);
122
122
  throw error;
123
123
  });
@@ -276,7 +276,7 @@ const RoutePrefetchProvider = (t0) => {
276
276
  const useRoutePrefetch = () => {
277
277
  return useContext(RoutePrefetchContext);
278
278
  };
279
- function _temp$2(module) {
279
+ function _temp$3(module) {
280
280
  if (!module || typeof module !== "object") {
281
281
  return null;
282
282
  }
@@ -480,7 +480,7 @@ const Link = forwardRef((t0, forwardedRef) => {
480
480
  return;
481
481
  }
482
482
  const observer = new IntersectionObserver((entries) => {
483
- const isVisible = entries.some(_temp$1);
483
+ const isVisible = entries.some(_temp$2);
484
484
  if (!isVisible || viewportPrefetchedRef.current) {
485
485
  return;
486
486
  }
@@ -579,7 +579,7 @@ const Link = forwardRef((t0, forwardedRef) => {
579
579
  return t13;
580
580
  });
581
581
  Link.displayName = "Link";
582
- function _temp$1(entry) {
582
+ function _temp$2(entry) {
583
583
  return entry.isIntersecting;
584
584
  }
585
585
  const memoizeImporter = (importer) => {
@@ -662,7 +662,7 @@ const useApplyMeta = (t0) => {
662
662
  };
663
663
  }
664
664
  document.title = pageMeta.title;
665
- document.querySelectorAll("[data-react-meta]").forEach(_temp);
665
+ document.querySelectorAll("[data-react-meta]").forEach(_temp$1);
666
666
  pageMeta.meta.forEach(_temp2);
667
667
  const canonicalUrl = `${window.location.origin}${location.pathname}`;
668
668
  const existingCanonical = document.querySelector('link[rel="canonical"]');
@@ -690,7 +690,7 @@ const useApplyMeta = (t0) => {
690
690
  }
691
691
  useEffect(t7, t8);
692
692
  };
693
- function _temp(tag) {
693
+ function _temp$1(tag) {
694
694
  return tag.remove();
695
695
  }
696
696
  function _temp2(meta) {
@@ -768,77 +768,135 @@ const useRegisterNavigationGuard = (guard) => {
768
768
  };
769
769
  }, [guard.id, guard.enabled, guard.message, guard.priority, guard.blockOnSearch, guard.shouldBlockNavigation, guard.shouldBlockUnload]);
770
770
  };
771
+ const QUERY_OVERLAY_URL_CHANGE_EVENT = "rpcbase-query-overlay-url-change";
772
+ function getCurrentUrlSnapshot() {
773
+ if (typeof window === "undefined") {
774
+ return {
775
+ pathname: "",
776
+ search: "",
777
+ hash: ""
778
+ };
779
+ }
780
+ return {
781
+ pathname: window.location.pathname,
782
+ search: window.location.search,
783
+ hash: window.location.hash
784
+ };
785
+ }
786
+ function getCurrentParamValue(param) {
787
+ if (typeof window === "undefined") return null;
788
+ return new URLSearchParams(window.location.search).get(param);
789
+ }
790
+ function subscribeToQueryOverlayUrl(listener) {
791
+ if (typeof window === "undefined") return () => void 0;
792
+ window.addEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener);
793
+ window.addEventListener("popstate", listener);
794
+ return () => {
795
+ window.removeEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener);
796
+ window.removeEventListener("popstate", listener);
797
+ };
798
+ }
799
+ function buildUrl(searchParams) {
800
+ const {
801
+ pathname,
802
+ hash
803
+ } = getCurrentUrlSnapshot();
804
+ const nextSearch = searchParams.toString();
805
+ return `${pathname}${nextSearch ? `?${nextSearch}` : ""}${hash}`;
806
+ }
807
+ function replaceQueryParams(update) {
808
+ if (typeof window === "undefined") return;
809
+ const {
810
+ pathname,
811
+ search,
812
+ hash
813
+ } = getCurrentUrlSnapshot();
814
+ const searchParams = new URLSearchParams(search);
815
+ update(searchParams);
816
+ const nextUrl = buildUrl(searchParams);
817
+ const currentUrl = `${pathname}${search}${hash}`;
818
+ if (nextUrl === currentUrl) return;
819
+ window.history.replaceState(window.history.state, "", nextUrl);
820
+ window.dispatchEvent(new Event(QUERY_OVERLAY_URL_CHANGE_EVENT));
821
+ }
822
+ function useQueryParam(param) {
823
+ const $ = c(2);
824
+ let t0;
825
+ if ($[0] !== param) {
826
+ t0 = () => getCurrentParamValue(param);
827
+ $[0] = param;
828
+ $[1] = t0;
829
+ } else {
830
+ t0 = $[1];
831
+ }
832
+ return useSyncExternalStore(subscribeToQueryOverlayUrl, t0, _temp);
833
+ }
834
+ function _temp() {
835
+ return null;
836
+ }
771
837
  const useQueryOverlay = (t0) => {
772
- const $ = c(21);
838
+ const $ = c(15);
773
839
  const {
774
840
  param,
775
841
  parse
776
842
  } = t0;
777
- const location = useLocation();
778
- const navigate = useNavigate();
843
+ const rawValue = useQueryParam(param);
779
844
  let t1;
780
- if ($[0] !== location.hash || $[1] !== location.pathname || $[2] !== location.search || $[3] !== param) {
845
+ if ($[0] !== param) {
781
846
  t1 = (nextValue) => {
782
- const searchParams = new URLSearchParams(location.search);
847
+ const searchParams = new URLSearchParams(getCurrentUrlSnapshot().search);
783
848
  if (nextValue === null) {
784
849
  searchParams.delete(param);
785
850
  } else {
786
851
  searchParams.set(param, nextValue);
787
852
  }
788
- const nextSearch = searchParams.toString();
789
- return `${location.pathname}${nextSearch ? `?${nextSearch}` : ""}${location.hash}`;
853
+ return buildUrl(searchParams);
790
854
  };
791
- $[0] = location.hash;
792
- $[1] = location.pathname;
793
- $[2] = location.search;
794
- $[3] = param;
795
- $[4] = t1;
855
+ $[0] = param;
856
+ $[1] = t1;
796
857
  } else {
797
- t1 = $[4];
858
+ t1 = $[1];
798
859
  }
799
860
  const buildHref = t1;
800
861
  let t2;
801
- if ($[5] !== location.search || $[6] !== param || $[7] !== parse) {
802
- t2 = parse(new URLSearchParams(location.search).get(param));
803
- $[5] = location.search;
804
- $[6] = param;
805
- $[7] = parse;
806
- $[8] = t2;
862
+ if ($[2] !== parse || $[3] !== rawValue) {
863
+ t2 = parse(rawValue);
864
+ $[2] = parse;
865
+ $[3] = rawValue;
866
+ $[4] = t2;
807
867
  } else {
808
- t2 = $[8];
868
+ t2 = $[4];
809
869
  }
810
870
  const value = t2;
811
871
  let t3;
812
- if ($[9] !== buildHref || $[10] !== navigate) {
872
+ if ($[5] !== param) {
813
873
  t3 = (nextValue_0) => {
814
- navigate(buildHref(nextValue_0), {
815
- replace: true
874
+ replaceQueryParams((searchParams_0) => {
875
+ searchParams_0.set(param, nextValue_0);
816
876
  });
817
877
  };
818
- $[9] = buildHref;
819
- $[10] = navigate;
820
- $[11] = t3;
878
+ $[5] = param;
879
+ $[6] = t3;
821
880
  } else {
822
- t3 = $[11];
881
+ t3 = $[6];
823
882
  }
824
883
  const openOverlay = t3;
825
884
  let t4;
826
- if ($[12] !== buildHref || $[13] !== navigate) {
885
+ if ($[7] !== param) {
827
886
  t4 = () => {
828
- navigate(buildHref(null), {
829
- replace: true
887
+ replaceQueryParams((searchParams_1) => {
888
+ searchParams_1.delete(param);
830
889
  });
831
890
  };
832
- $[12] = buildHref;
833
- $[13] = navigate;
834
- $[14] = t4;
891
+ $[7] = param;
892
+ $[8] = t4;
835
893
  } else {
836
- t4 = $[14];
894
+ t4 = $[8];
837
895
  }
838
896
  const closeOverlay = t4;
839
897
  const t5 = value !== null;
840
898
  let t6;
841
- if ($[15] !== buildHref || $[16] !== closeOverlay || $[17] !== openOverlay || $[18] !== t5 || $[19] !== value) {
899
+ if ($[9] !== buildHref || $[10] !== closeOverlay || $[11] !== openOverlay || $[12] !== t5 || $[13] !== value) {
842
900
  t6 = {
843
901
  value,
844
902
  isOpen: t5,
@@ -846,14 +904,14 @@ const useQueryOverlay = (t0) => {
846
904
  openOverlay,
847
905
  closeOverlay
848
906
  };
849
- $[15] = buildHref;
850
- $[16] = closeOverlay;
851
- $[17] = openOverlay;
852
- $[18] = t5;
853
- $[19] = value;
854
- $[20] = t6;
907
+ $[9] = buildHref;
908
+ $[10] = closeOverlay;
909
+ $[11] = openOverlay;
910
+ $[12] = t5;
911
+ $[13] = value;
912
+ $[14] = t6;
855
913
  } else {
856
- t6 = $[20];
914
+ t6 = $[14];
857
915
  }
858
916
  return t6;
859
917
  };
@@ -965,10 +1023,12 @@ export {
965
1023
  getNavigationGuards,
966
1024
  lazyRoute,
967
1025
  removeNavigationGuard,
1026
+ replaceQueryParams,
968
1027
  subscribeNavigationGuards,
969
1028
  upsertNavigationGuard,
970
1029
  useApplyMeta,
971
1030
  useQueryOverlay,
1031
+ useQueryParam,
972
1032
  useRegisterNavigationGuard,
973
1033
  useRoutePrefetch,
974
1034
  useShortcutPrefetchNavigate
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/routePrefetchHandles.ts","../src/routePrefetch.tsx","../src/Link.tsx","../src/lazyRoute.tsx","../src/useApplyMeta.tsx","../src/navigationGuards.ts","../src/queryOverlay.ts","../src/shortcutPrefetchNavigate.ts"],"sourcesContent":["export const ROUTE_MODULE_IMPORTER_HANDLE = \"__rpcbaseRouteModuleImporter\"\nexport const ROUTE_PREFETCH_DATA_HANDLE = \"prefetchData\"\n\nexport type RouteHandleObject = Record<string, unknown>\n\ntype RouteModuleImporter = () => Promise<unknown>\n\nconst isHandleObject = (value: unknown): value is RouteHandleObject =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n\nexport const getRouteModuleImporterFromHandle = (handle: unknown): RouteModuleImporter | null => {\n if (!isHandleObject(handle)) return null\n\n const importer = handle[ROUTE_MODULE_IMPORTER_HANDLE]\n return typeof importer === \"function\" ? (importer as RouteModuleImporter) : null\n}\n\nexport const getRoutePrefetchDataFromHandle = (\n handle: unknown,\n key = ROUTE_PREFETCH_DATA_HANDLE,\n): boolean | undefined => {\n if (!isHandleObject(handle)) return undefined\n\n const value = handle[key]\n return typeof value === \"boolean\" ? value : undefined\n}\n\nexport const mergeRouteHandle = (\n handle: unknown,\n {\n importer,\n prefetchData,\n prefetchDataKey = ROUTE_PREFETCH_DATA_HANDLE,\n }: {\n importer?: RouteModuleImporter\n prefetchData?: boolean\n prefetchDataKey?: string\n },\n): RouteHandleObject => {\n const nextHandle: RouteHandleObject = isHandleObject(handle) ? { ...handle } : {}\n\n if (importer) {\n nextHandle[ROUTE_MODULE_IMPORTER_HANDLE] = importer\n }\n\n if (typeof prefetchData === \"boolean\") {\n nextHandle[prefetchDataKey] = prefetchData\n }\n\n return nextHandle\n}\n","import { ReactNode, createContext, useContext, useRef } from \"react\"\nimport {\n UNSAFE_DataRouterContext,\n matchRoutes,\n type DataRouteObject,\n type DataRouter,\n} from \"react-router\"\n\nimport {\n ROUTE_PREFETCH_DATA_HANDLE,\n getRouteModuleImporterFromHandle,\n getRoutePrefetchDataFromHandle,\n} from \"./routePrefetchHandles\"\n\n\nexport type RoutePrefetchBehavior = \"intent\" | \"render\" | \"none\" | \"viewport\"\n\nexport type RoutePrefetchCallOptions = {\n prefetchCode?: boolean\n prefetchData?: boolean\n}\n\nexport type RoutePrefetchApi = {\n defaultPrefetch: RoutePrefetchBehavior\n prefetch: (href: string, opts?: RoutePrefetchCallOptions) => Promise<void>\n prefetchCode: (href: string) => Promise<void>\n prefetchData: (href: string) => Promise<void>\n}\n\ntype RoutePrefetchContextValue = RoutePrefetchApi\n\ntype PrefetchableRoute = DataRouteObject & {\n handle?: unknown\n lazy?: () => Promise<Record<string, unknown>>\n}\n\ntype RoutePrefetchProviderProps = {\n children: ReactNode\n defaultPrefetch?: RoutePrefetchBehavior\n dataPrefetchTtlMs?: number\n dataPrefetchHandleKey?: string\n}\n\ntype DataCacheValue = {\n expiresAt: number\n promise: Promise<void>\n}\n\nconst noop = async () => {}\n\nconst DEFAULT_PREFETCH_API: RoutePrefetchContextValue = {\n defaultPrefetch: \"none\",\n prefetch: noop,\n prefetchCode: noop,\n prefetchData: noop,\n}\n\nconst RoutePrefetchContext = createContext<RoutePrefetchContextValue>(DEFAULT_PREFETCH_API)\n\nconst normalizeHref = (href: string): { pathWithSearch: string; pathname: string; search: string; hash: string } | null => {\n if (typeof window === \"undefined\") return null\n\n try {\n const url = new URL(href, window.location.origin)\n if (url.origin !== window.location.origin) return null\n return {\n pathWithSearch: `${url.pathname}${url.search}`,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n }\n } catch {\n return null\n }\n}\n\nconst pruneDataCache = (cache: Map<string, DataCacheValue>, now: number): void => {\n cache.forEach((value, key) => {\n if (value.expiresAt <= now) {\n cache.delete(key)\n }\n })\n}\n\nconst resolveDataPrefetchFlag = (\n route: PrefetchableRoute,\n explicitPrefetchData: boolean | undefined,\n dataPrefetchHandleKey: string,\n): boolean => {\n if (typeof explicitPrefetchData === \"boolean\") {\n return explicitPrefetchData\n }\n\n const routeHandlePrefetchData = getRoutePrefetchDataFromHandle(route.handle, dataPrefetchHandleKey)\n if (typeof routeHandlePrefetchData === \"boolean\") {\n return routeHandlePrefetchData\n }\n\n return false\n}\n\nexport const RoutePrefetchProvider = ({\n children,\n defaultPrefetch = \"intent\",\n dataPrefetchTtlMs = 30000,\n dataPrefetchHandleKey = ROUTE_PREFETCH_DATA_HANDLE,\n}: RoutePrefetchProviderProps) => {\n const dataRouterContext = useContext(UNSAFE_DataRouterContext)\n const routeModuleCacheRef = useRef(new Map<string, Promise<Record<string, unknown> | null>>())\n const routeDataCacheRef = useRef(new Map<string, DataCacheValue>())\n\n const prefetchRouteModule = async (route: PrefetchableRoute): Promise<Record<string, unknown> | null> => {\n const routeId = route.id\n if (!routeId) return null\n\n const cached = routeModuleCacheRef.current.get(routeId)\n if (cached) {\n return cached\n }\n\n const lazyRouteLoader = typeof route.lazy === \"function\" ? route.lazy : null\n const routeModuleImporter = getRouteModuleImporterFromHandle(route.handle)\n if (!lazyRouteLoader && !routeModuleImporter) {\n return null\n }\n\n const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter!())\n .then((module) => {\n if (!module || typeof module !== \"object\") return null\n return module as Record<string, unknown>\n })\n .catch((error) => {\n routeModuleCacheRef.current.delete(routeId)\n throw error\n })\n\n routeModuleCacheRef.current.set(routeId, prefetchPromise)\n return prefetchPromise\n }\n\n const prefetchRouteData = async (router: DataRouter, route: PrefetchableRoute, href: string): Promise<void> => {\n const routeId = route.id\n if (!routeId) return\n\n const now = Date.now()\n pruneDataCache(routeDataCacheRef.current, now)\n\n const cacheKey = `${routeId}|${href}`\n const cached = routeDataCacheRef.current.get(cacheKey)\n if (cached && cached.expiresAt > now) {\n await cached.promise\n return\n }\n\n let hasLoader = typeof route.loader === \"function\"\n if (!hasLoader) {\n const loadedRouteModule = await prefetchRouteModule(route).catch(() => null)\n hasLoader = typeof loadedRouteModule?.loader === \"function\"\n }\n\n if (!hasLoader) return\n\n const fetcherKey = `rb:prefetch:${routeId}:${href}`\n\n const prefetchPromise = Promise.resolve(router.fetch(fetcherKey, routeId, href))\n .catch((error) => {\n routeDataCacheRef.current.delete(cacheKey)\n throw error\n })\n .finally(() => {\n try {\n router.deleteFetcher(fetcherKey)\n } catch {\n return\n }\n })\n\n const ttl = Math.max(1, dataPrefetchTtlMs)\n routeDataCacheRef.current.set(cacheKey, {\n expiresAt: now + ttl,\n promise: prefetchPromise,\n })\n\n await prefetchPromise\n }\n\n const prefetch = async (href: string, opts?: RoutePrefetchCallOptions): Promise<void> => {\n const normalized = normalizeHref(href)\n if (!normalized) return\n\n const currentPathWithSearch =\n typeof window === \"undefined\"\n ? \"\"\n : `${window.location.pathname}${window.location.search}`\n if (normalized.pathWithSearch === currentPathWithSearch) {\n return\n }\n\n const router = dataRouterContext?.router as DataRouter | undefined\n if (!router) return\n\n const matches = matchRoutes(\n router.routes,\n {\n pathname: normalized.pathname,\n search: normalized.search,\n hash: normalized.hash,\n },\n router.basename,\n )\n\n if (!matches || matches.length === 0) {\n return\n }\n\n const matchedRoutes = matches.map((match) => match.route as PrefetchableRoute)\n\n if (opts?.prefetchCode !== false) {\n await Promise.all(\n matchedRoutes.map(async (route) => {\n try {\n await prefetchRouteModule(route)\n } catch {\n return\n }\n }),\n )\n }\n\n await Promise.all(\n matchedRoutes.map(async (route) => {\n if (!resolveDataPrefetchFlag(route, opts?.prefetchData, dataPrefetchHandleKey)) {\n return\n }\n\n try {\n await prefetchRouteData(router, route, normalized.pathWithSearch)\n } catch {\n return\n }\n }),\n )\n }\n\n return (\n <RoutePrefetchContext.Provider\n value={{\n defaultPrefetch,\n prefetch,\n prefetchCode: async (href) => prefetch(href, { prefetchCode: true, prefetchData: false }),\n prefetchData: async (href) => prefetch(href, { prefetchCode: false, prefetchData: true }),\n }}\n >\n {children}\n </RoutePrefetchContext.Provider>\n )\n}\n\nexport const useRoutePrefetch = (): RoutePrefetchApi => useContext(RoutePrefetchContext)\n\nexport type { RoutePrefetchProviderProps }\n","import { forwardRef, useEffect, useRef, type Ref, type SyntheticEvent } from \"react\"\nimport { Link as RouterLink, type LinkProps as RouterLinkProps } from \"react-router\"\n\nimport { type RoutePrefetchBehavior, useRoutePrefetch } from \"./routePrefetch\"\n\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i\n\ntype LinkProps = Omit<RouterLinkProps, \"prefetch\"> & {\n prefetch?: RoutePrefetchBehavior\n prefetchData?: boolean\n}\n\nconst assignRef = <TValue,>(ref: Ref<TValue> | undefined, value: TValue) => {\n if (!ref) return\n if (typeof ref === \"function\") {\n ref(value)\n return\n }\n ref.current = value\n}\n\nconst composeEventHandlers = <TEvent extends SyntheticEvent>(\n theirHandler: ((event: TEvent) => void) | undefined,\n ourHandler: () => void,\n) => {\n return (event: TEvent) => {\n theirHandler?.(event)\n if (!event.defaultPrevented) {\n ourHandler()\n }\n }\n}\n\nconst shouldPrefetchLink = ({\n prefetch,\n reloadDocument,\n target,\n to,\n}: {\n prefetch: RoutePrefetchBehavior\n reloadDocument: boolean | undefined\n target: string | undefined\n to: RouterLinkProps[\"to\"]\n}): boolean => {\n if (prefetch === \"none\") return false\n if (reloadDocument) return false\n if (typeof target === \"string\" && target !== \"_self\") return false\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) return false\n return true\n}\n\nconst usePrefetchLink = (\n prefetchData: boolean | undefined,\n): {\n anchorRef: Ref<HTMLAnchorElement>\n prefetchHref: () => void\n getAnchorElement: () => HTMLAnchorElement | null\n} => {\n const localRef = useRef<HTMLAnchorElement | null>(null)\n const { prefetch } = useRoutePrefetch()\n\n return {\n anchorRef: (node) => {\n localRef.current = node\n },\n getAnchorElement: () => localRef.current,\n prefetchHref: () => {\n const href = localRef.current?.getAttribute(\"href\")\n if (!href) return\n void prefetch(href, { prefetchData })\n },\n }\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n prefetch: prefetchProp,\n prefetchData,\n onMouseEnter,\n onFocus,\n onTouchStart,\n reloadDocument,\n target,\n to,\n ...props\n },\n forwardedRef,\n ) => {\n const { defaultPrefetch } = useRoutePrefetch()\n const prefetchBehavior = prefetchProp ?? defaultPrefetch\n const viewportPrefetchedRef = useRef(false)\n const { anchorRef, prefetchHref, getAnchorElement } = usePrefetchLink(prefetchData)\n const canPrefetch = shouldPrefetchLink({\n prefetch: prefetchBehavior,\n reloadDocument,\n target,\n to,\n })\n\n useEffect(() => {\n viewportPrefetchedRef.current = false\n }, [to])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"render\") return\n prefetchHref()\n }, [canPrefetch, prefetchBehavior, prefetchHref])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"viewport\") return\n\n const element = getAnchorElement()\n if (!element || typeof IntersectionObserver === \"undefined\") return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const isVisible = entries.some((entry) => entry.isIntersecting)\n if (!isVisible || viewportPrefetchedRef.current) return\n viewportPrefetchedRef.current = true\n prefetchHref()\n },\n { threshold: 0.5 },\n )\n\n observer.observe(element)\n return () => {\n observer.disconnect()\n }\n }, [canPrefetch, prefetchBehavior, prefetchHref, getAnchorElement])\n\n const handleIntentPrefetch = () => {\n if (!canPrefetch || prefetchBehavior !== \"intent\") return\n prefetchHref()\n }\n\n return (\n <RouterLink\n {...props}\n to={to}\n target={target}\n reloadDocument={reloadDocument}\n prefetch=\"none\"\n onMouseEnter={composeEventHandlers(onMouseEnter, handleIntentPrefetch)}\n onFocus={composeEventHandlers(onFocus, handleIntentPrefetch)}\n onTouchStart={composeEventHandlers(onTouchStart, handleIntentPrefetch)}\n ref={(node) => {\n assignRef(forwardedRef, node)\n assignRef(anchorRef, node)\n }}\n />\n )\n },\n)\n\nLink.displayName = \"Link\"\n\nexport type { LinkProps }\n","import { LoaderFunction } from \"react-router\"\nimport { Loader } from \"@rpcbase/client\"\n\nimport { mergeRouteHandle, RouteHandleObject } from \"./routePrefetchHandles\"\n\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: Loader\n}\n\ntype RouteModuleImporter = () => Promise<RouteModule>\n\ntype RouteOptions = {\n handle?: unknown\n prefetchData?: boolean\n prefetchDataKey?: string\n}\n\ntype LazyRouteResult = {\n lazy: () => Promise<{\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n }>\n handle: RouteHandleObject\n}\n\nconst memoizeImporter = (importer: RouteModuleImporter): RouteModuleImporter => {\n let promise: Promise<RouteModule> | null = null\n\n return async () => {\n if (!promise) {\n promise = importer().catch((error) => {\n promise = null\n throw error\n })\n }\n\n return promise\n }\n}\n\nexport const lazyRoute = (importer: RouteModuleImporter, opts?: RouteOptions): LazyRouteResult => {\n const loadModule = memoizeImporter(importer)\n\n return {\n lazy: async () => {\n const module = await loadModule()\n const lazyRouteModule: {\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n } = {\n Component: module.default,\n }\n\n if (typeof module.loader === \"function\") {\n lazyRouteModule.loader = module.loader as unknown as LoaderFunction\n }\n\n return lazyRouteModule\n },\n handle: mergeRouteHandle(opts?.handle, {\n importer: loadModule,\n prefetchData: opts?.prefetchData,\n prefetchDataKey: opts?.prefetchDataKey,\n }),\n }\n}\n","import { useEffect } from \"react\"\nimport { useLocation } from \"react-router\"\n\n\ntype MetaAttributeValue = string | number | boolean | undefined\ntype MetaEntry = Record<string, MetaAttributeValue>\n\ntype PageMeta = {\n title: string\n meta: MetaEntry[]\n}\n\n\nexport const useApplyMeta = ({\n defaultTitle = \"\",\n defaultMeta = [],\n pagesMeta = {}\n}: {\n defaultTitle?: string\n defaultMeta?: MetaEntry[]\n pagesMeta?: Record<string, PageMeta>\n} = {}) => {\n const location = useLocation()\n\n useEffect(() => {\n const loadMeta = async () => {\n\n let pageMeta = pagesMeta[location.pathname]\n\n if (!pageMeta) {\n pageMeta = { title: defaultTitle, meta: defaultMeta }\n }\n\n document.title = pageMeta.title\n\n // Remove previous dynamically inserted tags\n document.querySelectorAll(\"[data-react-meta]\").forEach((tag) => tag.remove())\n\n // Inject new tags\n pageMeta.meta.forEach((meta) => {\n const metaElement = document.createElement(\"meta\")\n metaElement.setAttribute(\"data-react-meta\", \"true\")\n\n // Set all attributes from the meta object\n Object.entries(meta).forEach(([key, value]) => {\n if (value) {\n metaElement.setAttribute(key, value.toString())\n }\n })\n\n document.head.appendChild(metaElement)\n })\n\n // Update canonical link\n const canonicalUrl = `${window.location.origin}${location.pathname}`\n\n const existingCanonical = document.querySelector(\"link[rel=\\\"canonical\\\"]\")\n if (existingCanonical) {\n existingCanonical.remove()\n }\n\n const canonicalLink = document.createElement(\"link\")\n canonicalLink.setAttribute(\"rel\", \"canonical\")\n canonicalLink.setAttribute(\"href\", canonicalUrl)\n canonicalLink.setAttribute(\"data-react-meta\", \"true\")\n document.head.appendChild(canonicalLink)\n }\n\n loadMeta()\n }, [location.pathname, defaultTitle, defaultMeta, pagesMeta])\n}\n","import { useEffect, useRef } from \"react\"\nimport type { BlockerFunction } from \"react-router\"\n\n\nexport type NavigationGuard = {\n id: string\n enabled: boolean\n priority?: number\n message: string\n blockOnSearch?: boolean\n shouldBlockNavigation: BlockerFunction\n shouldBlockUnload: boolean\n}\n\ntype NavigationGuardsListener = () => void\n\ntype NavigationGuardsStore = {\n guards: Map<string, NavigationGuard>\n listeners: Set<NavigationGuardsListener>\n}\n\nconst NAVIGATION_GUARDS_STORE_KEY = \"__rpcbaseNavigationGuardsStore\"\n\nconst getNavigationGuardsStore = (): NavigationGuardsStore => {\n const globalAny = globalThis as {\n [NAVIGATION_GUARDS_STORE_KEY]?: NavigationGuardsStore\n }\n\n const existing = globalAny[NAVIGATION_GUARDS_STORE_KEY]\n if (existing) {\n return existing\n }\n\n const created: NavigationGuardsStore = {\n guards: new Map<string, NavigationGuard>(),\n listeners: new Set<NavigationGuardsListener>(),\n }\n\n globalAny[NAVIGATION_GUARDS_STORE_KEY] = created\n return created\n}\n\nconst notify = (): void => {\n getNavigationGuardsStore().listeners.forEach((listener) => {\n listener()\n })\n}\n\nconst isSameGuard = (a: NavigationGuard, b: NavigationGuard): boolean =>\n a.id === b.id &&\n a.enabled === b.enabled &&\n a.priority === b.priority &&\n a.message === b.message &&\n a.blockOnSearch === b.blockOnSearch &&\n a.shouldBlockNavigation === b.shouldBlockNavigation &&\n a.shouldBlockUnload === b.shouldBlockUnload\n\nexport const upsertNavigationGuard = (guard: NavigationGuard): void => {\n const guards = getNavigationGuardsStore().guards\n const prev = guards.get(guard.id)\n if (prev && isSameGuard(prev, guard)) {\n return\n }\n\n guards.set(guard.id, guard)\n notify()\n}\n\nexport const removeNavigationGuard = (id: string): void => {\n const guards = getNavigationGuardsStore().guards\n const didDelete = guards.delete(id)\n if (didDelete) {\n notify()\n }\n}\n\nexport const getNavigationGuards = (): NavigationGuard[] =>\n Array.from(getNavigationGuardsStore().guards.values())\n\nexport const subscribeNavigationGuards = (\n listener: NavigationGuardsListener,\n): (() => void) => {\n const listeners = getNavigationGuardsStore().listeners\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const useRegisterNavigationGuard = (guard: NavigationGuard): void => {\n const latestGuardRef = useRef(guard)\n latestGuardRef.current = guard\n\n const lastIdRef = useRef<string | null>(null)\n\n useEffect(() => {\n const lastId = lastIdRef.current\n if (lastId && lastId !== guard.id) {\n removeNavigationGuard(lastId)\n }\n lastIdRef.current = guard.id\n\n if (!guard.enabled) {\n removeNavigationGuard(guard.id)\n return\n }\n\n upsertNavigationGuard(latestGuardRef.current)\n return () => {\n removeNavigationGuard(guard.id)\n }\n }, [\n guard.id,\n guard.enabled,\n guard.message,\n guard.priority,\n guard.blockOnSearch,\n guard.shouldBlockNavigation,\n guard.shouldBlockUnload,\n ])\n}\n","import { useLocation, useNavigate } from \"react-router\"\n\n\nexport type UseQueryOverlayOptions<TOverlay extends string> = {\n param: string\n parse: (value: string | null) => TOverlay | null\n}\n\nexport type QueryOverlayApi<TOverlay extends string> = {\n value: TOverlay | null\n isOpen: boolean\n buildHref: (nextValue: TOverlay | null) => string\n openOverlay: (nextValue: TOverlay) => void\n closeOverlay: () => void\n}\n\nexport const useQueryOverlay = <TOverlay extends string>({\n param,\n parse,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const location = useLocation()\n const navigate = useNavigate()\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(location.search)\n if (nextValue === null) {\n searchParams.delete(param)\n } else {\n searchParams.set(param, nextValue)\n }\n const nextSearch = searchParams.toString()\n return `${location.pathname}${nextSearch ? `?${nextSearch}` : \"\"}${location.hash}`\n }\n\n const value = parse(new URLSearchParams(location.search).get(param))\n\n const openOverlay = (nextValue: TOverlay) => {\n void navigate(buildHref(nextValue), { replace: true })\n }\n\n const closeOverlay = () => {\n void navigate(buildHref(null), { replace: true })\n }\n\n return {\n value,\n isOpen: value !== null,\n buildHref,\n openOverlay,\n closeOverlay,\n }\n}\n","import { useEffect, useRef } from \"react\"\nimport { useNavigate } from \"react-router\"\n\n\nexport type KeyboardShortcut = {\n key: string\n mod?: boolean\n ctrl?: boolean\n meta?: boolean\n alt?: boolean\n shift?: boolean\n}\n\nexport type ShortcutTrigger = \"keydown\" | \"keyup\"\n\nexport type UseShortcutPrefetchNavigateOptions = {\n shortcut: KeyboardShortcut\n getHref: () => string\n prefetch?: (href: string) => Promise<void> | void\n navigate?: (href: string) => Promise<void> | void\n trigger?: ShortcutTrigger\n enabled?: boolean\n preventDefault?: boolean\n ignoreTypingTarget?: boolean\n isTypingTarget?: (target: EventTarget | null) => boolean\n}\n\nconst normalizeKey = (key: string): string => key.toLowerCase()\n\nconst defaultIsTypingTarget = (target: EventTarget | null): boolean => {\n const element = target as HTMLElement | null\n const tagName = element?.tagName\n\n return (\n element?.isContentEditable === true ||\n tagName === \"INPUT\" ||\n tagName === \"TEXTAREA\" ||\n tagName === \"SELECT\"\n )\n}\n\nconst matchesShortcutKeyDown = (event: KeyboardEvent, shortcut: KeyboardShortcut): boolean => {\n if (normalizeKey(event.key) !== normalizeKey(shortcut.key)) return false\n\n if (typeof shortcut.mod === \"boolean\") {\n const hasMod = event.metaKey || event.ctrlKey\n if (hasMod !== shortcut.mod) return false\n }\n if (typeof shortcut.ctrl === \"boolean\" && event.ctrlKey !== shortcut.ctrl) return false\n if (typeof shortcut.meta === \"boolean\" && event.metaKey !== shortcut.meta) return false\n if (typeof shortcut.alt === \"boolean\" && event.altKey !== shortcut.alt) return false\n if (typeof shortcut.shift === \"boolean\" && event.shiftKey !== shortcut.shift) return false\n\n return true\n}\n\nconst callMaybeAsync = (fn: ((href: string) => Promise<void> | void) | undefined, href: string) => {\n if (!fn) return\n void Promise.resolve(fn(href))\n}\n\nexport const useShortcutPrefetchNavigate = ({\n shortcut,\n getHref,\n prefetch,\n navigate,\n trigger = \"keyup\",\n enabled = true,\n preventDefault = true,\n ignoreTypingTarget = true,\n isTypingTarget = defaultIsTypingTarget,\n}: UseShortcutPrefetchNavigateOptions): void => {\n const routerNavigate = useNavigate()\n\n const shortcutRef = useRef(shortcut)\n const getHrefRef = useRef(getHref)\n const prefetchRef = useRef(prefetch)\n const navigateRef = useRef(navigate ?? routerNavigate)\n const triggerRef = useRef(trigger)\n const enabledRef = useRef(enabled)\n const preventDefaultRef = useRef(preventDefault)\n const ignoreTypingTargetRef = useRef(ignoreTypingTarget)\n const isTypingTargetRef = useRef(isTypingTarget)\n const waitingForShortcutKeyUpRef = useRef(false)\n\n shortcutRef.current = shortcut\n getHrefRef.current = getHref\n prefetchRef.current = prefetch\n navigateRef.current = navigate ?? routerNavigate\n triggerRef.current = trigger\n enabledRef.current = enabled\n preventDefaultRef.current = preventDefault\n ignoreTypingTargetRef.current = ignoreTypingTarget\n isTypingTargetRef.current = isTypingTarget\n\n if (!enabled || trigger !== \"keyup\") {\n waitingForShortcutKeyUpRef.current = false\n }\n\n useEffect(() => {\n if (typeof window === \"undefined\") return\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!enabledRef.current) return\n if (ignoreTypingTargetRef.current && isTypingTargetRef.current(event.target)) return\n if (event.repeat) return\n if (!matchesShortcutKeyDown(event, shortcutRef.current)) return\n\n if (preventDefaultRef.current) {\n event.preventDefault()\n }\n\n const href = getHrefRef.current()\n if (!href) return\n\n callMaybeAsync(prefetchRef.current, href)\n\n if (triggerRef.current === \"keydown\") {\n callMaybeAsync(navigateRef.current, href)\n return\n }\n\n waitingForShortcutKeyUpRef.current = true\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!enabledRef.current) return\n if (triggerRef.current !== \"keyup\") return\n if (!waitingForShortcutKeyUpRef.current) return\n if (normalizeKey(event.key) !== normalizeKey(shortcutRef.current.key)) return\n\n waitingForShortcutKeyUpRef.current = false\n\n if (ignoreTypingTargetRef.current && isTypingTargetRef.current(event.target)) return\n\n if (preventDefaultRef.current) {\n event.preventDefault()\n }\n\n const href = getHrefRef.current()\n if (!href) return\n\n callMaybeAsync(navigateRef.current, href)\n }\n\n const onBlur = () => {\n waitingForShortcutKeyUpRef.current = false\n }\n\n window.addEventListener(\"keydown\", onKeyDown)\n window.addEventListener(\"keyup\", onKeyUp)\n window.addEventListener(\"blur\", onBlur)\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown)\n window.removeEventListener(\"keyup\", onKeyUp)\n window.removeEventListener(\"blur\", onBlur)\n }\n }, [])\n}\n"],"names":["ROUTE_MODULE_IMPORTER_HANDLE","ROUTE_PREFETCH_DATA_HANDLE","isHandleObject","value","Boolean","Array","isArray","getRouteModuleImporterFromHandle","handle","importer","getRoutePrefetchDataFromHandle","key","undefined","mergeRouteHandle","prefetchData","prefetchDataKey","nextHandle","noop","DEFAULT_PREFETCH_API","defaultPrefetch","prefetch","prefetchCode","RoutePrefetchContext","createContext","normalizeHref","href","window","url","URL","location","origin","pathWithSearch","pathname","search","hash","pruneDataCache","cache","now","forEach","expiresAt","delete","resolveDataPrefetchFlag","route","explicitPrefetchData","dataPrefetchHandleKey","routeHandlePrefetchData","RoutePrefetchProvider","t0","$","_c","children","t1","dataPrefetchTtlMs","t2","t3","dataRouterContext","useContext","UNSAFE_DataRouterContext","t4","Symbol","for","Map","routeModuleCacheRef","useRef","t5","routeDataCacheRef","t6","routeId","id","cached","current","get","lazyRouteLoader","lazy","routeModuleImporter","prefetchPromise","Promise","resolve","then","_temp","catch","error","set","prefetchRouteModule","t7","router","route_0","routeId_0","Date","cacheKey","cached_0","promise","hasLoader","loader","loadedRouteModule","_temp2","fetcherKey","prefetchPromise_0","fetch","error_0","finally","deleteFetcher","ttl","Math","max","prefetchRouteData","t8","href_0","opts","normalized","currentPathWithSearch","router_0","matches","matchRoutes","routes","basename","length","matchedRoutes","map","_temp3","all","route_1","route_2","t10","t9","href_1","href_2","t11","t12","useRoutePrefetch","module","match","ABSOLUTE_URL_REGEX","assignRef","ref","composeEventHandlers","theirHandler","ourHandler","event","defaultPrevented","shouldPrefetchLink","reloadDocument","target","to","test","usePrefetchLink","localRef","node","anchorRef","getAnchorElement","prefetchHref","getAttribute","Link","forwardRef","forwardedRef","onFocus","onMouseEnter","onTouchStart","prefetchProp","props","prefetchBehavior","viewportPrefetchedRef","canPrefetch","useEffect","element","IntersectionObserver","observer","entries","isVisible","some","threshold","observe","disconnect","handleIntentPrefetch","t13","RouterLink","displayName","entry","isIntersecting","memoizeImporter","lazyRoute","loadModule","lazyRouteModule","Component","default","useApplyMeta","defaultTitle","defaultMeta","pagesMeta","useLocation","loadMeta","pageMeta","meta","document","title","querySelectorAll","canonicalUrl","existingCanonical","querySelector","remove","canonicalLink","createElement","setAttribute","head","appendChild","tag","metaElement","Object","toString","NAVIGATION_GUARDS_STORE_KEY","getNavigationGuardsStore","globalAny","globalThis","existing","created","guards","listeners","Set","notify","listener","isSameGuard","a","b","enabled","priority","message","blockOnSearch","shouldBlockNavigation","shouldBlockUnload","upsertNavigationGuard","guard","prev","removeNavigationGuard","didDelete","getNavigationGuards","from","values","subscribeNavigationGuards","add","useRegisterNavigationGuard","latestGuardRef","lastIdRef","lastId","useQueryOverlay","param","parse","navigate","useNavigate","nextValue","searchParams","URLSearchParams","nextSearch","buildHref","nextValue_0","replace","openOverlay","closeOverlay","isOpen","normalizeKey","toLowerCase","defaultIsTypingTarget","tagName","isContentEditable","matchesShortcutKeyDown","shortcut","mod","hasMod","metaKey","ctrlKey","ctrl","alt","altKey","shift","shiftKey","callMaybeAsync","fn","useShortcutPrefetchNavigate","getHref","trigger","preventDefault","ignoreTypingTarget","isTypingTarget","routerNavigate","shortcutRef","getHrefRef","prefetchRef","navigateRef","triggerRef","enabledRef","preventDefaultRef","ignoreTypingTargetRef","isTypingTargetRef","waitingForShortcutKeyUpRef","onKeyDown","repeat","onKeyUp","onBlur","addEventListener","removeEventListener"],"mappings":";;;;;AAAO,MAAMA,+BAA+B;AACrC,MAAMC,6BAA6B;AAM1C,MAAMC,iBAAiBA,CAACC,UACtBC,QAAQD,KAAK,KAAK,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;AAE9D,MAAMI,mCAAmCA,CAACC,WAAgD;AAC/F,MAAI,CAACN,eAAeM,MAAM,EAAG,QAAO;AAEpC,QAAMC,WAAWD,OAAOR,4BAA4B;AACpD,SAAO,OAAOS,aAAa,aAAcA,WAAmC;AAC9E;AAEO,MAAMC,iCAAiCA,CAC5CF,QACAG,MAAMV,+BACkB;AACxB,MAAI,CAACC,eAAeM,MAAM,EAAG,QAAOI;AAEpC,QAAMT,QAAQK,OAAOG,GAAG;AACxB,SAAO,OAAOR,UAAU,YAAYA,QAAQS;AAC9C;AAEO,MAAMC,mBAAmBA,CAC9BL,QACA;AAAA,EACEC;AAAAA,EACAK;AAAAA,EACAC,kBAAkBd;AAKpB,MACsB;AACtB,QAAMe,aAAgCd,eAAeM,MAAM,IAAI;AAAA,IAAE,GAAGA;AAAAA,EAAAA,IAAW,CAAA;AAE/E,MAAIC,UAAU;AACZO,eAAWhB,4BAA4B,IAAIS;AAAAA,EAC7C;AAEA,MAAI,OAAOK,iBAAiB,WAAW;AACrCE,eAAWD,eAAe,IAAID;AAAAA,EAChC;AAEA,SAAOE;AACT;ACFA,MAAMC,OAAO,YAAY;AAAC;AAE1B,MAAMC,uBAAkD;AAAA,EACtDC,iBAAiB;AAAA,EACjBC,UAAUH;AAAAA,EACVI,cAAcJ;AAAAA,EACdH,cAAcG;AAChB;AAEA,MAAMK,uBAAuBC,cAAyCL,oBAAoB;AAE1F,MAAMM,gBAAgBA,CAACC,SAAoG;AACzH,MAAI,OAAOC,WAAW,YAAa,QAAO;AAE1C,MAAI;AACF,UAAMC,MAAM,IAAIC,IAAIH,MAAMC,OAAOG,SAASC,MAAM;AAChD,QAAIH,IAAIG,WAAWJ,OAAOG,SAASC,OAAQ,QAAO;AAClD,WAAO;AAAA,MACLC,gBAAgB,GAAGJ,IAAIK,QAAQ,GAAGL,IAAIM,MAAM;AAAA,MAC5CD,UAAUL,IAAIK;AAAAA,MACdC,QAAQN,IAAIM;AAAAA,MACZC,MAAMP,IAAIO;AAAAA,IAAAA;AAAAA,EAEd,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,MAAMC,iBAAiBA,CAACC,OAAoCC,QAAsB;AAChFD,QAAME,QAAQ,CAACnC,OAAOQ,QAAQ;AAC5B,QAAIR,MAAMoC,aAAaF,KAAK;AAC1BD,YAAMI,OAAO7B,GAAG;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEA,MAAM8B,0BAA0BA,CAC9BC,OACAC,sBACAC,0BACY;AACZ,MAAI,OAAOD,yBAAyB,WAAW;AAC7C,WAAOA;AAAAA,EACT;AAEA,QAAME,0BAA0BnC,+BAA+BgC,MAAMlC,QAAQoC,qBAAqB;AAClG,MAAI,OAAOC,4BAA4B,WAAW;AAChD,WAAOA;AAAAA,EACT;AAEA,SAAO;AACT;AAEO,MAAMC,wBAAwBC,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAAC;AAAAA,IAAA/B,iBAAAgC;AAAAA,IAAAC,mBAAAC;AAAAA,IAAAT,uBAAAU;AAAAA,EAAAA,IAAAP;AAEpC,QAAA5B,kBAAAgC,OAAAvC,SAAA,WAAAuC;AACA,QAAAC,oBAAAC,OAAAzC,SAAA,MAAAyC;AACA,QAAAT,wBAAAU,OAAA1C,SAAAX,6BAAAqD;AAEA,QAAAC,oBAA0BC,WAAWC,wBAAwB;AAAC,MAAAC;AAAA,MAAAV,EAAA,CAAA,MAAAW,uBAAAC,IAAA,2BAAA,GAAA;AAC3BF,6BAAIG,IAAAA;AAAsDb,WAAAU;AAAAA,EAAA,OAAA;AAAAA,SAAAV,EAAA,CAAA;AAAA,EAAA;AAA7F,QAAAc,sBAA4BC,OAAOL,EAA0D;AAAC,MAAAM;AAAA,MAAAhB,EAAA,CAAA,MAAAW,uBAAAC,IAAA,2BAAA,GAAA;AAC7DI,6BAAIH,IAAAA;AAA6Bb,WAAAgB;AAAAA,EAAA,OAAA;AAAAA,SAAAhB,EAAA,CAAA;AAAA,EAAA;AAAlE,QAAAiB,oBAA0BF,OAAOC,EAAiC;AAAC,MAAAE;AAAA,MAAAlB,EAAA,CAAA,MAAAW,uBAAAC,IAAA,2BAAA,GAAA;AAEvCM,gBAAAxB,UAAA;AAC1B,YAAAyB,UAAgBzB,MAAK0B;AACrB,UAAI,CAACD,SAAO;AAAA,eAAS;AAAA,MAAI;AAEzB,YAAAE,SAAeP,oBAAmBQ,QAAQC,IAAKJ,OAAO;AACtD,UAAIE,QAAM;AAAA,eACDA;AAAAA,MAAM;AAGf,YAAAG,kBAAwB,OAAO9B,MAAK+B,SAAU,aAAa/B,MAAK+B,OAAxC;AACxB,YAAAC,sBAA4BnE,iCAAiCmC,MAAKlC,MAAO;AACzE,UAAI,CAACgE,mBAAD,CAAqBE,qBAAmB;AAAA,eACnC;AAAA,MAAI;AAGb,YAAAC,kBAAwBC,QAAOC,QAASL,kBAAkBA,gBAAAA,IAAoBE,oBAAAA,CAAsB,EAACI,KAC7FC,OAGL,EAACC,MACKC,CAAAA,UAAA;AACLnB,4BAAmBQ,QAAQ9B,OAAQ2B,OAAO;AAC1C,cAAMc;AAAAA,MAAK,CACZ;AAEHnB,0BAAmBQ,QAAQY,IAAKf,SAASQ,eAAe;AAAC,aAClDA;AAAAA,IAAe;AACvB3B,WAAAkB;AAAAA,EAAA,OAAA;AAAAA,SAAAlB,EAAA,CAAA;AAAA,EAAA;AA3BD,QAAAmC,sBAA4BjB;AA2B3B,MAAAkB;AAAA,MAAApC,SAAAI,mBAAA;AAEyBgC,gBAAAC,QAAAC,SAAA7D,SAAA;AACxB,YAAA8D,YAAgB7C,QAAK0B;AACrB,UAAI,CAACD,WAAO;AAAA;AAAA,MAAA;AAEZ,YAAA9B,MAAYmD,KAAInD,IAAAA;AAChBF,qBAAe8B,kBAAiBK,SAAUjC,GAAG;AAE7C,YAAAoD,WAAiB,GAAGtB,SAAO,IAAI1C,IAAI;AACnC,YAAAiE,WAAezB,kBAAiBK,QAAQC,IAAKkB,QAAQ;AACrD,UAAIC,YAAUrB,SAAM9B,YAAaF,KAAG;AAClC,cAAMgC,SAAMsB;AAAQ;AAAA,MAAA;AAItB,UAAAC,YAAgB,OAAOlD,QAAKmD,WAAY;AACxC,UAAI,CAACD,WAAS;AACZ,cAAAE,oBAA0B,MAAMX,oBAAoBzC,OAAK,EAACsC,MAAOe,QAAU;AAC3EH,oBAAYA,OAAOE,mBAAiBD,WAAa;AAAA,MAAxC;AAGX,UAAI,CAACD,WAAS;AAAA;AAAA,MAAA;AAEd,YAAAI,aAAmB,eAAe7B,SAAO,IAAI1C,IAAI;AAEjD,YAAAwE,oBAAwBrB,QAAOC,QAASQ,OAAMa,MAAOF,YAAY7B,WAAS1C,IAAI,CAAC,EAACuD,MACvEmB,CAAAA,YAAA;AACLlC,0BAAiBK,QAAQ9B,OAAQiD,QAAQ;AACzC,cAAMR;AAAAA,MAAK,CACZ,EAACmB,QACO,MAAA;AACP,YAAA;AACEf,iBAAMgB,cAAeL,UAAU;AAAA,QAAC,QAAA;AAAA;AAAA,QAAA;AAAA,MAGjC,CACF;AAEH,YAAAM,MAAYC,KAAIC,IAAK,GAAGpD,iBAAiB;AACzCa,wBAAiBK,QAAQY,IAAKO,UAAU;AAAA,QAAAlD,WAC3BF,MAAMiE;AAAAA,QAAGX,SACXhB;AAAAA,MAAAA,CACV;AAED,YAAMA;AAAAA,IAAe;AACtB3B,WAAAI;AAAAJ,WAAAoC;AAAAA,EAAA,OAAA;AAAAA,SAAApC,EAAA,CAAA;AAAA,EAAA;AA5CD,QAAAyD,oBAA0BrB;AA4CzB,MAAAsB;AAAA,MAAA1D,EAAA,CAAA,MAAAJ,yBAAAI,EAAA,CAAA,MAAAO,mBAAA8B,UAAArC,EAAA,CAAA,MAAAyD,mBAAA;AAEgBC,SAAA,OAAAC,QAAAC,SAAA;AACf,YAAAC,aAAmBrF,cAAcC,MAAI;AACrC,UAAI,CAACoF,YAAU;AAAA;AAAA,MAAA;AAEf,YAAAC,wBACE,OAAOpF,WAAW,cAAlB,KAAA,GAEOA,OAAMG,SAASG,QAAS,GAAGN,OAAMG,SAASI,MAAO;AAC1D,UAAI4E,WAAU9E,mBAAoB+E,uBAAqB;AAAA;AAAA,MAAA;AAIvD,YAAAC,WAAexD,mBAAiB8B;AAChC,UAAI,CAACA,UAAM;AAAA;AAAA,MAAA;AAEX,YAAA2B,UAAgBC,YACd5B,SAAM6B,QACN;AAAA,QAAAlF,UACY6E,WAAU7E;AAAAA,QAASC,QACrB4E,WAAU5E;AAAAA,QAAOC,MACnB2E,WAAU3E;AAAAA,MAAAA,GAElBmD,SAAM8B,QACR;AAEA,UAAI,CAACH,WAAWA,QAAOI,WAAY,GAAC;AAAA;AAAA,MAAA;AAIpC,YAAAC,gBAAsBL,QAAOM,IAAKC,MAA2C;AAE7E,UAAIX,MAAIvF,iBAAmB,OAAK;AAC9B,cAAMuD,QAAO4C,IACXH,cAAaC,IAAK,OAAAG,YAAA;AAChB,cAAA;AACE,kBAAMtC,oBAAoBzC,OAAK;AAAA,UAAC,QAAA;AAAA;AAAA,UAAA;AAAA,QAGjC,CACF,CACH;AAAA,MAAC;AAGH,YAAMkC,QAAO4C,IACXH,cAAaC,IAAK,OAAAI,YAAA;AAChB,YAAI,CAACjF,wBAAwBC,SAAOkE,MAAI9F,cAAgB8B,qBAAqB,GAAC;AAAA;AAAA,QAAA;AAI9E,YAAA;AACE,gBAAM6D,kBAAkBpB,UAAQ3C,SAAOmE,WAAU9E,cAAe;AAAA,QAAC,QAAA;AAAA;AAAA,QAAA;AAAA,MAGlE,CACF,CACH;AAAA,IAAC;AACFiB,WAAAJ;AAAAI,MAAA,CAAA,IAAAO,mBAAA8B;AAAArC,WAAAyD;AAAAzD,WAAA0D;AAAAA,EAAA,OAAA;AAAAA,SAAA1D,EAAA,CAAA;AAAA,EAAA;AAxDD,QAAA5B,WAAiBsF;AAwDhB,MAAAiB;AAAA,MAAAC;AAAA,MAAA5E,SAAA5B,UAAA;AAOmBwG,gBAAAC,WAAgBzG,SAASK,QAAM;AAAA,MAAAJ,cAAgB;AAAA,MAAIP,cAAgB;AAAA,IAAA,CAAO;AAC1E6G,iBAAAG,WAAgB1G,SAASK,QAAM;AAAA,MAAAJ,cAAgB;AAAA,MAAKP,cAAgB;AAAA,IAAA,CAAM;AAACkC,WAAA5B;AAAA4B,YAAA2E;AAAA3E,YAAA4E;AAAAA,EAAA,OAAA;AAAAD,UAAA3E,EAAA,EAAA;AAAA4E,SAAA5E,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA+E;AAAA,MAAA/E,EAAA,EAAA,MAAA7B,mBAAA6B,EAAA,EAAA,MAAA5B,YAAA4B,EAAA,EAAA,MAAA2E,OAAA3E,UAAA4E,IAAA;AAJpFG,UAAA;AAAA,MAAA5G;AAAAA,MAAAC;AAAAA,MAAAC,cAGSuG;AAAAA,MAA2E9G,cAC3E6G;AAAAA,IAAAA;AACf3E,YAAA7B;AAAA6B,YAAA5B;AAAA4B,YAAA2E;AAAA3E,YAAA4E;AAAA5E,YAAA+E;AAAAA,EAAA,OAAA;AAAAA,UAAA/E,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgF;AAAA,MAAAhF,EAAA,EAAA,MAAAE,YAAAF,UAAA+E,KAAA;AANHC,8BAAA,qBAAA,UAAA,EACS,OAAAD,KAON7E,UACH;AAAgCF,YAAAE;AAAAF,YAAA+E;AAAA/E,YAAAgF;AAAAA,EAAA,OAAA;AAAAA,UAAAhF,EAAA,EAAA;AAAA,EAAA;AAAA,SAThCgF;AASgC;AAI7B,MAAMC,mBAAmBA,MAAA;AAAA,SAAwBzE,WAAWlC,oBAAoB;AAAC;AA7JnD,SAAAyD,QAAAmD,QAAA;AA2B7B,MAAI,CAACA,UAAU,OAAOA,WAAW,UAAQ;AAAA,WAAS;AAAA,EAAI;AAAA,SAC/CA;AAAiC;AA5BX,SAAAnC,WAAA;AAAA,SAuDwC;AAAI;AAvD5C,SAAAwB,OAAAY,OAAA;AAAA,SAkHYA,MAAKzF;AAA2B;ACjNjF,MAAM0F,qBAAqB;AAO3B,MAAMC,YAAY,CAAUC,KAA8BnI,UAAkB;AAC1E,MAAI,CAACmI,IAAK;AACV,MAAI,OAAOA,QAAQ,YAAY;AAC7BA,QAAInI,KAAK;AACT;AAAA,EACF;AACAmI,MAAIhE,UAAUnE;AAChB;AAEA,MAAMoI,uBAAuB,CAC3BC,cACAC,eACG;AACH,SAAO,CAACC,UAAkB;AACxBF,mBAAeE,KAAK;AACpB,QAAI,CAACA,MAAMC,kBAAkB;AAC3BF,iBAAAA;AAAAA,IACF;AAAA,EACF;AACF;AAEA,MAAMG,qBAAqBA,CAAC;AAAA,EAC1BxH;AAAAA,EACAyH;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAe;AACb,MAAI3H,aAAa,OAAQ,QAAO;AAChC,MAAIyH,eAAgB,QAAO;AAC3B,MAAI,OAAOC,WAAW,YAAYA,WAAW,QAAS,QAAO;AAC7D,MAAI,OAAOC,OAAO,YAAYX,mBAAmBY,KAAKD,EAAE,EAAG,QAAO;AAClE,SAAO;AACT;AAEA,MAAME,kBAAkBnI,CAAAA,iBAAA;AAAA,QAAAkC,IAAAC,EAAA,CAAA;AAOtB,QAAAiG,WAAiBnF,OAAiC,IAAI;AACtD,QAAA;AAAA,IAAA3C;AAAAA,EAAAA,IAAqB6G,iBAAAA;AAAkB,MAAAlF;AAAA,MAAAI;AAAA,MAAAH,EAAA,CAAA,MAAAW,uBAAAC,IAAA,2BAAA,GAAA;AAG1Bb,SAAAoG,CAAAA,SAAA;AACTD,eAAQ5E,UAAW6E;AAAAA,IAAH;AAEAhG,SAAAA,MAAM+F,SAAQ5E;AAAQtB,WAAAD;AAAAC,WAAAG;AAAAA,EAAA,OAAA;AAAAJ,SAAAC,EAAA,CAAA;AAAAG,SAAAH,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAK;AAAA,MAAAL,EAAA,CAAA,MAAA5B,YAAA4B,SAAAlC,cAAA;AAJnCuC,SAAA;AAAA,MAAA+F,WACMrG;AAAAA,MAEVsG,kBACiBlG;AAAAA,MAAsBmG,cAC1BA,MAAA;AACZ,cAAA7H,OAAayH,SAAQ5E,SAAsBiF,aAAC,MAAM;AAClD,YAAI,CAAC9H,MAAI;AAAA;AAAA,QAAA;AACJL,iBAASK,MAAM;AAAA,UAAAX;AAAAA,QAAAA,CAAgB;AAAA,MAAC;AAAA,IAAA;AAExCkC,WAAA5B;AAAA4B,WAAAlC;AAAAkC,WAAAK;AAAAA,EAAA,OAAA;AAAAA,SAAAL,EAAA,CAAA;AAAA,EAAA;AAAA,SAVMK;AAUN;AAGI,MAAMmG,OAAOC,WAClB,CAAA1G,IAAA2G,iBAAA;AAAA,QAAA1G,IAAAC,EAAA,EAAA;AAAA,MAAA0G;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAA/I;AAAA,MAAAgJ;AAAA,MAAAC;AAAA,MAAAlB;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAA/F,SAAAD,IAAA;AACE,KAAA;AAAA,MAAA3B,UAAA0I;AAAAA,MAAAhJ;AAAAA,MAAA8I;AAAAA,MAAAD;AAAAA,MAAAE;AAAAA,MAAAhB;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAA,GAAAgB;AAAAA,IAAAA,IAAAhH;AAUCC,WAAAD;AAAAC,WAAA2G;AAAA3G,WAAA4G;AAAA5G,WAAA6G;AAAA7G,WAAAlC;AAAAkC,WAAA8G;AAAA9G,WAAA+G;AAAA/G,WAAA6F;AAAA7F,WAAA8F;AAAA9F,WAAA+F;AAAAA,EAAA,OAAA;AAAAY,cAAA3G,EAAA,CAAA;AAAA4G,mBAAA5G,EAAA,CAAA;AAAA6G,mBAAA7G,EAAA,CAAA;AAAAlC,mBAAAkC,EAAA,CAAA;AAAA8G,mBAAA9G,EAAA,CAAA;AAAA+G,YAAA/G,EAAA,CAAA;AAAA6F,qBAAA7F,EAAA,CAAA;AAAA8F,aAAA9F,EAAA,CAAA;AAAA+F,SAAA/F,EAAA,CAAA;AAAA,EAAA;AAGD,QAAA;AAAA,IAAA7B;AAAAA,EAAAA,IAA4B8G,iBAAAA;AAC5B,QAAA+B,mBAAyBF,gBAAA3I;AACzB,QAAA8I,wBAA8BlG,OAAO,KAAK;AAC1C,QAAA;AAAA,IAAAqF;AAAAA,IAAAE;AAAAA,IAAAD;AAAAA,EAAAA,IAAsDJ,gBAAgBnI,YAAY;AAAC,MAAAqC;AAAA,MAAAH,EAAA,EAAA,MAAAgH,oBAAAhH,EAAA,EAAA,MAAA6F,kBAAA7F,EAAA,EAAA,MAAA8F,UAAA9F,UAAA+F,IAAA;AAC/D5F,SAAAyF,mBAAmB;AAAA,MAAAxH,UAC3B4I;AAAAA,MAAgBnB;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,CAI3B;AAAC/F,YAAAgH;AAAAhH,YAAA6F;AAAA7F,YAAA8F;AAAA9F,YAAA+F;AAAA/F,YAAAG;AAAAA,EAAA,OAAA;AAAAA,SAAAH,EAAA,EAAA;AAAA,EAAA;AALF,QAAAkH,cAAoB/G;AAKlB,MAAAE;AAAA,MAAAL,EAAA,EAAA,MAAAW,uBAAAC,IAAA,2BAAA,GAAA;AAEQP,SAAAA,MAAA;AACR4G,4BAAqB3F,UAAW;AAAA,IAAH;AAC9BtB,YAAAK;AAAAA,EAAA,OAAA;AAAAA,SAAAL,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAM;AAAA,MAAAN,UAAA+F,IAAA;AAAEzF,SAAA,CAACyF,EAAE;AAAC/F,YAAA+F;AAAA/F,YAAAM;AAAAA,EAAA,OAAA;AAAAA,SAAAN,EAAA,EAAA;AAAA,EAAA;AAFPmH,YAAU9G,IAEPC,EAAI;AAAC,MAAAI;AAAA,MAAAM;AAAA,MAAAhB,EAAA,EAAA,MAAAkH,eAAAlH,UAAAgH,oBAAAhH,EAAA,EAAA,MAAAsG,cAAA;AAEE5F,SAAAA,MAAA;AACR,UAAI,CAACwG,eAAeF,qBAAqB,UAAQ;AAAA;AAAA,MAAA;AACjDV,mBAAAA;AAAAA,IAAc;AACbtF,UAACkG,aAAaF,kBAAkBV,YAAY;AAACtG,YAAAkH;AAAAlH,YAAAgH;AAAAhH,YAAAsG;AAAAtG,YAAAU;AAAAV,YAAAgB;AAAAA,EAAA,OAAA;AAAAN,SAAAV,EAAA,EAAA;AAAAgB,SAAAhB,EAAA,EAAA;AAAA,EAAA;AAHhDmH,YAAUzG,IAGPM,EAA6C;AAAC,MAAAE;AAAA,MAAAkB;AAAA,MAAApC,EAAA,EAAA,MAAAkH,eAAAlH,EAAA,EAAA,MAAAqG,oBAAArG,EAAA,EAAA,MAAAgH,oBAAAhH,UAAAsG,cAAA;AAEvCpF,SAAAA,MAAA;AACR,UAAI,CAACgG,eAAeF,qBAAqB,YAAU;AAAA;AAAA,MAAA;AAEnD,YAAAI,UAAgBf,iBAAAA;AAChB,UAAI,CAACe,WAAW,OAAOC,yBAAyB,aAAW;AAAA;AAAA,MAAA;AAE3D,YAAAC,WAAiB,IAAID,qBACnBE,CAAAA,YAAA;AACE,cAAAC,YAAkBD,QAAOE,KAAM1F,OAA+B;AAC9D,YAAI,CAACyF,aAAaP,sBAAqB3F,SAAQ;AAAA;AAAA,QAAA;AAC/C2F,8BAAqB3F,UAAW;AAChCgF,qBAAAA;AAAAA,MAAc,GAEhB;AAAA,QAAAoB,WAAa;AAAA,MAAA,CACf;AAEAJ,eAAQK,QAASP,OAAO;AAAC,aAClB,MAAA;AACLE,iBAAQM,WAAAA;AAAAA,MAAa;AAAA,IACtB;AACAxF,SAAA,CAAC8E,aAAaF,kBAAkBV,cAAcD,gBAAgB;AAACrG,YAAAkH;AAAAlH,YAAAqG;AAAArG,YAAAgH;AAAAhH,YAAAsG;AAAAtG,YAAAkB;AAAAlB,YAAAoC;AAAAA,EAAA,OAAA;AAAAlB,SAAAlB,EAAA,EAAA;AAAAoC,SAAApC,EAAA,EAAA;AAAA,EAAA;AApBlEmH,YAAUjG,IAoBPkB,EAA+D;AAAC,MAAAsB;AAAA,MAAA1D,EAAA,EAAA,MAAAkH,eAAAlH,UAAAgH,oBAAAhH,EAAA,EAAA,MAAAsG,cAAA;AAEtC5C,SAAAA,MAAA;AAC3B,UAAI,CAACwD,eAAeF,qBAAqB,UAAQ;AAAA;AAAA,MAAA;AACjDV,mBAAAA;AAAAA,IAAc;AACftG,YAAAkH;AAAAlH,YAAAgH;AAAAhH,YAAAsG;AAAAtG,YAAA0D;AAAAA,EAAA,OAAA;AAAAA,SAAA1D,EAAA,EAAA;AAAA,EAAA;AAHD,QAAA6H,uBAA6BnE;AAG5B,MAAAkB;AAAA,MAAA5E,EAAA,EAAA,MAAA6H,wBAAA7H,UAAA4G,cAAA;AASiBhC,SAAAW,qBAAqBqB,cAAciB,oBAAoB;AAAC7H,YAAA6H;AAAA7H,YAAA4G;AAAA5G,YAAA4E;AAAAA,EAAA,OAAA;AAAAA,SAAA5E,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA2E;AAAA,MAAA3E,EAAA,EAAA,MAAA6H,wBAAA7H,UAAA2G,SAAA;AAC7DhC,UAAAY,qBAAqBoB,SAASkB,oBAAoB;AAAC7H,YAAA6H;AAAA7H,YAAA2G;AAAA3G,YAAA2E;AAAAA,EAAA,OAAA;AAAAA,UAAA3E,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA+E;AAAA,MAAA/E,EAAA,EAAA,MAAA6H,wBAAA7H,UAAA6G,cAAA;AAC9C9B,UAAAQ,qBAAqBsB,cAAcgB,oBAAoB;AAAC7H,YAAA6H;AAAA7H,YAAA6G;AAAA7G,YAAA+E;AAAAA,EAAA,OAAA;AAAAA,UAAA/E,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgF;AAAA,MAAAhF,EAAA,EAAA,MAAAoG,aAAApG,UAAA0G,cAAA;AACjE1B,UAAAmB,CAAAA,SAAA;AACHd,gBAAUqB,cAAcP,IAAI;AAC5Bd,gBAAUe,WAAWD,IAAI;AAAA,IAAC;AAC3BnG,YAAAoG;AAAApG,YAAA0G;AAAA1G,YAAAgF;AAAAA,EAAA,OAAA;AAAAA,UAAAhF,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA8H;AAAA,MAAA9H,EAAA,EAAA,MAAA+G,SAAA/G,EAAA,EAAA,MAAA6F,kBAAA7F,EAAA,EAAA,MAAA2E,OAAA3E,EAAA,EAAA,MAAA+E,OAAA/E,EAAA,EAAA,MAAAgF,OAAAhF,EAAA,EAAA,MAAA4E,MAAA5E,EAAA,EAAA,MAAA8F,UAAA9F,UAAA+F,IAAA;AAZH+B,8BAACC,QAAA,EAAU,GACLhB,OACAhB,IACID,QACQD,gBACP,UAAA,QACK,cAAAjB,IACL,SAAAD,KACK,cAAAI,KACT,KAAAC,KAGJ;AACDhF,YAAA+G;AAAA/G,YAAA6F;AAAA7F,YAAA2E;AAAA3E,YAAA+E;AAAA/E,YAAAgF;AAAAhF,YAAA4E;AAAA5E,YAAA8F;AAAA9F,YAAA+F;AAAA/F,YAAA8H;AAAAA,EAAA,OAAA;AAAAA,UAAA9H,EAAA,EAAA;AAAA,EAAA;AAAA,SAbF8H;AAaE,CAGR;AAEAtB,KAAKwB,cAAc;AAhFjB,SAAAjG,QAAAkG,OAAA;AAAA,SA0CkDA,MAAKC;AAAe;AC3FxE,MAAMC,kBAAkBA,CAAC1K,aAAuD;AAC9E,MAAIkF,UAAuC;AAE3C,SAAO,YAAY;AACjB,QAAI,CAACA,SAAS;AACZA,gBAAUlF,SAAAA,EAAWuE,MAAOC,CAAAA,UAAU;AACpCU,kBAAU;AACV,cAAMV;AAAAA,MACR,CAAC;AAAA,IACH;AAEA,WAAOU;AAAAA,EACT;AACF;AAEO,MAAMyF,YAAYA,CAAC3K,UAA+BmG,SAAyC;AAChG,QAAMyE,aAAaF,gBAAgB1K,QAAQ;AAE3C,SAAO;AAAA,IACLgE,MAAM,YAAY;AAChB,YAAMyD,SAAS,MAAMmD,WAAAA;AACrB,YAAMC,kBAGF;AAAA,QACFC,WAAWrD,OAAOsD;AAAAA,MAAAA;AAGpB,UAAI,OAAOtD,OAAOrC,WAAW,YAAY;AACvCyF,wBAAgBzF,SAASqC,OAAOrC;AAAAA,MAClC;AAEA,aAAOyF;AAAAA,IACT;AAAA,IACA9K,QAAQK,iBAAiB+F,MAAMpG,QAAQ;AAAA,MACrCC,UAAU4K;AAAAA,MACVvK,cAAc8F,MAAM9F;AAAAA,MACpBC,iBAAiB6F,MAAM7F;AAAAA,IAAAA,CACxB;AAAA,EAAA;AAEL;ACtDO,MAAM0K,eAAe1I,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAE;AAAA,MAAAH,SAAAD,IAAA;AAACI,SAAAJ,OAAAnC,SAAA,CAAA,IAAAmC;AAQvBC,WAAAD;AAAAC,WAAAG;AAAAA,EAAA,OAAA;AAAAA,SAAAH,EAAA,CAAA;AAAA,EAAA;AARuB,QAAA;AAAA,IAAA0I,cAAArI;AAAAA,IAAAsI,aAAArI;AAAAA,IAAAsI,WAAAlI;AAAAA,EAAAA,IAAAP;AAC3B,QAAAuI,eAAArI,OAAAzC,SAAA,KAAAyC;AAAiB,MAAAW;AAAA,MAAAhB,SAAAM,IAAA;AACjBU,SAAAV,OAAA1C,SAAA,CAAA,IAAA0C;AAAgBN,WAAAM;AAAAN,WAAAgB;AAAAA,EAAA,OAAA;AAAAA,SAAAhB,EAAA,CAAA;AAAA,EAAA;AAAhB,QAAA2I,cAAA3H;AAAgB,MAAAE;AAAA,MAAAlB,SAAAU,IAAA;AAChBQ,SAAAR,OAAA9C,SAAA,CAAA,IAAA8C;AAAcV,WAAAU;AAAAV,WAAAkB;AAAAA,EAAA,OAAA;AAAAA,SAAAlB,EAAA,CAAA;AAAA,EAAA;AAAd,QAAA4I,YAAA1H;AAMA,QAAArC,WAAiBgK,YAAAA;AAAa,MAAAzG;AAAA,MAAAsB;AAAA,MAAA1D,EAAA,CAAA,MAAA2I,eAAA3I,SAAA0I,gBAAA1I,EAAA,CAAA,MAAAnB,SAAAG,YAAAgB,SAAA4I,WAAA;AAEpBxG,SAAAA,MAAA;AACR,YAAA0G,WAAiB,YAAA;AAEf,YAAAC,WAAeH,UAAU/J,SAAQG,QAAS;AAE1C,YAAI,CAAC+J,UAAQ;AACXA,qBAAWA;AAAAA,YAAAA,OAASL;AAAAA,YAAYM,MAAQL;AAAAA,UAAAA;AAAAA,QAAhC;AAGVM,iBAAQC,QAASH,SAAQG;AAGzBD,iBAAQE,iBAAkB,mBAAmB,EAAC7J,QAASyC,KAAqB;AAG5EgH,iBAAQC,KAAK1J,QAASyD,MAYrB;AAGD,cAAAqG,eAAqB,GAAG1K,OAAMG,SAASC,MAAO,GAAGD,SAAQG,QAAS;AAElE,cAAAqK,oBAA0BJ,SAAQK,cAAe,uBAAyB;AAC1E,YAAID,mBAAiB;AACnBA,4BAAiBE,OAAAA;AAAAA,QAAS;AAG5B,cAAAC,gBAAsBP,SAAQQ,cAAe,MAAM;AACnDD,sBAAaE,aAAc,OAAO,WAAW;AAC7CF,sBAAaE,aAAc,QAAQN,YAAY;AAC/CI,sBAAaE,aAAc,mBAAmB,MAAM;AACpDT,iBAAQU,KAAKC,YAAaJ,aAAa;AAAA,MAAC;AAG1CV,eAAAA;AAAAA,IAAU;AACTpF,SAAA,CAAC7E,SAAQG,UAAW0J,cAAcC,aAAaC,SAAS;AAAC5I,WAAA2I;AAAA3I,WAAA0I;AAAA1I,MAAA,CAAA,IAAAnB,SAAAG;AAAAgB,WAAA4I;AAAA5I,YAAAoC;AAAApC,YAAA0D;AAAAA,EAAA,OAAA;AAAAtB,SAAApC,EAAA,EAAA;AAAA0D,SAAA1D,EAAA,EAAA;AAAA,EAAA;AA7C5DmH,YAAU/E,IA6CPsB,EAAyD;AAAC;AAxDnC,SAAA3B,MAAA8H,KAAA;AAAA,SAuB0CA,IAAGN,OAAAA;AAAS;AAvBtD,SAAAxG,OAAAiG,MAAA;AA2BpB,QAAAc,cAAoBb,SAAQQ,cAAe,MAAM;AACjDK,cAAWJ,aAAc,mBAAmB,MAAM;AAGlDK,SAAMxC,QAASyB,IAAI,EAAC1J,QAASS,CAAAA,OAAA;AAAC,UAAA,CAAApC,KAAAR,KAAA,IAAA4C;AAC5B,QAAI5C,OAAK;AACP2M,kBAAWJ,aAAc/L,KAAKR,MAAK6M,SAAAA,CAAW;AAAA,IAAC;AAAA,EAChD,CACF;AAEDf,WAAQU,KAAKC,YAAaE,WAAW;AAAC;AC7B9C,MAAMG,8BAA8B;AAEpC,MAAMC,2BAA2BA,MAA6B;AAC5D,QAAMC,YAAYC;AAIlB,QAAMC,WAAWF,UAAUF,2BAA2B;AACtD,MAAII,UAAU;AACZ,WAAOA;AAAAA,EACT;AAEA,QAAMC,UAAiC;AAAA,IACrCC,4BAAY1J,IAAAA;AAAAA,IACZ2J,+BAAeC,IAAAA;AAAAA,EAA8B;AAG/CN,YAAUF,2BAA2B,IAAIK;AACzC,SAAOA;AACT;AAEA,MAAMI,SAASA,MAAY;AACzBR,6BAA2BM,UAAUlL,QAASqL,CAAAA,aAAa;AACzDA,aAAAA;AAAAA,EACF,CAAC;AACH;AAEA,MAAMC,cAAcA,CAACC,GAAoBC,MACvCD,EAAEzJ,OAAO0J,EAAE1J,MACXyJ,EAAEE,YAAYD,EAAEC,WAChBF,EAAEG,aAAaF,EAAEE,YACjBH,EAAEI,YAAYH,EAAEG,WAChBJ,EAAEK,kBAAkBJ,EAAEI,iBACtBL,EAAEM,0BAA0BL,EAAEK,yBAC9BN,EAAEO,sBAAsBN,EAAEM;AAErB,MAAMC,wBAAwBA,CAACC,UAAiC;AACrE,QAAMf,SAASL,2BAA2BK;AAC1C,QAAMgB,OAAOhB,OAAOhJ,IAAI+J,MAAMlK,EAAE;AAChC,MAAImK,QAAQX,YAAYW,MAAMD,KAAK,GAAG;AACpC;AAAA,EACF;AAEAf,SAAOrI,IAAIoJ,MAAMlK,IAAIkK,KAAK;AAC1BZ,SAAAA;AACF;AAEO,MAAMc,wBAAwBA,CAACpK,OAAqB;AACzD,QAAMmJ,SAASL,2BAA2BK;AAC1C,QAAMkB,YAAYlB,OAAO/K,OAAO4B,EAAE;AAClC,MAAIqK,WAAW;AACbf,WAAAA;AAAAA,EACF;AACF;AAEO,MAAMgB,sBAAsBA,MACjCrO,MAAMsO,KAAKzB,2BAA2BK,OAAOqB,QAAQ;AAEhD,MAAMC,4BAA4BA,CACvClB,aACiB;AACjB,QAAMH,YAAYN,2BAA2BM;AAC7CA,YAAUsB,IAAInB,QAAQ;AACtB,SAAO,MAAM;AACXH,cAAUhL,OAAOmL,QAAQ;AAAA,EAC3B;AACF;AAEO,MAAMoB,6BAA6BA,CAACT,UAAiC;AAC1E,QAAMU,iBAAiBjL,OAAOuK,KAAK;AACnCU,iBAAe1K,UAAUgK;AAEzB,QAAMW,YAAYlL,OAAsB,IAAI;AAE5CoG,YAAU,MAAM;AACd,UAAM+E,SAASD,UAAU3K;AACzB,QAAI4K,UAAUA,WAAWZ,MAAMlK,IAAI;AACjCoK,4BAAsBU,MAAM;AAAA,IAC9B;AACAD,cAAU3K,UAAUgK,MAAMlK;AAE1B,QAAI,CAACkK,MAAMP,SAAS;AAClBS,4BAAsBF,MAAMlK,EAAE;AAC9B;AAAA,IACF;AAEAiK,0BAAsBW,eAAe1K,OAAO;AAC5C,WAAO,MAAM;AACXkK,4BAAsBF,MAAMlK,EAAE;AAAA,IAChC;AAAA,EACF,GAAG,CACDkK,MAAMlK,IACNkK,MAAMP,SACNO,MAAML,SACNK,MAAMN,UACNM,MAAMJ,eACNI,MAAMH,uBACNG,MAAMF,iBAAiB,CACxB;AACH;ACxGO,MAAMe,kBAAkBpM,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAA0B,QAAA;AAAA,IAAAmM;AAAAA,IAAAC;AAAAA,EAAAA,IAAAtM;AAIvD,QAAAlB,WAAiBgK,YAAAA;AACjB,QAAAyD,WAAiBC,YAAAA;AAAa,MAAApM;AAAA,MAAAH,SAAAnB,SAAAK,QAAAc,SAAAnB,SAAAG,YAAAgB,SAAAnB,SAAAI,UAAAe,SAAAoM,OAAA;AAEZjM,SAAAqM,CAAAA,cAAA;AAChB,YAAAC,eAAqB,IAAIC,gBAAgB7N,SAAQI,MAAO;AACxD,UAAIuN,cAAc,MAAI;AACpBC,qBAAYjN,OAAQ4M,KAAK;AAAA,MAAC,OAAA;AAE1BK,qBAAYvK,IAAKkK,OAAOI,SAAS;AAAA,MAAC;AAEpC,YAAAG,aAAmBF,aAAYzC,SAAAA;AAAW,aACnC,GAAGnL,SAAQG,QAAS,GAAG2N,aAAA,IAAiBA,UAAU,KAA3B,EAAkC,GAAG9N,SAAQK,IAAK;AAAA,IAAE;AACnFc,MAAA,CAAA,IAAAnB,SAAAK;AAAAc,MAAA,CAAA,IAAAnB,SAAAG;AAAAgB,MAAA,CAAA,IAAAnB,SAAAI;AAAAe,WAAAoM;AAAApM,WAAAG;AAAAA,EAAA,OAAA;AAAAA,SAAAH,EAAA,CAAA;AAAA,EAAA;AATD,QAAA4M,YAAkBzM;AASjB,MAAAE;AAAA,MAAAL,EAAA,CAAA,MAAAnB,SAAAI,UAAAe,EAAA,CAAA,MAAAoM,SAAApM,EAAA,CAAA,MAAAqM,OAAA;AAEahM,SAAAgM,MAAM,IAAIK,gBAAgB7N,SAAQI,MAAO,EAACsC,IAAK6K,KAAK,CAAC;AAACpM,MAAA,CAAA,IAAAnB,SAAAI;AAAAe,WAAAoM;AAAApM,WAAAqM;AAAArM,WAAAK;AAAAA,EAAA,OAAA;AAAAA,SAAAL,EAAA,CAAA;AAAA,EAAA;AAApE,QAAA7C,QAAckD;AAAsD,MAAAC;AAAA,MAAAN,EAAA,CAAA,MAAA4M,aAAA5M,UAAAsM,UAAA;AAEhDhM,SAAAuM,CAAAA,gBAAA;AACbP,eAASM,UAAUJ,WAAS,GAAG;AAAA,QAAAM,SAAW;AAAA,MAAA,CAAM;AAAA,IAAC;AACvD9M,WAAA4M;AAAA5M,YAAAsM;AAAAtM,YAAAM;AAAAA,EAAA,OAAA;AAAAA,SAAAN,EAAA,EAAA;AAAA,EAAA;AAFD,QAAA+M,cAAoBzM;AAEnB,MAAAI;AAAA,MAAAV,EAAA,EAAA,MAAA4M,aAAA5M,UAAAsM,UAAA;AAEoB5L,SAAAA,MAAA;AACd4L,eAASM,UAAU,IAAI,GAAG;AAAA,QAAAE,SAAW;AAAA,MAAA,CAAM;AAAA,IAAC;AAClD9M,YAAA4M;AAAA5M,YAAAsM;AAAAtM,YAAAU;AAAAA,EAAA,OAAA;AAAAA,SAAAV,EAAA,EAAA;AAAA,EAAA;AAFD,QAAAgN,eAAqBtM;AAMX,QAAAM,KAAA7D,UAAU;AAAI,MAAA+D;AAAA,MAAAlB,EAAA,EAAA,MAAA4M,aAAA5M,EAAA,EAAA,MAAAgN,gBAAAhN,EAAA,EAAA,MAAA+M,eAAA/M,EAAA,EAAA,MAAAgB,MAAAhB,UAAA7C,OAAA;AAFjB+D,SAAA;AAAA,MAAA/D;AAAAA,MAAA8P,QAEGjM;AAAAA,MAAc4L;AAAAA,MAAAG;AAAAA,MAAAC;AAAAA,IAAAA;AAIvBhN,YAAA4M;AAAA5M,YAAAgN;AAAAhN,YAAA+M;AAAA/M,YAAAgB;AAAAhB,YAAA7C;AAAA6C,YAAAkB;AAAAA,EAAA,OAAA;AAAAA,SAAAlB,EAAA,EAAA;AAAA,EAAA;AAAA,SANMkB;AAMN;ACvBH,MAAMgM,eAAeA,CAACvP,QAAwBA,IAAIwP,YAAAA;AAElD,MAAMC,wBAAwBA,CAACtH,WAAwC;AACrE,QAAMsB,UAAUtB;AAChB,QAAMuH,UAAUjG,SAASiG;AAEzB,SACEjG,SAASkG,sBAAsB,QAC/BD,YAAY,WACZA,YAAY,cACZA,YAAY;AAEhB;AAEA,MAAME,yBAAyBA,CAAC7H,OAAsB8H,aAAwC;AAC5F,MAAIN,aAAaxH,MAAM/H,GAAG,MAAMuP,aAAaM,SAAS7P,GAAG,EAAG,QAAO;AAEnE,MAAI,OAAO6P,SAASC,QAAQ,WAAW;AACrC,UAAMC,SAAShI,MAAMiI,WAAWjI,MAAMkI;AACtC,QAAIF,WAAWF,SAASC,IAAK,QAAO;AAAA,EACtC;AACA,MAAI,OAAOD,SAASK,SAAS,aAAanI,MAAMkI,YAAYJ,SAASK,KAAM,QAAO;AAClF,MAAI,OAAOL,SAASxE,SAAS,aAAatD,MAAMiI,YAAYH,SAASxE,KAAM,QAAO;AAClF,MAAI,OAAOwE,SAASM,QAAQ,aAAapI,MAAMqI,WAAWP,SAASM,IAAK,QAAO;AAC/E,MAAI,OAAON,SAASQ,UAAU,aAAatI,MAAMuI,aAAaT,SAASQ,MAAO,QAAO;AAErF,SAAO;AACT;AAEA,MAAME,iBAAiBA,CAACC,IAA0D1P,SAAiB;AACjG,MAAI,CAAC0P,GAAI;AACT,OAAKvM,QAAQC,QAAQsM,GAAG1P,IAAI,CAAC;AAC/B;AAEO,MAAM2P,8BAA8BA,CAAC;AAAA,EAC1CZ;AAAAA,EACAa;AAAAA,EACAjQ;AAAAA,EACAkO;AAAAA,EACAgC,UAAU;AAAA,EACVvD,UAAU;AAAA,EACVwD,iBAAiB;AAAA,EACjBC,qBAAqB;AAAA,EACrBC,iBAAiBrB;AACiB,MAAY;AAC9C,QAAMsB,iBAAiBnC,YAAAA;AAEvB,QAAMoC,cAAc5N,OAAOyM,QAAQ;AACnC,QAAMoB,aAAa7N,OAAOsN,OAAO;AACjC,QAAMQ,cAAc9N,OAAO3C,QAAQ;AACnC,QAAM0Q,cAAc/N,OAAOuL,YAAYoC,cAAc;AACrD,QAAMK,aAAahO,OAAOuN,OAAO;AACjC,QAAMU,aAAajO,OAAOgK,OAAO;AACjC,QAAMkE,oBAAoBlO,OAAOwN,cAAc;AAC/C,QAAMW,wBAAwBnO,OAAOyN,kBAAkB;AACvD,QAAMW,oBAAoBpO,OAAO0N,cAAc;AAC/C,QAAMW,6BAA6BrO,OAAO,KAAK;AAE/C4N,cAAYrN,UAAUkM;AACtBoB,aAAWtN,UAAU+M;AACrBQ,cAAYvN,UAAUlD;AACtB0Q,cAAYxN,UAAUgL,YAAYoC;AAClCK,aAAWzN,UAAUgN;AACrBU,aAAW1N,UAAUyJ;AACrBkE,oBAAkB3N,UAAUiN;AAC5BW,wBAAsB5N,UAAUkN;AAChCW,oBAAkB7N,UAAUmN;AAE5B,MAAI,CAAC1D,WAAWuD,YAAY,SAAS;AACnCc,+BAA2B9N,UAAU;AAAA,EACvC;AAEA6F,YAAU,MAAM;AACd,QAAI,OAAOzI,WAAW,YAAa;AAEnC,UAAM2Q,YAAYA,CAAC3J,UAAyB;AAC1C,UAAI,CAACsJ,WAAW1N,QAAS;AACzB,UAAI4N,sBAAsB5N,WAAW6N,kBAAkB7N,QAAQoE,MAAMI,MAAM,EAAG;AAC9E,UAAIJ,MAAM4J,OAAQ;AAClB,UAAI,CAAC/B,uBAAuB7H,OAAOiJ,YAAYrN,OAAO,EAAG;AAEzD,UAAI2N,kBAAkB3N,SAAS;AAC7BoE,cAAM6I,eAAAA;AAAAA,MACR;AAEA,YAAM9P,OAAOmQ,WAAWtN,QAAAA;AACxB,UAAI,CAAC7C,KAAM;AAEXyP,qBAAeW,YAAYvN,SAAS7C,IAAI;AAExC,UAAIsQ,WAAWzN,YAAY,WAAW;AACpC4M,uBAAeY,YAAYxN,SAAS7C,IAAI;AACxC;AAAA,MACF;AAEA2Q,iCAA2B9N,UAAU;AAAA,IACvC;AAEA,UAAMiO,UAAUA,CAAC7J,YAAyB;AACxC,UAAI,CAACsJ,WAAW1N,QAAS;AACzB,UAAIyN,WAAWzN,YAAY,QAAS;AACpC,UAAI,CAAC8N,2BAA2B9N,QAAS;AACzC,UAAI4L,aAAaxH,QAAM/H,GAAG,MAAMuP,aAAayB,YAAYrN,QAAQ3D,GAAG,EAAG;AAEvEyR,iCAA2B9N,UAAU;AAErC,UAAI4N,sBAAsB5N,WAAW6N,kBAAkB7N,QAAQoE,QAAMI,MAAM,EAAG;AAE9E,UAAImJ,kBAAkB3N,SAAS;AAC7BoE,gBAAM6I,eAAAA;AAAAA,MACR;AAEA,YAAM9P,SAAOmQ,WAAWtN,QAAAA;AACxB,UAAI,CAAC7C,OAAM;AAEXyP,qBAAeY,YAAYxN,SAAS7C,MAAI;AAAA,IAC1C;AAEA,UAAM+Q,SAASA,MAAM;AACnBJ,iCAA2B9N,UAAU;AAAA,IACvC;AAEA5C,WAAO+Q,iBAAiB,WAAWJ,SAAS;AAC5C3Q,WAAO+Q,iBAAiB,SAASF,OAAO;AACxC7Q,WAAO+Q,iBAAiB,QAAQD,MAAM;AAEtC,WAAO,MAAM;AACX9Q,aAAOgR,oBAAoB,WAAWL,SAAS;AAC/C3Q,aAAOgR,oBAAoB,SAASH,OAAO;AAC3C7Q,aAAOgR,oBAAoB,QAAQF,MAAM;AAAA,IAC3C;AAAA,EACF,GAAG,CAAA,CAAE;AACP;"}
1
+ {"version":3,"file":"index.js","sources":["../src/routePrefetchHandles.ts","../src/routePrefetch.tsx","../src/Link.tsx","../src/lazyRoute.tsx","../src/useApplyMeta.tsx","../src/navigationGuards.ts","../src/queryOverlay.ts","../src/shortcutPrefetchNavigate.ts"],"sourcesContent":["export const ROUTE_MODULE_IMPORTER_HANDLE = \"__rpcbaseRouteModuleImporter\"\nexport const ROUTE_PREFETCH_DATA_HANDLE = \"prefetchData\"\n\nexport type RouteHandleObject = Record<string, unknown>\n\ntype RouteModuleImporter = () => Promise<unknown>\n\nconst isHandleObject = (value: unknown): value is RouteHandleObject =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n\nexport const getRouteModuleImporterFromHandle = (handle: unknown): RouteModuleImporter | null => {\n if (!isHandleObject(handle)) return null\n\n const importer = handle[ROUTE_MODULE_IMPORTER_HANDLE]\n return typeof importer === \"function\" ? (importer as RouteModuleImporter) : null\n}\n\nexport const getRoutePrefetchDataFromHandle = (\n handle: unknown,\n key = ROUTE_PREFETCH_DATA_HANDLE,\n): boolean | undefined => {\n if (!isHandleObject(handle)) return undefined\n\n const value = handle[key]\n return typeof value === \"boolean\" ? value : undefined\n}\n\nexport const mergeRouteHandle = (\n handle: unknown,\n {\n importer,\n prefetchData,\n prefetchDataKey = ROUTE_PREFETCH_DATA_HANDLE,\n }: {\n importer?: RouteModuleImporter\n prefetchData?: boolean\n prefetchDataKey?: string\n },\n): RouteHandleObject => {\n const nextHandle: RouteHandleObject = isHandleObject(handle) ? { ...handle } : {}\n\n if (importer) {\n nextHandle[ROUTE_MODULE_IMPORTER_HANDLE] = importer\n }\n\n if (typeof prefetchData === \"boolean\") {\n nextHandle[prefetchDataKey] = prefetchData\n }\n\n return nextHandle\n}\n","import { ReactNode, createContext, useContext, useRef } from \"react\"\nimport {\n UNSAFE_DataRouterContext,\n matchRoutes,\n type DataRouteObject,\n type DataRouter,\n} from \"react-router\"\n\nimport {\n ROUTE_PREFETCH_DATA_HANDLE,\n getRouteModuleImporterFromHandle,\n getRoutePrefetchDataFromHandle,\n} from \"./routePrefetchHandles\"\n\n\nexport type RoutePrefetchBehavior = \"intent\" | \"render\" | \"none\" | \"viewport\"\n\nexport type RoutePrefetchCallOptions = {\n prefetchCode?: boolean\n prefetchData?: boolean\n}\n\nexport type RoutePrefetchApi = {\n defaultPrefetch: RoutePrefetchBehavior\n prefetch: (href: string, opts?: RoutePrefetchCallOptions) => Promise<void>\n prefetchCode: (href: string) => Promise<void>\n prefetchData: (href: string) => Promise<void>\n}\n\ntype RoutePrefetchContextValue = RoutePrefetchApi\n\ntype PrefetchableRoute = DataRouteObject & {\n handle?: unknown\n lazy?: () => Promise<Record<string, unknown>>\n}\n\ntype RoutePrefetchProviderProps = {\n children: ReactNode\n defaultPrefetch?: RoutePrefetchBehavior\n dataPrefetchTtlMs?: number\n dataPrefetchHandleKey?: string\n}\n\ntype DataCacheValue = {\n expiresAt: number\n promise: Promise<void>\n}\n\nconst noop = async () => {}\n\nconst DEFAULT_PREFETCH_API: RoutePrefetchContextValue = {\n defaultPrefetch: \"none\",\n prefetch: noop,\n prefetchCode: noop,\n prefetchData: noop,\n}\n\nconst RoutePrefetchContext = createContext<RoutePrefetchContextValue>(DEFAULT_PREFETCH_API)\n\nconst normalizeHref = (href: string): { pathWithSearch: string; pathname: string; search: string; hash: string } | null => {\n if (typeof window === \"undefined\") return null\n\n try {\n const url = new URL(href, window.location.origin)\n if (url.origin !== window.location.origin) return null\n return {\n pathWithSearch: `${url.pathname}${url.search}`,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n }\n } catch {\n return null\n }\n}\n\nconst pruneDataCache = (cache: Map<string, DataCacheValue>, now: number): void => {\n cache.forEach((value, key) => {\n if (value.expiresAt <= now) {\n cache.delete(key)\n }\n })\n}\n\nconst resolveDataPrefetchFlag = (\n route: PrefetchableRoute,\n explicitPrefetchData: boolean | undefined,\n dataPrefetchHandleKey: string,\n): boolean => {\n if (typeof explicitPrefetchData === \"boolean\") {\n return explicitPrefetchData\n }\n\n const routeHandlePrefetchData = getRoutePrefetchDataFromHandle(route.handle, dataPrefetchHandleKey)\n if (typeof routeHandlePrefetchData === \"boolean\") {\n return routeHandlePrefetchData\n }\n\n return false\n}\n\nexport const RoutePrefetchProvider = ({\n children,\n defaultPrefetch = \"intent\",\n dataPrefetchTtlMs = 30000,\n dataPrefetchHandleKey = ROUTE_PREFETCH_DATA_HANDLE,\n}: RoutePrefetchProviderProps) => {\n const dataRouterContext = useContext(UNSAFE_DataRouterContext)\n const routeModuleCacheRef = useRef(new Map<string, Promise<Record<string, unknown> | null>>())\n const routeDataCacheRef = useRef(new Map<string, DataCacheValue>())\n\n const prefetchRouteModule = async (route: PrefetchableRoute): Promise<Record<string, unknown> | null> => {\n const routeId = route.id\n if (!routeId) return null\n\n const cached = routeModuleCacheRef.current.get(routeId)\n if (cached) {\n return cached\n }\n\n const lazyRouteLoader = typeof route.lazy === \"function\" ? route.lazy : null\n const routeModuleImporter = getRouteModuleImporterFromHandle(route.handle)\n if (!lazyRouteLoader && !routeModuleImporter) {\n return null\n }\n\n const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter!())\n .then((module) => {\n if (!module || typeof module !== \"object\") return null\n return module as Record<string, unknown>\n })\n .catch((error) => {\n routeModuleCacheRef.current.delete(routeId)\n throw error\n })\n\n routeModuleCacheRef.current.set(routeId, prefetchPromise)\n return prefetchPromise\n }\n\n const prefetchRouteData = async (router: DataRouter, route: PrefetchableRoute, href: string): Promise<void> => {\n const routeId = route.id\n if (!routeId) return\n\n const now = Date.now()\n pruneDataCache(routeDataCacheRef.current, now)\n\n const cacheKey = `${routeId}|${href}`\n const cached = routeDataCacheRef.current.get(cacheKey)\n if (cached && cached.expiresAt > now) {\n await cached.promise\n return\n }\n\n let hasLoader = typeof route.loader === \"function\"\n if (!hasLoader) {\n const loadedRouteModule = await prefetchRouteModule(route).catch(() => null)\n hasLoader = typeof loadedRouteModule?.loader === \"function\"\n }\n\n if (!hasLoader) return\n\n const fetcherKey = `rb:prefetch:${routeId}:${href}`\n\n const prefetchPromise = Promise.resolve(router.fetch(fetcherKey, routeId, href))\n .catch((error) => {\n routeDataCacheRef.current.delete(cacheKey)\n throw error\n })\n .finally(() => {\n try {\n router.deleteFetcher(fetcherKey)\n } catch {\n return\n }\n })\n\n const ttl = Math.max(1, dataPrefetchTtlMs)\n routeDataCacheRef.current.set(cacheKey, {\n expiresAt: now + ttl,\n promise: prefetchPromise,\n })\n\n await prefetchPromise\n }\n\n const prefetch = async (href: string, opts?: RoutePrefetchCallOptions): Promise<void> => {\n const normalized = normalizeHref(href)\n if (!normalized) return\n\n const currentPathWithSearch =\n typeof window === \"undefined\"\n ? \"\"\n : `${window.location.pathname}${window.location.search}`\n if (normalized.pathWithSearch === currentPathWithSearch) {\n return\n }\n\n const router = dataRouterContext?.router as DataRouter | undefined\n if (!router) return\n\n const matches = matchRoutes(\n router.routes,\n {\n pathname: normalized.pathname,\n search: normalized.search,\n hash: normalized.hash,\n },\n router.basename,\n )\n\n if (!matches || matches.length === 0) {\n return\n }\n\n const matchedRoutes = matches.map((match) => match.route as PrefetchableRoute)\n\n if (opts?.prefetchCode !== false) {\n await Promise.all(\n matchedRoutes.map(async (route) => {\n try {\n await prefetchRouteModule(route)\n } catch {\n return\n }\n }),\n )\n }\n\n await Promise.all(\n matchedRoutes.map(async (route) => {\n if (!resolveDataPrefetchFlag(route, opts?.prefetchData, dataPrefetchHandleKey)) {\n return\n }\n\n try {\n await prefetchRouteData(router, route, normalized.pathWithSearch)\n } catch {\n return\n }\n }),\n )\n }\n\n return (\n <RoutePrefetchContext.Provider\n value={{\n defaultPrefetch,\n prefetch,\n prefetchCode: async (href) => prefetch(href, { prefetchCode: true, prefetchData: false }),\n prefetchData: async (href) => prefetch(href, { prefetchCode: false, prefetchData: true }),\n }}\n >\n {children}\n </RoutePrefetchContext.Provider>\n )\n}\n\nexport const useRoutePrefetch = (): RoutePrefetchApi => useContext(RoutePrefetchContext)\n\nexport type { RoutePrefetchProviderProps }\n","import { forwardRef, useEffect, useRef, type Ref, type SyntheticEvent } from \"react\"\nimport { Link as RouterLink, type LinkProps as RouterLinkProps } from \"react-router\"\n\nimport { type RoutePrefetchBehavior, useRoutePrefetch } from \"./routePrefetch\"\n\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i\n\ntype LinkProps = Omit<RouterLinkProps, \"prefetch\"> & {\n prefetch?: RoutePrefetchBehavior\n prefetchData?: boolean\n}\n\nconst assignRef = <TValue,>(ref: Ref<TValue> | undefined, value: TValue) => {\n if (!ref) return\n if (typeof ref === \"function\") {\n ref(value)\n return\n }\n ref.current = value\n}\n\nconst composeEventHandlers = <TEvent extends SyntheticEvent>(\n theirHandler: ((event: TEvent) => void) | undefined,\n ourHandler: () => void,\n) => {\n return (event: TEvent) => {\n theirHandler?.(event)\n if (!event.defaultPrevented) {\n ourHandler()\n }\n }\n}\n\nconst shouldPrefetchLink = ({\n prefetch,\n reloadDocument,\n target,\n to,\n}: {\n prefetch: RoutePrefetchBehavior\n reloadDocument: boolean | undefined\n target: string | undefined\n to: RouterLinkProps[\"to\"]\n}): boolean => {\n if (prefetch === \"none\") return false\n if (reloadDocument) return false\n if (typeof target === \"string\" && target !== \"_self\") return false\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) return false\n return true\n}\n\nconst usePrefetchLink = (\n prefetchData: boolean | undefined,\n): {\n anchorRef: Ref<HTMLAnchorElement>\n prefetchHref: () => void\n getAnchorElement: () => HTMLAnchorElement | null\n} => {\n const localRef = useRef<HTMLAnchorElement | null>(null)\n const { prefetch } = useRoutePrefetch()\n\n return {\n anchorRef: (node) => {\n localRef.current = node\n },\n getAnchorElement: () => localRef.current,\n prefetchHref: () => {\n const href = localRef.current?.getAttribute(\"href\")\n if (!href) return\n void prefetch(href, { prefetchData })\n },\n }\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n prefetch: prefetchProp,\n prefetchData,\n onMouseEnter,\n onFocus,\n onTouchStart,\n reloadDocument,\n target,\n to,\n ...props\n },\n forwardedRef,\n ) => {\n const { defaultPrefetch } = useRoutePrefetch()\n const prefetchBehavior = prefetchProp ?? defaultPrefetch\n const viewportPrefetchedRef = useRef(false)\n const { anchorRef, prefetchHref, getAnchorElement } = usePrefetchLink(prefetchData)\n const canPrefetch = shouldPrefetchLink({\n prefetch: prefetchBehavior,\n reloadDocument,\n target,\n to,\n })\n\n useEffect(() => {\n viewportPrefetchedRef.current = false\n }, [to])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"render\") return\n prefetchHref()\n }, [canPrefetch, prefetchBehavior, prefetchHref])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"viewport\") return\n\n const element = getAnchorElement()\n if (!element || typeof IntersectionObserver === \"undefined\") return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const isVisible = entries.some((entry) => entry.isIntersecting)\n if (!isVisible || viewportPrefetchedRef.current) return\n viewportPrefetchedRef.current = true\n prefetchHref()\n },\n { threshold: 0.5 },\n )\n\n observer.observe(element)\n return () => {\n observer.disconnect()\n }\n }, [canPrefetch, prefetchBehavior, prefetchHref, getAnchorElement])\n\n const handleIntentPrefetch = () => {\n if (!canPrefetch || prefetchBehavior !== \"intent\") return\n prefetchHref()\n }\n\n return (\n <RouterLink\n {...props}\n to={to}\n target={target}\n reloadDocument={reloadDocument}\n prefetch=\"none\"\n onMouseEnter={composeEventHandlers(onMouseEnter, handleIntentPrefetch)}\n onFocus={composeEventHandlers(onFocus, handleIntentPrefetch)}\n onTouchStart={composeEventHandlers(onTouchStart, handleIntentPrefetch)}\n ref={(node) => {\n assignRef(forwardedRef, node)\n assignRef(anchorRef, node)\n }}\n />\n )\n },\n)\n\nLink.displayName = \"Link\"\n\nexport type { LinkProps }\n","import { LoaderFunction } from \"react-router\"\nimport { Loader } from \"@rpcbase/client\"\n\nimport { mergeRouteHandle, RouteHandleObject } from \"./routePrefetchHandles\"\n\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: Loader\n}\n\ntype RouteModuleImporter = () => Promise<RouteModule>\n\ntype RouteOptions = {\n handle?: unknown\n prefetchData?: boolean\n prefetchDataKey?: string\n}\n\ntype LazyRouteResult = {\n lazy: () => Promise<{\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n }>\n handle: RouteHandleObject\n}\n\nconst memoizeImporter = (importer: RouteModuleImporter): RouteModuleImporter => {\n let promise: Promise<RouteModule> | null = null\n\n return async () => {\n if (!promise) {\n promise = importer().catch((error) => {\n promise = null\n throw error\n })\n }\n\n return promise\n }\n}\n\nexport const lazyRoute = (importer: RouteModuleImporter, opts?: RouteOptions): LazyRouteResult => {\n const loadModule = memoizeImporter(importer)\n\n return {\n lazy: async () => {\n const module = await loadModule()\n const lazyRouteModule: {\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n } = {\n Component: module.default,\n }\n\n if (typeof module.loader === \"function\") {\n lazyRouteModule.loader = module.loader as unknown as LoaderFunction\n }\n\n return lazyRouteModule\n },\n handle: mergeRouteHandle(opts?.handle, {\n importer: loadModule,\n prefetchData: opts?.prefetchData,\n prefetchDataKey: opts?.prefetchDataKey,\n }),\n }\n}\n","import { useEffect } from \"react\"\nimport { useLocation } from \"react-router\"\n\n\ntype MetaAttributeValue = string | number | boolean | undefined\ntype MetaEntry = Record<string, MetaAttributeValue>\n\ntype PageMeta = {\n title: string\n meta: MetaEntry[]\n}\n\n\nexport const useApplyMeta = ({\n defaultTitle = \"\",\n defaultMeta = [],\n pagesMeta = {}\n}: {\n defaultTitle?: string\n defaultMeta?: MetaEntry[]\n pagesMeta?: Record<string, PageMeta>\n} = {}) => {\n const location = useLocation()\n\n useEffect(() => {\n const loadMeta = async () => {\n\n let pageMeta = pagesMeta[location.pathname]\n\n if (!pageMeta) {\n pageMeta = { title: defaultTitle, meta: defaultMeta }\n }\n\n document.title = pageMeta.title\n\n // Remove previous dynamically inserted tags\n document.querySelectorAll(\"[data-react-meta]\").forEach((tag) => tag.remove())\n\n // Inject new tags\n pageMeta.meta.forEach((meta) => {\n const metaElement = document.createElement(\"meta\")\n metaElement.setAttribute(\"data-react-meta\", \"true\")\n\n // Set all attributes from the meta object\n Object.entries(meta).forEach(([key, value]) => {\n if (value) {\n metaElement.setAttribute(key, value.toString())\n }\n })\n\n document.head.appendChild(metaElement)\n })\n\n // Update canonical link\n const canonicalUrl = `${window.location.origin}${location.pathname}`\n\n const existingCanonical = document.querySelector(\"link[rel=\\\"canonical\\\"]\")\n if (existingCanonical) {\n existingCanonical.remove()\n }\n\n const canonicalLink = document.createElement(\"link\")\n canonicalLink.setAttribute(\"rel\", \"canonical\")\n canonicalLink.setAttribute(\"href\", canonicalUrl)\n canonicalLink.setAttribute(\"data-react-meta\", \"true\")\n document.head.appendChild(canonicalLink)\n }\n\n loadMeta()\n }, [location.pathname, defaultTitle, defaultMeta, pagesMeta])\n}\n","import { useEffect, useRef } from \"react\"\nimport type { BlockerFunction } from \"react-router\"\n\n\nexport type NavigationGuard = {\n id: string\n enabled: boolean\n priority?: number\n message: string\n blockOnSearch?: boolean\n shouldBlockNavigation: BlockerFunction\n shouldBlockUnload: boolean\n}\n\ntype NavigationGuardsListener = () => void\n\ntype NavigationGuardsStore = {\n guards: Map<string, NavigationGuard>\n listeners: Set<NavigationGuardsListener>\n}\n\nconst NAVIGATION_GUARDS_STORE_KEY = \"__rpcbaseNavigationGuardsStore\"\n\nconst getNavigationGuardsStore = (): NavigationGuardsStore => {\n const globalAny = globalThis as {\n [NAVIGATION_GUARDS_STORE_KEY]?: NavigationGuardsStore\n }\n\n const existing = globalAny[NAVIGATION_GUARDS_STORE_KEY]\n if (existing) {\n return existing\n }\n\n const created: NavigationGuardsStore = {\n guards: new Map<string, NavigationGuard>(),\n listeners: new Set<NavigationGuardsListener>(),\n }\n\n globalAny[NAVIGATION_GUARDS_STORE_KEY] = created\n return created\n}\n\nconst notify = (): void => {\n getNavigationGuardsStore().listeners.forEach((listener) => {\n listener()\n })\n}\n\nconst isSameGuard = (a: NavigationGuard, b: NavigationGuard): boolean =>\n a.id === b.id &&\n a.enabled === b.enabled &&\n a.priority === b.priority &&\n a.message === b.message &&\n a.blockOnSearch === b.blockOnSearch &&\n a.shouldBlockNavigation === b.shouldBlockNavigation &&\n a.shouldBlockUnload === b.shouldBlockUnload\n\nexport const upsertNavigationGuard = (guard: NavigationGuard): void => {\n const guards = getNavigationGuardsStore().guards\n const prev = guards.get(guard.id)\n if (prev && isSameGuard(prev, guard)) {\n return\n }\n\n guards.set(guard.id, guard)\n notify()\n}\n\nexport const removeNavigationGuard = (id: string): void => {\n const guards = getNavigationGuardsStore().guards\n const didDelete = guards.delete(id)\n if (didDelete) {\n notify()\n }\n}\n\nexport const getNavigationGuards = (): NavigationGuard[] =>\n Array.from(getNavigationGuardsStore().guards.values())\n\nexport const subscribeNavigationGuards = (\n listener: NavigationGuardsListener,\n): (() => void) => {\n const listeners = getNavigationGuardsStore().listeners\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const useRegisterNavigationGuard = (guard: NavigationGuard): void => {\n const latestGuardRef = useRef(guard)\n latestGuardRef.current = guard\n\n const lastIdRef = useRef<string | null>(null)\n\n useEffect(() => {\n const lastId = lastIdRef.current\n if (lastId && lastId !== guard.id) {\n removeNavigationGuard(lastId)\n }\n lastIdRef.current = guard.id\n\n if (!guard.enabled) {\n removeNavigationGuard(guard.id)\n return\n }\n\n upsertNavigationGuard(latestGuardRef.current)\n return () => {\n removeNavigationGuard(guard.id)\n }\n }, [\n guard.id,\n guard.enabled,\n guard.message,\n guard.priority,\n guard.blockOnSearch,\n guard.shouldBlockNavigation,\n guard.shouldBlockUnload,\n ])\n}\n","import { useSyncExternalStore } from \"react\"\n\n\nexport type UseQueryOverlayOptions<TOverlay extends string> = {\n param: string\n parse: (value: string | null) => TOverlay | null\n}\n\nexport type QueryOverlayApi<TOverlay extends string> = {\n value: TOverlay | null\n isOpen: boolean\n buildHref: (nextValue: TOverlay | null) => string\n openOverlay: (nextValue: TOverlay) => void\n closeOverlay: () => void\n}\n\nconst QUERY_OVERLAY_URL_CHANGE_EVENT = \"rpcbase-query-overlay-url-change\"\n\nfunction getCurrentUrlSnapshot() {\n if (typeof window === \"undefined\") {\n return {\n pathname: \"\",\n search: \"\",\n hash: \"\",\n }\n }\n\n return {\n pathname: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n }\n}\n\nfunction getCurrentParamValue(param: string) {\n if (typeof window === \"undefined\") return null\n return new URLSearchParams(window.location.search).get(param)\n}\n\nfunction subscribeToQueryOverlayUrl(listener: () => void) {\n if (typeof window === \"undefined\") return () => undefined\n\n window.addEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener)\n window.addEventListener(\"popstate\", listener)\n return () => {\n window.removeEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener)\n window.removeEventListener(\"popstate\", listener)\n }\n}\n\nfunction buildUrl(searchParams: URLSearchParams) {\n const { pathname, hash } = getCurrentUrlSnapshot()\n const nextSearch = searchParams.toString()\n return `${pathname}${nextSearch ? `?${nextSearch}` : \"\"}${hash}`\n}\n\nexport function replaceQueryParams(update: (searchParams: URLSearchParams) => void) {\n if (typeof window === \"undefined\") return\n\n const { pathname, search, hash } = getCurrentUrlSnapshot()\n const searchParams = new URLSearchParams(search)\n update(searchParams)\n\n const nextUrl = buildUrl(searchParams)\n const currentUrl = `${pathname}${search}${hash}`\n if (nextUrl === currentUrl) return\n\n window.history.replaceState(window.history.state, \"\", nextUrl)\n window.dispatchEvent(new Event(QUERY_OVERLAY_URL_CHANGE_EVENT))\n}\n\nexport function useQueryParam(param: string): string | null {\n return useSyncExternalStore(\n subscribeToQueryOverlayUrl,\n () => getCurrentParamValue(param),\n () => null,\n )\n}\n\nexport const useQueryOverlay = <TOverlay extends string>({\n param,\n parse,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const rawValue = useQueryParam(param)\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(getCurrentUrlSnapshot().search)\n if (nextValue === null) {\n searchParams.delete(param)\n } else {\n searchParams.set(param, nextValue)\n }\n return buildUrl(searchParams)\n }\n\n const value = parse(rawValue)\n\n const openOverlay = (nextValue: TOverlay) => {\n replaceQueryParams((searchParams) => {\n searchParams.set(param, nextValue)\n })\n }\n\n const closeOverlay = () => {\n replaceQueryParams((searchParams) => {\n searchParams.delete(param)\n })\n }\n\n return {\n value,\n isOpen: value !== null,\n buildHref,\n openOverlay,\n closeOverlay,\n }\n}\n","import { useEffect, useRef } from \"react\"\nimport { useNavigate } from \"react-router\"\n\n\nexport type KeyboardShortcut = {\n key: string\n mod?: boolean\n ctrl?: boolean\n meta?: boolean\n alt?: boolean\n shift?: boolean\n}\n\nexport type ShortcutTrigger = \"keydown\" | \"keyup\"\n\nexport type UseShortcutPrefetchNavigateOptions = {\n shortcut: KeyboardShortcut\n getHref: () => string\n prefetch?: (href: string) => Promise<void> | void\n navigate?: (href: string) => Promise<void> | void\n trigger?: ShortcutTrigger\n enabled?: boolean\n preventDefault?: boolean\n ignoreTypingTarget?: boolean\n isTypingTarget?: (target: EventTarget | null) => boolean\n}\n\nconst normalizeKey = (key: string): string => key.toLowerCase()\n\nconst defaultIsTypingTarget = (target: EventTarget | null): boolean => {\n const element = target as HTMLElement | null\n const tagName = element?.tagName\n\n return (\n element?.isContentEditable === true ||\n tagName === \"INPUT\" ||\n tagName === \"TEXTAREA\" ||\n tagName === \"SELECT\"\n )\n}\n\nconst matchesShortcutKeyDown = (event: KeyboardEvent, shortcut: KeyboardShortcut): boolean => {\n if (normalizeKey(event.key) !== normalizeKey(shortcut.key)) return false\n\n if (typeof shortcut.mod === \"boolean\") {\n const hasMod = event.metaKey || event.ctrlKey\n if (hasMod !== shortcut.mod) return false\n }\n if (typeof shortcut.ctrl === \"boolean\" && event.ctrlKey !== shortcut.ctrl) return false\n if (typeof shortcut.meta === \"boolean\" && event.metaKey !== shortcut.meta) return false\n if (typeof shortcut.alt === \"boolean\" && event.altKey !== shortcut.alt) return false\n if (typeof shortcut.shift === \"boolean\" && event.shiftKey !== shortcut.shift) return false\n\n return true\n}\n\nconst callMaybeAsync = (fn: ((href: string) => Promise<void> | void) | undefined, href: string) => {\n if (!fn) return\n void Promise.resolve(fn(href))\n}\n\nexport const useShortcutPrefetchNavigate = ({\n shortcut,\n getHref,\n prefetch,\n navigate,\n trigger = \"keyup\",\n enabled = true,\n preventDefault = true,\n ignoreTypingTarget = true,\n isTypingTarget = defaultIsTypingTarget,\n}: UseShortcutPrefetchNavigateOptions): void => {\n const routerNavigate = useNavigate()\n\n const shortcutRef = useRef(shortcut)\n const getHrefRef = useRef(getHref)\n const prefetchRef = useRef(prefetch)\n const navigateRef = useRef(navigate ?? routerNavigate)\n const triggerRef = useRef(trigger)\n const enabledRef = useRef(enabled)\n const preventDefaultRef = useRef(preventDefault)\n const ignoreTypingTargetRef = useRef(ignoreTypingTarget)\n const isTypingTargetRef = useRef(isTypingTarget)\n const waitingForShortcutKeyUpRef = useRef(false)\n\n shortcutRef.current = shortcut\n getHrefRef.current = getHref\n prefetchRef.current = prefetch\n navigateRef.current = navigate ?? routerNavigate\n triggerRef.current = trigger\n enabledRef.current = enabled\n preventDefaultRef.current = preventDefault\n ignoreTypingTargetRef.current = ignoreTypingTarget\n isTypingTargetRef.current = isTypingTarget\n\n if (!enabled || trigger !== \"keyup\") {\n waitingForShortcutKeyUpRef.current = false\n }\n\n useEffect(() => {\n if (typeof window === \"undefined\") return\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!enabledRef.current) return\n if (ignoreTypingTargetRef.current && isTypingTargetRef.current(event.target)) return\n if (event.repeat) return\n if (!matchesShortcutKeyDown(event, shortcutRef.current)) return\n\n if (preventDefaultRef.current) {\n event.preventDefault()\n }\n\n const href = getHrefRef.current()\n if (!href) return\n\n callMaybeAsync(prefetchRef.current, href)\n\n if (triggerRef.current === \"keydown\") {\n callMaybeAsync(navigateRef.current, href)\n return\n }\n\n waitingForShortcutKeyUpRef.current = true\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!enabledRef.current) return\n if (triggerRef.current !== \"keyup\") return\n if (!waitingForShortcutKeyUpRef.current) return\n if (normalizeKey(event.key) !== normalizeKey(shortcutRef.current.key)) return\n\n waitingForShortcutKeyUpRef.current = false\n\n if (ignoreTypingTargetRef.current && isTypingTargetRef.current(event.target)) return\n\n if (preventDefaultRef.current) {\n event.preventDefault()\n }\n\n const href = getHrefRef.current()\n if (!href) return\n\n callMaybeAsync(navigateRef.current, href)\n }\n\n const onBlur = () => {\n waitingForShortcutKeyUpRef.current = false\n }\n\n window.addEventListener(\"keydown\", onKeyDown)\n window.addEventListener(\"keyup\", onKeyUp)\n window.addEventListener(\"blur\", onBlur)\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown)\n window.removeEventListener(\"keyup\", onKeyUp)\n window.removeEventListener(\"blur\", onBlur)\n }\n }, [])\n}\n"],"names":["ROUTE_MODULE_IMPORTER_HANDLE","ROUTE_PREFETCH_DATA_HANDLE","isHandleObject","value","Boolean","Array","isArray","getRouteModuleImporterFromHandle","handle","importer","getRoutePrefetchDataFromHandle","key","undefined","mergeRouteHandle","prefetchData","prefetchDataKey","nextHandle","noop","DEFAULT_PREFETCH_API","defaultPrefetch","prefetch","prefetchCode","RoutePrefetchContext","createContext","normalizeHref","href","window","url","URL","location","origin","pathWithSearch","pathname","search","hash","pruneDataCache","cache","now","forEach","expiresAt","delete","resolveDataPrefetchFlag","route","explicitPrefetchData","dataPrefetchHandleKey","routeHandlePrefetchData","RoutePrefetchProvider","t0","$","_c","children","t1","dataPrefetchTtlMs","t2","t3","dataRouterContext","useContext","UNSAFE_DataRouterContext","t4","Symbol","for","Map","routeModuleCacheRef","useRef","t5","routeDataCacheRef","t6","routeId","id","cached","current","get","lazyRouteLoader","lazy","routeModuleImporter","prefetchPromise","Promise","resolve","then","_temp","catch","error","set","prefetchRouteModule","t7","router","route_0","routeId_0","Date","cacheKey","cached_0","promise","hasLoader","loader","loadedRouteModule","_temp2","fetcherKey","prefetchPromise_0","fetch","error_0","finally","deleteFetcher","ttl","Math","max","prefetchRouteData","t8","href_0","opts","normalized","currentPathWithSearch","router_0","matches","matchRoutes","routes","basename","length","matchedRoutes","map","_temp3","all","route_1","route_2","t10","t9","href_1","href_2","t11","t12","useRoutePrefetch","module","match","ABSOLUTE_URL_REGEX","assignRef","ref","composeEventHandlers","theirHandler","ourHandler","event","defaultPrevented","shouldPrefetchLink","reloadDocument","target","to","test","usePrefetchLink","localRef","node","anchorRef","getAnchorElement","prefetchHref","getAttribute","Link","forwardRef","forwardedRef","onFocus","onMouseEnter","onTouchStart","prefetchProp","props","prefetchBehavior","viewportPrefetchedRef","canPrefetch","useEffect","element","IntersectionObserver","observer","entries","isVisible","some","threshold","observe","disconnect","handleIntentPrefetch","t13","RouterLink","displayName","entry","isIntersecting","memoizeImporter","lazyRoute","loadModule","lazyRouteModule","Component","default","useApplyMeta","defaultTitle","defaultMeta","pagesMeta","useLocation","loadMeta","pageMeta","meta","document","title","querySelectorAll","canonicalUrl","existingCanonical","querySelector","remove","canonicalLink","createElement","setAttribute","head","appendChild","tag","metaElement","Object","toString","NAVIGATION_GUARDS_STORE_KEY","getNavigationGuardsStore","globalAny","globalThis","existing","created","guards","listeners","Set","notify","listener","isSameGuard","a","b","enabled","priority","message","blockOnSearch","shouldBlockNavigation","shouldBlockUnload","upsertNavigationGuard","guard","prev","removeNavigationGuard","didDelete","getNavigationGuards","from","values","subscribeNavigationGuards","add","useRegisterNavigationGuard","latestGuardRef","lastIdRef","lastId","QUERY_OVERLAY_URL_CHANGE_EVENT","getCurrentUrlSnapshot","getCurrentParamValue","param","URLSearchParams","subscribeToQueryOverlayUrl","addEventListener","removeEventListener","buildUrl","searchParams","nextSearch","replaceQueryParams","update","nextUrl","currentUrl","history","replaceState","state","dispatchEvent","Event","useQueryParam","useSyncExternalStore","useQueryOverlay","parse","rawValue","nextValue","buildHref","nextValue_0","searchParams_0","openOverlay","searchParams_1","closeOverlay","isOpen","normalizeKey","toLowerCase","defaultIsTypingTarget","tagName","isContentEditable","matchesShortcutKeyDown","shortcut","mod","hasMod","metaKey","ctrlKey","ctrl","alt","altKey","shift","shiftKey","callMaybeAsync","fn","useShortcutPrefetchNavigate","getHref","navigate","trigger","preventDefault","ignoreTypingTarget","isTypingTarget","routerNavigate","useNavigate","shortcutRef","getHrefRef","prefetchRef","navigateRef","triggerRef","enabledRef","preventDefaultRef","ignoreTypingTargetRef","isTypingTargetRef","waitingForShortcutKeyUpRef","onKeyDown","repeat","onKeyUp","onBlur"],"mappings":"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"}
@@ -9,5 +9,7 @@ export type QueryOverlayApi<TOverlay extends string> = {
9
9
  openOverlay: (nextValue: TOverlay) => void;
10
10
  closeOverlay: () => void;
11
11
  };
12
+ export declare function replaceQueryParams(update: (searchParams: URLSearchParams) => void): void;
13
+ export declare function useQueryParam(param: string): string | null;
12
14
  export declare const useQueryOverlay: <TOverlay extends string>({ param, parse, }: UseQueryOverlayOptions<TOverlay>) => QueryOverlayApi<TOverlay>;
13
15
  //# sourceMappingURL=queryOverlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryOverlay.d.ts","sourceRoot":"","sources":["../src/queryOverlay.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,CAAC,QAAQ,SAAS,MAAM,IAAI;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,MAAM,IAAI;IACrD,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAA;IACjD,WAAW,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,MAAM,EAAE,mBAGtD,sBAAsB,CAAC,QAAQ,CAAC,KAAG,eAAe,CAAC,QAAQ,CAgC7D,CAAA"}
1
+ {"version":3,"file":"queryOverlay.d.ts","sourceRoot":"","sources":["../src/queryOverlay.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,CAAC,QAAQ,SAAS,MAAM,IAAI;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,MAAM,IAAI;IACrD,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAA;IACjD,WAAW,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB,CAAA;AA0CD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,QAajF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM1D;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,MAAM,EAAE,mBAGtD,sBAAsB,CAAC,QAAQ,CAAC,KAAG,eAAe,CAAC,QAAQ,CAkC7D,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/router",
3
- "version": "0.120.0",
3
+ "version": "0.122.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -26,7 +26,11 @@
26
26
  },
27
27
  "build-watch": {
28
28
  "command": "../../node_modules/.bin/vite build --watch",
29
- "service": true
29
+ "service": {
30
+ "readyWhen": {
31
+ "lineMatches": "^built in .*\\.$"
32
+ }
33
+ }
30
34
  },
31
35
  "release": {
32
36
  "command": "../../scripts/publish.js",