@rpcbase/router 0.132.0 → 0.133.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/dist/Link.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { LinkProps as RouterLinkProps } from 'react-router';
2
+ import { RoutePrefetchBehavior } from './routePrefetch';
3
+ type LinkProps = Omit<RouterLinkProps, "prefetch"> & {
4
+ prefetch?: RoutePrefetchBehavior;
5
+ prefetchData?: boolean;
6
+ };
7
+ export declare const Link: import('react').ForwardRefExoticComponent<Omit<RouterLinkProps, "prefetch"> & {
8
+ prefetch?: RoutePrefetchBehavior;
9
+ prefetchData?: boolean;
10
+ } & import('react').RefAttributes<HTMLAnchorElement>>;
11
+ export type { LinkProps };
12
+ //# sourceMappingURL=Link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,SAAS,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AAEpF,OAAO,EAAE,KAAK,qBAAqB,EAAoB,MAAM,iBAAiB,CAAA;AAK9E,KAAK,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IACnD,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAgED,eAAO,MAAM,IAAI;eAlEJ,qBAAqB;mBACjB,OAAO;qDAgJvB,CAAA;AAID,YAAY,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,10 @@
1
+ export * from 'react-router';
2
+ export { Link } from './Link';
3
+ export type { LinkProps } from './Link';
4
+ export * from './lazyRoute';
5
+ export * from './useApplyMeta';
6
+ export * from './navigationGuards';
7
+ export * from './routePrefetch';
8
+ export * from './queryOverlay';
9
+ export * from './shortcutPrefetchNavigate';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,4BAA4B,CAAA"}
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 { useContext, useEffect, useRef, useState, useSyncExternalStore } from \"react\"\nimport { UNSAFE_LocationContext } 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 UseQueryOverlayLifecycleOptions = {\n closeDelayMs?: number\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 type QueryOverlayLifecycleApi = {\n isOpen: boolean\n shouldRender: boolean\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type OptimisticQueryOverlayApi<TOverlay extends string> =\n Omit<QueryOverlayApi<TOverlay>, \"isOpen\" | \"closeOverlay\" | \"openOverlay\"> &\n QueryOverlayLifecycleApi & {\n openOverlay: (nextValue: TOverlay) => void\n }\n\nconst QUERY_OVERLAY_URL_CHANGE_EVENT = \"rpcbase-query-overlay-url-change\"\n\ntype UrlSnapshot = {\n pathname: string\n search: string\n hash: string\n}\n\nfunction getCurrentUrlSnapshot(fallback?: UrlSnapshot): UrlSnapshot {\n if (typeof window === \"undefined\") {\n return fallback ?? { pathname: \"\", search: \"\", hash: \"\" }\n }\n\n return {\n pathname: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n }\n}\n\nfunction getParamValueFromSearch(search: string, param: string) {\n return new URLSearchParams(search).get(param)\n}\n\nfunction useRouterUrlSnapshot(): UrlSnapshot | undefined {\n const context = useContext(UNSAFE_LocationContext)\n const location = context?.location\n if (!location) return undefined\n return {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n }\n}\n\nfunction getCurrentParamValue(param: string) {\n if (typeof window === \"undefined\") return null\n return getParamValueFromSearch(window.location.search, 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, fallback?: UrlSnapshot) {\n const { pathname, hash } = getCurrentUrlSnapshot(fallback)\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 const routerUrlSnapshot = useRouterUrlSnapshot()\n return useSyncExternalStore(\n subscribeToQueryOverlayUrl,\n () => getCurrentParamValue(param),\n () => getParamValueFromSearch(routerUrlSnapshot?.search ?? \"\", param),\n )\n}\n\nexport function useQueryOverlayLifecycle(\n isUrlOpen: boolean,\n closeUrlOverlay: () => void,\n options: UseQueryOverlayLifecycleOptions = {},\n): QueryOverlayLifecycleApi {\n const closeDelayMs = options.closeDelayMs ?? 0\n const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false)\n const closeTimeoutRef = useRef<number | null>(null)\n\n const clearScheduledClose = () => {\n if (closeTimeoutRef.current === null) return\n window.clearTimeout(closeTimeoutRef.current)\n closeTimeoutRef.current = null\n }\n\n const resetOptimisticClose = () => {\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }\n\n useEffect(() => {\n if (isUrlOpen) {\n setIsOptimisticallyClosed(false)\n return\n }\n\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }, [isUrlOpen])\n\n useEffect(() => {\n return () => {\n clearScheduledClose()\n }\n }, [])\n\n const closeOverlay = () => {\n if (!isUrlOpen) return\n\n setIsOptimisticallyClosed(true)\n clearScheduledClose()\n\n if (typeof window === \"undefined\") {\n closeUrlOverlay()\n return\n }\n\n closeTimeoutRef.current = window.setTimeout(() => {\n closeTimeoutRef.current = null\n closeUrlOverlay()\n }, closeDelayMs)\n }\n\n return {\n isOpen: isUrlOpen && !isOptimisticallyClosed,\n shouldRender: isUrlOpen,\n closeOverlay,\n resetOptimisticClose,\n }\n}\n\nexport const useQueryOverlay = <TOverlay extends string>({\n param,\n parse,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n const rawValue = useQueryParam(param)\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search)\n if (nextValue === null) {\n searchParams.delete(param)\n } else {\n searchParams.set(param, nextValue)\n }\n return buildUrl(searchParams, routerUrlSnapshot)\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\nexport const useOptimisticQueryOverlay = <TOverlay extends string>({\n closeDelayMs,\n ...options\n}: UseQueryOverlayOptions<TOverlay> & UseQueryOverlayLifecycleOptions): OptimisticQueryOverlayApi<TOverlay> => {\n const overlay = useQueryOverlay(options)\n const lifecycle = useQueryOverlayLifecycle(overlay.value !== null, overlay.closeOverlay, { closeDelayMs })\n\n const openOverlay = (nextValue: TOverlay) => {\n lifecycle.resetOptimisticClose()\n overlay.openOverlay(nextValue)\n }\n\n return {\n value: overlay.value,\n isOpen: lifecycle.isOpen,\n shouldRender: lifecycle.shouldRender,\n buildHref: overlay.buildHref,\n openOverlay,\n closeOverlay: lifecycle.closeOverlay,\n resetOptimisticClose: lifecycle.resetOptimisticClose,\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","fallback","getParamValueFromSearch","param","URLSearchParams","useRouterUrlSnapshot","context","UNSAFE_LocationContext","getCurrentParamValue","subscribeToQueryOverlayUrl","addEventListener","removeEventListener","buildUrl","searchParams","nextSearch","replaceQueryParams","update","nextUrl","currentUrl","history","replaceState","state","dispatchEvent","Event","useQueryParam","routerUrlSnapshot","useSyncExternalStore","useQueryOverlayLifecycle","isUrlOpen","closeUrlOverlay","options","closeDelayMs","isOptimisticallyClosed","setIsOptimisticallyClosed","useState","closeTimeoutRef","clearTimeout","clearScheduledClose","resetOptimisticClose","setTimeout","closeOverlay","isOpen","shouldRender","useQueryOverlay","parse","rawValue","nextValue","buildHref","nextValue_0","searchParams_0","openOverlay","searchParams_1","useOptimisticQueryOverlay","overlay","lifecycle","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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"}
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\"\n\nimport { mergeRouteHandle, RouteHandleObject } from \"./routePrefetchHandles\"\n\n\ntype RouteModuleLoader = (...args: any[]) => unknown\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: RouteModuleLoader\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 { useContext, useEffect, useRef, useState, useSyncExternalStore } from \"react\"\nimport { UNSAFE_LocationContext } 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 UseQueryOverlayLifecycleOptions = {\n closeDelayMs?: number\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 type QueryOverlayLifecycleApi = {\n isOpen: boolean\n shouldRender: boolean\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type OptimisticQueryOverlayApi<TOverlay extends string> =\n Omit<QueryOverlayApi<TOverlay>, \"isOpen\" | \"closeOverlay\" | \"openOverlay\"> &\n QueryOverlayLifecycleApi & {\n openOverlay: (nextValue: TOverlay) => void\n }\n\nconst QUERY_OVERLAY_URL_CHANGE_EVENT = \"rpcbase-query-overlay-url-change\"\n\ntype UrlSnapshot = {\n pathname: string\n search: string\n hash: string\n}\n\nfunction getCurrentUrlSnapshot(fallback?: UrlSnapshot): UrlSnapshot {\n if (typeof window === \"undefined\") {\n return fallback ?? { pathname: \"\", search: \"\", hash: \"\" }\n }\n\n return {\n pathname: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n }\n}\n\nfunction getParamValueFromSearch(search: string, param: string) {\n return new URLSearchParams(search).get(param)\n}\n\nfunction useRouterUrlSnapshot(): UrlSnapshot | undefined {\n const context = useContext(UNSAFE_LocationContext)\n const location = context?.location\n if (!location) return undefined\n return {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n }\n}\n\nfunction getCurrentParamValue(param: string) {\n if (typeof window === \"undefined\") return null\n return getParamValueFromSearch(window.location.search, 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, fallback?: UrlSnapshot) {\n const { pathname, hash } = getCurrentUrlSnapshot(fallback)\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 const routerUrlSnapshot = useRouterUrlSnapshot()\n return useSyncExternalStore(\n subscribeToQueryOverlayUrl,\n () => getCurrentParamValue(param),\n () => getParamValueFromSearch(routerUrlSnapshot?.search ?? \"\", param),\n )\n}\n\nexport function useQueryOverlayLifecycle(\n isUrlOpen: boolean,\n closeUrlOverlay: () => void,\n options: UseQueryOverlayLifecycleOptions = {},\n): QueryOverlayLifecycleApi {\n const closeDelayMs = options.closeDelayMs ?? 0\n const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false)\n const closeTimeoutRef = useRef<number | null>(null)\n\n const clearScheduledClose = () => {\n if (closeTimeoutRef.current === null) return\n window.clearTimeout(closeTimeoutRef.current)\n closeTimeoutRef.current = null\n }\n\n const resetOptimisticClose = () => {\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }\n\n useEffect(() => {\n if (isUrlOpen) {\n setIsOptimisticallyClosed(false)\n return\n }\n\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }, [isUrlOpen])\n\n useEffect(() => {\n return () => {\n clearScheduledClose()\n }\n }, [])\n\n const closeOverlay = () => {\n if (!isUrlOpen) return\n\n setIsOptimisticallyClosed(true)\n clearScheduledClose()\n\n if (typeof window === \"undefined\") {\n closeUrlOverlay()\n return\n }\n\n closeTimeoutRef.current = window.setTimeout(() => {\n closeTimeoutRef.current = null\n closeUrlOverlay()\n }, closeDelayMs)\n }\n\n return {\n isOpen: isUrlOpen && !isOptimisticallyClosed,\n shouldRender: isUrlOpen,\n closeOverlay,\n resetOptimisticClose,\n }\n}\n\nexport const useQueryOverlay = <TOverlay extends string>({\n param,\n parse,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n const rawValue = useQueryParam(param)\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search)\n if (nextValue === null) {\n searchParams.delete(param)\n } else {\n searchParams.set(param, nextValue)\n }\n return buildUrl(searchParams, routerUrlSnapshot)\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\nexport const useOptimisticQueryOverlay = <TOverlay extends string>({\n closeDelayMs,\n ...options\n}: UseQueryOverlayOptions<TOverlay> & UseQueryOverlayLifecycleOptions): OptimisticQueryOverlayApi<TOverlay> => {\n const overlay = useQueryOverlay(options)\n const lifecycle = useQueryOverlayLifecycle(overlay.value !== null, overlay.closeOverlay, { closeDelayMs })\n\n const openOverlay = (nextValue: TOverlay) => {\n lifecycle.resetOptimisticClose()\n overlay.openOverlay(nextValue)\n }\n\n return {\n value: overlay.value,\n isOpen: lifecycle.isOpen,\n shouldRender: lifecycle.shouldRender,\n buildHref: overlay.buildHref,\n openOverlay,\n closeOverlay: lifecycle.closeOverlay,\n resetOptimisticClose: lifecycle.resetOptimisticClose,\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","fallback","getParamValueFromSearch","param","URLSearchParams","useRouterUrlSnapshot","context","UNSAFE_LocationContext","getCurrentParamValue","subscribeToQueryOverlayUrl","addEventListener","removeEventListener","buildUrl","searchParams","nextSearch","replaceQueryParams","update","nextUrl","currentUrl","history","replaceState","state","dispatchEvent","Event","useQueryParam","routerUrlSnapshot","useSyncExternalStore","useQueryOverlayLifecycle","isUrlOpen","closeUrlOverlay","options","closeDelayMs","isOptimisticallyClosed","setIsOptimisticallyClosed","useState","closeTimeoutRef","clearTimeout","clearScheduledClose","resetOptimisticClose","setTimeout","closeOverlay","isOpen","shouldRender","useQueryOverlay","parse","rawValue","nextValue","buildHref","nextValue_0","searchParams_0","openOverlay","searchParams_1","useOptimisticQueryOverlay","overlay","lifecycle","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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"}
@@ -0,0 +1,23 @@
1
+ import { LoaderFunction } from 'react-router';
2
+ import { RouteHandleObject } from './routePrefetchHandles';
3
+ type RouteModuleLoader = (...args: any[]) => unknown;
4
+ type RouteModule = {
5
+ default: React.ComponentType<unknown>;
6
+ loader?: RouteModuleLoader;
7
+ };
8
+ type RouteModuleImporter = () => Promise<RouteModule>;
9
+ type RouteOptions = {
10
+ handle?: unknown;
11
+ prefetchData?: boolean;
12
+ prefetchDataKey?: string;
13
+ };
14
+ type LazyRouteResult = {
15
+ lazy: () => Promise<{
16
+ Component: React.ComponentType<unknown>;
17
+ loader?: LoaderFunction;
18
+ }>;
19
+ handle: RouteHandleObject;
20
+ };
21
+ export declare const lazyRoute: (importer: RouteModuleImporter, opts?: RouteOptions) => LazyRouteResult;
22
+ export {};
23
+ //# sourceMappingURL=lazyRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazyRoute.d.ts","sourceRoot":"","sources":["../src/lazyRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAoB,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG5E,KAAK,iBAAiB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAA;AAEpD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B,CAAA;AAED,KAAK,mBAAmB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;AAErD,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,OAAO,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,cAAc,CAAA;KACxB,CAAC,CAAA;IACF,MAAM,EAAE,iBAAiB,CAAA;CAC1B,CAAA;AAiBD,eAAO,MAAM,SAAS,GAAI,UAAU,mBAAmB,EAAE,OAAO,YAAY,KAAG,eAyB9E,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { BlockerFunction } from 'react-router';
2
+ export type NavigationGuard = {
3
+ id: string;
4
+ enabled: boolean;
5
+ priority?: number;
6
+ message: string;
7
+ blockOnSearch?: boolean;
8
+ shouldBlockNavigation: BlockerFunction;
9
+ shouldBlockUnload: boolean;
10
+ };
11
+ type NavigationGuardsListener = () => void;
12
+ export declare const upsertNavigationGuard: (guard: NavigationGuard) => void;
13
+ export declare const removeNavigationGuard: (id: string) => void;
14
+ export declare const getNavigationGuards: () => NavigationGuard[];
15
+ export declare const subscribeNavigationGuards: (listener: NavigationGuardsListener) => (() => void);
16
+ export declare const useRegisterNavigationGuard: (guard: NavigationGuard) => void;
17
+ export {};
18
+ //# sourceMappingURL=navigationGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigationGuards.d.ts","sourceRoot":"","sources":["../src/navigationGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGnD,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,qBAAqB,EAAE,eAAe,CAAA;IACtC,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,KAAK,wBAAwB,GAAG,MAAM,IAAI,CAAA;AA2C1C,eAAO,MAAM,qBAAqB,GAAI,OAAO,eAAe,KAAG,IAS9D,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,IAAI,MAAM,KAAG,IAMlD,CAAA;AAED,eAAO,MAAM,mBAAmB,QAAO,eAAe,EACE,CAAA;AAExD,eAAO,MAAM,yBAAyB,GACpC,UAAU,wBAAwB,KACjC,CAAC,MAAM,IAAI,CAMb,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,OAAO,eAAe,KAAG,IA+BnE,CAAA"}
@@ -0,0 +1,29 @@
1
+ export type UseQueryOverlayOptions<TOverlay extends string> = {
2
+ param: string;
3
+ parse: (value: string | null) => TOverlay | null;
4
+ };
5
+ export type UseQueryOverlayLifecycleOptions = {
6
+ closeDelayMs?: number;
7
+ };
8
+ export type QueryOverlayApi<TOverlay extends string> = {
9
+ value: TOverlay | null;
10
+ isOpen: boolean;
11
+ buildHref: (nextValue: TOverlay | null) => string;
12
+ openOverlay: (nextValue: TOverlay) => void;
13
+ closeOverlay: () => void;
14
+ };
15
+ export type QueryOverlayLifecycleApi = {
16
+ isOpen: boolean;
17
+ shouldRender: boolean;
18
+ closeOverlay: () => void;
19
+ resetOptimisticClose: () => void;
20
+ };
21
+ export type OptimisticQueryOverlayApi<TOverlay extends string> = Omit<QueryOverlayApi<TOverlay>, "isOpen" | "closeOverlay" | "openOverlay"> & QueryOverlayLifecycleApi & {
22
+ openOverlay: (nextValue: TOverlay) => void;
23
+ };
24
+ export declare function replaceQueryParams(update: (searchParams: URLSearchParams) => void): void;
25
+ export declare function useQueryParam(param: string): string | null;
26
+ export declare function useQueryOverlayLifecycle(isUrlOpen: boolean, closeUrlOverlay: () => void, options?: UseQueryOverlayLifecycleOptions): QueryOverlayLifecycleApi;
27
+ export declare const useQueryOverlay: <TOverlay extends string>({ param, parse, }: UseQueryOverlayOptions<TOverlay>) => QueryOverlayApi<TOverlay>;
28
+ export declare const useOptimisticQueryOverlay: <TOverlay extends string>({ closeDelayMs, ...options }: UseQueryOverlayOptions<TOverlay> & UseQueryOverlayLifecycleOptions) => OptimisticQueryOverlayApi<TOverlay>;
29
+ //# sourceMappingURL=queryOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryOverlay.d.ts","sourceRoot":"","sources":["../src/queryOverlay.ts"],"names":[],"mappings":"AAIA,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,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,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,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,oBAAoB,EAAE,MAAM,IAAI,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,yBAAyB,CAAC,QAAQ,SAAS,MAAM,IAC3D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,aAAa,CAAC,GAC1E,wBAAwB,GAAG;IACzB,WAAW,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAA;CAC3C,CAAA;AA2DH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,QAajF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,OAAO,EAClB,eAAe,EAAE,MAAM,IAAI,EAC3B,OAAO,GAAE,+BAAoC,GAC5C,wBAAwB,CAuD1B;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,MAAM,EAAE,mBAGtD,sBAAsB,CAAC,QAAQ,CAAC,KAAG,eAAe,CAAC,QAAQ,CAmC7D,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,QAAQ,SAAS,MAAM,EAAE,8BAGhE,sBAAsB,CAAC,QAAQ,CAAC,GAAG,+BAA+B,KAAG,yBAAyB,CAAC,QAAQ,CAkBzG,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+ export type RoutePrefetchBehavior = "intent" | "render" | "none" | "viewport";
3
+ export type RoutePrefetchCallOptions = {
4
+ prefetchCode?: boolean;
5
+ prefetchData?: boolean;
6
+ };
7
+ export type RoutePrefetchApi = {
8
+ defaultPrefetch: RoutePrefetchBehavior;
9
+ prefetch: (href: string, opts?: RoutePrefetchCallOptions) => Promise<void>;
10
+ prefetchCode: (href: string) => Promise<void>;
11
+ prefetchData: (href: string) => Promise<void>;
12
+ };
13
+ type RoutePrefetchProviderProps = {
14
+ children: ReactNode;
15
+ defaultPrefetch?: RoutePrefetchBehavior;
16
+ dataPrefetchTtlMs?: number;
17
+ dataPrefetchHandleKey?: string;
18
+ };
19
+ export declare const RoutePrefetchProvider: ({ children, defaultPrefetch, dataPrefetchTtlMs, dataPrefetchHandleKey, }: RoutePrefetchProviderProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const useRoutePrefetch: () => RoutePrefetchApi;
21
+ export type { RoutePrefetchProviderProps };
22
+ //# sourceMappingURL=routePrefetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routePrefetch.d.ts","sourceRoot":"","sources":["../src/routePrefetch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqC,MAAM,OAAO,CAAA;AAepE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7E,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,qBAAqB,CAAA;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9C,CAAA;AASD,KAAK,0BAA0B,GAAG;IAChC,QAAQ,EAAE,SAAS,CAAA;IACnB,eAAe,CAAC,EAAE,qBAAqB,CAAA;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AA4DD,eAAO,MAAM,qBAAqB,GAAI,0EAKnC,0BAA0B,4CAsJ5B,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,gBAAoD,CAAA;AAExF,YAAY,EAAE,0BAA0B,EAAE,CAAA"}
@@ -0,0 +1,13 @@
1
+ export declare const ROUTE_MODULE_IMPORTER_HANDLE = "__rpcbaseRouteModuleImporter";
2
+ export declare const ROUTE_PREFETCH_DATA_HANDLE = "prefetchData";
3
+ export type RouteHandleObject = Record<string, unknown>;
4
+ type RouteModuleImporter = () => Promise<unknown>;
5
+ export declare const getRouteModuleImporterFromHandle: (handle: unknown) => RouteModuleImporter | null;
6
+ export declare const getRoutePrefetchDataFromHandle: (handle: unknown, key?: string) => boolean | undefined;
7
+ export declare const mergeRouteHandle: (handle: unknown, { importer, prefetchData, prefetchDataKey, }: {
8
+ importer?: RouteModuleImporter;
9
+ prefetchData?: boolean;
10
+ prefetchDataKey?: string;
11
+ }) => RouteHandleObject;
12
+ export {};
13
+ //# sourceMappingURL=routePrefetchHandles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routePrefetchHandles.d.ts","sourceRoot":"","sources":["../src/routePrefetchHandles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,iCAAiC,CAAA;AAC1E,eAAO,MAAM,0BAA0B,iBAAiB,CAAA;AAExD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEvD,KAAK,mBAAmB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AAKjD,eAAO,MAAM,gCAAgC,GAAI,QAAQ,OAAO,KAAG,mBAAmB,GAAG,IAKxF,CAAA;AAED,eAAO,MAAM,8BAA8B,GACzC,QAAQ,OAAO,EACf,YAAgC,KAC/B,OAAO,GAAG,SAKZ,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,OAAO,EACf,8CAIG;IACD,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,KACA,iBAYF,CAAA"}
@@ -0,0 +1,22 @@
1
+ export type KeyboardShortcut = {
2
+ key: string;
3
+ mod?: boolean;
4
+ ctrl?: boolean;
5
+ meta?: boolean;
6
+ alt?: boolean;
7
+ shift?: boolean;
8
+ };
9
+ export type ShortcutTrigger = "keydown" | "keyup";
10
+ export type UseShortcutPrefetchNavigateOptions = {
11
+ shortcut: KeyboardShortcut;
12
+ getHref: () => string;
13
+ prefetch?: (href: string) => Promise<void> | void;
14
+ navigate?: (href: string) => Promise<void> | void;
15
+ trigger?: ShortcutTrigger;
16
+ enabled?: boolean;
17
+ preventDefault?: boolean;
18
+ ignoreTypingTarget?: boolean;
19
+ isTypingTarget?: (target: EventTarget | null) => boolean;
20
+ };
21
+ export declare const useShortcutPrefetchNavigate: ({ shortcut, getHref, prefetch, navigate, trigger, enabled, preventDefault, ignoreTypingTarget, isTypingTarget, }: UseShortcutPrefetchNavigateOptions) => void;
22
+ //# sourceMappingURL=shortcutPrefetchNavigate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcutPrefetchNavigate.d.ts","sourceRoot":"","sources":["../src/shortcutPrefetchNavigate.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,CAAA;AAEjD,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjD,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,OAAO,CAAA;CACzD,CAAA;AAoCD,eAAO,MAAM,2BAA2B,GAAI,kHAUzC,kCAAkC,KAAG,IAwFvC,CAAA"}
@@ -0,0 +1,13 @@
1
+ type MetaAttributeValue = string | number | boolean | undefined;
2
+ type MetaEntry = Record<string, MetaAttributeValue>;
3
+ type PageMeta = {
4
+ title: string;
5
+ meta: MetaEntry[];
6
+ };
7
+ export declare const useApplyMeta: ({ defaultTitle, defaultMeta, pagesMeta }?: {
8
+ defaultTitle?: string;
9
+ defaultMeta?: MetaEntry[];
10
+ pagesMeta?: Record<string, PageMeta>;
11
+ }) => void;
12
+ export {};
13
+ //# sourceMappingURL=useApplyMeta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApplyMeta.d.ts","sourceRoot":"","sources":["../src/useApplyMeta.tsx"],"names":[],"mappings":"AAIA,KAAK,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAC/D,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;AAEnD,KAAK,QAAQ,GAAG;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,2CAI1B;IACD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAChC,SAiDL,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/router",
3
- "version": "0.132.0",
3
+ "version": "0.133.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"