@rpcbase/router 0.138.0 → 0.140.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -19
- package/dist/index.js +251 -207
- package/dist/index.js.map +1 -1
- package/dist/queryOverlay.d.ts +28 -14
- package/dist/queryOverlay.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -76,10 +76,10 @@ const reportsRoute = lazyRoute(() => import("@/pages/ReportsPage"), {
|
|
|
76
76
|
|
|
77
77
|
## Query-driven overlays
|
|
78
78
|
|
|
79
|
-
Use `useQueryOverlay` to drive modal/drawer/sheet state from
|
|
79
|
+
Use `useQueryOverlay` to drive modal/drawer/sheet state from one or more query params.
|
|
80
80
|
|
|
81
81
|
```tsx
|
|
82
|
-
import { useQueryOverlay } from "@rpcbase/router"
|
|
82
|
+
import { QueryOverlay, useQueryOverlay } from "@rpcbase/router"
|
|
83
83
|
|
|
84
84
|
type SupportOverlay = "support" | "feedback"
|
|
85
85
|
|
|
@@ -88,34 +88,50 @@ const isSupportOverlay = (value: string | null): value is SupportOverlay =>
|
|
|
88
88
|
|
|
89
89
|
function useSupportOverlay() {
|
|
90
90
|
return useQueryOverlay<SupportOverlay>({
|
|
91
|
-
|
|
92
|
-
parse: (
|
|
91
|
+
params: ["modal"],
|
|
92
|
+
parse: (params) => {
|
|
93
|
+
const value = params.get("modal")
|
|
94
|
+
return isSupportOverlay(value) ? value : null
|
|
95
|
+
},
|
|
96
|
+
write: (params, value) => {
|
|
97
|
+
params.set("modal", value)
|
|
98
|
+
},
|
|
99
|
+
clear: (params) => {
|
|
100
|
+
params.delete("modal")
|
|
101
|
+
},
|
|
93
102
|
})
|
|
94
103
|
}
|
|
104
|
+
|
|
105
|
+
function SupportModalOverlay() {
|
|
106
|
+
const overlay = useSupportOverlay()
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
<QueryOverlay overlay={overlay} fallback={<SupportModalLoading />} errorFallback={<SupportModalError />}>
|
|
110
|
+
{(state, controls) => (
|
|
111
|
+
<SupportModal
|
|
112
|
+
open={controls.open}
|
|
113
|
+
onOpenChange={controls.setOpen}
|
|
114
|
+
kind={state}
|
|
115
|
+
/>
|
|
116
|
+
)}
|
|
117
|
+
</QueryOverlay>
|
|
118
|
+
)
|
|
119
|
+
}
|
|
95
120
|
```
|
|
96
121
|
|
|
97
122
|
Returned API:
|
|
98
123
|
|
|
99
|
-
- `value`: parsed value from the query
|
|
100
|
-
- `isOpen`: `true` when
|
|
124
|
+
- `value`: parsed value from the query params (`T | null`)
|
|
125
|
+
- `isOpen`: `true` when the overlay is visually open
|
|
126
|
+
- `shouldRender`: `true` while the overlay should stay mounted
|
|
101
127
|
- `buildHref(nextValue)`: builds next URL for links/prefetch
|
|
102
|
-
- `openOverlay(nextValue)`:
|
|
103
|
-
- `closeOverlay()`:
|
|
128
|
+
- `openOverlay(nextValue)`: clears the overlay params, writes the next state, and replaces the current URL
|
|
129
|
+
- `closeOverlay()`: visually closes immediately, then clears the overlay params after `closeDelayMs`
|
|
130
|
+
- `resetOptimisticClose()`: cancels a pending optimistic close
|
|
104
131
|
|
|
105
132
|
Overlay query updates use `history.replaceState` instead of a router navigation. This keeps the URL shareable without forcing the current route tree to re-render when only an overlay param changes.
|
|
106
133
|
During SSR and hydration, `useQueryOverlay` reads the current React Router location so query-driven overlays can render in their initial server state.
|
|
107
134
|
|
|
108
|
-
For overlays that need to update multiple query params at once, use `replaceQueryParams`:
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
import { replaceQueryParams } from "@rpcbase/router"
|
|
112
|
-
|
|
113
|
-
replaceQueryParams((params) => {
|
|
114
|
-
params.set("booking_flow_step", "summary")
|
|
115
|
-
params.delete("booking_flow_payment_step")
|
|
116
|
-
})
|
|
117
|
-
```
|
|
118
|
-
|
|
119
135
|
## Shortcut prefetch + navigate
|
|
120
136
|
|
|
121
137
|
Use `useShortcutPrefetchNavigate` to prefetch on keydown and navigate on keyup.
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { UNSAFE_DataRouterContext, matchRoutes, Link as Link$1, useLocation, UNS
|
|
|
2
2
|
export * from "react-router";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
5
|
-
import { createContext, useContext, useRef, forwardRef, useEffect, useState, useSyncExternalStore } from "react";
|
|
5
|
+
import { createContext, useContext, useRef, forwardRef, useEffect, createElement, Suspense, useState, useSyncExternalStore, Component, isValidElement, cloneElement } from "react";
|
|
6
6
|
const ROUTE_MODULE_IMPORTER_HANDLE = "__rpcbaseRouteModuleImporter";
|
|
7
7
|
const ROUTE_PREFETCH_DATA_HANDLE = "prefetchData";
|
|
8
8
|
const isHandleObject = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
@@ -768,6 +768,29 @@ const useRegisterNavigationGuard = (guard) => {
|
|
|
768
768
|
};
|
|
769
769
|
}, [guard.id, guard.enabled, guard.message, guard.priority, guard.blockOnSearch, guard.shouldBlockNavigation, guard.shouldBlockUnload]);
|
|
770
770
|
};
|
|
771
|
+
class QueryOverlayErrorBoundary extends Component {
|
|
772
|
+
state = {
|
|
773
|
+
error: null
|
|
774
|
+
};
|
|
775
|
+
static getDerivedStateFromError(error) {
|
|
776
|
+
return {
|
|
777
|
+
error
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
componentDidCatch(error, errorInfo) {
|
|
781
|
+
console.error("Query overlay rendering error", error, errorInfo);
|
|
782
|
+
}
|
|
783
|
+
componentDidUpdate(previousProps) {
|
|
784
|
+
if (this.state.error === null) return;
|
|
785
|
+
if (previousProps.resetKey === this.props.resetKey) return;
|
|
786
|
+
this.setState({
|
|
787
|
+
error: null
|
|
788
|
+
});
|
|
789
|
+
}
|
|
790
|
+
render() {
|
|
791
|
+
return this.state.error === null ? this.props.children : this.props.fallback(this.state.error);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
771
794
|
const QUERY_OVERLAY_URL_CHANGE_EVENT = "rpcbase-query-overlay-url-change";
|
|
772
795
|
function getCurrentUrlSnapshot(fallback) {
|
|
773
796
|
if (typeof window === "undefined") {
|
|
@@ -786,6 +809,9 @@ function getCurrentUrlSnapshot(fallback) {
|
|
|
786
809
|
function getParamValueFromSearch(search, param) {
|
|
787
810
|
return new URLSearchParams(search).get(param);
|
|
788
811
|
}
|
|
812
|
+
function getSearchFromUrlSnapshot(fallback) {
|
|
813
|
+
return getCurrentUrlSnapshot(fallback).search;
|
|
814
|
+
}
|
|
789
815
|
function useRouterUrlSnapshot() {
|
|
790
816
|
const $ = c(4);
|
|
791
817
|
const context = useContext(UNSAFE_LocationContext);
|
|
@@ -813,6 +839,10 @@ function getCurrentParamValue(param) {
|
|
|
813
839
|
if (typeof window === "undefined") return null;
|
|
814
840
|
return getParamValueFromSearch(window.location.search, param);
|
|
815
841
|
}
|
|
842
|
+
function getCurrentSearch() {
|
|
843
|
+
if (typeof window === "undefined") return "";
|
|
844
|
+
return window.location.search;
|
|
845
|
+
}
|
|
816
846
|
function subscribeToQueryOverlayUrl(listener) {
|
|
817
847
|
if (typeof window === "undefined") return () => void 0;
|
|
818
848
|
window.addEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener);
|
|
@@ -830,6 +860,41 @@ function buildUrl(searchParams, fallback) {
|
|
|
830
860
|
const nextSearch = searchParams.toString();
|
|
831
861
|
return `${pathname}${nextSearch ? `?${nextSearch}` : ""}${hash}`;
|
|
832
862
|
}
|
|
863
|
+
function clearOverlaySearchParams(searchParams, params, clear) {
|
|
864
|
+
clear(searchParams);
|
|
865
|
+
for (const param of params) {
|
|
866
|
+
searchParams.delete(param);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
function buildOverlayUrlStateKey(search, params) {
|
|
870
|
+
const searchParams = new URLSearchParams(search);
|
|
871
|
+
return params.map((param) => {
|
|
872
|
+
const values = searchParams.getAll(param);
|
|
873
|
+
return `${param}:${values.join("\0")}`;
|
|
874
|
+
}).join("");
|
|
875
|
+
}
|
|
876
|
+
function renderQueryOverlayFallback(fallback, controls, error, includeError = false) {
|
|
877
|
+
if (typeof fallback === "function") {
|
|
878
|
+
if (!includeError) {
|
|
879
|
+
return fallback(controls);
|
|
880
|
+
}
|
|
881
|
+
return fallback({
|
|
882
|
+
...controls,
|
|
883
|
+
error
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
if (isValidElement(fallback)) {
|
|
887
|
+
return cloneElement(fallback, {
|
|
888
|
+
open: controls.open,
|
|
889
|
+
isOpen: controls.open,
|
|
890
|
+
setOpen: controls.setOpen,
|
|
891
|
+
onOpenChange: controls.onOpenChange,
|
|
892
|
+
closeOverlay: controls.closeOverlay,
|
|
893
|
+
error
|
|
894
|
+
});
|
|
895
|
+
}
|
|
896
|
+
return fallback ?? null;
|
|
897
|
+
}
|
|
833
898
|
function replaceQueryParams(update) {
|
|
834
899
|
if (typeof window === "undefined") return;
|
|
835
900
|
const {
|
|
@@ -867,82 +932,132 @@ function useQueryParam(param) {
|
|
|
867
932
|
}
|
|
868
933
|
return useSyncExternalStore(subscribeToQueryOverlayUrl, t0, t1);
|
|
869
934
|
}
|
|
870
|
-
function
|
|
871
|
-
const $ = c(
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
$[
|
|
935
|
+
function useQuerySearch() {
|
|
936
|
+
const $ = c(2);
|
|
937
|
+
const routerUrlSnapshot = useRouterUrlSnapshot();
|
|
938
|
+
let t0;
|
|
939
|
+
if ($[0] !== routerUrlSnapshot) {
|
|
940
|
+
t0 = () => getSearchFromUrlSnapshot(routerUrlSnapshot);
|
|
941
|
+
$[0] = routerUrlSnapshot;
|
|
942
|
+
$[1] = t0;
|
|
877
943
|
} else {
|
|
878
|
-
|
|
944
|
+
t0 = $[1];
|
|
879
945
|
}
|
|
880
|
-
|
|
881
|
-
|
|
946
|
+
return useSyncExternalStore(subscribeToQueryOverlayUrl, getCurrentSearch, t0);
|
|
947
|
+
}
|
|
948
|
+
const useQueryOverlay = (t0) => {
|
|
949
|
+
const $ = c(38);
|
|
950
|
+
const {
|
|
951
|
+
params,
|
|
952
|
+
parse,
|
|
953
|
+
write,
|
|
954
|
+
clear,
|
|
955
|
+
closeDelayMs: t1
|
|
956
|
+
} = t0;
|
|
957
|
+
const closeDelayMs = t1 === void 0 ? 0 : t1;
|
|
958
|
+
const routerUrlSnapshot = useRouterUrlSnapshot();
|
|
959
|
+
const search = useQuerySearch();
|
|
882
960
|
const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false);
|
|
883
961
|
const closeTimeoutRef = useRef(null);
|
|
884
962
|
let t2;
|
|
885
|
-
if ($[
|
|
886
|
-
t2 = ()
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
}
|
|
890
|
-
window.clearTimeout(closeTimeoutRef.current);
|
|
891
|
-
closeTimeoutRef.current = null;
|
|
892
|
-
};
|
|
963
|
+
if ($[0] !== parse || $[1] !== search) {
|
|
964
|
+
t2 = parse(new URLSearchParams(search));
|
|
965
|
+
$[0] = parse;
|
|
966
|
+
$[1] = search;
|
|
893
967
|
$[2] = t2;
|
|
894
968
|
} else {
|
|
895
969
|
t2 = $[2];
|
|
896
970
|
}
|
|
897
|
-
const
|
|
971
|
+
const value = t2;
|
|
972
|
+
const isUrlOpen = value !== null;
|
|
898
973
|
let t3;
|
|
899
|
-
if ($[3]
|
|
900
|
-
t3 = ()
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
$[3] = t3;
|
|
974
|
+
if ($[3] !== params || $[4] !== search) {
|
|
975
|
+
t3 = buildOverlayUrlStateKey(search, params);
|
|
976
|
+
$[3] = params;
|
|
977
|
+
$[4] = search;
|
|
978
|
+
$[5] = t3;
|
|
905
979
|
} else {
|
|
906
|
-
t3 = $[
|
|
980
|
+
t3 = $[5];
|
|
907
981
|
}
|
|
908
|
-
const
|
|
982
|
+
const overlayUrlStateKey = t3;
|
|
909
983
|
let t4;
|
|
910
|
-
|
|
911
|
-
if ($[4] !== isUrlOpen) {
|
|
984
|
+
if ($[6] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
912
985
|
t4 = () => {
|
|
913
|
-
if (
|
|
914
|
-
setIsOptimisticallyClosed(false);
|
|
986
|
+
if (closeTimeoutRef.current === null) {
|
|
915
987
|
return;
|
|
916
988
|
}
|
|
989
|
+
window.clearTimeout(closeTimeoutRef.current);
|
|
990
|
+
closeTimeoutRef.current = null;
|
|
991
|
+
};
|
|
992
|
+
$[6] = t4;
|
|
993
|
+
} else {
|
|
994
|
+
t4 = $[6];
|
|
995
|
+
}
|
|
996
|
+
const clearScheduledClose = t4;
|
|
997
|
+
let t5;
|
|
998
|
+
if ($[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
999
|
+
t5 = () => {
|
|
917
1000
|
clearScheduledClose();
|
|
918
1001
|
setIsOptimisticallyClosed(false);
|
|
919
1002
|
};
|
|
920
|
-
|
|
921
|
-
$[4] = isUrlOpen;
|
|
922
|
-
$[5] = t4;
|
|
923
|
-
$[6] = t5;
|
|
1003
|
+
$[7] = t5;
|
|
924
1004
|
} else {
|
|
925
|
-
|
|
926
|
-
t5 = $[6];
|
|
1005
|
+
t5 = $[7];
|
|
927
1006
|
}
|
|
928
|
-
|
|
1007
|
+
const resetOptimisticClose = t5;
|
|
929
1008
|
let t6;
|
|
1009
|
+
if ($[8] !== clear || $[9] !== params) {
|
|
1010
|
+
t6 = () => {
|
|
1011
|
+
replaceQueryParams((searchParams) => {
|
|
1012
|
+
clearOverlaySearchParams(searchParams, params, clear);
|
|
1013
|
+
});
|
|
1014
|
+
};
|
|
1015
|
+
$[8] = clear;
|
|
1016
|
+
$[9] = params;
|
|
1017
|
+
$[10] = t6;
|
|
1018
|
+
} else {
|
|
1019
|
+
t6 = $[10];
|
|
1020
|
+
}
|
|
1021
|
+
const closeUrlOverlay = t6;
|
|
930
1022
|
let t7;
|
|
931
|
-
if ($[
|
|
932
|
-
|
|
933
|
-
|
|
1023
|
+
if ($[11] !== clear || $[12] !== params || $[13] !== routerUrlSnapshot || $[14] !== write) {
|
|
1024
|
+
t7 = (nextValue) => {
|
|
1025
|
+
const searchParams_0 = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search);
|
|
1026
|
+
clearOverlaySearchParams(searchParams_0, params, clear);
|
|
1027
|
+
if (nextValue !== null) {
|
|
1028
|
+
write(searchParams_0, nextValue);
|
|
1029
|
+
}
|
|
1030
|
+
return buildUrl(searchParams_0, routerUrlSnapshot);
|
|
934
1031
|
};
|
|
935
|
-
|
|
936
|
-
$[
|
|
937
|
-
$[
|
|
1032
|
+
$[11] = clear;
|
|
1033
|
+
$[12] = params;
|
|
1034
|
+
$[13] = routerUrlSnapshot;
|
|
1035
|
+
$[14] = write;
|
|
1036
|
+
$[15] = t7;
|
|
938
1037
|
} else {
|
|
939
|
-
|
|
940
|
-
t7 = $[8];
|
|
1038
|
+
t7 = $[15];
|
|
941
1039
|
}
|
|
942
|
-
|
|
1040
|
+
const buildHref = t7;
|
|
943
1041
|
let t8;
|
|
944
|
-
if ($[
|
|
945
|
-
t8 = () => {
|
|
1042
|
+
if ($[16] !== clear || $[17] !== params || $[18] !== write) {
|
|
1043
|
+
t8 = (nextValue_0) => {
|
|
1044
|
+
resetOptimisticClose();
|
|
1045
|
+
replaceQueryParams((searchParams_1) => {
|
|
1046
|
+
clearOverlaySearchParams(searchParams_1, params, clear);
|
|
1047
|
+
write(searchParams_1, nextValue_0);
|
|
1048
|
+
});
|
|
1049
|
+
};
|
|
1050
|
+
$[16] = clear;
|
|
1051
|
+
$[17] = params;
|
|
1052
|
+
$[18] = write;
|
|
1053
|
+
$[19] = t8;
|
|
1054
|
+
} else {
|
|
1055
|
+
t8 = $[19];
|
|
1056
|
+
}
|
|
1057
|
+
const openOverlay = t8;
|
|
1058
|
+
let t9;
|
|
1059
|
+
if ($[20] !== closeDelayMs || $[21] !== closeUrlOverlay || $[22] !== isUrlOpen) {
|
|
1060
|
+
t9 = () => {
|
|
946
1061
|
if (!isUrlOpen) {
|
|
947
1062
|
return;
|
|
948
1063
|
}
|
|
@@ -957,180 +1072,109 @@ function useQueryOverlayLifecycle(isUrlOpen, closeUrlOverlay, t0) {
|
|
|
957
1072
|
closeUrlOverlay();
|
|
958
1073
|
}, closeDelayMs);
|
|
959
1074
|
};
|
|
960
|
-
$[
|
|
961
|
-
$[
|
|
962
|
-
$[
|
|
963
|
-
$[
|
|
1075
|
+
$[20] = closeDelayMs;
|
|
1076
|
+
$[21] = closeUrlOverlay;
|
|
1077
|
+
$[22] = isUrlOpen;
|
|
1078
|
+
$[23] = t9;
|
|
964
1079
|
} else {
|
|
965
|
-
|
|
1080
|
+
t9 = $[23];
|
|
966
1081
|
}
|
|
967
|
-
const closeOverlay =
|
|
968
|
-
const t9 = isUrlOpen && !isOptimisticallyClosed;
|
|
1082
|
+
const closeOverlay = t9;
|
|
969
1083
|
let t10;
|
|
970
|
-
if ($[
|
|
971
|
-
t10 = {
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
resetOptimisticClose
|
|
976
|
-
};
|
|
977
|
-
$[13] = closeOverlay;
|
|
978
|
-
$[14] = isUrlOpen;
|
|
979
|
-
$[15] = t9;
|
|
980
|
-
$[16] = t10;
|
|
981
|
-
} else {
|
|
982
|
-
t10 = $[16];
|
|
983
|
-
}
|
|
984
|
-
return t10;
|
|
985
|
-
}
|
|
986
|
-
const useQueryOverlay = (t0) => {
|
|
987
|
-
const $ = c(16);
|
|
988
|
-
const {
|
|
989
|
-
param,
|
|
990
|
-
parse
|
|
991
|
-
} = t0;
|
|
992
|
-
const routerUrlSnapshot = useRouterUrlSnapshot();
|
|
993
|
-
const rawValue = useQueryParam(param);
|
|
994
|
-
let t1;
|
|
995
|
-
if ($[0] !== param || $[1] !== routerUrlSnapshot) {
|
|
996
|
-
t1 = (nextValue) => {
|
|
997
|
-
const searchParams = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search);
|
|
998
|
-
if (nextValue === null) {
|
|
999
|
-
searchParams.delete(param);
|
|
1000
|
-
} else {
|
|
1001
|
-
searchParams.set(param, nextValue);
|
|
1084
|
+
if ($[24] !== isUrlOpen) {
|
|
1085
|
+
t10 = () => {
|
|
1086
|
+
if (isUrlOpen) {
|
|
1087
|
+
setIsOptimisticallyClosed(false);
|
|
1088
|
+
return;
|
|
1002
1089
|
}
|
|
1003
|
-
|
|
1090
|
+
clearScheduledClose();
|
|
1091
|
+
setIsOptimisticallyClosed(false);
|
|
1004
1092
|
};
|
|
1005
|
-
$[
|
|
1006
|
-
$[
|
|
1007
|
-
$[2] = t1;
|
|
1008
|
-
} else {
|
|
1009
|
-
t1 = $[2];
|
|
1010
|
-
}
|
|
1011
|
-
const buildHref = t1;
|
|
1012
|
-
let t2;
|
|
1013
|
-
if ($[3] !== parse || $[4] !== rawValue) {
|
|
1014
|
-
t2 = parse(rawValue);
|
|
1015
|
-
$[3] = parse;
|
|
1016
|
-
$[4] = rawValue;
|
|
1017
|
-
$[5] = t2;
|
|
1093
|
+
$[24] = isUrlOpen;
|
|
1094
|
+
$[25] = t10;
|
|
1018
1095
|
} else {
|
|
1019
|
-
|
|
1096
|
+
t10 = $[25];
|
|
1020
1097
|
}
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
});
|
|
1028
|
-
};
|
|
1029
|
-
$[6] = param;
|
|
1030
|
-
$[7] = t3;
|
|
1098
|
+
let t11;
|
|
1099
|
+
if ($[26] !== isUrlOpen || $[27] !== overlayUrlStateKey) {
|
|
1100
|
+
t11 = [isUrlOpen, overlayUrlStateKey];
|
|
1101
|
+
$[26] = isUrlOpen;
|
|
1102
|
+
$[27] = overlayUrlStateKey;
|
|
1103
|
+
$[28] = t11;
|
|
1031
1104
|
} else {
|
|
1032
|
-
|
|
1105
|
+
t11 = $[28];
|
|
1033
1106
|
}
|
|
1034
|
-
|
|
1035
|
-
let
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
});
|
|
1107
|
+
useEffect(t10, t11);
|
|
1108
|
+
let t12;
|
|
1109
|
+
let t13;
|
|
1110
|
+
if ($[29] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
1111
|
+
t12 = () => () => {
|
|
1112
|
+
clearScheduledClose();
|
|
1041
1113
|
};
|
|
1042
|
-
|
|
1043
|
-
$[
|
|
1114
|
+
t13 = [];
|
|
1115
|
+
$[29] = t12;
|
|
1116
|
+
$[30] = t13;
|
|
1044
1117
|
} else {
|
|
1045
|
-
|
|
1118
|
+
t12 = $[29];
|
|
1119
|
+
t13 = $[30];
|
|
1046
1120
|
}
|
|
1047
|
-
|
|
1048
|
-
const
|
|
1049
|
-
let
|
|
1050
|
-
if ($[
|
|
1051
|
-
|
|
1121
|
+
useEffect(t12, t13);
|
|
1122
|
+
const t14 = isUrlOpen && !isOptimisticallyClosed;
|
|
1123
|
+
let t15;
|
|
1124
|
+
if ($[31] !== buildHref || $[32] !== closeOverlay || $[33] !== isUrlOpen || $[34] !== openOverlay || $[35] !== t14 || $[36] !== value) {
|
|
1125
|
+
t15 = {
|
|
1126
|
+
isOpen: t14,
|
|
1127
|
+
shouldRender: isUrlOpen,
|
|
1052
1128
|
value,
|
|
1053
|
-
isOpen: t5,
|
|
1054
1129
|
buildHref,
|
|
1055
1130
|
openOverlay,
|
|
1056
|
-
closeOverlay
|
|
1057
|
-
|
|
1058
|
-
$[10] = buildHref;
|
|
1059
|
-
$[11] = closeOverlay;
|
|
1060
|
-
$[12] = openOverlay;
|
|
1061
|
-
$[13] = t5;
|
|
1062
|
-
$[14] = value;
|
|
1063
|
-
$[15] = t6;
|
|
1064
|
-
} else {
|
|
1065
|
-
t6 = $[15];
|
|
1066
|
-
}
|
|
1067
|
-
return t6;
|
|
1068
|
-
};
|
|
1069
|
-
const useOptimisticQueryOverlay = (t0) => {
|
|
1070
|
-
const $ = c(16);
|
|
1071
|
-
let closeDelayMs;
|
|
1072
|
-
let options;
|
|
1073
|
-
if ($[0] !== t0) {
|
|
1074
|
-
({
|
|
1075
|
-
closeDelayMs,
|
|
1076
|
-
...options
|
|
1077
|
-
} = t0);
|
|
1078
|
-
$[0] = t0;
|
|
1079
|
-
$[1] = closeDelayMs;
|
|
1080
|
-
$[2] = options;
|
|
1081
|
-
} else {
|
|
1082
|
-
closeDelayMs = $[1];
|
|
1083
|
-
options = $[2];
|
|
1084
|
-
}
|
|
1085
|
-
const overlay = useQueryOverlay(options);
|
|
1086
|
-
let t1;
|
|
1087
|
-
if ($[3] !== closeDelayMs) {
|
|
1088
|
-
t1 = {
|
|
1089
|
-
closeDelayMs
|
|
1090
|
-
};
|
|
1091
|
-
$[3] = closeDelayMs;
|
|
1092
|
-
$[4] = t1;
|
|
1093
|
-
} else {
|
|
1094
|
-
t1 = $[4];
|
|
1095
|
-
}
|
|
1096
|
-
const lifecycle = useQueryOverlayLifecycle(overlay.value !== null, overlay.closeOverlay, t1);
|
|
1097
|
-
let t2;
|
|
1098
|
-
if ($[5] !== lifecycle || $[6] !== overlay) {
|
|
1099
|
-
t2 = (nextValue) => {
|
|
1100
|
-
lifecycle.resetOptimisticClose();
|
|
1101
|
-
overlay.openOverlay(nextValue);
|
|
1102
|
-
};
|
|
1103
|
-
$[5] = lifecycle;
|
|
1104
|
-
$[6] = overlay;
|
|
1105
|
-
$[7] = t2;
|
|
1106
|
-
} else {
|
|
1107
|
-
t2 = $[7];
|
|
1108
|
-
}
|
|
1109
|
-
const openOverlay = t2;
|
|
1110
|
-
let t3;
|
|
1111
|
-
if ($[8] !== lifecycle.closeOverlay || $[9] !== lifecycle.isOpen || $[10] !== lifecycle.resetOptimisticClose || $[11] !== lifecycle.shouldRender || $[12] !== openOverlay || $[13] !== overlay.buildHref || $[14] !== overlay.value) {
|
|
1112
|
-
t3 = {
|
|
1113
|
-
value: overlay.value,
|
|
1114
|
-
isOpen: lifecycle.isOpen,
|
|
1115
|
-
shouldRender: lifecycle.shouldRender,
|
|
1116
|
-
buildHref: overlay.buildHref,
|
|
1117
|
-
openOverlay,
|
|
1118
|
-
closeOverlay: lifecycle.closeOverlay,
|
|
1119
|
-
resetOptimisticClose: lifecycle.resetOptimisticClose
|
|
1131
|
+
closeOverlay,
|
|
1132
|
+
resetOptimisticClose
|
|
1120
1133
|
};
|
|
1121
|
-
$[
|
|
1122
|
-
$[
|
|
1123
|
-
$[
|
|
1124
|
-
$[
|
|
1125
|
-
$[
|
|
1126
|
-
$[
|
|
1127
|
-
$[
|
|
1128
|
-
$[15] = t3;
|
|
1134
|
+
$[31] = buildHref;
|
|
1135
|
+
$[32] = closeOverlay;
|
|
1136
|
+
$[33] = isUrlOpen;
|
|
1137
|
+
$[34] = openOverlay;
|
|
1138
|
+
$[35] = t14;
|
|
1139
|
+
$[36] = value;
|
|
1140
|
+
$[37] = t15;
|
|
1129
1141
|
} else {
|
|
1130
|
-
|
|
1142
|
+
t15 = $[37];
|
|
1131
1143
|
}
|
|
1132
|
-
return
|
|
1144
|
+
return t15;
|
|
1133
1145
|
};
|
|
1146
|
+
function QueryOverlay({
|
|
1147
|
+
overlay,
|
|
1148
|
+
fallback,
|
|
1149
|
+
errorFallback,
|
|
1150
|
+
children
|
|
1151
|
+
}) {
|
|
1152
|
+
if (!overlay.shouldRender || overlay.value === null) return null;
|
|
1153
|
+
const setOpen = (open) => {
|
|
1154
|
+
if (open) {
|
|
1155
|
+
overlay.resetOptimisticClose();
|
|
1156
|
+
return;
|
|
1157
|
+
}
|
|
1158
|
+
overlay.closeOverlay();
|
|
1159
|
+
};
|
|
1160
|
+
const controls = {
|
|
1161
|
+
open: overlay.isOpen,
|
|
1162
|
+
setOpen,
|
|
1163
|
+
closeOverlay: overlay.closeOverlay,
|
|
1164
|
+
resetOptimisticClose: overlay.resetOptimisticClose
|
|
1165
|
+
};
|
|
1166
|
+
const fallbackControls = {
|
|
1167
|
+
...controls,
|
|
1168
|
+
onOpenChange: setOpen
|
|
1169
|
+
};
|
|
1170
|
+
const resetKey = overlay.buildHref(overlay.value);
|
|
1171
|
+
return createElement(QueryOverlayErrorBoundary, {
|
|
1172
|
+
resetKey,
|
|
1173
|
+
fallback: (error) => renderQueryOverlayFallback(errorFallback, fallbackControls, error, true)
|
|
1174
|
+
}, createElement(Suspense, {
|
|
1175
|
+
fallback: renderQueryOverlayFallback(fallback, fallbackControls)
|
|
1176
|
+
}, children(overlay.value, controls)));
|
|
1177
|
+
}
|
|
1134
1178
|
const normalizeKey = (key) => key.toLowerCase();
|
|
1135
1179
|
const defaultIsTypingTarget = (target) => {
|
|
1136
1180
|
const element = target;
|
|
@@ -1235,6 +1279,7 @@ const useShortcutPrefetchNavigate = ({
|
|
|
1235
1279
|
};
|
|
1236
1280
|
export {
|
|
1237
1281
|
Link,
|
|
1282
|
+
QueryOverlay,
|
|
1238
1283
|
RoutePrefetchProvider,
|
|
1239
1284
|
getNavigationGuards,
|
|
1240
1285
|
lazyRoute,
|
|
@@ -1243,10 +1288,9 @@ export {
|
|
|
1243
1288
|
subscribeNavigationGuards,
|
|
1244
1289
|
upsertNavigationGuard,
|
|
1245
1290
|
useApplyMeta,
|
|
1246
|
-
useOptimisticQueryOverlay,
|
|
1247
1291
|
useQueryOverlay,
|
|
1248
|
-
useQueryOverlayLifecycle,
|
|
1249
1292
|
useQueryParam,
|
|
1293
|
+
useQuerySearch,
|
|
1250
1294
|
useRegisterNavigationGuard,
|
|
1251
1295
|
useRoutePrefetch,
|
|
1252
1296
|
useShortcutPrefetchNavigate
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/routePrefetchHandles.ts","../src/routePrefetch.tsx","../src/Link.tsx","../src/lazyRoute.tsx","../src/useApplyMeta.tsx","../src/navigationGuards.ts","../src/queryOverlay.ts","../src/shortcutPrefetchNavigate.ts"],"sourcesContent":["export const ROUTE_MODULE_IMPORTER_HANDLE = \"__rpcbaseRouteModuleImporter\"\nexport const ROUTE_PREFETCH_DATA_HANDLE = \"prefetchData\"\n\nexport type RouteHandleObject = Record<string, unknown>\n\ntype RouteModuleImporter = () => Promise<unknown>\n\nconst isHandleObject = (value: unknown): value is RouteHandleObject =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n\nexport const getRouteModuleImporterFromHandle = (handle: unknown): RouteModuleImporter | null => {\n if (!isHandleObject(handle)) return null\n\n const importer = handle[ROUTE_MODULE_IMPORTER_HANDLE]\n return typeof importer === \"function\" ? (importer as RouteModuleImporter) : null\n}\n\nexport const getRoutePrefetchDataFromHandle = (\n handle: unknown,\n key = ROUTE_PREFETCH_DATA_HANDLE,\n): boolean | undefined => {\n if (!isHandleObject(handle)) return undefined\n\n const value = handle[key]\n return typeof value === \"boolean\" ? value : undefined\n}\n\nexport const mergeRouteHandle = (\n handle: unknown,\n {\n importer,\n prefetchData,\n prefetchDataKey = ROUTE_PREFETCH_DATA_HANDLE,\n }: {\n importer?: RouteModuleImporter\n prefetchData?: boolean\n prefetchDataKey?: string\n },\n): RouteHandleObject => {\n const nextHandle: RouteHandleObject = isHandleObject(handle) ? { ...handle } : {}\n\n if (importer) {\n nextHandle[ROUTE_MODULE_IMPORTER_HANDLE] = importer\n }\n\n if (typeof prefetchData === \"boolean\") {\n nextHandle[prefetchDataKey] = prefetchData\n }\n\n return nextHandle\n}\n","import { ReactNode, createContext, useContext, useRef } from \"react\"\nimport {\n UNSAFE_DataRouterContext,\n matchRoutes,\n type DataRouteObject,\n type DataRouter,\n} from \"react-router\"\n\nimport {\n ROUTE_PREFETCH_DATA_HANDLE,\n getRouteModuleImporterFromHandle,\n getRoutePrefetchDataFromHandle,\n} from \"./routePrefetchHandles\"\n\n\nexport type RoutePrefetchBehavior = \"intent\" | \"render\" | \"none\" | \"viewport\"\n\nexport type RoutePrefetchCallOptions = {\n prefetchCode?: boolean\n prefetchData?: boolean\n}\n\nexport type RoutePrefetchApi = {\n defaultPrefetch: RoutePrefetchBehavior\n prefetch: (href: string, opts?: RoutePrefetchCallOptions) => Promise<void>\n prefetchCode: (href: string) => Promise<void>\n prefetchData: (href: string) => Promise<void>\n}\n\ntype RoutePrefetchContextValue = RoutePrefetchApi\n\ntype PrefetchableRoute = DataRouteObject & {\n handle?: unknown\n lazy?: () => Promise<Record<string, unknown>>\n}\n\ntype RoutePrefetchProviderProps = {\n children: ReactNode\n defaultPrefetch?: RoutePrefetchBehavior\n dataPrefetchTtlMs?: number\n dataPrefetchHandleKey?: string\n}\n\ntype DataCacheValue = {\n expiresAt: number\n promise: Promise<void>\n}\n\nconst noop = async () => {}\n\nconst DEFAULT_PREFETCH_API: RoutePrefetchContextValue = {\n defaultPrefetch: \"none\",\n prefetch: noop,\n prefetchCode: noop,\n prefetchData: noop,\n}\n\nconst RoutePrefetchContext = createContext<RoutePrefetchContextValue>(DEFAULT_PREFETCH_API)\n\nconst normalizeHref = (href: string): { pathWithSearch: string; pathname: string; search: string; hash: string } | null => {\n if (typeof window === \"undefined\") return null\n\n try {\n const url = new URL(href, window.location.origin)\n if (url.origin !== window.location.origin) return null\n return {\n pathWithSearch: `${url.pathname}${url.search}`,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n }\n } catch {\n return null\n }\n}\n\nconst pruneDataCache = (cache: Map<string, DataCacheValue>, now: number): void => {\n cache.forEach((value, key) => {\n if (value.expiresAt <= now) {\n cache.delete(key)\n }\n })\n}\n\nconst resolveDataPrefetchFlag = (\n route: PrefetchableRoute,\n explicitPrefetchData: boolean | undefined,\n dataPrefetchHandleKey: string,\n): boolean => {\n if (typeof explicitPrefetchData === \"boolean\") {\n return explicitPrefetchData\n }\n\n const routeHandlePrefetchData = getRoutePrefetchDataFromHandle(route.handle, dataPrefetchHandleKey)\n if (typeof routeHandlePrefetchData === \"boolean\") {\n return routeHandlePrefetchData\n }\n\n return false\n}\n\nexport const RoutePrefetchProvider = ({\n children,\n defaultPrefetch = \"intent\",\n dataPrefetchTtlMs = 30000,\n dataPrefetchHandleKey = ROUTE_PREFETCH_DATA_HANDLE,\n}: RoutePrefetchProviderProps) => {\n const dataRouterContext = useContext(UNSAFE_DataRouterContext)\n const routeModuleCacheRef = useRef(new Map<string, Promise<Record<string, unknown> | null>>())\n const routeDataCacheRef = useRef(new Map<string, DataCacheValue>())\n\n const prefetchRouteModule = async (route: PrefetchableRoute): Promise<Record<string, unknown> | null> => {\n const routeId = route.id\n if (!routeId) return null\n\n const cached = routeModuleCacheRef.current.get(routeId)\n if (cached) {\n return cached\n }\n\n const lazyRouteLoader = typeof route.lazy === \"function\" ? route.lazy : null\n const routeModuleImporter = getRouteModuleImporterFromHandle(route.handle)\n if (!lazyRouteLoader && !routeModuleImporter) {\n return null\n }\n\n const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter!())\n .then((module) => {\n if (!module || typeof module !== \"object\") return null\n return module as Record<string, unknown>\n })\n .catch((error) => {\n routeModuleCacheRef.current.delete(routeId)\n throw error\n })\n\n routeModuleCacheRef.current.set(routeId, prefetchPromise)\n return prefetchPromise\n }\n\n const prefetchRouteData = async (router: DataRouter, route: PrefetchableRoute, href: string): Promise<void> => {\n const routeId = route.id\n if (!routeId) return\n\n const now = Date.now()\n pruneDataCache(routeDataCacheRef.current, now)\n\n const cacheKey = `${routeId}|${href}`\n const cached = routeDataCacheRef.current.get(cacheKey)\n if (cached && cached.expiresAt > now) {\n await cached.promise\n return\n }\n\n let hasLoader = typeof route.loader === \"function\"\n if (!hasLoader) {\n const loadedRouteModule = await prefetchRouteModule(route).catch(() => null)\n hasLoader = typeof loadedRouteModule?.loader === \"function\"\n }\n\n if (!hasLoader) return\n\n const fetcherKey = `rb:prefetch:${routeId}:${href}`\n\n const prefetchPromise = Promise.resolve(router.fetch(fetcherKey, routeId, href))\n .catch((error) => {\n routeDataCacheRef.current.delete(cacheKey)\n throw error\n })\n .finally(() => {\n try {\n router.deleteFetcher(fetcherKey)\n } catch {\n return\n }\n })\n\n const ttl = Math.max(1, dataPrefetchTtlMs)\n routeDataCacheRef.current.set(cacheKey, {\n expiresAt: now + ttl,\n promise: prefetchPromise,\n })\n\n await prefetchPromise\n }\n\n const prefetch = async (href: string, opts?: RoutePrefetchCallOptions): Promise<void> => {\n const normalized = normalizeHref(href)\n if (!normalized) return\n\n const currentPathWithSearch =\n typeof window === \"undefined\"\n ? \"\"\n : `${window.location.pathname}${window.location.search}`\n if (normalized.pathWithSearch === currentPathWithSearch) {\n return\n }\n\n const router = dataRouterContext?.router as DataRouter | undefined\n if (!router) return\n\n const matches = matchRoutes(\n router.routes,\n {\n pathname: normalized.pathname,\n search: normalized.search,\n hash: normalized.hash,\n },\n router.basename,\n )\n\n if (!matches || matches.length === 0) {\n return\n }\n\n const matchedRoutes = matches.map((match) => match.route as PrefetchableRoute)\n\n if (opts?.prefetchCode !== false) {\n await Promise.all(\n matchedRoutes.map(async (route) => {\n try {\n await prefetchRouteModule(route)\n } catch {\n return\n }\n }),\n )\n }\n\n await Promise.all(\n matchedRoutes.map(async (route) => {\n if (!resolveDataPrefetchFlag(route, opts?.prefetchData, dataPrefetchHandleKey)) {\n return\n }\n\n try {\n await prefetchRouteData(router, route, normalized.pathWithSearch)\n } catch {\n return\n }\n }),\n )\n }\n\n return (\n <RoutePrefetchContext.Provider\n value={{\n defaultPrefetch,\n prefetch,\n prefetchCode: async (href) => prefetch(href, { prefetchCode: true, prefetchData: false }),\n prefetchData: async (href) => prefetch(href, { prefetchCode: false, prefetchData: true }),\n }}\n >\n {children}\n </RoutePrefetchContext.Provider>\n )\n}\n\nexport const useRoutePrefetch = (): RoutePrefetchApi => useContext(RoutePrefetchContext)\n\nexport type { RoutePrefetchProviderProps }\n","import { forwardRef, useEffect, useRef, type Ref, type SyntheticEvent } from \"react\"\nimport { Link as RouterLink, type LinkProps as RouterLinkProps } from \"react-router\"\n\nimport { type RoutePrefetchBehavior, useRoutePrefetch } from \"./routePrefetch\"\n\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i\n\ntype LinkProps = Omit<RouterLinkProps, \"prefetch\"> & {\n prefetch?: RoutePrefetchBehavior\n prefetchData?: boolean\n}\n\nconst assignRef = <TValue,>(ref: Ref<TValue> | undefined, value: TValue) => {\n if (!ref) return\n if (typeof ref === \"function\") {\n ref(value)\n return\n }\n ref.current = value\n}\n\nconst composeEventHandlers = <TEvent extends SyntheticEvent>(\n theirHandler: ((event: TEvent) => void) | undefined,\n ourHandler: () => void,\n) => {\n return (event: TEvent) => {\n theirHandler?.(event)\n if (!event.defaultPrevented) {\n ourHandler()\n }\n }\n}\n\nconst shouldPrefetchLink = ({\n prefetch,\n reloadDocument,\n target,\n to,\n}: {\n prefetch: RoutePrefetchBehavior\n reloadDocument: boolean | undefined\n target: string | undefined\n to: RouterLinkProps[\"to\"]\n}): boolean => {\n if (prefetch === \"none\") return false\n if (reloadDocument) return false\n if (typeof target === \"string\" && target !== \"_self\") return false\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) return false\n return true\n}\n\nconst usePrefetchLink = (\n prefetchData: boolean | undefined,\n): {\n anchorRef: Ref<HTMLAnchorElement>\n prefetchHref: () => void\n getAnchorElement: () => HTMLAnchorElement | null\n} => {\n const localRef = useRef<HTMLAnchorElement | null>(null)\n const { prefetch } = useRoutePrefetch()\n\n return {\n anchorRef: (node) => {\n localRef.current = node\n },\n getAnchorElement: () => localRef.current,\n prefetchHref: () => {\n const href = localRef.current?.getAttribute(\"href\")\n if (!href) return\n void prefetch(href, { prefetchData })\n },\n }\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n prefetch: prefetchProp,\n prefetchData,\n onMouseEnter,\n onFocus,\n onTouchStart,\n reloadDocument,\n target,\n to,\n ...props\n },\n forwardedRef,\n ) => {\n const { defaultPrefetch } = useRoutePrefetch()\n const prefetchBehavior = prefetchProp ?? defaultPrefetch\n const viewportPrefetchedRef = useRef(false)\n const { anchorRef, prefetchHref, getAnchorElement } = usePrefetchLink(prefetchData)\n const canPrefetch = shouldPrefetchLink({\n prefetch: prefetchBehavior,\n reloadDocument,\n target,\n to,\n })\n\n useEffect(() => {\n viewportPrefetchedRef.current = false\n }, [to])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"render\") return\n prefetchHref()\n }, [canPrefetch, prefetchBehavior, prefetchHref])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"viewport\") return\n\n const element = getAnchorElement()\n if (!element || typeof IntersectionObserver === \"undefined\") return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const isVisible = entries.some((entry) => entry.isIntersecting)\n if (!isVisible || viewportPrefetchedRef.current) return\n viewportPrefetchedRef.current = true\n prefetchHref()\n },\n { threshold: 0.5 },\n )\n\n observer.observe(element)\n return () => {\n observer.disconnect()\n }\n }, [canPrefetch, prefetchBehavior, prefetchHref, getAnchorElement])\n\n const handleIntentPrefetch = () => {\n if (!canPrefetch || prefetchBehavior !== \"intent\") return\n prefetchHref()\n }\n\n return (\n <RouterLink\n {...props}\n to={to}\n target={target}\n reloadDocument={reloadDocument}\n prefetch=\"none\"\n onMouseEnter={composeEventHandlers(onMouseEnter, handleIntentPrefetch)}\n onFocus={composeEventHandlers(onFocus, handleIntentPrefetch)}\n onTouchStart={composeEventHandlers(onTouchStart, handleIntentPrefetch)}\n ref={(node) => {\n assignRef(forwardedRef, node)\n assignRef(anchorRef, node)\n }}\n />\n )\n },\n)\n\nLink.displayName = \"Link\"\n\nexport type { LinkProps }\n","import { LoaderFunction } from \"react-router\"\n\nimport { mergeRouteHandle, RouteHandleObject } from \"./routePrefetchHandles\"\n\n\ntype RouteModuleLoader = (...args: any[]) => unknown\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: RouteModuleLoader\n}\n\ntype RouteModuleImporter = () => Promise<RouteModule>\n\ntype RouteOptions = {\n handle?: unknown\n prefetchData?: boolean\n prefetchDataKey?: string\n}\n\ntype LazyRouteResult = {\n lazy: () => Promise<{\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n }>\n handle: RouteHandleObject\n}\n\nconst memoizeImporter = (importer: RouteModuleImporter): RouteModuleImporter => {\n let promise: Promise<RouteModule> | null = null\n\n return async () => {\n if (!promise) {\n promise = importer().catch((error) => {\n promise = null\n throw error\n })\n }\n\n return promise\n }\n}\n\nexport const lazyRoute = (importer: RouteModuleImporter, opts?: RouteOptions): LazyRouteResult => {\n const loadModule = memoizeImporter(importer)\n\n return {\n lazy: async () => {\n const module = await loadModule()\n const lazyRouteModule: {\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n } = {\n Component: module.default,\n }\n\n if (typeof module.loader === \"function\") {\n lazyRouteModule.loader = module.loader as unknown as LoaderFunction\n }\n\n return lazyRouteModule\n },\n handle: mergeRouteHandle(opts?.handle, {\n importer: loadModule,\n prefetchData: opts?.prefetchData,\n prefetchDataKey: opts?.prefetchDataKey,\n }),\n }\n}\n","import { useEffect } from \"react\"\nimport { useLocation } from \"react-router\"\n\n\ntype MetaAttributeValue = string | number | boolean | undefined\ntype MetaEntry = Record<string, MetaAttributeValue>\n\ntype PageMeta = {\n title: string\n meta: MetaEntry[]\n}\n\n\nexport const useApplyMeta = ({\n defaultTitle = \"\",\n defaultMeta = [],\n pagesMeta = {}\n}: {\n defaultTitle?: string\n defaultMeta?: MetaEntry[]\n pagesMeta?: Record<string, PageMeta>\n} = {}) => {\n const location = useLocation()\n\n useEffect(() => {\n const loadMeta = async () => {\n\n let pageMeta = pagesMeta[location.pathname]\n\n if (!pageMeta) {\n pageMeta = { title: defaultTitle, meta: defaultMeta }\n }\n\n document.title = pageMeta.title\n\n // Remove previous dynamically inserted tags\n document.querySelectorAll(\"[data-react-meta]\").forEach((tag) => tag.remove())\n\n // Inject new tags\n pageMeta.meta.forEach((meta) => {\n const metaElement = document.createElement(\"meta\")\n metaElement.setAttribute(\"data-react-meta\", \"true\")\n\n // Set all attributes from the meta object\n Object.entries(meta).forEach(([key, value]) => {\n if (value) {\n metaElement.setAttribute(key, value.toString())\n }\n })\n\n document.head.appendChild(metaElement)\n })\n\n // Update canonical link\n const canonicalUrl = `${window.location.origin}${location.pathname}`\n\n const existingCanonical = document.querySelector(\"link[rel=\\\"canonical\\\"]\")\n if (existingCanonical) {\n existingCanonical.remove()\n }\n\n const canonicalLink = document.createElement(\"link\")\n canonicalLink.setAttribute(\"rel\", \"canonical\")\n canonicalLink.setAttribute(\"href\", canonicalUrl)\n canonicalLink.setAttribute(\"data-react-meta\", \"true\")\n document.head.appendChild(canonicalLink)\n }\n\n loadMeta()\n }, [location.pathname, defaultTitle, defaultMeta, pagesMeta])\n}\n","import { useEffect, useRef } from \"react\"\nimport type { BlockerFunction } from \"react-router\"\n\n\nexport type NavigationGuard = {\n id: string\n enabled: boolean\n priority?: number\n message: string\n blockOnSearch?: boolean\n shouldBlockNavigation: BlockerFunction\n shouldBlockUnload: boolean\n}\n\ntype NavigationGuardsListener = () => void\n\ntype NavigationGuardsStore = {\n guards: Map<string, NavigationGuard>\n listeners: Set<NavigationGuardsListener>\n}\n\nconst NAVIGATION_GUARDS_STORE_KEY = \"__rpcbaseNavigationGuardsStore\"\n\nconst getNavigationGuardsStore = (): NavigationGuardsStore => {\n const globalAny = globalThis as {\n [NAVIGATION_GUARDS_STORE_KEY]?: NavigationGuardsStore\n }\n\n const existing = globalAny[NAVIGATION_GUARDS_STORE_KEY]\n if (existing) {\n return existing\n }\n\n const created: NavigationGuardsStore = {\n guards: new Map<string, NavigationGuard>(),\n listeners: new Set<NavigationGuardsListener>(),\n }\n\n globalAny[NAVIGATION_GUARDS_STORE_KEY] = created\n return created\n}\n\nconst notify = (): void => {\n getNavigationGuardsStore().listeners.forEach((listener) => {\n listener()\n })\n}\n\nconst isSameGuard = (a: NavigationGuard, b: NavigationGuard): boolean =>\n a.id === b.id &&\n a.enabled === b.enabled &&\n a.priority === b.priority &&\n a.message === b.message &&\n a.blockOnSearch === b.blockOnSearch &&\n a.shouldBlockNavigation === b.shouldBlockNavigation &&\n a.shouldBlockUnload === b.shouldBlockUnload\n\nexport const upsertNavigationGuard = (guard: NavigationGuard): void => {\n const guards = getNavigationGuardsStore().guards\n const prev = guards.get(guard.id)\n if (prev && isSameGuard(prev, guard)) {\n return\n }\n\n guards.set(guard.id, guard)\n notify()\n}\n\nexport const removeNavigationGuard = (id: string): void => {\n const guards = getNavigationGuardsStore().guards\n const didDelete = guards.delete(id)\n if (didDelete) {\n notify()\n }\n}\n\nexport const getNavigationGuards = (): NavigationGuard[] =>\n Array.from(getNavigationGuardsStore().guards.values())\n\nexport const subscribeNavigationGuards = (\n listener: NavigationGuardsListener,\n): (() => void) => {\n const listeners = getNavigationGuardsStore().listeners\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const useRegisterNavigationGuard = (guard: NavigationGuard): void => {\n const latestGuardRef = useRef(guard)\n latestGuardRef.current = guard\n\n const lastIdRef = useRef<string | null>(null)\n\n useEffect(() => {\n const lastId = lastIdRef.current\n if (lastId && lastId !== guard.id) {\n removeNavigationGuard(lastId)\n }\n lastIdRef.current = guard.id\n\n if (!guard.enabled) {\n removeNavigationGuard(guard.id)\n return\n }\n\n upsertNavigationGuard(latestGuardRef.current)\n return () => {\n removeNavigationGuard(guard.id)\n }\n }, [\n guard.id,\n guard.enabled,\n guard.message,\n guard.priority,\n guard.blockOnSearch,\n guard.shouldBlockNavigation,\n guard.shouldBlockUnload,\n ])\n}\n","import { useContext, useEffect, useRef, useState, useSyncExternalStore } from \"react\"\nimport { UNSAFE_LocationContext } from \"react-router\"\n\n\nexport type UseQueryOverlayOptions<TOverlay extends string> = {\n param: string\n parse: (value: string | null) => TOverlay | null\n}\n\nexport type UseQueryOverlayLifecycleOptions = {\n closeDelayMs?: number\n}\n\nexport type QueryOverlayApi<TOverlay extends string> = {\n value: TOverlay | null\n isOpen: boolean\n buildHref: (nextValue: TOverlay | null) => string\n openOverlay: (nextValue: TOverlay) => void\n closeOverlay: () => void\n}\n\nexport type QueryOverlayLifecycleApi = {\n isOpen: boolean\n shouldRender: boolean\n closeOverlay: () => void\n resetOptimisticClose: () => void\n}\n\nexport type OptimisticQueryOverlayApi<TOverlay extends string> =\n Omit<QueryOverlayApi<TOverlay>, \"isOpen\" | \"closeOverlay\" | \"openOverlay\"> &\n QueryOverlayLifecycleApi & {\n openOverlay: (nextValue: TOverlay) => void\n }\n\nconst QUERY_OVERLAY_URL_CHANGE_EVENT = \"rpcbase-query-overlay-url-change\"\n\ntype UrlSnapshot = {\n pathname: string\n search: string\n hash: string\n}\n\nfunction getCurrentUrlSnapshot(fallback?: UrlSnapshot): UrlSnapshot {\n if (typeof window === \"undefined\") {\n return fallback ?? { pathname: \"\", search: \"\", hash: \"\" }\n }\n\n return {\n pathname: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n }\n}\n\nfunction getParamValueFromSearch(search: string, param: string) {\n return new URLSearchParams(search).get(param)\n}\n\nfunction useRouterUrlSnapshot(): UrlSnapshot | undefined {\n const context = useContext(UNSAFE_LocationContext)\n const location = context?.location\n if (!location) return undefined\n return {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n }\n}\n\nfunction getCurrentParamValue(param: string) {\n if (typeof window === \"undefined\") return null\n return getParamValueFromSearch(window.location.search, param)\n}\n\nfunction subscribeToQueryOverlayUrl(listener: () => void) {\n if (typeof window === \"undefined\") return () => undefined\n\n window.addEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener)\n window.addEventListener(\"popstate\", listener)\n return () => {\n window.removeEventListener(QUERY_OVERLAY_URL_CHANGE_EVENT, listener)\n window.removeEventListener(\"popstate\", listener)\n }\n}\n\nfunction buildUrl(searchParams: URLSearchParams, fallback?: UrlSnapshot) {\n const { pathname, hash } = getCurrentUrlSnapshot(fallback)\n const nextSearch = searchParams.toString()\n return `${pathname}${nextSearch ? `?${nextSearch}` : \"\"}${hash}`\n}\n\nexport function replaceQueryParams(update: (searchParams: URLSearchParams) => void) {\n if (typeof window === \"undefined\") return\n\n const { pathname, search, hash } = getCurrentUrlSnapshot()\n const searchParams = new URLSearchParams(search)\n update(searchParams)\n\n const nextUrl = buildUrl(searchParams)\n const currentUrl = `${pathname}${search}${hash}`\n if (nextUrl === currentUrl) return\n\n window.history.replaceState(window.history.state, \"\", nextUrl)\n window.dispatchEvent(new Event(QUERY_OVERLAY_URL_CHANGE_EVENT))\n}\n\nexport function useQueryParam(param: string): string | null {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n return useSyncExternalStore(\n subscribeToQueryOverlayUrl,\n () => getCurrentParamValue(param),\n () => getParamValueFromSearch(routerUrlSnapshot?.search ?? \"\", param),\n )\n}\n\nexport function useQueryOverlayLifecycle(\n isUrlOpen: boolean,\n closeUrlOverlay: () => void,\n options: UseQueryOverlayLifecycleOptions = {},\n): QueryOverlayLifecycleApi {\n const closeDelayMs = options.closeDelayMs ?? 0\n const [isOptimisticallyClosed, setIsOptimisticallyClosed] = useState(false)\n const closeTimeoutRef = useRef<number | null>(null)\n\n const clearScheduledClose = () => {\n if (closeTimeoutRef.current === null) return\n window.clearTimeout(closeTimeoutRef.current)\n closeTimeoutRef.current = null\n }\n\n const resetOptimisticClose = () => {\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }\n\n useEffect(() => {\n if (isUrlOpen) {\n setIsOptimisticallyClosed(false)\n return\n }\n\n clearScheduledClose()\n setIsOptimisticallyClosed(false)\n }, [isUrlOpen])\n\n useEffect(() => {\n return () => {\n clearScheduledClose()\n }\n }, [])\n\n const closeOverlay = () => {\n if (!isUrlOpen) return\n\n setIsOptimisticallyClosed(true)\n clearScheduledClose()\n\n if (typeof window === \"undefined\") {\n closeUrlOverlay()\n return\n }\n\n closeTimeoutRef.current = window.setTimeout(() => {\n closeTimeoutRef.current = null\n closeUrlOverlay()\n }, closeDelayMs)\n }\n\n return {\n isOpen: isUrlOpen && !isOptimisticallyClosed,\n shouldRender: isUrlOpen,\n closeOverlay,\n resetOptimisticClose,\n }\n}\n\nexport const useQueryOverlay = <TOverlay extends string>({\n param,\n parse,\n}: UseQueryOverlayOptions<TOverlay>): QueryOverlayApi<TOverlay> => {\n const routerUrlSnapshot = useRouterUrlSnapshot()\n const rawValue = useQueryParam(param)\n\n const buildHref = (nextValue: TOverlay | null): string => {\n const searchParams = new URLSearchParams(getCurrentUrlSnapshot(routerUrlSnapshot).search)\n if (nextValue === null) {\n searchParams.delete(param)\n } else {\n searchParams.set(param, nextValue)\n }\n return buildUrl(searchParams, routerUrlSnapshot)\n }\n\n const value = parse(rawValue)\n\n const openOverlay = (nextValue: TOverlay) => {\n replaceQueryParams((searchParams) => {\n searchParams.set(param, nextValue)\n })\n }\n\n const closeOverlay = () => {\n replaceQueryParams((searchParams) => {\n searchParams.delete(param)\n })\n }\n\n return {\n value,\n isOpen: value !== null,\n buildHref,\n openOverlay,\n closeOverlay,\n }\n}\n\nexport const useOptimisticQueryOverlay = <TOverlay extends string>({\n closeDelayMs,\n ...options\n}: UseQueryOverlayOptions<TOverlay> & UseQueryOverlayLifecycleOptions): OptimisticQueryOverlayApi<TOverlay> => {\n const overlay = useQueryOverlay(options)\n const lifecycle = useQueryOverlayLifecycle(overlay.value !== null, overlay.closeOverlay, { closeDelayMs })\n\n const openOverlay = (nextValue: TOverlay) => {\n lifecycle.resetOptimisticClose()\n overlay.openOverlay(nextValue)\n }\n\n return {\n value: overlay.value,\n isOpen: lifecycle.isOpen,\n shouldRender: lifecycle.shouldRender,\n buildHref: overlay.buildHref,\n openOverlay,\n closeOverlay: lifecycle.closeOverlay,\n resetOptimisticClose: lifecycle.resetOptimisticClose,\n }\n}\n","import { useEffect, useRef } from \"react\"\nimport { useNavigate } from \"react-router\"\n\n\nexport type KeyboardShortcut = {\n key: string\n mod?: boolean\n ctrl?: boolean\n meta?: boolean\n alt?: boolean\n shift?: boolean\n}\n\nexport type ShortcutTrigger = \"keydown\" | \"keyup\"\n\nexport type UseShortcutPrefetchNavigateOptions = {\n shortcut: KeyboardShortcut\n getHref: () => string\n prefetch?: (href: string) => Promise<void> | void\n navigate?: (href: string) => Promise<void> | void\n trigger?: ShortcutTrigger\n enabled?: boolean\n preventDefault?: boolean\n ignoreTypingTarget?: boolean\n isTypingTarget?: (target: EventTarget | null) => boolean\n}\n\nconst normalizeKey = (key: string): string => key.toLowerCase()\n\nconst defaultIsTypingTarget = (target: EventTarget | null): boolean => {\n const element = target as HTMLElement | null\n const tagName = element?.tagName\n\n return (\n element?.isContentEditable === true ||\n tagName === \"INPUT\" ||\n tagName === \"TEXTAREA\" ||\n tagName === \"SELECT\"\n )\n}\n\nconst matchesShortcutKeyDown = (event: KeyboardEvent, shortcut: KeyboardShortcut): boolean => {\n if (normalizeKey(event.key) !== normalizeKey(shortcut.key)) return false\n\n if (typeof shortcut.mod === \"boolean\") {\n const hasMod = event.metaKey || event.ctrlKey\n if (hasMod !== shortcut.mod) return false\n }\n if (typeof shortcut.ctrl === \"boolean\" && event.ctrlKey !== shortcut.ctrl) return false\n if (typeof shortcut.meta === \"boolean\" && event.metaKey !== shortcut.meta) return false\n if (typeof shortcut.alt === \"boolean\" && event.altKey !== shortcut.alt) return false\n if (typeof shortcut.shift === \"boolean\" && event.shiftKey !== shortcut.shift) return false\n\n return true\n}\n\nconst callMaybeAsync = (fn: ((href: string) => Promise<void> | void) | undefined, href: string) => {\n if (!fn) return\n void Promise.resolve(fn(href))\n}\n\nexport const useShortcutPrefetchNavigate = ({\n shortcut,\n getHref,\n prefetch,\n navigate,\n trigger = \"keyup\",\n enabled = true,\n preventDefault = true,\n ignoreTypingTarget = true,\n isTypingTarget = defaultIsTypingTarget,\n}: UseShortcutPrefetchNavigateOptions): void => {\n const routerNavigate = useNavigate()\n\n const shortcutRef = useRef(shortcut)\n const getHrefRef = useRef(getHref)\n const prefetchRef = useRef(prefetch)\n const navigateRef = useRef(navigate ?? routerNavigate)\n const triggerRef = useRef(trigger)\n const enabledRef = useRef(enabled)\n const preventDefaultRef = useRef(preventDefault)\n const ignoreTypingTargetRef = useRef(ignoreTypingTarget)\n const isTypingTargetRef = useRef(isTypingTarget)\n const waitingForShortcutKeyUpRef = useRef(false)\n\n shortcutRef.current = shortcut\n getHrefRef.current = getHref\n prefetchRef.current = prefetch\n navigateRef.current = navigate ?? routerNavigate\n triggerRef.current = trigger\n enabledRef.current = enabled\n preventDefaultRef.current = preventDefault\n ignoreTypingTargetRef.current = ignoreTypingTarget\n isTypingTargetRef.current = isTypingTarget\n\n if (!enabled || trigger !== \"keyup\") {\n waitingForShortcutKeyUpRef.current = false\n }\n\n useEffect(() => {\n if (typeof window === \"undefined\") return\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!enabledRef.current) return\n if (ignoreTypingTargetRef.current && isTypingTargetRef.current(event.target)) return\n if (event.repeat) return\n if (!matchesShortcutKeyDown(event, shortcutRef.current)) return\n\n if (preventDefaultRef.current) {\n event.preventDefault()\n }\n\n const href = getHrefRef.current()\n if (!href) return\n\n callMaybeAsync(prefetchRef.current, href)\n\n if (triggerRef.current === \"keydown\") {\n callMaybeAsync(navigateRef.current, href)\n return\n }\n\n waitingForShortcutKeyUpRef.current = true\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!enabledRef.current) return\n if (triggerRef.current !== \"keyup\") return\n if (!waitingForShortcutKeyUpRef.current) return\n if (normalizeKey(event.key) !== normalizeKey(shortcutRef.current.key)) return\n\n waitingForShortcutKeyUpRef.current = false\n\n if (ignoreTypingTargetRef.current && isTypingTargetRef.current(event.target)) return\n\n if (preventDefaultRef.current) {\n event.preventDefault()\n }\n\n const href = getHrefRef.current()\n if (!href) return\n\n callMaybeAsync(navigateRef.current, href)\n }\n\n const onBlur = () => {\n waitingForShortcutKeyUpRef.current = false\n }\n\n window.addEventListener(\"keydown\", onKeyDown)\n window.addEventListener(\"keyup\", onKeyUp)\n window.addEventListener(\"blur\", onBlur)\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown)\n window.removeEventListener(\"keyup\", onKeyUp)\n window.removeEventListener(\"blur\", onBlur)\n }\n }, [])\n}\n"],"names":["ROUTE_MODULE_IMPORTER_HANDLE","ROUTE_PREFETCH_DATA_HANDLE","isHandleObject","value","Boolean","Array","isArray","getRouteModuleImporterFromHandle","handle","importer","getRoutePrefetchDataFromHandle","key","undefined","mergeRouteHandle","prefetchData","prefetchDataKey","nextHandle","noop","DEFAULT_PREFETCH_API","defaultPrefetch","prefetch","prefetchCode","RoutePrefetchContext","createContext","normalizeHref","href","window","url","URL","location","origin","pathWithSearch","pathname","search","hash","pruneDataCache","cache","now","forEach","expiresAt","delete","resolveDataPrefetchFlag","route","explicitPrefetchData","dataPrefetchHandleKey","routeHandlePrefetchData","RoutePrefetchProvider","t0","$","_c","children","t1","dataPrefetchTtlMs","t2","t3","dataRouterContext","useContext","UNSAFE_DataRouterContext","t4","Symbol","for","Map","routeModuleCacheRef","useRef","t5","routeDataCacheRef","t6","routeId","id","cached","current","get","lazyRouteLoader","lazy","routeModuleImporter","prefetchPromise","Promise","resolve","then","_temp","catch","error","set","prefetchRouteModule","t7","router","route_0","routeId_0","Date","cacheKey","cached_0","promise","hasLoader","loader","loadedRouteModule","_temp2","fetcherKey","prefetchPromise_0","fetch","error_0","finally","deleteFetcher","ttl","Math","max","prefetchRouteData","t8","href_0","opts","normalized","currentPathWithSearch","router_0","matches","matchRoutes","routes","basename","length","matchedRoutes","map","_temp3","all","route_1","route_2","t10","t9","href_1","href_2","t11","t12","useRoutePrefetch","module","match","ABSOLUTE_URL_REGEX","assignRef","ref","composeEventHandlers","theirHandler","ourHandler","event","defaultPrevented","shouldPrefetchLink","reloadDocument","target","to","test","usePrefetchLink","localRef","node","anchorRef","getAnchorElement","prefetchHref","getAttribute","Link","forwardRef","forwardedRef","onFocus","onMouseEnter","onTouchStart","prefetchProp","props","prefetchBehavior","viewportPrefetchedRef","canPrefetch","useEffect","element","IntersectionObserver","observer","entries","isVisible","some","threshold","observe","disconnect","handleIntentPrefetch","t13","RouterLink","displayName","entry","isIntersecting","memoizeImporter","lazyRoute","loadModule","lazyRouteModule","Component","default","useApplyMeta","defaultTitle","defaultMeta","pagesMeta","useLocation","loadMeta","pageMeta","meta","document","title","querySelectorAll","canonicalUrl","existingCanonical","querySelector","remove","canonicalLink","createElement","setAttribute","head","appendChild","tag","metaElement","Object","toString","NAVIGATION_GUARDS_STORE_KEY","getNavigationGuardsStore","globalAny","globalThis","existing","created","guards","listeners","Set","notify","listener","isSameGuard","a","b","enabled","priority","message","blockOnSearch","shouldBlockNavigation","shouldBlockUnload","upsertNavigationGuard","guard","prev","removeNavigationGuard","didDelete","getNavigationGuards","from","values","subscribeNavigationGuards","add","useRegisterNavigationGuard","latestGuardRef","lastIdRef","lastId","QUERY_OVERLAY_URL_CHANGE_EVENT","getCurrentUrlSnapshot","fallback","getParamValueFromSearch","param","URLSearchParams","useRouterUrlSnapshot","context","UNSAFE_LocationContext","getCurrentParamValue","subscribeToQueryOverlayUrl","addEventListener","removeEventListener","buildUrl","searchParams","nextSearch","replaceQueryParams","update","nextUrl","currentUrl","history","replaceState","state","dispatchEvent","Event","useQueryParam","routerUrlSnapshot","useSyncExternalStore","useQueryOverlayLifecycle","isUrlOpen","closeUrlOverlay","options","closeDelayMs","isOptimisticallyClosed","setIsOptimisticallyClosed","useState","closeTimeoutRef","clearTimeout","clearScheduledClose","resetOptimisticClose","setTimeout","closeOverlay","isOpen","shouldRender","useQueryOverlay","parse","rawValue","nextValue","buildHref","nextValue_0","searchParams_0","openOverlay","searchParams_1","useOptimisticQueryOverlay","overlay","lifecycle","normalizeKey","toLowerCase","defaultIsTypingTarget","tagName","isContentEditable","matchesShortcutKeyDown","shortcut","mod","hasMod","metaKey","ctrlKey","ctrl","alt","altKey","shift","shiftKey","callMaybeAsync","fn","useShortcutPrefetchNavigate","getHref","navigate","trigger","preventDefault","ignoreTypingTarget","isTypingTarget","routerNavigate","useNavigate","shortcutRef","getHrefRef","prefetchRef","navigateRef","triggerRef","enabledRef","preventDefaultRef","ignoreTypingTargetRef","isTypingTargetRef","waitingForShortcutKeyUpRef","onKeyDown","repeat","onKeyUp","onBlur"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/routePrefetchHandles.ts","../src/routePrefetch.tsx","../src/Link.tsx","../src/lazyRoute.tsx","../src/useApplyMeta.tsx","../src/navigationGuards.ts","../src/queryOverlay.ts","../src/shortcutPrefetchNavigate.ts"],"sourcesContent":["export const ROUTE_MODULE_IMPORTER_HANDLE = \"__rpcbaseRouteModuleImporter\"\nexport const ROUTE_PREFETCH_DATA_HANDLE = \"prefetchData\"\n\nexport type RouteHandleObject = Record<string, unknown>\n\ntype RouteModuleImporter = () => Promise<unknown>\n\nconst isHandleObject = (value: unknown): value is RouteHandleObject =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n\nexport const getRouteModuleImporterFromHandle = (handle: unknown): RouteModuleImporter | null => {\n if (!isHandleObject(handle)) return null\n\n const importer = handle[ROUTE_MODULE_IMPORTER_HANDLE]\n return typeof importer === \"function\" ? (importer as RouteModuleImporter) : null\n}\n\nexport const getRoutePrefetchDataFromHandle = (\n handle: unknown,\n key = ROUTE_PREFETCH_DATA_HANDLE,\n): boolean | undefined => {\n if (!isHandleObject(handle)) return undefined\n\n const value = handle[key]\n return typeof value === \"boolean\" ? value : undefined\n}\n\nexport const mergeRouteHandle = (\n handle: unknown,\n {\n importer,\n prefetchData,\n prefetchDataKey = ROUTE_PREFETCH_DATA_HANDLE,\n }: {\n importer?: RouteModuleImporter\n prefetchData?: boolean\n prefetchDataKey?: string\n },\n): RouteHandleObject => {\n const nextHandle: RouteHandleObject = isHandleObject(handle) ? { ...handle } : {}\n\n if (importer) {\n nextHandle[ROUTE_MODULE_IMPORTER_HANDLE] = importer\n }\n\n if (typeof prefetchData === \"boolean\") {\n nextHandle[prefetchDataKey] = prefetchData\n }\n\n return nextHandle\n}\n","import { ReactNode, createContext, useContext, useRef } from \"react\"\nimport {\n UNSAFE_DataRouterContext,\n matchRoutes,\n type DataRouteObject,\n type DataRouter,\n} from \"react-router\"\n\nimport {\n ROUTE_PREFETCH_DATA_HANDLE,\n getRouteModuleImporterFromHandle,\n getRoutePrefetchDataFromHandle,\n} from \"./routePrefetchHandles\"\n\n\nexport type RoutePrefetchBehavior = \"intent\" | \"render\" | \"none\" | \"viewport\"\n\nexport type RoutePrefetchCallOptions = {\n prefetchCode?: boolean\n prefetchData?: boolean\n}\n\nexport type RoutePrefetchApi = {\n defaultPrefetch: RoutePrefetchBehavior\n prefetch: (href: string, opts?: RoutePrefetchCallOptions) => Promise<void>\n prefetchCode: (href: string) => Promise<void>\n prefetchData: (href: string) => Promise<void>\n}\n\ntype RoutePrefetchContextValue = RoutePrefetchApi\n\ntype PrefetchableRoute = DataRouteObject & {\n handle?: unknown\n lazy?: () => Promise<Record<string, unknown>>\n}\n\ntype RoutePrefetchProviderProps = {\n children: ReactNode\n defaultPrefetch?: RoutePrefetchBehavior\n dataPrefetchTtlMs?: number\n dataPrefetchHandleKey?: string\n}\n\ntype DataCacheValue = {\n expiresAt: number\n promise: Promise<void>\n}\n\nconst noop = async () => {}\n\nconst DEFAULT_PREFETCH_API: RoutePrefetchContextValue = {\n defaultPrefetch: \"none\",\n prefetch: noop,\n prefetchCode: noop,\n prefetchData: noop,\n}\n\nconst RoutePrefetchContext = createContext<RoutePrefetchContextValue>(DEFAULT_PREFETCH_API)\n\nconst normalizeHref = (href: string): { pathWithSearch: string; pathname: string; search: string; hash: string } | null => {\n if (typeof window === \"undefined\") return null\n\n try {\n const url = new URL(href, window.location.origin)\n if (url.origin !== window.location.origin) return null\n return {\n pathWithSearch: `${url.pathname}${url.search}`,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n }\n } catch {\n return null\n }\n}\n\nconst pruneDataCache = (cache: Map<string, DataCacheValue>, now: number): void => {\n cache.forEach((value, key) => {\n if (value.expiresAt <= now) {\n cache.delete(key)\n }\n })\n}\n\nconst resolveDataPrefetchFlag = (\n route: PrefetchableRoute,\n explicitPrefetchData: boolean | undefined,\n dataPrefetchHandleKey: string,\n): boolean => {\n if (typeof explicitPrefetchData === \"boolean\") {\n return explicitPrefetchData\n }\n\n const routeHandlePrefetchData = getRoutePrefetchDataFromHandle(route.handle, dataPrefetchHandleKey)\n if (typeof routeHandlePrefetchData === \"boolean\") {\n return routeHandlePrefetchData\n }\n\n return false\n}\n\nexport const RoutePrefetchProvider = ({\n children,\n defaultPrefetch = \"intent\",\n dataPrefetchTtlMs = 30000,\n dataPrefetchHandleKey = ROUTE_PREFETCH_DATA_HANDLE,\n}: RoutePrefetchProviderProps) => {\n const dataRouterContext = useContext(UNSAFE_DataRouterContext)\n const routeModuleCacheRef = useRef(new Map<string, Promise<Record<string, unknown> | null>>())\n const routeDataCacheRef = useRef(new Map<string, DataCacheValue>())\n\n const prefetchRouteModule = async (route: PrefetchableRoute): Promise<Record<string, unknown> | null> => {\n const routeId = route.id\n if (!routeId) return null\n\n const cached = routeModuleCacheRef.current.get(routeId)\n if (cached) {\n return cached\n }\n\n const lazyRouteLoader = typeof route.lazy === \"function\" ? route.lazy : null\n const routeModuleImporter = getRouteModuleImporterFromHandle(route.handle)\n if (!lazyRouteLoader && !routeModuleImporter) {\n return null\n }\n\n const prefetchPromise = Promise.resolve(lazyRouteLoader ? lazyRouteLoader() : routeModuleImporter!())\n .then((module) => {\n if (!module || typeof module !== \"object\") return null\n return module as Record<string, unknown>\n })\n .catch((error) => {\n routeModuleCacheRef.current.delete(routeId)\n throw error\n })\n\n routeModuleCacheRef.current.set(routeId, prefetchPromise)\n return prefetchPromise\n }\n\n const prefetchRouteData = async (router: DataRouter, route: PrefetchableRoute, href: string): Promise<void> => {\n const routeId = route.id\n if (!routeId) return\n\n const now = Date.now()\n pruneDataCache(routeDataCacheRef.current, now)\n\n const cacheKey = `${routeId}|${href}`\n const cached = routeDataCacheRef.current.get(cacheKey)\n if (cached && cached.expiresAt > now) {\n await cached.promise\n return\n }\n\n let hasLoader = typeof route.loader === \"function\"\n if (!hasLoader) {\n const loadedRouteModule = await prefetchRouteModule(route).catch(() => null)\n hasLoader = typeof loadedRouteModule?.loader === \"function\"\n }\n\n if (!hasLoader) return\n\n const fetcherKey = `rb:prefetch:${routeId}:${href}`\n\n const prefetchPromise = Promise.resolve(router.fetch(fetcherKey, routeId, href))\n .catch((error) => {\n routeDataCacheRef.current.delete(cacheKey)\n throw error\n })\n .finally(() => {\n try {\n router.deleteFetcher(fetcherKey)\n } catch {\n return\n }\n })\n\n const ttl = Math.max(1, dataPrefetchTtlMs)\n routeDataCacheRef.current.set(cacheKey, {\n expiresAt: now + ttl,\n promise: prefetchPromise,\n })\n\n await prefetchPromise\n }\n\n const prefetch = async (href: string, opts?: RoutePrefetchCallOptions): Promise<void> => {\n const normalized = normalizeHref(href)\n if (!normalized) return\n\n const currentPathWithSearch =\n typeof window === \"undefined\"\n ? \"\"\n : `${window.location.pathname}${window.location.search}`\n if (normalized.pathWithSearch === currentPathWithSearch) {\n return\n }\n\n const router = dataRouterContext?.router as DataRouter | undefined\n if (!router) return\n\n const matches = matchRoutes(\n router.routes,\n {\n pathname: normalized.pathname,\n search: normalized.search,\n hash: normalized.hash,\n },\n router.basename,\n )\n\n if (!matches || matches.length === 0) {\n return\n }\n\n const matchedRoutes = matches.map((match) => match.route as PrefetchableRoute)\n\n if (opts?.prefetchCode !== false) {\n await Promise.all(\n matchedRoutes.map(async (route) => {\n try {\n await prefetchRouteModule(route)\n } catch {\n return\n }\n }),\n )\n }\n\n await Promise.all(\n matchedRoutes.map(async (route) => {\n if (!resolveDataPrefetchFlag(route, opts?.prefetchData, dataPrefetchHandleKey)) {\n return\n }\n\n try {\n await prefetchRouteData(router, route, normalized.pathWithSearch)\n } catch {\n return\n }\n }),\n )\n }\n\n return (\n <RoutePrefetchContext.Provider\n value={{\n defaultPrefetch,\n prefetch,\n prefetchCode: async (href) => prefetch(href, { prefetchCode: true, prefetchData: false }),\n prefetchData: async (href) => prefetch(href, { prefetchCode: false, prefetchData: true }),\n }}\n >\n {children}\n </RoutePrefetchContext.Provider>\n )\n}\n\nexport const useRoutePrefetch = (): RoutePrefetchApi => useContext(RoutePrefetchContext)\n\nexport type { RoutePrefetchProviderProps }\n","import { forwardRef, useEffect, useRef, type Ref, type SyntheticEvent } from \"react\"\nimport { Link as RouterLink, type LinkProps as RouterLinkProps } from \"react-router\"\n\nimport { type RoutePrefetchBehavior, useRoutePrefetch } from \"./routePrefetch\"\n\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i\n\ntype LinkProps = Omit<RouterLinkProps, \"prefetch\"> & {\n prefetch?: RoutePrefetchBehavior\n prefetchData?: boolean\n}\n\nconst assignRef = <TValue,>(ref: Ref<TValue> | undefined, value: TValue) => {\n if (!ref) return\n if (typeof ref === \"function\") {\n ref(value)\n return\n }\n ref.current = value\n}\n\nconst composeEventHandlers = <TEvent extends SyntheticEvent>(\n theirHandler: ((event: TEvent) => void) | undefined,\n ourHandler: () => void,\n) => {\n return (event: TEvent) => {\n theirHandler?.(event)\n if (!event.defaultPrevented) {\n ourHandler()\n }\n }\n}\n\nconst shouldPrefetchLink = ({\n prefetch,\n reloadDocument,\n target,\n to,\n}: {\n prefetch: RoutePrefetchBehavior\n reloadDocument: boolean | undefined\n target: string | undefined\n to: RouterLinkProps[\"to\"]\n}): boolean => {\n if (prefetch === \"none\") return false\n if (reloadDocument) return false\n if (typeof target === \"string\" && target !== \"_self\") return false\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) return false\n return true\n}\n\nconst usePrefetchLink = (\n prefetchData: boolean | undefined,\n): {\n anchorRef: Ref<HTMLAnchorElement>\n prefetchHref: () => void\n getAnchorElement: () => HTMLAnchorElement | null\n} => {\n const localRef = useRef<HTMLAnchorElement | null>(null)\n const { prefetch } = useRoutePrefetch()\n\n return {\n anchorRef: (node) => {\n localRef.current = node\n },\n getAnchorElement: () => localRef.current,\n prefetchHref: () => {\n const href = localRef.current?.getAttribute(\"href\")\n if (!href) return\n void prefetch(href, { prefetchData })\n },\n }\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n prefetch: prefetchProp,\n prefetchData,\n onMouseEnter,\n onFocus,\n onTouchStart,\n reloadDocument,\n target,\n to,\n ...props\n },\n forwardedRef,\n ) => {\n const { defaultPrefetch } = useRoutePrefetch()\n const prefetchBehavior = prefetchProp ?? defaultPrefetch\n const viewportPrefetchedRef = useRef(false)\n const { anchorRef, prefetchHref, getAnchorElement } = usePrefetchLink(prefetchData)\n const canPrefetch = shouldPrefetchLink({\n prefetch: prefetchBehavior,\n reloadDocument,\n target,\n to,\n })\n\n useEffect(() => {\n viewportPrefetchedRef.current = false\n }, [to])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"render\") return\n prefetchHref()\n }, [canPrefetch, prefetchBehavior, prefetchHref])\n\n useEffect(() => {\n if (!canPrefetch || prefetchBehavior !== \"viewport\") return\n\n const element = getAnchorElement()\n if (!element || typeof IntersectionObserver === \"undefined\") return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const isVisible = entries.some((entry) => entry.isIntersecting)\n if (!isVisible || viewportPrefetchedRef.current) return\n viewportPrefetchedRef.current = true\n prefetchHref()\n },\n { threshold: 0.5 },\n )\n\n observer.observe(element)\n return () => {\n observer.disconnect()\n }\n }, [canPrefetch, prefetchBehavior, prefetchHref, getAnchorElement])\n\n const handleIntentPrefetch = () => {\n if (!canPrefetch || prefetchBehavior !== \"intent\") return\n prefetchHref()\n }\n\n return (\n <RouterLink\n {...props}\n to={to}\n target={target}\n reloadDocument={reloadDocument}\n prefetch=\"none\"\n onMouseEnter={composeEventHandlers(onMouseEnter, handleIntentPrefetch)}\n onFocus={composeEventHandlers(onFocus, handleIntentPrefetch)}\n onTouchStart={composeEventHandlers(onTouchStart, handleIntentPrefetch)}\n ref={(node) => {\n assignRef(forwardedRef, node)\n assignRef(anchorRef, node)\n }}\n />\n )\n },\n)\n\nLink.displayName = \"Link\"\n\nexport type { LinkProps }\n","import { LoaderFunction } from \"react-router\"\n\nimport { mergeRouteHandle, RouteHandleObject } from \"./routePrefetchHandles\"\n\n\ntype RouteModuleLoader = (...args: any[]) => unknown\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: RouteModuleLoader\n}\n\ntype RouteModuleImporter = () => Promise<RouteModule>\n\ntype RouteOptions = {\n handle?: unknown\n prefetchData?: boolean\n prefetchDataKey?: string\n}\n\ntype LazyRouteResult = {\n lazy: () => Promise<{\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n }>\n handle: RouteHandleObject\n}\n\nconst memoizeImporter = (importer: RouteModuleImporter): RouteModuleImporter => {\n let promise: Promise<RouteModule> | null = null\n\n return async () => {\n if (!promise) {\n promise = importer().catch((error) => {\n promise = null\n throw error\n })\n }\n\n return promise\n }\n}\n\nexport const lazyRoute = (importer: RouteModuleImporter, opts?: RouteOptions): LazyRouteResult => {\n const loadModule = memoizeImporter(importer)\n\n return {\n lazy: async () => {\n const module = await loadModule()\n const lazyRouteModule: {\n Component: React.ComponentType<unknown>\n loader?: LoaderFunction\n } = {\n Component: module.default,\n }\n\n if (typeof module.loader === \"function\") {\n lazyRouteModule.loader = module.loader as unknown as LoaderFunction\n }\n\n return lazyRouteModule\n },\n handle: mergeRouteHandle(opts?.handle, {\n importer: loadModule,\n prefetchData: opts?.prefetchData,\n prefetchDataKey: opts?.prefetchDataKey,\n }),\n }\n}\n","import { useEffect } from \"react\"\nimport { useLocation } from \"react-router\"\n\n\ntype MetaAttributeValue = string | number | boolean | undefined\ntype MetaEntry = Record<string, MetaAttributeValue>\n\ntype PageMeta = {\n title: string\n meta: MetaEntry[]\n}\n\n\nexport const useApplyMeta = ({\n defaultTitle = \"\",\n defaultMeta = [],\n pagesMeta = {}\n}: {\n defaultTitle?: string\n defaultMeta?: MetaEntry[]\n pagesMeta?: Record<string, PageMeta>\n} = {}) => {\n const location = useLocation()\n\n useEffect(() => {\n const loadMeta = async () => {\n\n let pageMeta = pagesMeta[location.pathname]\n\n if (!pageMeta) {\n pageMeta = { title: defaultTitle, meta: defaultMeta }\n }\n\n document.title = pageMeta.title\n\n // Remove previous dynamically inserted tags\n document.querySelectorAll(\"[data-react-meta]\").forEach((tag) => tag.remove())\n\n // Inject new tags\n pageMeta.meta.forEach((meta) => {\n const metaElement = document.createElement(\"meta\")\n metaElement.setAttribute(\"data-react-meta\", \"true\")\n\n // Set all attributes from the meta object\n Object.entries(meta).forEach(([key, value]) => {\n if (value) {\n metaElement.setAttribute(key, value.toString())\n }\n })\n\n document.head.appendChild(metaElement)\n })\n\n // Update canonical link\n const canonicalUrl = `${window.location.origin}${location.pathname}`\n\n const existingCanonical = document.querySelector(\"link[rel=\\\"canonical\\\"]\")\n if (existingCanonical) {\n existingCanonical.remove()\n }\n\n const canonicalLink = document.createElement(\"link\")\n canonicalLink.setAttribute(\"rel\", \"canonical\")\n canonicalLink.setAttribute(\"href\", canonicalUrl)\n canonicalLink.setAttribute(\"data-react-meta\", \"true\")\n document.head.appendChild(canonicalLink)\n }\n\n loadMeta()\n }, [location.pathname, defaultTitle, defaultMeta, pagesMeta])\n}\n","import { useEffect, useRef } from \"react\"\nimport type { BlockerFunction } from \"react-router\"\n\n\nexport type NavigationGuard = {\n id: string\n enabled: boolean\n priority?: number\n message: string\n blockOnSearch?: boolean\n shouldBlockNavigation: BlockerFunction\n shouldBlockUnload: boolean\n}\n\ntype NavigationGuardsListener = () => void\n\ntype NavigationGuardsStore = {\n guards: Map<string, NavigationGuard>\n listeners: Set<NavigationGuardsListener>\n}\n\nconst NAVIGATION_GUARDS_STORE_KEY = \"__rpcbaseNavigationGuardsStore\"\n\nconst getNavigationGuardsStore = (): NavigationGuardsStore => {\n const globalAny = globalThis as {\n [NAVIGATION_GUARDS_STORE_KEY]?: NavigationGuardsStore\n }\n\n const existing = globalAny[NAVIGATION_GUARDS_STORE_KEY]\n if (existing) {\n return existing\n }\n\n const created: NavigationGuardsStore = {\n guards: new Map<string, NavigationGuard>(),\n listeners: new Set<NavigationGuardsListener>(),\n }\n\n globalAny[NAVIGATION_GUARDS_STORE_KEY] = created\n return created\n}\n\nconst notify = (): void => {\n getNavigationGuardsStore().listeners.forEach((listener) => {\n listener()\n })\n}\n\nconst isSameGuard = (a: NavigationGuard, b: NavigationGuard): boolean =>\n a.id === b.id &&\n a.enabled === b.enabled &&\n a.priority === b.priority &&\n a.message === b.message &&\n a.blockOnSearch === b.blockOnSearch &&\n a.shouldBlockNavigation === b.shouldBlockNavigation &&\n a.shouldBlockUnload === b.shouldBlockUnload\n\nexport const upsertNavigationGuard = (guard: NavigationGuard): void => {\n const guards = getNavigationGuardsStore().guards\n const prev = guards.get(guard.id)\n if (prev && isSameGuard(prev, guard)) {\n return\n }\n\n guards.set(guard.id, guard)\n notify()\n}\n\nexport const removeNavigationGuard = (id: string): void => {\n const guards = getNavigationGuardsStore().guards\n const didDelete = guards.delete(id)\n if (didDelete) {\n notify()\n }\n}\n\nexport const getNavigationGuards = (): NavigationGuard[] =>\n Array.from(getNavigationGuardsStore().guards.values())\n\nexport const subscribeNavigationGuards = (\n listener: NavigationGuardsListener,\n): (() => void) => {\n const listeners = getNavigationGuardsStore().listeners\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const useRegisterNavigationGuard = (guard: NavigationGuard): void => {\n const latestGuardRef = useRef(guard)\n latestGuardRef.current = guard\n\n const lastIdRef = useRef<string | null>(null)\n\n useEffect(() => {\n const lastId = lastIdRef.current\n if (lastId && lastId !== guard.id) {\n removeNavigationGuard(lastId)\n }\n lastIdRef.current = guard.id\n\n if (!guard.enabled) {\n removeNavigationGuard(guard.id)\n return\n }\n\n upsertNavigationGuard(latestGuardRef.current)\n return () => {\n removeNavigationGuard(guard.id)\n }\n }, [\n guard.id,\n guard.enabled,\n guard.message,\n guard.priority,\n guard.blockOnSearch,\n guard.shouldBlockNavigation,\n guard.shouldBlockUnload,\n ])\n}\n","import {\n Component,\n Suspense,\n cloneElement,\n createElement,\n isValidElement,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type ErrorInfo,\n type ReactElement,\n type ReactNode,\n} from \"react\"\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\ntype QueryOverlayFallbackControls = QueryOverlayRenderControls & {\n onOpenChange: (open: boolean) => void\n}\n\ntype QueryOverlayFallbackRender = (controls: QueryOverlayFallbackControls) => ReactNode\n\ntype QueryOverlayErrorFallbackRender = (\n controls: QueryOverlayFallbackControls & {\n error: unknown\n },\n) => ReactNode\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\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\") {\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\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(fallback, 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"],"names":["ROUTE_MODULE_IMPORTER_HANDLE","ROUTE_PREFETCH_DATA_HANDLE","isHandleObject","value","Boolean","Array","isArray","getRouteModuleImporterFromHandle","handle","importer","getRoutePrefetchDataFromHandle","key","undefined","mergeRouteHandle","prefetchData","prefetchDataKey","nextHandle","noop","DEFAULT_PREFETCH_API","defaultPrefetch","prefetch","prefetchCode","RoutePrefetchContext","createContext","normalizeHref","href","window","url","URL","location","origin","pathWithSearch","pathname","search","hash","pruneDataCache","cache","now","forEach","expiresAt","delete","resolveDataPrefetchFlag","route","explicitPrefetchData","dataPrefetchHandleKey","routeHandlePrefetchData","RoutePrefetchProvider","t0","$","_c","children","t1","dataPrefetchTtlMs","t2","t3","dataRouterContext","useContext","UNSAFE_DataRouterContext","t4","Symbol","for","Map","routeModuleCacheRef","useRef","t5","routeDataCacheRef","t6","routeId","id","cached","current","get","lazyRouteLoader","lazy","routeModuleImporter","prefetchPromise","Promise","resolve","then","_temp","catch","error","set","prefetchRouteModule","t7","router","route_0","routeId_0","Date","cacheKey","cached_0","promise","hasLoader","loader","loadedRouteModule","_temp2","fetcherKey","prefetchPromise_0","fetch","error_0","finally","deleteFetcher","ttl","Math","max","prefetchRouteData","t8","href_0","opts","normalized","currentPathWithSearch","router_0","matches","matchRoutes","routes","basename","length","matchedRoutes","map","_temp3","all","route_1","route_2","t10","t9","href_1","href_2","t11","t12","useRoutePrefetch","module","match","ABSOLUTE_URL_REGEX","assignRef","ref","composeEventHandlers","theirHandler","ourHandler","event","defaultPrevented","shouldPrefetchLink","reloadDocument","target","to","test","usePrefetchLink","localRef","node","anchorRef","getAnchorElement","prefetchHref","getAttribute","Link","forwardRef","forwardedRef","onFocus","onMouseEnter","onTouchStart","prefetchProp","props","prefetchBehavior","viewportPrefetchedRef","canPrefetch","useEffect","element","IntersectionObserver","observer","entries","isVisible","some","threshold","observe","disconnect","handleIntentPrefetch","t13","RouterLink","displayName","entry","isIntersecting","memoizeImporter","lazyRoute","loadModule","lazyRouteModule","Component","default","useApplyMeta","defaultTitle","defaultMeta","pagesMeta","useLocation","loadMeta","pageMeta","meta","document","title","querySelectorAll","canonicalUrl","existingCanonical","querySelector","remove","canonicalLink","createElement","setAttribute","head","appendChild","tag","metaElement","Object","toString","NAVIGATION_GUARDS_STORE_KEY","getNavigationGuardsStore","globalAny","globalThis","existing","created","guards","listeners","Set","notify","listener","isSameGuard","a","b","enabled","priority","message","blockOnSearch","shouldBlockNavigation","shouldBlockUnload","upsertNavigationGuard","guard","prev","removeNavigationGuard","didDelete","getNavigationGuards","from","values","subscribeNavigationGuards","add","useRegisterNavigationGuard","latestGuardRef","lastIdRef","lastId","QueryOverlayErrorBoundary","state","getDerivedStateFromError","componentDidCatch","errorInfo","console","componentDidUpdate","previousProps","resetKey","setState","render","fallback","QUERY_OVERLAY_URL_CHANGE_EVENT","getCurrentUrlSnapshot","getParamValueFromSearch","param","URLSearchParams","getSearchFromUrlSnapshot","useRouterUrlSnapshot","context","UNSAFE_LocationContext","getCurrentParamValue","getCurrentSearch","subscribeToQueryOverlayUrl","addEventListener","removeEventListener","buildUrl","searchParams","nextSearch","clearOverlaySearchParams","params","clear","buildOverlayUrlStateKey","getAll","join","renderQueryOverlayFallback","controls","includeError","isValidElement","cloneElement","open","isOpen","setOpen","onOpenChange","closeOverlay","replaceQueryParams","update","nextUrl","currentUrl","history","replaceState","dispatchEvent","Event","useQueryParam","routerUrlSnapshot","useSyncExternalStore","useQuerySearch","useQueryOverlay","parse","write","closeDelayMs","isOptimisticallyClosed","setIsOptimisticallyClosed","useState","closeTimeoutRef","isUrlOpen","overlayUrlStateKey","clearTimeout","clearScheduledClose","resetOptimisticClose","closeUrlOverlay","nextValue","searchParams_0","buildHref","nextValue_0","searchParams_1","openOverlay","setTimeout","t14","t15","shouldRender","QueryOverlay","overlay","errorFallback","fallbackControls","Suspense","normalizeKey","toLowerCase","defaultIsTypingTarget","tagName","isContentEditable","matchesShortcutKeyDown","shortcut","mod","hasMod","metaKey","ctrlKey","ctrl","alt","altKey","shift","shiftKey","callMaybeAsync","fn","useShortcutPrefetchNavigate","getHref","navigate","trigger","preventDefault","ignoreTypingTarget","isTypingTarget","routerNavigate","useNavigate","shortcutRef","getHrefRef","prefetchRef","navigateRef","triggerRef","enabledRef","preventDefaultRef","ignoreTypingTargetRef","isTypingTargetRef","waitingForShortcutKeyUpRef","onKeyDown","repeat","onKeyUp","onBlur"],"mappings":"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"}
|
package/dist/queryOverlay.d.ts
CHANGED
|
@@ -1,29 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { ReactElement, ReactNode } from 'react';
|
|
2
|
+
export type UseQueryOverlayOptions<TOverlay> = {
|
|
3
|
+
params: string[];
|
|
4
|
+
parse: (params: URLSearchParams) => TOverlay | null;
|
|
5
|
+
write: (params: URLSearchParams, state: TOverlay) => void;
|
|
6
|
+
clear: (params: URLSearchParams) => void;
|
|
6
7
|
closeDelayMs?: number;
|
|
7
8
|
};
|
|
8
|
-
export type QueryOverlayApi<TOverlay
|
|
9
|
+
export type QueryOverlayApi<TOverlay> = {
|
|
9
10
|
value: TOverlay | null;
|
|
10
11
|
isOpen: boolean;
|
|
12
|
+
shouldRender: boolean;
|
|
11
13
|
buildHref: (nextValue: TOverlay | null) => string;
|
|
12
14
|
openOverlay: (nextValue: TOverlay) => void;
|
|
13
15
|
closeOverlay: () => void;
|
|
16
|
+
resetOptimisticClose: () => void;
|
|
14
17
|
};
|
|
15
|
-
export type
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
export type QueryOverlayRenderControls = {
|
|
19
|
+
open: boolean;
|
|
20
|
+
setOpen: (open: boolean) => void;
|
|
18
21
|
closeOverlay: () => void;
|
|
19
22
|
resetOptimisticClose: () => void;
|
|
20
23
|
};
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
type QueryOverlayFallbackControls = QueryOverlayRenderControls & {
|
|
25
|
+
onOpenChange: (open: boolean) => void;
|
|
26
|
+
};
|
|
27
|
+
type QueryOverlayFallbackRender = (controls: QueryOverlayFallbackControls) => ReactNode;
|
|
28
|
+
type QueryOverlayErrorFallbackRender = (controls: QueryOverlayFallbackControls & {
|
|
29
|
+
error: unknown;
|
|
30
|
+
}) => ReactNode;
|
|
31
|
+
export type QueryOverlayProps<TOverlay> = {
|
|
32
|
+
overlay: QueryOverlayApi<TOverlay>;
|
|
33
|
+
fallback?: ReactNode | QueryOverlayFallbackRender;
|
|
34
|
+
errorFallback?: ReactNode | QueryOverlayErrorFallbackRender;
|
|
35
|
+
children: (state: TOverlay, controls: QueryOverlayRenderControls) => ReactNode;
|
|
23
36
|
};
|
|
24
37
|
export declare function replaceQueryParams(update: (searchParams: URLSearchParams) => void): void;
|
|
25
38
|
export declare function useQueryParam(param: string): string | null;
|
|
26
|
-
export declare function
|
|
27
|
-
export declare const useQueryOverlay: <TOverlay
|
|
28
|
-
export declare
|
|
39
|
+
export declare function useQuerySearch(): string;
|
|
40
|
+
export declare const useQueryOverlay: <TOverlay>({ params, parse, write, clear, closeDelayMs, }: UseQueryOverlayOptions<TOverlay>) => QueryOverlayApi<TOverlay>;
|
|
41
|
+
export declare function QueryOverlay<TOverlay>({ overlay, fallback, errorFallback, children, }: QueryOverlayProps<TOverlay>): ReactElement | null;
|
|
42
|
+
export {};
|
|
29
43
|
//# sourceMappingURL=queryOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryOverlay.d.ts","sourceRoot":"","sources":["../src/queryOverlay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queryOverlay.d.ts","sourceRoot":"","sources":["../src/queryOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAId,MAAM,MAAM,sBAAsB,CAAC,QAAQ,IAAI;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,QAAQ,GAAG,IAAI,CAAA;IACnD,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IACzD,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;IACxC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,QAAQ,IAAI;IACtC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAA;IACjD,WAAW,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,oBAAoB,EAAE,MAAM,IAAI,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChC,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,oBAAoB,EAAE,MAAM,IAAI,CAAA;CACjC,CAAA;AAED,KAAK,4BAA4B,GAAG,0BAA0B,GAAG;IAC/D,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACtC,CAAA;AAED,KAAK,0BAA0B,GAAG,CAAC,QAAQ,EAAE,4BAA4B,KAAK,SAAS,CAAA;AAEvF,KAAK,+BAA+B,GAAG,CACrC,QAAQ,EAAE,4BAA4B,GAAG;IACvC,KAAK,EAAE,OAAO,CAAA;CACf,KACE,SAAS,CAAA;AAEd,MAAM,MAAM,iBAAiB,CAAC,QAAQ,IAAI;IACxC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAClC,QAAQ,CAAC,EAAE,SAAS,GAAG,0BAA0B,CAAA;IACjD,aAAa,CAAC,EAAE,SAAS,GAAG,+BAA+B,CAAA;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,0BAA0B,KAAK,SAAS,CAAA;CAC/E,CAAA;AAiJD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,QAajF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,EAAE,gDAMvC,sBAAsB,CAAC,QAAQ,CAAC,KAAG,eAAe,CAAC,QAAQ,CAuF7D,CAAA;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,EACrC,OAAO,EACP,QAAQ,EACR,aAAa,EACb,QAAQ,GACT,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,YAAY,GAAG,IAAI,CAsCnD"}
|