@rpcbase/router 0.165.0 → 0.167.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/index.js +189 -393
- package/dist/index.js.map +1 -1
- package/dist/routePrefetch.d.ts +1 -1
- package/dist/routePrefetch.d.ts.map +1 -1
- package/package.json +4 -1
package/dist/index.js
CHANGED
|
@@ -59,178 +59,109 @@ var resolveDataPrefetchFlag = (route, explicitPrefetchData, dataPrefetchHandleKe
|
|
|
59
59
|
if (typeof routeHandlePrefetchData === "boolean") return routeHandlePrefetchData;
|
|
60
60
|
return false;
|
|
61
61
|
};
|
|
62
|
-
var RoutePrefetchProvider = (
|
|
63
|
-
const $ = c(20);
|
|
64
|
-
const { children, defaultPrefetch: t1, dataPrefetchTtlMs: t2, dataPrefetchHandleKey: t3 } = t0;
|
|
65
|
-
const defaultPrefetch = t1 === void 0 ? "intent" : t1;
|
|
66
|
-
const dataPrefetchTtlMs = t2 === void 0 ? 3e4 : t2;
|
|
67
|
-
const dataPrefetchHandleKey = t3 === void 0 ? ROUTE_PREFETCH_DATA_HANDLE : t3;
|
|
62
|
+
var RoutePrefetchProvider = ({ children, defaultPrefetch = "intent", dataPrefetchTtlMs = 3e4, dataPrefetchHandleKey = ROUTE_PREFETCH_DATA_HANDLE }) => {
|
|
68
63
|
const dataRouterContext = useContext(UNSAFE_DataRouterContext);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
await cached_0.promise;
|
|
64
|
+
const routeModuleCacheRef = useRef(/* @__PURE__ */ new Map());
|
|
65
|
+
const routeDataCacheRef = useRef(/* @__PURE__ */ new Map());
|
|
66
|
+
const prefetchRouteModule = async (route) => {
|
|
67
|
+
const routeId = route.id;
|
|
68
|
+
if (!routeId) return null;
|
|
69
|
+
const cached = routeModuleCacheRef.current.get(routeId);
|
|
70
|
+
if (cached) return cached;
|
|
71
|
+
const lazyRouteLoader = typeof route.lazy === "function" ? route.lazy : null;
|
|
72
|
+
const routeModuleImporter = getRouteModuleImporterFromHandle(route.handle);
|
|
73
|
+
if (!lazyRouteLoader && !routeModuleImporter) return null;
|
|
74
|
+
const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter()).then((module) => {
|
|
75
|
+
if (!module || typeof module !== "object") return null;
|
|
76
|
+
return module;
|
|
77
|
+
}).catch((error) => {
|
|
78
|
+
routeModuleCacheRef.current.delete(routeId);
|
|
79
|
+
throw error;
|
|
80
|
+
});
|
|
81
|
+
routeModuleCacheRef.current.set(routeId, prefetchPromise);
|
|
82
|
+
return prefetchPromise;
|
|
83
|
+
};
|
|
84
|
+
const prefetchRouteData = async (router, route_0, href) => {
|
|
85
|
+
const routeId_0 = route_0.id;
|
|
86
|
+
if (!routeId_0) return;
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
pruneDataCache(routeDataCacheRef.current, now);
|
|
89
|
+
const cacheKey = `${routeId_0}|${href}`;
|
|
90
|
+
const cached_0 = routeDataCacheRef.current.get(cacheKey);
|
|
91
|
+
if (cached_0 && cached_0.expiresAt > now) {
|
|
92
|
+
await cached_0.promise;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let hasLoader = typeof route_0.loader === "function";
|
|
96
|
+
if (!hasLoader) hasLoader = typeof (await prefetchRouteModule(route_0).catch(() => null))?.loader === "function";
|
|
97
|
+
if (!hasLoader) return;
|
|
98
|
+
const fetcherKey = `rb:prefetch:${routeId_0}:${href}`;
|
|
99
|
+
const prefetchPromise_0 = Promise.resolve(router.fetch(fetcherKey, routeId_0, href)).catch((error_0) => {
|
|
100
|
+
routeDataCacheRef.current.delete(cacheKey);
|
|
101
|
+
throw error_0;
|
|
102
|
+
}).finally(() => {
|
|
103
|
+
try {
|
|
104
|
+
router.deleteFetcher(fetcherKey);
|
|
105
|
+
} catch {
|
|
112
106
|
return;
|
|
113
107
|
}
|
|
114
|
-
let hasLoader = typeof route_0.loader === "function";
|
|
115
|
-
if (!hasLoader) hasLoader = typeof (await prefetchRouteModule(route_0).catch(_temp2$1))?.loader === "function";
|
|
116
|
-
if (!hasLoader) return;
|
|
117
|
-
const fetcherKey = `rb:prefetch:${routeId_0}:${href}`;
|
|
118
|
-
const prefetchPromise_0 = Promise.resolve(router.fetch(fetcherKey, routeId_0, href)).catch((error_0) => {
|
|
119
|
-
routeDataCacheRef.current.delete(cacheKey);
|
|
120
|
-
throw error_0;
|
|
121
|
-
}).finally(() => {
|
|
122
|
-
try {
|
|
123
|
-
router.deleteFetcher(fetcherKey);
|
|
124
|
-
} catch {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
const ttl = Math.max(1, dataPrefetchTtlMs);
|
|
129
|
-
routeDataCacheRef.current.set(cacheKey, {
|
|
130
|
-
expiresAt: now + ttl,
|
|
131
|
-
promise: prefetchPromise_0
|
|
132
|
-
});
|
|
133
|
-
await prefetchPromise_0;
|
|
134
|
-
};
|
|
135
|
-
$[3] = dataPrefetchTtlMs;
|
|
136
|
-
$[4] = t7;
|
|
137
|
-
} else t7 = $[4];
|
|
138
|
-
const prefetchRouteData = t7;
|
|
139
|
-
let t8;
|
|
140
|
-
if ($[5] !== dataPrefetchHandleKey || $[6] !== dataRouterContext?.router || $[7] !== prefetchRouteData) {
|
|
141
|
-
t8 = async (href_0, opts) => {
|
|
142
|
-
const normalized = normalizeHref(href_0);
|
|
143
|
-
if (!normalized) return;
|
|
144
|
-
const currentPathWithSearch = typeof window === "undefined" ? "" : `${window.location.pathname}${window.location.search}`;
|
|
145
|
-
if (normalized.pathWithSearch === currentPathWithSearch) return;
|
|
146
|
-
const router_0 = dataRouterContext?.router;
|
|
147
|
-
if (!router_0) return;
|
|
148
|
-
const matches = matchRoutes(router_0.routes, {
|
|
149
|
-
pathname: normalized.pathname,
|
|
150
|
-
search: normalized.search,
|
|
151
|
-
hash: normalized.hash
|
|
152
|
-
}, router_0.basename);
|
|
153
|
-
if (!matches || matches.length === 0) return;
|
|
154
|
-
const matchedRoutes = matches.map(_temp3);
|
|
155
|
-
if (opts?.prefetchCode !== false) await Promise.all(matchedRoutes.map(async (route_1) => {
|
|
156
|
-
try {
|
|
157
|
-
await prefetchRouteModule(route_1);
|
|
158
|
-
} catch {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
}));
|
|
162
|
-
await Promise.all(matchedRoutes.map(async (route_2) => {
|
|
163
|
-
if (!resolveDataPrefetchFlag(route_2, opts?.prefetchData, dataPrefetchHandleKey)) return;
|
|
164
|
-
try {
|
|
165
|
-
await prefetchRouteData(router_0, route_2, normalized.pathWithSearch);
|
|
166
|
-
} catch {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
}));
|
|
170
|
-
};
|
|
171
|
-
$[5] = dataPrefetchHandleKey;
|
|
172
|
-
$[6] = dataRouterContext?.router;
|
|
173
|
-
$[7] = prefetchRouteData;
|
|
174
|
-
$[8] = t8;
|
|
175
|
-
} else t8 = $[8];
|
|
176
|
-
const prefetch = t8;
|
|
177
|
-
let t10;
|
|
178
|
-
let t9;
|
|
179
|
-
if ($[9] !== prefetch) {
|
|
180
|
-
t9 = async (href_1) => prefetch(href_1, {
|
|
181
|
-
prefetchCode: true,
|
|
182
|
-
prefetchData: false
|
|
183
108
|
});
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
109
|
+
const ttl = Math.max(1, dataPrefetchTtlMs);
|
|
110
|
+
routeDataCacheRef.current.set(cacheKey, {
|
|
111
|
+
expiresAt: now + ttl,
|
|
112
|
+
promise: prefetchPromise_0
|
|
187
113
|
});
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
114
|
+
await prefetchPromise_0;
|
|
115
|
+
};
|
|
116
|
+
const prefetch = async (href_0, opts) => {
|
|
117
|
+
const normalized = normalizeHref(href_0);
|
|
118
|
+
if (!normalized) return;
|
|
119
|
+
const currentPathWithSearch = typeof window === "undefined" ? "" : `${window.location.pathname}${window.location.search}`;
|
|
120
|
+
if (normalized.pathWithSearch === currentPathWithSearch) return;
|
|
121
|
+
const router_0 = dataRouterContext?.router;
|
|
122
|
+
if (!router_0) return;
|
|
123
|
+
const matches = matchRoutes(router_0.routes, {
|
|
124
|
+
pathname: normalized.pathname,
|
|
125
|
+
search: normalized.search,
|
|
126
|
+
hash: normalized.hash
|
|
127
|
+
}, router_0.basename);
|
|
128
|
+
if (!matches || matches.length === 0) return;
|
|
129
|
+
const matchedRoutes = matches.map((match) => match.route);
|
|
130
|
+
if (opts?.prefetchCode !== false) await Promise.all(matchedRoutes.map(async (route_1) => {
|
|
131
|
+
try {
|
|
132
|
+
await prefetchRouteModule(route_1);
|
|
133
|
+
} catch {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
}));
|
|
137
|
+
await Promise.all(matchedRoutes.map(async (route_2) => {
|
|
138
|
+
if (!resolveDataPrefetchFlag(route_2, opts?.prefetchData, dataPrefetchHandleKey)) return;
|
|
139
|
+
try {
|
|
140
|
+
await prefetchRouteData(router_0, route_2, normalized.pathWithSearch);
|
|
141
|
+
} catch {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
}));
|
|
145
|
+
};
|
|
146
|
+
return /* @__PURE__ */ jsx(RoutePrefetchContext.Provider, {
|
|
147
|
+
value: {
|
|
198
148
|
defaultPrefetch,
|
|
199
149
|
prefetch,
|
|
200
|
-
prefetchCode:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
t12 = /* @__PURE__ */ jsx(RoutePrefetchContext.Provider, {
|
|
212
|
-
value: t11,
|
|
213
|
-
children
|
|
214
|
-
});
|
|
215
|
-
$[17] = children;
|
|
216
|
-
$[18] = t11;
|
|
217
|
-
$[19] = t12;
|
|
218
|
-
} else t12 = $[19];
|
|
219
|
-
return t12;
|
|
150
|
+
prefetchCode: async (href_1) => prefetch(href_1, {
|
|
151
|
+
prefetchCode: true,
|
|
152
|
+
prefetchData: false
|
|
153
|
+
}),
|
|
154
|
+
prefetchData: async (href_2) => prefetch(href_2, {
|
|
155
|
+
prefetchCode: false,
|
|
156
|
+
prefetchData: true
|
|
157
|
+
})
|
|
158
|
+
},
|
|
159
|
+
children
|
|
160
|
+
});
|
|
220
161
|
};
|
|
221
162
|
var useRoutePrefetch = () => {
|
|
222
163
|
return useContext(RoutePrefetchContext);
|
|
223
164
|
};
|
|
224
|
-
function _temp$2(module) {
|
|
225
|
-
if (!module || typeof module !== "object") return null;
|
|
226
|
-
return module;
|
|
227
|
-
}
|
|
228
|
-
function _temp2$1() {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
function _temp3(match) {
|
|
232
|
-
return match.route;
|
|
233
|
-
}
|
|
234
165
|
//#endregion
|
|
235
166
|
//#region src/Link.tsx
|
|
236
167
|
var ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
@@ -386,7 +317,7 @@ var Link = forwardRef((t0, forwardedRef) => {
|
|
|
386
317
|
const element = getAnchorElement();
|
|
387
318
|
if (!element || typeof IntersectionObserver === "undefined") return;
|
|
388
319
|
const observer = new IntersectionObserver((entries) => {
|
|
389
|
-
if (!entries.some(_temp
|
|
320
|
+
if (!entries.some(_temp) || viewportPrefetchedRef.current) return;
|
|
390
321
|
viewportPrefetchedRef.current = true;
|
|
391
322
|
prefetchHref();
|
|
392
323
|
}, { threshold: .5 });
|
|
@@ -481,7 +412,7 @@ var Link = forwardRef((t0, forwardedRef) => {
|
|
|
481
412
|
return t13;
|
|
482
413
|
});
|
|
483
414
|
Link.displayName = "Link";
|
|
484
|
-
function _temp
|
|
415
|
+
function _temp(entry) {
|
|
485
416
|
return entry.isIntersecting;
|
|
486
417
|
}
|
|
487
418
|
//#endregion
|
|
@@ -514,85 +445,42 @@ var lazyRoute = (importer, opts) => {
|
|
|
514
445
|
};
|
|
515
446
|
//#endregion
|
|
516
447
|
//#region src/useApplyMeta.tsx
|
|
517
|
-
var useApplyMeta = (
|
|
518
|
-
const $ = c(12);
|
|
519
|
-
let t1;
|
|
520
|
-
if ($[0] !== t0) {
|
|
521
|
-
t1 = t0 === void 0 ? {} : t0;
|
|
522
|
-
$[0] = t0;
|
|
523
|
-
$[1] = t1;
|
|
524
|
-
} else t1 = $[1];
|
|
525
|
-
const { defaultTitle: t2, defaultMeta: t3, pagesMeta: t4 } = t1;
|
|
526
|
-
const defaultTitle = t2 === void 0 ? "" : t2;
|
|
527
|
-
let t5;
|
|
528
|
-
if ($[2] !== t3) {
|
|
529
|
-
t5 = t3 === void 0 ? [] : t3;
|
|
530
|
-
$[2] = t3;
|
|
531
|
-
$[3] = t5;
|
|
532
|
-
} else t5 = $[3];
|
|
533
|
-
const defaultMeta = t5;
|
|
534
|
-
let t6;
|
|
535
|
-
if ($[4] !== t4) {
|
|
536
|
-
t6 = t4 === void 0 ? {} : t4;
|
|
537
|
-
$[4] = t4;
|
|
538
|
-
$[5] = t6;
|
|
539
|
-
} else t6 = $[5];
|
|
540
|
-
const pagesMeta = t6;
|
|
448
|
+
var useApplyMeta = ({ defaultTitle = "", defaultMeta = [], pagesMeta = {} } = {}) => {
|
|
541
449
|
const location = useLocation();
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
if (!pageMeta) pageMeta = {
|
|
549
|
-
title: defaultTitle,
|
|
550
|
-
meta: defaultMeta
|
|
551
|
-
};
|
|
552
|
-
document.title = pageMeta.title;
|
|
553
|
-
document.querySelectorAll("[data-react-meta]").forEach(_temp);
|
|
554
|
-
pageMeta.meta.forEach(_temp2);
|
|
555
|
-
const canonicalUrl = `${window.location.origin}${location.pathname}`;
|
|
556
|
-
const existingCanonical = document.querySelector("link[rel=\"canonical\"]");
|
|
557
|
-
if (existingCanonical) existingCanonical.remove();
|
|
558
|
-
const canonicalLink = document.createElement("link");
|
|
559
|
-
canonicalLink.setAttribute("rel", "canonical");
|
|
560
|
-
canonicalLink.setAttribute("href", canonicalUrl);
|
|
561
|
-
canonicalLink.setAttribute("data-react-meta", "true");
|
|
562
|
-
document.head.appendChild(canonicalLink);
|
|
450
|
+
useEffect(() => {
|
|
451
|
+
const loadMeta = async () => {
|
|
452
|
+
let pageMeta = pagesMeta[location.pathname];
|
|
453
|
+
if (!pageMeta) pageMeta = {
|
|
454
|
+
title: defaultTitle,
|
|
455
|
+
meta: defaultMeta
|
|
563
456
|
};
|
|
564
|
-
|
|
457
|
+
document.title = pageMeta.title;
|
|
458
|
+
document.querySelectorAll("[data-react-meta]").forEach((tag) => tag.remove());
|
|
459
|
+
pageMeta.meta.forEach((meta) => {
|
|
460
|
+
const metaElement = document.createElement("meta");
|
|
461
|
+
metaElement.setAttribute("data-react-meta", "true");
|
|
462
|
+
Object.entries(meta).forEach(([key, value]) => {
|
|
463
|
+
if (value) metaElement.setAttribute(key, value.toString());
|
|
464
|
+
});
|
|
465
|
+
document.head.appendChild(metaElement);
|
|
466
|
+
});
|
|
467
|
+
const canonicalUrl = `${window.location.origin}${location.pathname}`;
|
|
468
|
+
const existingCanonical = document.querySelector("link[rel=\"canonical\"]");
|
|
469
|
+
if (existingCanonical) existingCanonical.remove();
|
|
470
|
+
const canonicalLink = document.createElement("link");
|
|
471
|
+
canonicalLink.setAttribute("rel", "canonical");
|
|
472
|
+
canonicalLink.setAttribute("href", canonicalUrl);
|
|
473
|
+
canonicalLink.setAttribute("data-react-meta", "true");
|
|
474
|
+
document.head.appendChild(canonicalLink);
|
|
565
475
|
};
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
$[7] = defaultTitle;
|
|
574
|
-
$[8] = location.pathname;
|
|
575
|
-
$[9] = pagesMeta;
|
|
576
|
-
$[10] = t7;
|
|
577
|
-
$[11] = t8;
|
|
578
|
-
} else {
|
|
579
|
-
t7 = $[10];
|
|
580
|
-
t8 = $[11];
|
|
581
|
-
}
|
|
582
|
-
useEffect(t7, t8);
|
|
476
|
+
loadMeta();
|
|
477
|
+
}, [
|
|
478
|
+
location.pathname,
|
|
479
|
+
defaultTitle,
|
|
480
|
+
defaultMeta,
|
|
481
|
+
pagesMeta
|
|
482
|
+
]);
|
|
583
483
|
};
|
|
584
|
-
function _temp(tag) {
|
|
585
|
-
return tag.remove();
|
|
586
|
-
}
|
|
587
|
-
function _temp2(meta) {
|
|
588
|
-
const metaElement = document.createElement("meta");
|
|
589
|
-
metaElement.setAttribute("data-react-meta", "true");
|
|
590
|
-
Object.entries(meta).forEach((t0) => {
|
|
591
|
-
const [key, value] = t0;
|
|
592
|
-
if (value) metaElement.setAttribute(key, value.toString());
|
|
593
|
-
});
|
|
594
|
-
document.head.appendChild(metaElement);
|
|
595
|
-
}
|
|
596
484
|
//#endregion
|
|
597
485
|
//#region src/navigationGuards.ts
|
|
598
486
|
var NAVIGATION_GUARDS_STORE_KEY = "__rpcbaseNavigationGuardsStore";
|
|
@@ -862,169 +750,76 @@ function useQuerySearch() {
|
|
|
862
750
|
} else t0 = $[1];
|
|
863
751
|
return useSyncExternalStore(subscribeToQueryOverlayUrl, getCurrentSearch, t0);
|
|
864
752
|
}
|
|
865
|
-
var useQueryOverlay = (
|
|
866
|
-
const $ = c(38);
|
|
867
|
-
const { params, parse, write, clear, closeDelayMs: t1 } = t0;
|
|
868
|
-
const closeDelayMs = t1 === void 0 ? 0 : t1;
|
|
753
|
+
var useQueryOverlay = ({ params, parse, write, clear, closeDelayMs = 0 }) => {
|
|
869
754
|
const routerUrlSnapshot = useRouterUrlSnapshot();
|
|
870
755
|
const search = useQuerySearch();
|
|
871
756
|
const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false);
|
|
872
757
|
const closeTimeoutRef = useRef(null);
|
|
873
|
-
|
|
874
|
-
if ($[0] !== parse || $[1] !== search) {
|
|
875
|
-
t2 = parse(new URLSearchParams(search));
|
|
876
|
-
$[0] = parse;
|
|
877
|
-
$[1] = search;
|
|
878
|
-
$[2] = t2;
|
|
879
|
-
} else t2 = $[2];
|
|
880
|
-
const value = t2;
|
|
758
|
+
const value = parse(new URLSearchParams(search));
|
|
881
759
|
const isUrlOpen = value !== null;
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
760
|
+
const overlayUrlStateKey = buildOverlayUrlStateKey(search, params);
|
|
761
|
+
const clearScheduledClose = () => {
|
|
762
|
+
if (closeTimeoutRef.current === null) return;
|
|
763
|
+
window.clearTimeout(closeTimeoutRef.current);
|
|
764
|
+
closeTimeoutRef.current = null;
|
|
765
|
+
};
|
|
766
|
+
const resetOptimisticClose = () => {
|
|
767
|
+
clearScheduledClose();
|
|
768
|
+
setIsOptimisticallyClosed(false);
|
|
769
|
+
};
|
|
770
|
+
const closeUrlOverlay = () => {
|
|
771
|
+
replaceQueryParams((searchParams) => {
|
|
772
|
+
clearOverlaySearchParams(searchParams, params, clear);
|
|
773
|
+
});
|
|
774
|
+
};
|
|
775
|
+
const buildHref = (nextValue) => {
|
|
776
|
+
const searchParams_0 = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search);
|
|
777
|
+
clearOverlaySearchParams(searchParams_0, params, clear);
|
|
778
|
+
if (nextValue !== null) write(searchParams_0, nextValue);
|
|
779
|
+
return buildUrl(searchParams_0, routerUrlSnapshot);
|
|
780
|
+
};
|
|
781
|
+
const openOverlay = (nextValue_0) => {
|
|
782
|
+
resetOptimisticClose();
|
|
783
|
+
replaceQueryParams((searchParams_1) => {
|
|
784
|
+
clearOverlaySearchParams(searchParams_1, params, clear);
|
|
785
|
+
write(searchParams_1, nextValue_0);
|
|
786
|
+
});
|
|
787
|
+
};
|
|
788
|
+
const closeOverlay = () => {
|
|
789
|
+
if (!isUrlOpen) return;
|
|
790
|
+
setIsOptimisticallyClosed(true);
|
|
791
|
+
clearScheduledClose();
|
|
792
|
+
if (typeof window === "undefined" || closeDelayMs <= 0) {
|
|
793
|
+
closeUrlOverlay();
|
|
794
|
+
return;
|
|
795
|
+
}
|
|
796
|
+
closeTimeoutRef.current = window.setTimeout(() => {
|
|
895
797
|
closeTimeoutRef.current = null;
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
902
|
-
t5 = () => {
|
|
903
|
-
clearScheduledClose();
|
|
904
|
-
setIsOptimisticallyClosed(false);
|
|
905
|
-
};
|
|
906
|
-
$[7] = t5;
|
|
907
|
-
} else t5 = $[7];
|
|
908
|
-
const resetOptimisticClose = t5;
|
|
909
|
-
let t6;
|
|
910
|
-
if ($[8] !== clear || $[9] !== params) {
|
|
911
|
-
t6 = () => {
|
|
912
|
-
replaceQueryParams((searchParams) => {
|
|
913
|
-
clearOverlaySearchParams(searchParams, params, clear);
|
|
914
|
-
});
|
|
915
|
-
};
|
|
916
|
-
$[8] = clear;
|
|
917
|
-
$[9] = params;
|
|
918
|
-
$[10] = t6;
|
|
919
|
-
} else t6 = $[10];
|
|
920
|
-
const closeUrlOverlay = t6;
|
|
921
|
-
let t7;
|
|
922
|
-
if ($[11] !== clear || $[12] !== params || $[13] !== routerUrlSnapshot || $[14] !== write) {
|
|
923
|
-
t7 = (nextValue) => {
|
|
924
|
-
const searchParams_0 = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search);
|
|
925
|
-
clearOverlaySearchParams(searchParams_0, params, clear);
|
|
926
|
-
if (nextValue !== null) write(searchParams_0, nextValue);
|
|
927
|
-
return buildUrl(searchParams_0, routerUrlSnapshot);
|
|
928
|
-
};
|
|
929
|
-
$[11] = clear;
|
|
930
|
-
$[12] = params;
|
|
931
|
-
$[13] = routerUrlSnapshot;
|
|
932
|
-
$[14] = write;
|
|
933
|
-
$[15] = t7;
|
|
934
|
-
} else t7 = $[15];
|
|
935
|
-
const buildHref = t7;
|
|
936
|
-
let t8;
|
|
937
|
-
if ($[16] !== clear || $[17] !== params || $[18] !== write) {
|
|
938
|
-
t8 = (nextValue_0) => {
|
|
939
|
-
resetOptimisticClose();
|
|
940
|
-
replaceQueryParams((searchParams_1) => {
|
|
941
|
-
clearOverlaySearchParams(searchParams_1, params, clear);
|
|
942
|
-
write(searchParams_1, nextValue_0);
|
|
943
|
-
});
|
|
944
|
-
};
|
|
945
|
-
$[16] = clear;
|
|
946
|
-
$[17] = params;
|
|
947
|
-
$[18] = write;
|
|
948
|
-
$[19] = t8;
|
|
949
|
-
} else t8 = $[19];
|
|
950
|
-
const openOverlay = t8;
|
|
951
|
-
let t9;
|
|
952
|
-
if ($[20] !== closeDelayMs || $[21] !== closeUrlOverlay || $[22] !== isUrlOpen) {
|
|
953
|
-
t9 = () => {
|
|
954
|
-
if (!isUrlOpen) return;
|
|
955
|
-
setIsOptimisticallyClosed(true);
|
|
956
|
-
clearScheduledClose();
|
|
957
|
-
if (typeof window === "undefined" || closeDelayMs <= 0) {
|
|
958
|
-
closeUrlOverlay();
|
|
959
|
-
return;
|
|
960
|
-
}
|
|
961
|
-
closeTimeoutRef.current = window.setTimeout(() => {
|
|
962
|
-
closeTimeoutRef.current = null;
|
|
963
|
-
closeUrlOverlay();
|
|
964
|
-
}, closeDelayMs);
|
|
965
|
-
};
|
|
966
|
-
$[20] = closeDelayMs;
|
|
967
|
-
$[21] = closeUrlOverlay;
|
|
968
|
-
$[22] = isUrlOpen;
|
|
969
|
-
$[23] = t9;
|
|
970
|
-
} else t9 = $[23];
|
|
971
|
-
const closeOverlay = t9;
|
|
972
|
-
let t10;
|
|
973
|
-
if ($[24] !== isUrlOpen) {
|
|
974
|
-
t10 = () => {
|
|
975
|
-
if (isUrlOpen) {
|
|
976
|
-
setIsOptimisticallyClosed(false);
|
|
977
|
-
return;
|
|
978
|
-
}
|
|
979
|
-
clearScheduledClose();
|
|
798
|
+
closeUrlOverlay();
|
|
799
|
+
}, closeDelayMs);
|
|
800
|
+
};
|
|
801
|
+
useEffect(() => {
|
|
802
|
+
if (isUrlOpen) {
|
|
980
803
|
setIsOptimisticallyClosed(false);
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
$[26] = isUrlOpen;
|
|
989
|
-
$[27] = overlayUrlStateKey;
|
|
990
|
-
$[28] = t11;
|
|
991
|
-
} else t11 = $[28];
|
|
992
|
-
useEffect(t10, t11);
|
|
993
|
-
let t12;
|
|
994
|
-
let t13;
|
|
995
|
-
if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
|
|
996
|
-
t12 = () => () => {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
clearScheduledClose();
|
|
807
|
+
setIsOptimisticallyClosed(false);
|
|
808
|
+
}, [isUrlOpen, overlayUrlStateKey]);
|
|
809
|
+
useEffect(() => {
|
|
810
|
+
return () => {
|
|
997
811
|
clearScheduledClose();
|
|
998
812
|
};
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
if ($[31] !== buildHref || $[32] !== closeOverlay || $[33] !== isUrlOpen || $[34] !== openOverlay || $[35] !== t14 || $[36] !== value) {
|
|
1010
|
-
t15 = {
|
|
1011
|
-
isOpen: t14,
|
|
1012
|
-
shouldRender: isUrlOpen,
|
|
1013
|
-
value,
|
|
1014
|
-
buildHref,
|
|
1015
|
-
openOverlay,
|
|
1016
|
-
closeOverlay,
|
|
1017
|
-
resetOptimisticClose
|
|
1018
|
-
};
|
|
1019
|
-
$[31] = buildHref;
|
|
1020
|
-
$[32] = closeOverlay;
|
|
1021
|
-
$[33] = isUrlOpen;
|
|
1022
|
-
$[34] = openOverlay;
|
|
1023
|
-
$[35] = t14;
|
|
1024
|
-
$[36] = value;
|
|
1025
|
-
$[37] = t15;
|
|
1026
|
-
} else t15 = $[37];
|
|
1027
|
-
return t15;
|
|
813
|
+
}, []);
|
|
814
|
+
return {
|
|
815
|
+
isOpen: isUrlOpen && !isOptimisticallyClosed,
|
|
816
|
+
shouldRender: isUrlOpen,
|
|
817
|
+
value,
|
|
818
|
+
buildHref,
|
|
819
|
+
openOverlay,
|
|
820
|
+
closeOverlay,
|
|
821
|
+
resetOptimisticClose
|
|
822
|
+
};
|
|
1028
823
|
};
|
|
1029
824
|
function QueryOverlay({ overlay, fallback, errorFallback, children }) {
|
|
1030
825
|
if (!overlay.shouldRender || overlay.value === null) return null;
|
|
@@ -1045,8 +840,9 @@ function QueryOverlay({ overlay, fallback, errorFallback, children }) {
|
|
|
1045
840
|
...controls,
|
|
1046
841
|
onOpenChange: setOpen
|
|
1047
842
|
};
|
|
843
|
+
const resetKey = overlay.buildHref(overlay.value);
|
|
1048
844
|
return createElement(QueryOverlayErrorBoundary, {
|
|
1049
|
-
resetKey
|
|
845
|
+
resetKey,
|
|
1050
846
|
fallback: (error) => renderQueryOverlayFallback(errorFallback, fallbackControls, error, true)
|
|
1051
847
|
}, createElement(Suspense, { fallback: renderQueryOverlayFallback(fallback === void 0 ? QUERY_OVERLAY_LOADING_FALLBACK : fallback, fallbackControls) }, children(overlay.value, controls)));
|
|
1052
848
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["ROUTE_MODULE_IMPORTER_HANDLE","ROUTE_PREFETCH_DATA_HANDLE","RouteHandleObject","Record","RouteModuleImporter","Promise","isHandleObject","value","Boolean","Array","isArray","getRouteModuleImporterFromHandle","handle","importer","getRoutePrefetchDataFromHandle","key","undefined","mergeRouteHandle","prefetchData","prefetchDataKey","nextHandle","ReactNode","createContext","useContext","useRef","UNSAFE_DataRouterContext","matchRoutes","DataRouteObject","DataRouter","ROUTE_PREFETCH_DATA_HANDLE","getRouteModuleImporterFromHandle","getRoutePrefetchDataFromHandle","RoutePrefetchBehavior","RoutePrefetchCallOptions","prefetchCode","prefetchData","RoutePrefetchApi","defaultPrefetch","prefetch","href","opts","Promise","RoutePrefetchContextValue","PrefetchableRoute","handle","lazy","Record","RoutePrefetchProviderProps","children","dataPrefetchTtlMs","dataPrefetchHandleKey","DataCacheValue","expiresAt","promise","noop","DEFAULT_PREFETCH_API","RoutePrefetchContext","normalizeHref","pathWithSearch","pathname","search","hash","window","url","URL","location","origin","pruneDataCache","cache","Map","now","forEach","value","key","delete","resolveDataPrefetchFlag","route","explicitPrefetchData","routeHandlePrefetchData","RoutePrefetchProvider","t0","$","_c","t1","t2","t3","undefined","dataRouterContext","t4","Symbol","for","routeModuleCacheRef","t5","routeDataCacheRef","t6","routeId","id","cached","current","get","lazyRouteLoader","routeModuleImporter","prefetchPromise","resolve","then","_temp","catch","error","set","prefetchRouteModule","t7","router","route_0","routeId_0","Date","cacheKey","cached_0","hasLoader","loader","loadedRouteModule","_temp2","fetcherKey","prefetchPromise_0","fetch","error_0","finally","deleteFetcher","ttl","Math","max","prefetchRouteData","t8","href_0","normalized","currentPathWithSearch","router_0","matches","routes","basename","length","matchedRoutes","map","_temp3","all","route_1","route_2","t10","t9","href_1","href_2","t11","t12","useRoutePrefetch","module","match","forwardRef","useEffect","useRef","Ref","SyntheticEvent","Link","RouterLink","LinkProps","RouterLinkProps","RoutePrefetchBehavior","useRoutePrefetch","ABSOLUTE_URL_REGEX","Omit","prefetch","prefetchData","assignRef","ref","TValue","value","current","composeEventHandlers","theirHandler","event","TEvent","ourHandler","defaultPrevented","shouldPrefetchLink","reloadDocument","target","to","test","usePrefetchLink","$","_c","localRef","t0","t1","Symbol","for","node","t2","anchorRef","getAnchorElement","prefetchHref","href","getAttribute","HTMLAnchorElement","forwardedRef","onFocus","onMouseEnter","onTouchStart","prefetchProp","props","defaultPrefetch","prefetchBehavior","viewportPrefetchedRef","canPrefetch","t3","t4","t5","t6","t7","element","IntersectionObserver","observer","entries","isVisible","some","_temp","threshold","observe","disconnect","t8","handleIntentPrefetch","t9","t10","t11","t12","t13","displayName","entry","isIntersecting","LoaderFunction","mergeRouteHandle","RouteHandleObject","RouteModuleLoader","args","RouteModule","default","React","ComponentType","loader","RouteModuleImporter","Promise","RouteOptions","handle","prefetchData","prefetchDataKey","LazyRouteResult","lazy","Component","memoizeImporter","importer","promise","catch","error","lazyRoute","opts","loadModule","module","lazyRouteModule","useEffect","useLocation","MetaAttributeValue","MetaEntry","Record","PageMeta","title","meta","useApplyMeta","t0","$","_c","t1","undefined","defaultTitle","t2","defaultMeta","t3","pagesMeta","t4","t5","t6","location","t7","t8","pathname","loadMeta","pageMeta","document","querySelectorAll","forEach","_temp","_temp2","canonicalUrl","window","origin","existingCanonical","querySelector","remove","canonicalLink","createElement","setAttribute","head","appendChild","tag","metaElement","Object","entries","key","value","toString","useEffect","useRef","BlockerFunction","NavigationGuard","id","enabled","priority","message","blockOnSearch","shouldBlockNavigation","shouldBlockUnload","NavigationGuardsListener","NavigationGuardsStore","guards","Map","listeners","Set","NAVIGATION_GUARDS_STORE_KEY","getNavigationGuardsStore","globalAny","globalThis","existing","created","notify","forEach","listener","isSameGuard","a","b","upsertNavigationGuard","guard","prev","get","set","removeNavigationGuard","didDelete","delete","getNavigationGuards","Array","from","values","subscribeNavigationGuards","add","useRegisterNavigationGuard","latestGuardRef","current","lastIdRef","lastId","Component","Suspense","cloneElement","createElement","isValidElement","useContext","useEffect","useRef","useState","useSyncExternalStore","CSSProperties","ErrorInfo","ReactElement","ReactNode","createPortal","UNSAFE_LocationContext","UseQueryOverlayOptions","params","parse","URLSearchParams","TOverlay","write","state","clear","closeDelayMs","QueryOverlayApi","value","isOpen","shouldRender","buildHref","nextValue","openOverlay","closeOverlay","resetOptimisticClose","QueryOverlayRenderControls","open","setOpen","QueryOverlayFallbackControls","onOpenChange","QueryOverlayFallbackRender","controls","QueryOverlayErrorFallbackRender","error","QueryOverlayLoadingFallbackProps","label","QueryOverlayProps","overlay","fallback","errorFallback","children","QueryOverlayErrorBoundaryProps","resetKey","QueryOverlayErrorBoundary","getDerivedStateFromError","componentDidCatch","errorInfo","console","componentDidUpdate","previousProps","props","setState","render","QUERY_OVERLAY_URL_CHANGE_EVENT","UrlSnapshot","pathname","search","hash","getCurrentUrlSnapshot","window","location","getParamValueFromSearch","param","get","getSearchFromUrlSnapshot","useRouterUrlSnapshot","$","_c","context","t0","getCurrentParamValue","getCurrentSearch","subscribeToQueryOverlayUrl","listener","undefined","addEventListener","removeEventListener","buildUrl","searchParams","nextSearch","toString","clearOverlaySearchParams","delete","buildOverlayUrlStateKey","map","values","getAll","join","queryOverlayLoadingBackdropStyle","position","inset","zIndex","display","alignItems","justifyContent","background","color","opacity","pointerEvents","transition","queryOverlayLoadingStatusStyle","gap","fontSize","fontWeight","QueryOverlayLoadingFallback","backdrop","style","role","focusable","height","viewBox","width","cx","cy","fill","r","stroke","strokeOpacity","strokeWidth","d","strokeLinecap","attributeName","dur","from","repeatCount","to","type","document","body","QUERY_OVERLAY_LOADING_FALLBACK","renderQueryOverlayFallback","includeError","Record","replaceQueryParams","update","nextUrl","currentUrl","history","replaceState","dispatchEvent","Event","useQueryParam","routerUrlSnapshot","t1","useQuerySearch","useQueryOverlay","isOptimisticallyClosed","setIsOptimisticallyClosed","closeTimeoutRef","t2","isUrlOpen","t3","overlayUrlStateKey","t4","Symbol","for","current","clearTimeout","clearScheduledClose","t5","t6","closeUrlOverlay","t7","searchParams_0","t8","nextValue_0","searchParams_1","t9","setTimeout","t10","t11","t12","t13","t14","t15","QueryOverlay","fallbackControls","suspenseFallback","useEffect","useRef","useNavigate","KeyboardShortcut","key","mod","ctrl","meta","alt","shift","ShortcutTrigger","UseShortcutPrefetchNavigateOptions","shortcut","getHref","prefetch","href","Promise","navigate","trigger","enabled","preventDefault","ignoreTypingTarget","isTypingTarget","target","EventTarget","normalizeKey","toLowerCase","defaultIsTypingTarget","element","HTMLElement","tagName","isContentEditable","matchesShortcutKeyDown","event","KeyboardEvent","hasMod","metaKey","ctrlKey","altKey","shiftKey","callMaybeAsync","fn","resolve","useShortcutPrefetchNavigate","routerNavigate","shortcutRef","getHrefRef","prefetchRef","navigateRef","triggerRef","enabledRef","preventDefaultRef","ignoreTypingTargetRef","isTypingTargetRef","waitingForShortcutKeyUpRef","current","window","onKeyDown","repeat","onKeyUp","onBlur","addEventListener","removeEventListener"],"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 {\n Component,\n Suspense,\n cloneElement,\n createElement,\n isValidElement,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ErrorInfo,\n type ReactElement,\n type ReactNode,\n} from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { UNSAFE_LocationContext } from \"react-router\"\n\n\nexport type UseQueryOverlayOptions<TOverlay> = {\n params: string[]\n parse: (params: URLSearchParams) => TOverlay | null\n write: (params: URLSearchParams, state: TOverlay) => void\n clear: (params: URLSearchParams) => void\n closeDelayMs?: number\n}\n\nexport type QueryOverlayApi<TOverlay> = {\n value: TOverlay | null\n isOpen: boolean\n shouldRender: boolean\n buildHref: (nextValue: TOverlay | null) => string\n openOverlay: (nextValue: TOverlay) => void\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type QueryOverlayRenderControls = {\n open: boolean\n setOpen: (open: boolean) => void\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type QueryOverlayFallbackControls = QueryOverlayRenderControls & {\n onOpenChange: (open: boolean) => void\n}\n\nexport type QueryOverlayFallbackRender = (controls: QueryOverlayFallbackControls) => ReactNode\n\nexport type QueryOverlayErrorFallbackRender = (\n controls: QueryOverlayFallbackControls & {\n error: unknown\n },\n) => ReactNode\n\nexport type QueryOverlayLoadingFallbackProps = {\n open?: boolean\n label?: ReactNode\n}\n\nexport type QueryOverlayProps<TOverlay> = {\n overlay: QueryOverlayApi<TOverlay>\n fallback?: ReactNode | QueryOverlayFallbackRender\n errorFallback?: ReactNode | QueryOverlayErrorFallbackRender\n children: (state: TOverlay, controls: QueryOverlayRenderControls) => ReactNode\n}\n\ntype QueryOverlayErrorBoundaryProps = {\n children?: ReactNode\n fallback: (error: unknown) => ReactNode\n resetKey: string\n}\n\nclass QueryOverlayErrorBoundary extends Component<QueryOverlayErrorBoundaryProps, { error: unknown | null }> {\n state = { error: null }\n\n static getDerivedStateFromError(error: unknown) {\n return { error }\n }\n\n componentDidCatch(error: unknown, errorInfo: ErrorInfo) {\n console.error(\"Query overlay rendering error\", error, errorInfo)\n }\n\n componentDidUpdate(previousProps: QueryOverlayErrorBoundaryProps) {\n if (this.state.error === null) return\n if (previousProps.resetKey === this.props.resetKey) return\n this.setState({ error: null })\n }\n\n render() {\n return this.state.error === null ? this.props.children : this.props.fallback(this.state.error)\n }\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 getSearchFromUrlSnapshot(fallback?: UrlSnapshot) {\n return getCurrentUrlSnapshot(fallback).search\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 getCurrentSearch() {\n if (typeof window === \"undefined\") return \"\"\n return window.location.search\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\nfunction clearOverlaySearchParams(\n searchParams: URLSearchParams,\n params: string[],\n clear: (params: URLSearchParams) => void,\n) {\n clear(searchParams)\n for (const param of params) {\n searchParams.delete(param)\n }\n}\n\nfunction buildOverlayUrlStateKey(search: string, params: string[]) {\n const searchParams = new URLSearchParams(search)\n return params\n .map((param) => {\n const values = searchParams.getAll(param)\n return `${param}:${values.join(\"\\u0000\")}`\n })\n .join(\"\\u0001\")\n}\n\nconst queryOverlayLoadingBackdropStyle = (open: boolean): CSSProperties => ({\n position: \"fixed\",\n inset: 0,\n zIndex: 50,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"rgba(0, 0, 0, 0.5)\",\n color: \"white\",\n opacity: open ? 1 : 0,\n pointerEvents: open ? \"auto\" : \"none\",\n transition: \"opacity 150ms ease\",\n})\n\nconst queryOverlayLoadingStatusStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 10,\n fontSize: 14,\n fontWeight: 500,\n}\n\nexport function QueryOverlayLoadingFallback({\n open = true,\n label = \"Loading...\",\n}: QueryOverlayLoadingFallbackProps): ReactElement {\n const backdrop = createElement(\n \"div\",\n {\n \"data-rpcbase-query-overlay-loading\": \"\",\n \"data-state\": open ? \"open\" : \"closed\",\n style: queryOverlayLoadingBackdropStyle(open),\n },\n createElement(\n \"div\",\n {\n role: \"status\",\n \"aria-live\": \"polite\",\n style: queryOverlayLoadingStatusStyle,\n },\n createElement(\n \"svg\",\n {\n \"aria-hidden\": true,\n focusable: \"false\",\n height: 20,\n viewBox: \"0 0 24 24\",\n width: 20,\n },\n createElement(\"circle\", {\n cx: 12,\n cy: 12,\n fill: \"none\",\n r: 9,\n stroke: \"currentColor\",\n strokeOpacity: 0.35,\n strokeWidth: 3,\n }),\n createElement(\n \"path\",\n {\n d: \"M21 12a9 9 0 0 0-9-9\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 3,\n },\n createElement(\"animateTransform\", {\n attributeName: \"transform\",\n dur: \"0.8s\",\n from: \"0 12 12\",\n repeatCount: \"indefinite\",\n to: \"360 12 12\",\n type: \"rotate\",\n }),\n ),\n ),\n createElement(\"span\", null, label),\n ),\n )\n\n return typeof document === \"undefined\" ? backdrop : createPortal(backdrop, document.body)\n}\n\nconst QUERY_OVERLAY_LOADING_FALLBACK = createElement(QueryOverlayLoadingFallback)\n\nfunction renderQueryOverlayFallback(\n fallback: ReactNode | QueryOverlayFallbackRender | QueryOverlayErrorFallbackRender | undefined,\n controls: QueryOverlayFallbackControls,\n error?: unknown,\n includeError = false,\n) {\n if (typeof fallback === \"function\") {\n if (!includeError) {\n return (fallback as QueryOverlayFallbackRender)(controls)\n }\n\n return (fallback as QueryOverlayErrorFallbackRender)({ ...controls, error })\n }\n\n if (isValidElement(fallback)) {\n return cloneElement(fallback as ReactElement<Record<string, unknown>>, {\n open: controls.open,\n isOpen: controls.open,\n setOpen: controls.setOpen,\n onOpenChange: controls.onOpenChange,\n closeOverlay: controls.closeOverlay,\n error,\n })\n }\n\n return fallback ?? null\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 useQuerySearch(): string {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n return useSyncExternalStore(\n subscribeToQueryOverlayUrl,\n getCurrentSearch,\n () => getSearchFromUrlSnapshot(routerUrlSnapshot),\n )\n}\n\nexport const useQueryOverlay = <TOverlay>({\n params,\n parse,\n write,\n clear,\n closeDelayMs = 0,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n const search = useQuerySearch()\n const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false)\n const closeTimeoutRef = useRef<number | null>(null)\n const value = parse(new URLSearchParams(search))\n const isUrlOpen = value !== null\n const overlayUrlStateKey = buildOverlayUrlStateKey(search, params)\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 const closeUrlOverlay = () => {\n replaceQueryParams((searchParams) => {\n clearOverlaySearchParams(searchParams, params, clear)\n })\n }\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search)\n clearOverlaySearchParams(searchParams, params, clear)\n\n if (nextValue !== null) {\n write(searchParams, nextValue)\n }\n\n return buildUrl(searchParams, routerUrlSnapshot)\n }\n\n const openOverlay = (nextValue: TOverlay) => {\n resetOptimisticClose()\n replaceQueryParams((searchParams) => {\n clearOverlaySearchParams(searchParams, params, clear)\n write(searchParams, nextValue)\n })\n }\n\n const closeOverlay = () => {\n if (!isUrlOpen) return\n\n setIsOptimisticallyClosed(true)\n clearScheduledClose()\n\n if (typeof window === \"undefined\" || closeDelayMs <= 0) {\n closeUrlOverlay()\n return\n }\n\n closeTimeoutRef.current = window.setTimeout(() => {\n closeTimeoutRef.current = null\n closeUrlOverlay()\n }, closeDelayMs)\n }\n\n useEffect(() => {\n if (isUrlOpen) {\n setIsOptimisticallyClosed(false)\n return\n }\n\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }, [isUrlOpen, overlayUrlStateKey])\n\n useEffect(() => {\n return () => {\n clearScheduledClose()\n }\n }, [])\n\n return {\n isOpen: isUrlOpen && !isOptimisticallyClosed,\n shouldRender: isUrlOpen,\n value,\n buildHref,\n openOverlay,\n closeOverlay,\n resetOptimisticClose,\n }\n}\n\nexport function QueryOverlay<TOverlay>({\n overlay,\n fallback,\n errorFallback,\n children,\n}: QueryOverlayProps<TOverlay>): ReactElement | null {\n if (!overlay.shouldRender || overlay.value === null) return null\n\n const setOpen = (open: boolean) => {\n if (open) {\n overlay.resetOptimisticClose()\n return\n }\n\n overlay.closeOverlay()\n }\n\n const controls: QueryOverlayRenderControls = {\n open: overlay.isOpen,\n setOpen,\n closeOverlay: overlay.closeOverlay,\n resetOptimisticClose: overlay.resetOptimisticClose,\n }\n const fallbackControls = {\n ...controls,\n onOpenChange: setOpen,\n }\n const resetKey = overlay.buildHref(overlay.value)\n const suspenseFallback = fallback === undefined ? QUERY_OVERLAY_LOADING_FALLBACK : fallback\n\n return createElement(\n QueryOverlayErrorBoundary,\n {\n resetKey,\n fallback: (error: unknown) => renderQueryOverlayFallback(errorFallback, fallbackControls, error, true),\n },\n createElement(\n Suspense,\n {\n fallback: renderQueryOverlayFallback(suspenseFallback, fallbackControls),\n },\n children(overlay.value, controls),\n ),\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["route","routeId","cached","prefetchPromise","error","href","router","to","target","reloadDocument","searchParams","nextValue","event","href"],"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 {\n Component,\n Suspense,\n cloneElement,\n createElement,\n isValidElement,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ErrorInfo,\n type ReactElement,\n type ReactNode,\n} from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { UNSAFE_LocationContext } from \"react-router\"\n\n\nexport type UseQueryOverlayOptions<TOverlay> = {\n params: string[]\n parse: (params: URLSearchParams) => TOverlay | null\n write: (params: URLSearchParams, state: TOverlay) => void\n clear: (params: URLSearchParams) => void\n closeDelayMs?: number\n}\n\nexport type QueryOverlayApi<TOverlay> = {\n value: TOverlay | null\n isOpen: boolean\n shouldRender: boolean\n buildHref: (nextValue: TOverlay | null) => string\n openOverlay: (nextValue: TOverlay) => void\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type QueryOverlayRenderControls = {\n open: boolean\n setOpen: (open: boolean) => void\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type QueryOverlayFallbackControls = QueryOverlayRenderControls & {\n onOpenChange: (open: boolean) => void\n}\n\nexport type QueryOverlayFallbackRender = (controls: QueryOverlayFallbackControls) => ReactNode\n\nexport type QueryOverlayErrorFallbackRender = (\n controls: QueryOverlayFallbackControls & {\n error: unknown\n },\n) => ReactNode\n\nexport type QueryOverlayLoadingFallbackProps = {\n open?: boolean\n label?: ReactNode\n}\n\nexport type QueryOverlayProps<TOverlay> = {\n overlay: QueryOverlayApi<TOverlay>\n fallback?: ReactNode | QueryOverlayFallbackRender\n errorFallback?: ReactNode | QueryOverlayErrorFallbackRender\n children: (state: TOverlay, controls: QueryOverlayRenderControls) => ReactNode\n}\n\ntype QueryOverlayErrorBoundaryProps = {\n children?: ReactNode\n fallback: (error: unknown) => ReactNode\n resetKey: string\n}\n\nclass QueryOverlayErrorBoundary extends Component<QueryOverlayErrorBoundaryProps, { error: unknown | null }> {\n state = { error: null }\n\n static getDerivedStateFromError(error: unknown) {\n return { error }\n }\n\n componentDidCatch(error: unknown, errorInfo: ErrorInfo) {\n console.error(\"Query overlay rendering error\", error, errorInfo)\n }\n\n componentDidUpdate(previousProps: QueryOverlayErrorBoundaryProps) {\n if (this.state.error === null) return\n if (previousProps.resetKey === this.props.resetKey) return\n this.setState({ error: null })\n }\n\n render() {\n return this.state.error === null ? this.props.children : this.props.fallback(this.state.error)\n }\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 getSearchFromUrlSnapshot(fallback?: UrlSnapshot) {\n return getCurrentUrlSnapshot(fallback).search\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 getCurrentSearch() {\n if (typeof window === \"undefined\") return \"\"\n return window.location.search\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\nfunction clearOverlaySearchParams(\n searchParams: URLSearchParams,\n params: string[],\n clear: (params: URLSearchParams) => void,\n) {\n clear(searchParams)\n for (const param of params) {\n searchParams.delete(param)\n }\n}\n\nfunction buildOverlayUrlStateKey(search: string, params: string[]) {\n const searchParams = new URLSearchParams(search)\n return params\n .map((param) => {\n const values = searchParams.getAll(param)\n return `${param}:${values.join(\"\\u0000\")}`\n })\n .join(\"\\u0001\")\n}\n\nconst queryOverlayLoadingBackdropStyle = (open: boolean): CSSProperties => ({\n position: \"fixed\",\n inset: 0,\n zIndex: 50,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"rgba(0, 0, 0, 0.5)\",\n color: \"white\",\n opacity: open ? 1 : 0,\n pointerEvents: open ? \"auto\" : \"none\",\n transition: \"opacity 150ms ease\",\n})\n\nconst queryOverlayLoadingStatusStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 10,\n fontSize: 14,\n fontWeight: 500,\n}\n\nexport function QueryOverlayLoadingFallback({\n open = true,\n label = \"Loading...\",\n}: QueryOverlayLoadingFallbackProps): ReactElement {\n const backdrop = createElement(\n \"div\",\n {\n \"data-rpcbase-query-overlay-loading\": \"\",\n \"data-state\": open ? \"open\" : \"closed\",\n style: queryOverlayLoadingBackdropStyle(open),\n },\n createElement(\n \"div\",\n {\n role: \"status\",\n \"aria-live\": \"polite\",\n style: queryOverlayLoadingStatusStyle,\n },\n createElement(\n \"svg\",\n {\n \"aria-hidden\": true,\n focusable: \"false\",\n height: 20,\n viewBox: \"0 0 24 24\",\n width: 20,\n },\n createElement(\"circle\", {\n cx: 12,\n cy: 12,\n fill: \"none\",\n r: 9,\n stroke: \"currentColor\",\n strokeOpacity: 0.35,\n strokeWidth: 3,\n }),\n createElement(\n \"path\",\n {\n d: \"M21 12a9 9 0 0 0-9-9\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 3,\n },\n createElement(\"animateTransform\", {\n attributeName: \"transform\",\n dur: \"0.8s\",\n from: \"0 12 12\",\n repeatCount: \"indefinite\",\n to: \"360 12 12\",\n type: \"rotate\",\n }),\n ),\n ),\n createElement(\"span\", null, label),\n ),\n )\n\n return typeof document === \"undefined\" ? backdrop : createPortal(backdrop, document.body)\n}\n\nconst QUERY_OVERLAY_LOADING_FALLBACK = createElement(QueryOverlayLoadingFallback)\n\nfunction renderQueryOverlayFallback(\n fallback: ReactNode | QueryOverlayFallbackRender | QueryOverlayErrorFallbackRender | undefined,\n controls: QueryOverlayFallbackControls,\n error?: unknown,\n includeError = false,\n) {\n if (typeof fallback === \"function\") {\n if (!includeError) {\n return (fallback as QueryOverlayFallbackRender)(controls)\n }\n\n return (fallback as QueryOverlayErrorFallbackRender)({ ...controls, error })\n }\n\n if (isValidElement(fallback)) {\n return cloneElement(fallback as ReactElement<Record<string, unknown>>, {\n open: controls.open,\n isOpen: controls.open,\n setOpen: controls.setOpen,\n onOpenChange: controls.onOpenChange,\n closeOverlay: controls.closeOverlay,\n error,\n })\n }\n\n return fallback ?? null\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 useQuerySearch(): string {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n return useSyncExternalStore(\n subscribeToQueryOverlayUrl,\n getCurrentSearch,\n () => getSearchFromUrlSnapshot(routerUrlSnapshot),\n )\n}\n\nexport const useQueryOverlay = <TOverlay>({\n params,\n parse,\n write,\n clear,\n closeDelayMs = 0,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n const search = useQuerySearch()\n const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false)\n const closeTimeoutRef = useRef<number | null>(null)\n const value = parse(new URLSearchParams(search))\n const isUrlOpen = value !== null\n const overlayUrlStateKey = buildOverlayUrlStateKey(search, params)\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 const closeUrlOverlay = () => {\n replaceQueryParams((searchParams) => {\n clearOverlaySearchParams(searchParams, params, clear)\n })\n }\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search)\n clearOverlaySearchParams(searchParams, params, clear)\n\n if (nextValue !== null) {\n write(searchParams, nextValue)\n }\n\n return buildUrl(searchParams, routerUrlSnapshot)\n }\n\n const openOverlay = (nextValue: TOverlay) => {\n resetOptimisticClose()\n replaceQueryParams((searchParams) => {\n clearOverlaySearchParams(searchParams, params, clear)\n write(searchParams, nextValue)\n })\n }\n\n const closeOverlay = () => {\n if (!isUrlOpen) return\n\n setIsOptimisticallyClosed(true)\n clearScheduledClose()\n\n if (typeof window === \"undefined\" || closeDelayMs <= 0) {\n closeUrlOverlay()\n return\n }\n\n closeTimeoutRef.current = window.setTimeout(() => {\n closeTimeoutRef.current = null\n closeUrlOverlay()\n }, closeDelayMs)\n }\n\n useEffect(() => {\n if (isUrlOpen) {\n setIsOptimisticallyClosed(false)\n return\n }\n\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }, [isUrlOpen, overlayUrlStateKey])\n\n useEffect(() => {\n return () => {\n clearScheduledClose()\n }\n }, [])\n\n return {\n isOpen: isUrlOpen && !isOptimisticallyClosed,\n shouldRender: isUrlOpen,\n value,\n buildHref,\n openOverlay,\n closeOverlay,\n resetOptimisticClose,\n }\n}\n\nexport function QueryOverlay<TOverlay>({\n overlay,\n fallback,\n errorFallback,\n children,\n}: QueryOverlayProps<TOverlay>): ReactElement | null {\n if (!overlay.shouldRender || overlay.value === null) return null\n\n const setOpen = (open: boolean) => {\n if (open) {\n overlay.resetOptimisticClose()\n return\n }\n\n overlay.closeOverlay()\n }\n\n const controls: QueryOverlayRenderControls = {\n open: overlay.isOpen,\n setOpen,\n closeOverlay: overlay.closeOverlay,\n resetOptimisticClose: overlay.resetOptimisticClose,\n }\n const fallbackControls = {\n ...controls,\n onOpenChange: setOpen,\n }\n const resetKey = overlay.buildHref(overlay.value)\n const suspenseFallback = fallback === undefined ? QUERY_OVERLAY_LOADING_FALLBACK : fallback\n\n return createElement(\n QueryOverlayErrorBoundary,\n {\n resetKey,\n fallback: (error: unknown) => renderQueryOverlayFallback(errorFallback, fallbackControls, error, true),\n },\n createElement(\n Suspense,\n {\n fallback: renderQueryOverlayFallback(suspenseFallback, fallbackControls),\n },\n children(overlay.value, controls),\n ),\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"],"mappings":";;;;;;;AAAA,IAAa,+BAA+B;AAC5C,IAAa,6BAA6B;AAM1C,IAAM,kBAAkB,UACtB,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAErE,IAAa,oCAAoC,WAAgD;CAC/F,IAAI,CAAC,eAAe,MAAM,GAAG,OAAO;CAEpC,MAAM,WAAW,OAAO;CACxB,OAAO,OAAO,aAAa,aAAc,WAAmC;AAC9E;AAEA,IAAa,kCACX,QACA,MAAM,+BACkB;CACxB,IAAI,CAAC,eAAe,MAAM,GAAG,OAAO,KAAA;CAEpC,MAAM,QAAQ,OAAO;CACrB,OAAO,OAAO,UAAU,YAAY,QAAQ,KAAA;AAC9C;AAEA,IAAa,oBACX,QACA,EACE,UACA,cACA,kBAAkB,iCAME;CACtB,MAAM,aAAgC,eAAe,MAAM,IAAI,EAAE,GAAG,OAAO,IAAI,CAAC;CAEhF,IAAI,UACF,WAAW,gCAAgC;CAG7C,IAAI,OAAO,iBAAiB,WAC1B,WAAW,mBAAmB;CAGhC,OAAO;AACT;;;ACFA,IAAM,OAAO,YAAY,CAAC;AAS1B,IAAM,uBAAuB,cAAyC;CANpE,iBAAiB;CACjB,UAAU;CACV,cAAc;CACd,cAAc;AAGsD,CAAoB;AAE1F,IAAM,iBAAiB,SAAoG;CACzH,IAAI,OAAO,WAAW,aAAa,OAAO;CAE1C,IAAI;EACF,MAAM,MAAM,IAAI,IAAI,MAAM,OAAO,SAAS,MAAM;EAChD,IAAI,IAAI,WAAW,OAAO,SAAS,QAAQ,OAAO;EAClD,OAAO;GACL,gBAAgB,GAAG,IAAI,WAAW,IAAI;GACtC,UAAU,IAAI;GACd,QAAQ,IAAI;GACZ,MAAM,IAAI;EACZ;CACF,QAAQ;EACN,OAAO;CACT;AACF;AAEA,IAAM,kBAAkB,OAAoC,QAAsB;CAChF,MAAM,SAAS,OAAO,QAAQ;EAC5B,IAAI,MAAM,aAAa,KACrB,MAAM,OAAO,GAAG;CAEpB,CAAC;AACH;AAEA,IAAM,2BACJ,OACA,sBACA,0BACY;CACZ,IAAI,OAAO,yBAAyB,WAClC,OAAO;CAGT,MAAM,0BAA0B,+BAA+B,MAAM,QAAQ,qBAAqB;CAClG,IAAI,OAAO,4BAA4B,WACrC,OAAO;CAGT,OAAO;AACT;AAEA,IAAa,yBAAyB,EACpC,UACA,kBAAkB,UAClB,oBAAoB,KACpB,wBAAwB,iCACQ;CAChC,MAAM,oBAAoB,WAAW,wBAAwB;CAC7D,MAAM,sBAAsB,uBAAO,IAAI,IAAqD,CAAC;CAC7F,MAAM,oBAAoB,uBAAO,IAAI,IAA4B,CAAC;CAElE,MAAM,sBAAsB,OAAO,UAAsE;EACvG,MAAM,UAAU,MAAM;EACtB,IAAI,CAAC,SAAS,OAAO;EAErB,MAAM,SAAS,oBAAoB,QAAQ,IAAI,OAAO;EACtD,IAAI,QACF,OAAO;EAGT,MAAM,kBAAkB,OAAO,MAAM,SAAS,aAAa,MAAM,OAAO;EACxE,MAAM,sBAAsB,iCAAiC,MAAM,MAAM;EACzE,IAAI,CAAC,mBAAmB,CAAC,qBACvB,OAAO;EAGT,MAAM,kBAAkB,QAAQ,QAAQ,kBAAkB,gBAAgB,IAAI,oBAAqB,CAAC,CAAC,CAClG,MAAM,WAAW;GAChB,IAAI,CAAC,UAAU,OAAO,WAAW,UAAU,OAAO;GAClD,OAAO;EACT,CAAC,CAAC,CACD,OAAO,UAAU;GAChB,oBAAoB,QAAQ,OAAO,OAAO;GAC1C,MAAM;EACR,CAAC;EAEH,oBAAoB,QAAQ,IAAI,SAAS,eAAe;EACxD,OAAO;CACT;CAEA,MAAM,oBAAoB,OAAO,QAAoBA,SAA0B,SAAgC;EAC7G,MAAMC,YAAUD,QAAM;EACtB,IAAI,CAACC,WAAS;EAEd,MAAM,MAAM,KAAK,IAAI;EACrB,eAAe,kBAAkB,SAAS,GAAG;EAE7C,MAAM,WAAW,GAAGA,UAAO,GAAI;EAC/B,MAAMC,WAAS,kBAAkB,QAAQ,IAAI,QAAQ;EACrD,IAAIA,YAAUA,SAAO,YAAY,KAAK;GACpC,MAAMA,SAAO;GACb;EACF;EAEA,IAAI,YAAY,OAAOF,QAAM,WAAW;EACxC,IAAI,CAAC,WAEH,YAAY,QAAO,MADa,oBAAoBA,OAAK,CAAC,CAAC,YAAY,IAAI,EAAA,EACrC,WAAW;EAGnD,IAAI,CAAC,WAAW;EAEhB,MAAM,aAAa,eAAeC,UAAO,GAAI;EAE7C,MAAME,oBAAkB,QAAQ,QAAQ,OAAO,MAAM,YAAYF,WAAS,IAAI,CAAC,CAAC,CAC7E,OAAOG,YAAU;GAChB,kBAAkB,QAAQ,OAAO,QAAQ;GACzC,MAAMA;EACR,CAAC,CAAC,CACD,cAAc;GACb,IAAI;IACF,OAAO,cAAc,UAAU;GACjC,QAAQ;IACN;GACF;EACF,CAAC;EAEH,MAAM,MAAM,KAAK,IAAI,GAAG,iBAAiB;EACzC,kBAAkB,QAAQ,IAAI,UAAU;GACtC,WAAW,MAAM;GACjB,SAASD;EACX,CAAC;EAED,MAAMA;CACR;CAEA,MAAM,WAAW,OAAOE,QAAc,SAAmD;EACvF,MAAM,aAAa,cAAcA,MAAI;EACrC,IAAI,CAAC,YAAY;EAEjB,MAAM,wBACJ,OAAO,WAAW,cACd,KACA,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS;EACpD,IAAI,WAAW,mBAAmB,uBAChC;EAGF,MAAMC,WAAS,mBAAmB;EAClC,IAAI,CAACA,UAAQ;EAEb,MAAM,UAAU,YACdA,SAAO,QACP;GACE,UAAU,WAAW;GACrB,QAAQ,WAAW;GACnB,MAAM,WAAW;EACnB,GACAA,SAAO,QACT;EAEA,IAAI,CAAC,WAAW,QAAQ,WAAW,GACjC;EAGF,MAAM,gBAAgB,QAAQ,KAAK,UAAU,MAAM,KAA0B;EAE7E,IAAI,MAAM,iBAAiB,OACzB,MAAM,QAAQ,IACZ,cAAc,IAAI,OAAON,YAAU;GACjC,IAAI;IACF,MAAM,oBAAoBA,OAAK;GACjC,QAAQ;IACN;GACF;EACF,CAAC,CACH;EAGF,MAAM,QAAQ,IACZ,cAAc,IAAI,OAAOA,YAAU;GACjC,IAAI,CAAC,wBAAwBA,SAAO,MAAM,cAAc,qBAAqB,GAC3E;GAGF,IAAI;IACF,MAAM,kBAAkBM,UAAQN,SAAO,WAAW,cAAc;GAClE,QAAQ;IACN;GACF;EACF,CAAC,CACH;CACF;CAEA,OACE,oBAAC,qBAAqB,UAAtB;EACE,OAAO;GACL;GACA;GACA,cAAc,OAAOK,WAAS,SAASA,QAAM;IAAE,cAAc;IAAM,cAAc;GAAM,CAAC;GACxF,cAAc,OAAOA,WAAS,SAASA,QAAM;IAAE,cAAc;IAAO,cAAc;GAAK,CAAC;EAC1F;EAEC;CAC4B,CAAA;AAEnC;AAEA,IAAa,yBAAmB;CAAA,OAAwB,WAAW,oBAAoB;AAAC;;;AC5PxF,IAAM,qBAAqB;AAO3B,IAAM,aAAsB,KAA8B,UAAkB;CAC1E,IAAI,CAAC,KAAK;CACV,IAAI,OAAO,QAAQ,YAAY;EAC7B,IAAI,KAAK;EACT;CACF;CACA,IAAI,UAAU;AAChB;AAEA,IAAM,wBACJ,cACA,eACG;CACH,QAAQ,UAAkB;EACxB,eAAe,KAAK;EACpB,IAAI,CAAC,MAAM,kBACT,WAAW;CAEf;AACF;AAEA,IAAM,sBAAsB,EAC1B,UACA,gBACA,QACA,SAMa;CACb,IAAI,aAAa,QAAQ,OAAO;CAChC,IAAI,gBAAgB,OAAO;CAC3B,IAAI,OAAO,WAAW,YAAY,WAAW,SAAS,OAAO;CAC7D,IAAI,OAAO,OAAO,YAAY,mBAAmB,KAAK,EAAE,GAAG,OAAO;CAClE,OAAO;AACT;AAEA,IAAM,mBAAkB,iBAAA;CAAA,MAAA,IAAA,EAAA,CAAA;CAOtB,MAAA,WAAiB,OAAiC,IAAI;CACtD,MAAA,EAAA,aAAqB,iBAAiB;CAAC,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,GAAA;EAG1B,MAAA,SAAA;GACT,SAAQ,UAAW;EAAH;EAEA,WAAM,SAAQ;EAAQ,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,YAAA,EAAA,OAAA,cAAA;EAJnC,KAAA;GAAA,WACM;GAEV,kBACiB;GAAsB,oBAC1B;IACZ,MAAA,OAAa,SAAQ,SAAsB,aAAC,MAAM;IAClD,IAAI,CAAC,MAAI;IACJ,SAAS,MAAM,EAAA,aAAe,CAAC;GAAC;EAEzC;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAVM;AAUN;AAGH,IAAa,OAAO,YAClB,IAAA,iBAAA;CAAA,MAAA,IAAA,EAAA,EAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,IAAA;EACE,CAAA,CAAA,UAAA,cAAA,cAAA,cAAA,SAAA,cAAA,gBAAA,QAAA,IAAA,GAAA,SAAA;EAUC,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,UAAA,EAAA;EAAA,eAAA,EAAA;EAAA,eAAA,EAAA;EAAA,eAAA,EAAA;EAAA,eAAA,EAAA;EAAA,QAAA,EAAA;EAAA,iBAAA,EAAA;EAAA,SAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAGD,MAAA,EAAA,oBAA4B,iBAAiB;CAC7C,MAAA,mBAAyB,gBAAA;CACzB,MAAA,wBAA8B,OAAO,KAAK;CAC1C,MAAA,EAAA,WAAA,cAAA,qBAAsD,gBAAgB,YAAY;CAAC,IAAA;CAAA,IAAA,EAAA,QAAA,oBAAA,EAAA,QAAA,kBAAA,EAAA,QAAA,UAAA,EAAA,QAAA,IAAA;EAC/D,KAAA,mBAAmB;GAAA,UAC3B;GAAgB;GAAA;GAAA;EAI5B,CAAC;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CALF,MAAA,cAAoB;CAKlB,IAAA;CAAA,IAAA,EAAA,QAAA,OAAA,IAAA,2BAAA,GAAA;EAEQ,WAAA;GACR,sBAAqB,UAAW;EAAH;EAC9B,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,IAAA;EAAE,KAAA,CAAC,EAAE;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAFP,UAAU,IAEP,EAAI;CAAC,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,eAAA,EAAA,QAAA,oBAAA,EAAA,QAAA,cAAA;EAEE,WAAA;GACR,IAAI,CAAC,eAAe,qBAAqB,UAAQ;GACjD,aAAa;EAAC;EACb,KAAA;GAAC;GAAa;GAAkB;EAAY;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAHhD,UAAU,IAGP,EAA6C;CAAC,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,eAAA,EAAA,QAAA,oBAAA,EAAA,QAAA,oBAAA,EAAA,QAAA,cAAA;EAEvC,WAAA;GACR,IAAI,CAAC,eAAe,qBAAqB,YAAU;GAEnD,MAAA,UAAgB,iBAAiB;GACjC,IAAI,CAAC,WAAW,OAAO,yBAAyB,aAAW;GAE3D,MAAA,WAAiB,IAAI,sBACnB,YAAA;IAEE,IAAI,CADc,QAAO,KAAM,KAC1B,KAAa,sBAAqB,SAAQ;IAC/C,sBAAqB,UAAW;IAChC,aAAa;GAAC,GAEhB,EAAA,WAAa,GAAI,CACnB;GAEA,SAAQ,QAAS,OAAO;GAAC,aAClB;IACL,SAAQ,WAAY;GAAC;EACtB;EACA,KAAA;GAAC;GAAa;GAAkB;GAAc;EAAgB;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CApBlE,UAAU,IAoBP,EAA+D;CAAC,IAAA;CAAA,IAAA,EAAA,QAAA,eAAA,EAAA,QAAA,oBAAA,EAAA,QAAA,cAAA;EAEtC,WAAA;GAC3B,IAAI,CAAC,eAAe,qBAAqB,UAAQ;GACjD,aAAa;EAAC;EACf,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAHD,MAAA,uBAA6B;CAG5B,IAAA;CAAA,IAAA,EAAA,QAAA,wBAAA,EAAA,QAAA,cAAA;EASiB,KAAA,qBAAqB,cAAc,oBAAoB;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,wBAAA,EAAA,QAAA,SAAA;EAC7D,MAAA,qBAAqB,SAAS,oBAAoB;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,MAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,wBAAA,EAAA,QAAA,cAAA;EAC9C,MAAA,qBAAqB,cAAc,oBAAoB;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,MAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,aAAA,EAAA,QAAA,cAAA;EACjE,OAAA,SAAA;GACH,UAAU,cAAc,IAAI;GAC5B,UAAU,WAAW,IAAI;EAAC;EAC3B,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,MAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,SAAA,EAAA,QAAA,kBAAA,EAAA,QAAA,OAAA,EAAA,QAAA,OAAA,EAAA,QAAA,OAAA,EAAA,QAAA,MAAA,EAAA,QAAA,UAAA,EAAA,QAAA,IAAA;EAZH,MAAA,oBAAC,QAAD;GAAW,GACL;GACA;GACI;GACQ;GACP,UAAA;GACK,cAAA;GACL,SAAA;GACK,cAAA;GACT,KAAA;EAGJ,CAAA;EACD,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,MAAA,EAAA;CAAA,OAbF;AAaE,CAGR;AAEA,KAAK,cAAc;AAhFjB,SAAA,MAAA,OAAA;CAAA,OA0CkD,MAAK;AAAe;;;AC1FxE,IAAM,mBAAmB,aAAuD;CAC9E,IAAI,UAAuC;CAE3C,OAAO,YAAY;EACjB,IAAI,CAAC,SACH,UAAU,SAAS,CAAC,CAAC,OAAO,UAAU;GACpC,UAAU;GACV,MAAM;EACR,CAAC;EAGH,OAAO;CACT;AACF;AAEA,IAAa,aAAa,UAA+B,SAAyC;CAChG,MAAM,aAAa,gBAAgB,QAAQ;CAE3C,OAAO;EACL,MAAM,YAAY;GAChB,MAAM,SAAS,MAAM,WAAW;GAChC,MAAM,kBAGF,EACF,WAAW,OAAO,QACpB;GAEA,IAAI,OAAO,OAAO,WAAW,YAC3B,gBAAgB,SAAS,OAAO;GAGlC,OAAO;EACT;EACA,QAAQ,iBAAiB,MAAM,QAAQ;GACrC,UAAU;GACV,cAAc,MAAM;GACpB,iBAAiB,MAAM;EACzB,CAAC;CACH;AACF;;;ACvDA,IAAa,gBAAgB,EAC3B,eAAe,IACf,cAAc,CAAA,GACd,YAAY,CAAC,MAKX,CAAC,MAAM;CACT,MAAM,WAAW,YAAY;CAE7B,gBAAgB;EACd,MAAM,WAAW,YAAY;GAE3B,IAAI,WAAW,UAAU,SAAS;GAElC,IAAI,CAAC,UACH,WAAW;IAAE,OAAO;IAAc,MAAM;GAAY;GAGtD,SAAS,QAAQ,SAAS;GAG1B,SAAS,iBAAiB,mBAAmB,CAAC,CAAC,SAAS,QAAQ,IAAI,OAAO,CAAC;GAG5E,SAAS,KAAK,SAAS,SAAS;IAC9B,MAAM,cAAc,SAAS,cAAc,MAAM;IACjD,YAAY,aAAa,mBAAmB,MAAM;IAGlD,OAAO,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;KAC7C,IAAI,OACF,YAAY,aAAa,KAAK,MAAM,SAAS,CAAC;IAElD,CAAC;IAED,SAAS,KAAK,YAAY,WAAW;GACvC,CAAC;GAGD,MAAM,eAAe,GAAG,OAAO,SAAS,SAAS,SAAS;GAE1D,MAAM,oBAAoB,SAAS,cAAc,yBAAyB;GAC1E,IAAI,mBACF,kBAAkB,OAAO;GAG3B,MAAM,gBAAgB,SAAS,cAAc,MAAM;GACnD,cAAc,aAAa,OAAO,WAAW;GAC7C,cAAc,aAAa,QAAQ,YAAY;GAC/C,cAAc,aAAa,mBAAmB,MAAM;GACpD,SAAS,KAAK,YAAY,aAAa;EACzC;EAEA,SAAS;CACX,GAAG;EAAC,SAAS;EAAU;EAAc;EAAa;CAAS,CAAC;AAC9D;;;ACjDA,IAAM,8BAA8B;AAEpC,IAAM,iCAAwD;CAC5D,MAAM,YAAY;CAIlB,MAAM,WAAW,UAAU;CAC3B,IAAI,UACF,OAAO;CAGT,MAAM,UAAiC;EACrC,wBAAQ,IAAI,IAA6B;EACzC,2BAAW,IAAI,IAA8B;CAC/C;CAEA,UAAU,+BAA+B;CACzC,OAAO;AACT;AAEA,IAAM,eAAqB;CACzB,yBAAyB,CAAC,CAAC,UAAU,SAAS,aAAa;EACzD,SAAS;CACX,CAAC;AACH;AAEA,IAAM,eAAe,GAAoB,MACvC,EAAE,OAAO,EAAE,MACX,EAAE,YAAY,EAAE,WAChB,EAAE,aAAa,EAAE,YACjB,EAAE,YAAY,EAAE,WAChB,EAAE,kBAAkB,EAAE,iBACtB,EAAE,0BAA0B,EAAE,yBAC9B,EAAE,sBAAsB,EAAE;AAE5B,IAAa,yBAAyB,UAAiC;CACrE,MAAM,SAAS,yBAAyB,CAAC,CAAC;CAC1C,MAAM,OAAO,OAAO,IAAI,MAAM,EAAE;CAChC,IAAI,QAAQ,YAAY,MAAM,KAAK,GACjC;CAGF,OAAO,IAAI,MAAM,IAAI,KAAK;CAC1B,OAAO;AACT;AAEA,IAAa,yBAAyB,OAAqB;CAGzD,IAFe,yBAAyB,CAAC,CAAC,OACjB,OAAO,EAC5B,GACF,OAAO;AAEX;AAEA,IAAa,4BACX,MAAM,KAAK,yBAAyB,CAAC,CAAC,OAAO,OAAO,CAAC;AAEvD,IAAa,6BACX,aACiB;CACjB,MAAM,YAAY,yBAAyB,CAAC,CAAC;CAC7C,UAAU,IAAI,QAAQ;CACtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AAEA,IAAa,8BAA8B,UAAiC;CAC1E,MAAM,iBAAiB,OAAO,KAAK;CACnC,eAAe,UAAU;CAEzB,MAAM,YAAY,OAAsB,IAAI;CAE5C,gBAAgB;EACd,MAAM,SAAS,UAAU;EACzB,IAAI,UAAU,WAAW,MAAM,IAC7B,sBAAsB,MAAM;EAE9B,UAAU,UAAU,MAAM;EAE1B,IAAI,CAAC,MAAM,SAAS;GAClB,sBAAsB,MAAM,EAAE;GAC9B;EACF;EAEA,sBAAsB,eAAe,OAAO;EAC5C,aAAa;GACX,sBAAsB,MAAM,EAAE;EAChC;CACF,GAAG;EACD,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;CAAiB,CACxB;AACH;;;AC7CA,IAAM,4BAAN,cAAwC,UAAqE;CAC3G,QAAQ,EAAE,OAAO,KAAK;CAEtB,OAAO,yBAAyB,OAAgB;EAC9C,OAAO,EAAE,MAAM;CACjB;CAEA,kBAAkB,OAAgB,WAAsB;EACtD,QAAQ,MAAM,iCAAiC,OAAO,SAAS;CACjE;CAEA,mBAAmB,eAA+C;EAChE,IAAI,KAAK,MAAM,UAAU,MAAM;EAC/B,IAAI,cAAc,aAAa,KAAK,MAAM,UAAU;EACpD,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;CAC/B;CAEA,SAAS;EACP,OAAO,KAAK,MAAM,UAAU,OAAO,KAAK,MAAM,WAAW,KAAK,MAAM,SAAS,KAAK,MAAM,KAAK;CAC/F;AACF;AAEA,IAAM,iCAAiC;AAQvC,SAAS,sBAAsB,UAAqC;CAClE,IAAI,OAAO,WAAW,aACpB,OAAO,YAAY;EAAE,UAAU;EAAI,QAAQ;EAAI,MAAM;CAAG;CAG1D,OAAO;EACL,UAAU,OAAO,SAAS;EAC1B,QAAQ,OAAO,SAAS;EACxB,MAAM,OAAO,SAAS;CACxB;AACF;AAEA,SAAS,wBAAwB,QAAgB,OAAe;CAC9D,OAAO,IAAI,gBAAgB,MAAM,CAAC,CAAC,IAAI,KAAK;AAC9C;AAEA,SAAS,yBAAyB,UAAwB;CACxD,OAAO,sBAAsB,QAAQ,CAAC,CAAC;AACzC;AAEA,SAAA,uBAAA;CAAA,MAAA,IAAA,EAAA,CAAA;CAEE,MAAA,WADgB,WAAW,sBACV,CAAA,EAAO;CACxB,IAAI,CAAC,UAAQ;CAAkB,IAAA;CAAA,IAAA,EAAA,OAAA,SAAA,QAAA,EAAA,OAAA,SAAA,YAAA,EAAA,OAAA,SAAA,QAAA;EACxB,KAAA;GAAA,UACK,SAAQ;GAAS,QACnB,SAAQ;GAAO,MACjB,SAAQ;EAChB;EAAC,EAAA,KAAA,SAAA;EAAA,EAAA,KAAA,SAAA;EAAA,EAAA,KAAA,SAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAJM;AAIN;AAGH,SAAS,qBAAqB,OAAe;CAC3C,IAAI,OAAO,WAAW,aAAa,OAAO;CAC1C,OAAO,wBAAwB,OAAO,SAAS,QAAQ,KAAK;AAC9D;AAEA,SAAS,mBAAmB;CAC1B,IAAI,OAAO,WAAW,aAAa,OAAO;CAC1C,OAAO,OAAO,SAAS;AACzB;AAEA,SAAS,2BAA2B,UAAsB;CACxD,IAAI,OAAO,WAAW,aAAa,aAAa,KAAA;CAEhD,OAAO,iBAAiB,gCAAgC,QAAQ;CAChE,OAAO,iBAAiB,YAAY,QAAQ;CAC5C,aAAa;EACX,OAAO,oBAAoB,gCAAgC,QAAQ;EACnE,OAAO,oBAAoB,YAAY,QAAQ;CACjD;AACF;AAEA,SAAS,SAAS,cAA+B,UAAwB;CACvE,MAAM,EAAE,UAAU,SAAS,sBAAsB,QAAQ;CACzD,MAAM,aAAa,aAAa,SAAS;CACzC,OAAO,GAAG,WAAW,aAAa,IAAI,eAAe,KAAK;AAC5D;AAEA,SAAS,yBACP,cACA,QACA,OACA;CACA,MAAM,YAAY;CAClB,KAAK,MAAM,SAAS,QAClB,aAAa,OAAO,KAAK;AAE7B;AAEA,SAAS,wBAAwB,QAAgB,QAAkB;CACjE,MAAM,eAAe,IAAI,gBAAgB,MAAM;CAC/C,OAAO,OACJ,KAAK,UAAU;EAEd,OAAO,GAAG,MAAK,GADA,aAAa,OAAO,KAChB,CAAA,CAAO,KAAK,IAAQ;CACzC,CAAC,CAAC,CACD,KAAK,GAAQ;AAClB;AAEA,IAAM,oCAAoC,UAAkC;CAC1E,UAAU;CACV,OAAO;CACP,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,YAAY;CACZ,OAAO;CACP,SAAS,OAAO,IAAI;CACpB,eAAe,OAAO,SAAS;CAC/B,YAAY;AACd;AAEA,IAAM,iCAAgD;CACpD,SAAS;CACT,YAAY;CACZ,KAAK;CACL,UAAU;CACV,YAAY;AACd;AAEA,SAAgB,4BAA4B,EAC1C,OAAO,MACP,QAAQ,gBACyC;CACjD,MAAM,WAAW,cACf,OACA;EACE,sCAAsC;EACtC,cAAc,OAAO,SAAS;EAC9B,OAAO,iCAAiC,IAAI;CAC9C,GACA,cACE,OACA;EACE,MAAM;EACN,aAAa;EACb,OAAO;CACT,GACA,cACE,OACA;EACE,eAAe;EACf,WAAW;EACX,QAAQ;EACR,SAAS;EACT,OAAO;CACT,GACA,cAAc,UAAU;EACtB,IAAI;EACJ,IAAI;EACJ,MAAM;EACN,GAAG;EACH,QAAQ;EACR,eAAe;EACf,aAAa;CACf,CAAC,GACD,cACE,QACA;EACE,GAAG;EACH,MAAM;EACN,QAAQ;EACR,eAAe;EACf,aAAa;CACf,GACA,cAAc,oBAAoB;EAChC,eAAe;EACf,KAAK;EACL,MAAM;EACN,aAAa;EACb,IAAI;EACJ,MAAM;CACR,CAAC,CACH,CACF,GACA,cAAc,QAAQ,MAAM,KAAK,CACnC,CACF;CAEA,OAAO,OAAO,aAAa,cAAc,WAAW,aAAa,UAAU,SAAS,IAAI;AAC1F;AAEA,IAAM,iCAAiC,cAAc,2BAA2B;AAEhF,SAAS,2BACP,UACA,UACA,OACA,eAAe,OACf;CACA,IAAI,OAAO,aAAa,YAAY;EAClC,IAAI,CAAC,cACH,OAAQ,SAAwC,QAAQ;EAG1D,OAAQ,SAA6C;GAAE,GAAG;GAAU;EAAM,CAAC;CAC7E;CAEA,IAAI,eAAe,QAAQ,GACzB,OAAO,aAAa,UAAmD;EACrE,MAAM,SAAS;EACf,QAAQ,SAAS;EACjB,SAAS,SAAS;EAClB,cAAc,SAAS;EACvB,cAAc,SAAS;EACvB;CACF,CAAC;CAGH,OAAO,YAAY;AACrB;AAEA,SAAgB,mBAAmB,QAAiD;CAClF,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,EAAE,UAAU,QAAQ,SAAS,sBAAsB;CACzD,MAAM,eAAe,IAAI,gBAAgB,MAAM;CAC/C,OAAO,YAAY;CAEnB,MAAM,UAAU,SAAS,YAAY;CAErC,IAAI,YAAY,GADM,WAAW,SAAS,QACd;CAE5B,OAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,OAAO;CAC7D,OAAO,cAAc,IAAI,MAAM,8BAA8B,CAAC;AAChE;AAEA,SAAO,cAAA,OAAA;CAAA,MAAA,IAAA,EAAA,CAAA;CACL,MAAA,oBAA0B,qBAAqB;CAAC,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EAG9C,WAAM,qBAAqB,KAAK;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,SAAA,EAAA,OAAA,mBAAA,QAAA;EACjC,WAAM,wBAAwB,mBAAiB,UAAjB,IAAiC,KAAK;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA,mBAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAHhE,qBACL,4BACA,IACA,EACF;AAAC;AAGH,SAAO,iBAAA;CAAA,MAAA,IAAA,EAAA,CAAA;CACL,MAAA,oBAA0B,qBAAqB;CAAC,IAAA;CAAA,IAAA,EAAA,OAAA,mBAAA;EAI9C,WAAM,yBAAyB,iBAAiB;EAAC,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAH5C,qBACL,4BACA,kBACA,EACF;AAAC;AAGH,IAAa,mBAA6B,EACxC,QACA,OACA,OACA,OACA,eAAe,QACkD;CACjE,MAAM,oBAAoB,qBAAqB;CAC/C,MAAM,SAAS,eAAe;CAC9B,MAAM,CAAC,wBAAwB,6BAA6B,SAAS,KAAK;CAC1E,MAAM,kBAAkB,OAAsB,IAAI;CAClD,MAAM,QAAQ,MAAM,IAAI,gBAAgB,MAAM,CAAC;CAC/C,MAAM,YAAY,UAAU;CAC5B,MAAM,qBAAqB,wBAAwB,QAAQ,MAAM;CAEjE,MAAM,4BAA4B;EAChC,IAAI,gBAAgB,YAAY,MAAM;EACtC,OAAO,aAAa,gBAAgB,OAAO;EAC3C,gBAAgB,UAAU;CAC5B;CAEA,MAAM,6BAA6B;EACjC,oBAAoB;EACpB,0BAA0B,KAAK;CACjC;CAEA,MAAM,wBAAwB;EAC5B,oBAAoB,iBAAiB;GACnC,yBAAyB,cAAc,QAAQ,KAAK;EACtD,CAAC;CACH;CAEA,MAAM,aAAa,cAAuC;EACxD,MAAMK,iBAAe,IAAI,gBAAgB,sBAAsB,iBAAiB,CAAC,CAAC,MAAM;EACxF,yBAAyBA,gBAAc,QAAQ,KAAK;EAEpD,IAAI,cAAc,MAChB,MAAMA,gBAAc,SAAS;EAG/B,OAAO,SAASA,gBAAc,iBAAiB;CACjD;CAEA,MAAM,eAAeC,gBAAwB;EAC3C,qBAAqB;EACrB,oBAAoBD,mBAAiB;GACnC,yBAAyBA,gBAAc,QAAQ,KAAK;GACpD,MAAMA,gBAAcC,WAAS;EAC/B,CAAC;CACH;CAEA,MAAM,qBAAqB;EACzB,IAAI,CAAC,WAAW;EAEhB,0BAA0B,IAAI;EAC9B,oBAAoB;EAEpB,IAAI,OAAO,WAAW,eAAe,gBAAgB,GAAG;GACtD,gBAAgB;GAChB;EACF;EAEA,gBAAgB,UAAU,OAAO,iBAAiB;GAChD,gBAAgB,UAAU;GAC1B,gBAAgB;EAClB,GAAG,YAAY;CACjB;CAEA,gBAAgB;EACd,IAAI,WAAW;GACb,0BAA0B,KAAK;GAC/B;EACF;EAEA,oBAAoB;EACpB,0BAA0B,KAAK;CACjC,GAAG,CAAC,WAAW,kBAAkB,CAAC;CAElC,gBAAgB;EACd,aAAa;GACX,oBAAoB;EACtB;CACF,GAAG,CAAA,CAAE;CAEL,OAAO;EACL,QAAQ,aAAa,CAAC;EACtB,cAAc;EACd;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAgB,aAAuB,EACrC,SACA,UACA,eACA,YACmD;CACnD,IAAI,CAAC,QAAQ,gBAAgB,QAAQ,UAAU,MAAM,OAAO;CAE5D,MAAM,WAAW,SAAkB;EACjC,IAAI,MAAM;GACR,QAAQ,qBAAqB;GAC7B;EACF;EAEA,QAAQ,aAAa;CACvB;CAEA,MAAM,WAAuC;EAC3C,MAAM,QAAQ;EACd;EACA,cAAc,QAAQ;EACtB,sBAAsB,QAAQ;CAChC;CACA,MAAM,mBAAmB;EACvB,GAAG;EACH,cAAc;CAChB;CACA,MAAM,WAAW,QAAQ,UAAU,QAAQ,KAAK;CAGhD,OAAO,cACL,2BACA;EACE;EACA,WAAW,UAAmB,2BAA2B,eAAe,kBAAkB,OAAO,IAAI;CACvG,GACA,cACE,UACA,EACE,UAAU,2BAXS,aAAa,KAAA,IAAY,iCAAiC,UAWtB,gBAAgB,EACzE,GACA,SAAS,QAAQ,OAAO,QAAQ,CAClC,CACF;AACF;;;AC3bA,IAAM,gBAAgB,QAAwB,IAAI,YAAY;AAE9D,IAAM,yBAAyB,WAAwC;CACrE,MAAM,UAAU;CAChB,MAAM,UAAU,SAAS;CAEzB,OACE,SAAS,sBAAsB,QAC/B,YAAY,WACZ,YAAY,cACZ,YAAY;AAEhB;AAEA,IAAM,0BAA0B,OAAsB,aAAwC;CAC5F,IAAI,aAAa,MAAM,GAAG,MAAM,aAAa,SAAS,GAAG,GAAG,OAAO;CAEnE,IAAI,OAAO,SAAS,QAAQ,WACX;OAAA,MAAM,WAAW,MAAM,aACvB,SAAS,KAAK,OAAO;CAAA;CAEtC,IAAI,OAAO,SAAS,SAAS,aAAa,MAAM,YAAY,SAAS,MAAM,OAAO;CAClF,IAAI,OAAO,SAAS,SAAS,aAAa,MAAM,YAAY,SAAS,MAAM,OAAO;CAClF,IAAI,OAAO,SAAS,QAAQ,aAAa,MAAM,WAAW,SAAS,KAAK,OAAO;CAC/E,IAAI,OAAO,SAAS,UAAU,aAAa,MAAM,aAAa,SAAS,OAAO,OAAO;CAErF,OAAO;AACT;AAEA,IAAM,kBAAkB,IAA0D,SAAiB;CACjG,IAAI,CAAC,IAAI;CACT,QAAa,QAAQ,GAAG,IAAI,CAAC;AAC/B;AAEA,IAAa,+BAA+B,EAC1C,UACA,SACA,UACA,UACA,UAAU,SACV,UAAU,MACV,iBAAiB,MACjB,qBAAqB,MACrB,iBAAiB,4BAC6B;CAC9C,MAAM,iBAAiB,YAAY;CAEnC,MAAM,cAAc,OAAO,QAAQ;CACnC,MAAM,aAAa,OAAO,OAAO;CACjC,MAAM,cAAc,OAAO,QAAQ;CACnC,MAAM,cAAc,OAAO,YAAY,cAAc;CACrD,MAAM,aAAa,OAAO,OAAO;CACjC,MAAM,aAAa,OAAO,OAAO;CACjC,MAAM,oBAAoB,OAAO,cAAc;CAC/C,MAAM,wBAAwB,OAAO,kBAAkB;CACvD,MAAM,oBAAoB,OAAO,cAAc;CAC/C,MAAM,6BAA6B,OAAO,KAAK;CAE/C,YAAY,UAAU;CACtB,WAAW,UAAU;CACrB,YAAY,UAAU;CACtB,YAAY,UAAU,YAAY;CAClC,WAAW,UAAU;CACrB,WAAW,UAAU;CACrB,kBAAkB,UAAU;CAC5B,sBAAsB,UAAU;CAChC,kBAAkB,UAAU;CAE5B,IAAI,CAAC,WAAW,YAAY,SAC1B,2BAA2B,UAAU;CAGvC,gBAAgB;EACd,IAAI,OAAO,WAAW,aAAa;EAEnC,MAAM,aAAa,UAAyB;GAC1C,IAAI,CAAC,WAAW,SAAS;GACzB,IAAI,sBAAsB,WAAW,kBAAkB,QAAQ,MAAM,MAAM,GAAG;GAC9E,IAAI,MAAM,QAAQ;GAClB,IAAI,CAAC,uBAAuB,OAAO,YAAY,OAAO,GAAG;GAEzD,IAAI,kBAAkB,SACpB,MAAM,eAAe;GAGvB,MAAM,OAAO,WAAW,QAAQ;GAChC,IAAI,CAAC,MAAM;GAEX,eAAe,YAAY,SAAS,IAAI;GAExC,IAAI,WAAW,YAAY,WAAW;IACpC,eAAe,YAAY,SAAS,IAAI;IACxC;GACF;GAEA,2BAA2B,UAAU;EACvC;EAEA,MAAM,WAAWC,YAAyB;GACxC,IAAI,CAAC,WAAW,SAAS;GACzB,IAAI,WAAW,YAAY,SAAS;GACpC,IAAI,CAAC,2BAA2B,SAAS;GACzC,IAAI,aAAaA,QAAM,GAAG,MAAM,aAAa,YAAY,QAAQ,GAAG,GAAG;GAEvE,2BAA2B,UAAU;GAErC,IAAI,sBAAsB,WAAW,kBAAkB,QAAQA,QAAM,MAAM,GAAG;GAE9E,IAAI,kBAAkB,SACpBA,QAAM,eAAe;GAGvB,MAAMC,SAAO,WAAW,QAAQ;GAChC,IAAI,CAACA,QAAM;GAEX,eAAe,YAAY,SAASA,MAAI;EAC1C;EAEA,MAAM,eAAe;GACnB,2BAA2B,UAAU;EACvC;EAEA,OAAO,iBAAiB,WAAW,SAAS;EAC5C,OAAO,iBAAiB,SAAS,OAAO;EACxC,OAAO,iBAAiB,QAAQ,MAAM;EAEtC,aAAa;GACX,OAAO,oBAAoB,WAAW,SAAS;GAC/C,OAAO,oBAAoB,SAAS,OAAO;GAC3C,OAAO,oBAAoB,QAAQ,MAAM;EAC3C;CACF,GAAG,CAAA,CAAE;AACP"}
|
package/dist/routePrefetch.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ type RoutePrefetchProviderProps = {
|
|
|
16
16
|
dataPrefetchTtlMs?: number;
|
|
17
17
|
dataPrefetchHandleKey?: string;
|
|
18
18
|
};
|
|
19
|
-
export declare const RoutePrefetchProvider: ({ children, defaultPrefetch, dataPrefetchTtlMs, dataPrefetchHandleKey, }: RoutePrefetchProviderProps) => import("react
|
|
19
|
+
export declare const RoutePrefetchProvider: ({ children, defaultPrefetch, dataPrefetchTtlMs, dataPrefetchHandleKey, }: RoutePrefetchProviderProps) => import("react").JSX.Element;
|
|
20
20
|
export declare const useRoutePrefetch: () => RoutePrefetchApi;
|
|
21
21
|
export type { RoutePrefetchProviderProps };
|
|
22
22
|
//# sourceMappingURL=routePrefetch.d.ts.map
|
|
@@ -1 +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,
|
|
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,gCAsJ5B,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,gBAAoD,CAAA;AAExF,YAAY,EAAE,0BAA0B,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rpcbase/router",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.167.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -62,6 +62,9 @@
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"react-router": "^7.0.0 || ^8.0.0"
|
|
67
|
+
},
|
|
65
68
|
"dependencies": {},
|
|
66
69
|
"devDependencies": {}
|
|
67
70
|
}
|