@tanstack/router-devtools 1.112.0 → 1.112.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AgeTicker.cjs +58 -0
- package/dist/cjs/AgeTicker.cjs.map +1 -0
- package/dist/cjs/AgeTicker.d.cts +5 -0
- package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +421 -0
- package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
- package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +3 -0
- package/dist/cjs/TanStackRouterDevtools.cjs +177 -0
- package/dist/cjs/TanStackRouterDevtools.cjs.map +1 -0
- package/dist/cjs/{devtools.d.cts → TanStackRouterDevtools.d.cts} +0 -31
- package/dist/cjs/TanStackRouterDevtoolsPanel.cjs +21 -0
- package/dist/cjs/TanStackRouterDevtoolsPanel.cjs.map +1 -0
- package/dist/cjs/TanStackRouterDevtoolsPanel.d.cts +33 -0
- package/dist/cjs/index.cjs +4 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -1
- package/dist/cjs/useStyles.cjs +570 -0
- package/dist/cjs/useStyles.cjs.map +1 -0
- package/dist/cjs/useStyles.d.cts +52 -0
- package/dist/esm/AgeTicker.d.ts +5 -0
- package/dist/esm/AgeTicker.js +58 -0
- package/dist/esm/AgeTicker.js.map +1 -0
- package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +3 -0
- package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +421 -0
- package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
- package/dist/esm/{devtools.d.ts → TanStackRouterDevtools.d.ts} +0 -31
- package/dist/esm/TanStackRouterDevtools.js +177 -0
- package/dist/esm/TanStackRouterDevtools.js.map +1 -0
- package/dist/esm/TanStackRouterDevtoolsPanel.d.ts +33 -0
- package/dist/esm/TanStackRouterDevtoolsPanel.js +21 -0
- package/dist/esm/TanStackRouterDevtoolsPanel.js.map +1 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/useStyles.d.ts +52 -0
- package/dist/esm/useStyles.js +553 -0
- package/dist/esm/useStyles.js.map +1 -0
- package/package.json +1 -1
- package/src/AgeTicker.tsx +73 -0
- package/src/BaseTanStackRouterDevtoolsPanel.tsx +488 -0
- package/src/TanStackRouterDevtools.tsx +250 -0
- package/src/TanStackRouterDevtoolsPanel.tsx +54 -0
- package/src/index.tsx +2 -1
- package/src/useStyles.tsx +589 -0
- package/dist/cjs/devtools.cjs +0 -1212
- package/dist/cjs/devtools.cjs.map +0 -1
- package/dist/esm/devtools.js +0 -1195
- package/dist/esm/devtools.js.map +0 -1
- package/src/devtools.tsx +0 -1443
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import React__default from "react";
|
|
4
|
+
import { useStyles } from "./useStyles.js";
|
|
5
|
+
function formatTime(ms) {
|
|
6
|
+
const units = ["s", "min", "h", "d"];
|
|
7
|
+
const values = [ms / 1e3, ms / 6e4, ms / 36e5, ms / 864e5];
|
|
8
|
+
let chosenUnitIndex = 0;
|
|
9
|
+
for (let i = 1; i < values.length; i++) {
|
|
10
|
+
if (values[i] < 1) break;
|
|
11
|
+
chosenUnitIndex = i;
|
|
12
|
+
}
|
|
13
|
+
const formatter = new Intl.NumberFormat(navigator.language, {
|
|
14
|
+
compactDisplay: "short",
|
|
15
|
+
notation: "compact",
|
|
16
|
+
maximumFractionDigits: 0
|
|
17
|
+
});
|
|
18
|
+
return formatter.format(values[chosenUnitIndex]) + units[chosenUnitIndex];
|
|
19
|
+
}
|
|
20
|
+
function AgeTicker({
|
|
21
|
+
match,
|
|
22
|
+
router
|
|
23
|
+
}) {
|
|
24
|
+
const styles = useStyles();
|
|
25
|
+
const rerender = React__default.useReducer(
|
|
26
|
+
() => ({}),
|
|
27
|
+
() => ({})
|
|
28
|
+
)[1];
|
|
29
|
+
React__default.useEffect(() => {
|
|
30
|
+
const interval = setInterval(() => {
|
|
31
|
+
rerender();
|
|
32
|
+
}, 1e3);
|
|
33
|
+
return () => {
|
|
34
|
+
clearInterval(interval);
|
|
35
|
+
};
|
|
36
|
+
}, [rerender]);
|
|
37
|
+
if (!match) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const route = router.looseRoutesById[match.routeId];
|
|
41
|
+
if (!route.options.loader) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const age = Date.now() - match.updatedAt;
|
|
45
|
+
const staleTime = route.options.staleTime ?? router.options.defaultStaleTime ?? 0;
|
|
46
|
+
const gcTime = route.options.gcTime ?? router.options.defaultGcTime ?? 30 * 60 * 1e3;
|
|
47
|
+
return /* @__PURE__ */ jsxs("div", { className: clsx(styles.ageTicker(age > staleTime)), children: [
|
|
48
|
+
/* @__PURE__ */ jsx("div", { children: formatTime(age) }),
|
|
49
|
+
/* @__PURE__ */ jsx("div", { children: "/" }),
|
|
50
|
+
/* @__PURE__ */ jsx("div", { children: formatTime(staleTime) }),
|
|
51
|
+
/* @__PURE__ */ jsx("div", { children: "/" }),
|
|
52
|
+
/* @__PURE__ */ jsx("div", { children: formatTime(gcTime) })
|
|
53
|
+
] });
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
AgeTicker
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=AgeTicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgeTicker.js","sources":["../../src/AgeTicker.tsx"],"sourcesContent":["import { clsx as cx } from 'clsx'\nimport React from 'react'\nimport { useStyles } from './useStyles'\nimport type { AnyRouteMatch, AnyRouter } from '@tanstack/react-router'\n\nfunction formatTime(ms: number) {\n const units = ['s', 'min', 'h', 'd']\n const values = [ms / 1000, ms / 60000, ms / 3600000, ms / 86400000]\n\n let chosenUnitIndex = 0\n for (let i = 1; i < values.length; i++) {\n if (values[i]! < 1) break\n chosenUnitIndex = i\n }\n\n const formatter = new Intl.NumberFormat(navigator.language, {\n compactDisplay: 'short',\n notation: 'compact',\n maximumFractionDigits: 0,\n })\n\n return formatter.format(values[chosenUnitIndex]!) + units[chosenUnitIndex]\n}\n\nexport function AgeTicker({\n match,\n router,\n}: {\n match?: AnyRouteMatch\n router: AnyRouter\n}) {\n const styles = useStyles()\n const rerender = React.useReducer(\n () => ({}),\n () => ({}),\n )[1]\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n rerender()\n }, 1000)\n\n return () => {\n clearInterval(interval)\n }\n }, [rerender])\n\n if (!match) {\n return null\n }\n\n const route = router.looseRoutesById[match.routeId]!\n\n if (!route.options.loader) {\n return null\n }\n\n const age = Date.now() - match.updatedAt\n const staleTime =\n route.options.staleTime ?? router.options.defaultStaleTime ?? 0\n const gcTime =\n route.options.gcTime ?? router.options.defaultGcTime ?? 30 * 60 * 1000\n\n return (\n <div className={cx(styles.ageTicker(age > staleTime))}>\n <div>{formatTime(age)}</div>\n <div>/</div>\n <div>{formatTime(staleTime)}</div>\n <div>/</div>\n <div>{formatTime(gcTime)}</div>\n </div>\n )\n}\n"],"names":["React","cx"],"mappings":";;;;AAKA,SAAS,WAAW,IAAY;AAC9B,QAAM,QAAQ,CAAC,KAAK,OAAO,KAAK,GAAG;AAC7B,QAAA,SAAS,CAAC,KAAK,KAAM,KAAK,KAAO,KAAK,MAAS,KAAK,KAAQ;AAElE,MAAI,kBAAkB;AACtB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAClC,QAAA,OAAO,CAAC,IAAK,EAAG;AACF,sBAAA;AAAA,EAAA;AAGpB,QAAM,YAAY,IAAI,KAAK,aAAa,UAAU,UAAU;AAAA,IAC1D,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,uBAAuB;AAAA,EAAA,CACxB;AAED,SAAO,UAAU,OAAO,OAAO,eAAe,CAAE,IAAI,MAAM,eAAe;AAC3E;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AACF,GAGG;AACD,QAAM,SAAS,UAAU;AACzB,QAAM,WAAWA,eAAM;AAAA,IACrB,OAAO;IACP,OAAO,CAAC;AAAA,IACR,CAAC;AAEHA,iBAAM,UAAU,MAAM;AACd,UAAA,WAAW,YAAY,MAAM;AACxB,eAAA;AAAA,OACR,GAAI;AAEP,WAAO,MAAM;AACX,oBAAc,QAAQ;AAAA,IACxB;AAAA,EAAA,GACC,CAAC,QAAQ,CAAC;AAEb,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EAAA;AAGT,QAAM,QAAQ,OAAO,gBAAgB,MAAM,OAAO;AAE9C,MAAA,CAAC,MAAM,QAAQ,QAAQ;AAClB,WAAA;AAAA,EAAA;AAGT,QAAM,MAAM,KAAK,IAAI,IAAI,MAAM;AAC/B,QAAM,YACJ,MAAM,QAAQ,aAAa,OAAO,QAAQ,oBAAoB;AAC1D,QAAA,SACJ,MAAM,QAAQ,UAAU,OAAO,QAAQ,iBAAiB,KAAK,KAAK;AAGlE,SAAA,qBAAC,SAAI,WAAWC,KAAG,OAAO,UAAU,MAAM,SAAS,CAAC,GAClD,UAAA;AAAA,IAAC,oBAAA,OAAA,EAAK,UAAW,WAAA,GAAG,EAAE,CAAA;AAAA,IACtB,oBAAC,SAAI,UAAC,IAAA,CAAA;AAAA,IACL,oBAAA,OAAA,EAAK,UAAW,WAAA,SAAS,EAAE,CAAA;AAAA,IAC5B,oBAAC,SAAI,UAAC,IAAA,CAAA;AAAA,IACL,oBAAA,OAAA,EAAK,UAAW,WAAA,MAAM,EAAE,CAAA;AAAA,EAAA,GAC3B;AAEJ;"}
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React__default from "react";
|
|
3
|
+
import { clsx } from "clsx";
|
|
4
|
+
import { useRouter, useRouterState, invariant, rootRouteId, trimPath } from "@tanstack/react-router";
|
|
5
|
+
import { useDevtoolsOnClose } from "./context.js";
|
|
6
|
+
import { useStyles } from "./useStyles.js";
|
|
7
|
+
import useLocalStorage from "./useLocalStorage.js";
|
|
8
|
+
import Explorer from "./Explorer.js";
|
|
9
|
+
import { multiSortBy, getStatusColor, getRouteStatusColor } from "./utils.js";
|
|
10
|
+
import { AgeTicker } from "./AgeTicker.js";
|
|
11
|
+
function Logo(props) {
|
|
12
|
+
const { className, ...rest } = props;
|
|
13
|
+
const styles = useStyles();
|
|
14
|
+
return /* @__PURE__ */ jsxs("button", { ...rest, className: clsx(styles.logo, className), children: [
|
|
15
|
+
/* @__PURE__ */ jsx("div", { className: styles.tanstackLogo, children: "TANSTACK" }),
|
|
16
|
+
/* @__PURE__ */ jsx("div", { className: styles.routerLogo, children: "React Router v1" })
|
|
17
|
+
] });
|
|
18
|
+
}
|
|
19
|
+
function RouteComp({
|
|
20
|
+
router,
|
|
21
|
+
route,
|
|
22
|
+
isRoot,
|
|
23
|
+
activeId,
|
|
24
|
+
setActiveId
|
|
25
|
+
}) {
|
|
26
|
+
var _a;
|
|
27
|
+
const routerState = useRouterState({
|
|
28
|
+
router
|
|
29
|
+
});
|
|
30
|
+
const styles = useStyles();
|
|
31
|
+
const matches = routerState.pendingMatches || routerState.matches;
|
|
32
|
+
const match = routerState.matches.find((d) => d.routeId === route.id);
|
|
33
|
+
const param = React__default.useMemo(() => {
|
|
34
|
+
try {
|
|
35
|
+
if (match == null ? void 0 : match.params) {
|
|
36
|
+
const p = match.params;
|
|
37
|
+
const r = route.path || trimPath(route.id);
|
|
38
|
+
if (r.startsWith("$")) {
|
|
39
|
+
const trimmed = r.slice(1);
|
|
40
|
+
if (p[trimmed]) {
|
|
41
|
+
return `(${p[trimmed]})`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return "";
|
|
46
|
+
} catch (error) {
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
}, [match, route]);
|
|
50
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
51
|
+
/* @__PURE__ */ jsxs(
|
|
52
|
+
"div",
|
|
53
|
+
{
|
|
54
|
+
role: "button",
|
|
55
|
+
"aria-label": `Open match details for ${route.id}`,
|
|
56
|
+
onClick: () => {
|
|
57
|
+
if (match) {
|
|
58
|
+
setActiveId(activeId === route.id ? "" : route.id);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
className: clsx(
|
|
62
|
+
styles.routesRowContainer(route.id === activeId, !!match)
|
|
63
|
+
),
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsx(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
className: clsx(
|
|
69
|
+
styles.matchIndicator(getRouteStatusColor(matches, route))
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
/* @__PURE__ */ jsxs("div", { className: clsx(styles.routesRow(!!match)), children: [
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
75
|
+
/* @__PURE__ */ jsxs("code", { className: styles.code, children: [
|
|
76
|
+
isRoot ? rootRouteId : route.path || trimPath(route.id),
|
|
77
|
+
" "
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsx("code", { className: styles.routeParamInfo, children: param })
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ jsx(AgeTicker, { match, router })
|
|
82
|
+
] })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
((_a = route.children) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsx("div", { className: styles.nestedRouteRow(!!isRoot), children: [...route.children].sort((a, b) => {
|
|
87
|
+
return a.rank - b.rank;
|
|
88
|
+
}).map((r) => /* @__PURE__ */ jsx(
|
|
89
|
+
RouteComp,
|
|
90
|
+
{
|
|
91
|
+
router,
|
|
92
|
+
route: r,
|
|
93
|
+
activeId,
|
|
94
|
+
setActiveId
|
|
95
|
+
},
|
|
96
|
+
r.id
|
|
97
|
+
)) }) : null
|
|
98
|
+
] });
|
|
99
|
+
}
|
|
100
|
+
const BaseTanStackRouterDevtoolsPanel = React__default.forwardRef(function BaseTanStackRouterDevtoolsPanel2(props, ref) {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
const {
|
|
103
|
+
isOpen = true,
|
|
104
|
+
setIsOpen,
|
|
105
|
+
handleDragStart,
|
|
106
|
+
router: userRouter,
|
|
107
|
+
shadowDOMTarget,
|
|
108
|
+
...panelProps
|
|
109
|
+
} = props;
|
|
110
|
+
const { onCloseClick } = useDevtoolsOnClose();
|
|
111
|
+
const styles = useStyles();
|
|
112
|
+
const { className, ...otherPanelProps } = panelProps;
|
|
113
|
+
const contextRouter = useRouter({ warn: false });
|
|
114
|
+
const router = userRouter ?? contextRouter;
|
|
115
|
+
const routerState = useRouterState({
|
|
116
|
+
router
|
|
117
|
+
});
|
|
118
|
+
invariant(
|
|
119
|
+
router,
|
|
120
|
+
"No router was found for the TanStack Router Devtools. Please place the devtools in the <RouterProvider> component tree or pass the router instance to the devtools manually."
|
|
121
|
+
);
|
|
122
|
+
const [showMatches, setShowMatches] = useLocalStorage(
|
|
123
|
+
"tanstackRouterDevtoolsShowMatches",
|
|
124
|
+
true
|
|
125
|
+
);
|
|
126
|
+
const [activeId, setActiveId] = useLocalStorage(
|
|
127
|
+
"tanstackRouterDevtoolsActiveRouteId",
|
|
128
|
+
""
|
|
129
|
+
);
|
|
130
|
+
const activeMatch = React__default.useMemo(() => {
|
|
131
|
+
const matches = [
|
|
132
|
+
...routerState.pendingMatches ?? [],
|
|
133
|
+
...routerState.matches,
|
|
134
|
+
...routerState.cachedMatches
|
|
135
|
+
];
|
|
136
|
+
return matches.find((d) => d.routeId === activeId || d.id === activeId);
|
|
137
|
+
}, [
|
|
138
|
+
activeId,
|
|
139
|
+
routerState.cachedMatches,
|
|
140
|
+
routerState.matches,
|
|
141
|
+
routerState.pendingMatches
|
|
142
|
+
]);
|
|
143
|
+
const hasSearch = Object.keys(routerState.location.search).length;
|
|
144
|
+
const explorerState = {
|
|
145
|
+
...router,
|
|
146
|
+
state: router.state
|
|
147
|
+
};
|
|
148
|
+
return /* @__PURE__ */ jsxs(
|
|
149
|
+
"div",
|
|
150
|
+
{
|
|
151
|
+
ref,
|
|
152
|
+
className: clsx(
|
|
153
|
+
styles.devtoolsPanel,
|
|
154
|
+
"TanStackRouterDevtoolsPanel",
|
|
155
|
+
className
|
|
156
|
+
),
|
|
157
|
+
...otherPanelProps,
|
|
158
|
+
children: [
|
|
159
|
+
handleDragStart ? /* @__PURE__ */ jsx("div", { className: styles.dragHandle, onMouseDown: handleDragStart }) : null,
|
|
160
|
+
/* @__PURE__ */ jsx(
|
|
161
|
+
"button",
|
|
162
|
+
{
|
|
163
|
+
className: styles.panelCloseBtn,
|
|
164
|
+
onClick: (e) => {
|
|
165
|
+
setIsOpen(false);
|
|
166
|
+
onCloseClick(e);
|
|
167
|
+
},
|
|
168
|
+
children: /* @__PURE__ */ jsx(
|
|
169
|
+
"svg",
|
|
170
|
+
{
|
|
171
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
172
|
+
width: "10",
|
|
173
|
+
height: "6",
|
|
174
|
+
fill: "none",
|
|
175
|
+
viewBox: "0 0 10 6",
|
|
176
|
+
className: styles.panelCloseBtnIcon,
|
|
177
|
+
children: /* @__PURE__ */ jsx(
|
|
178
|
+
"path",
|
|
179
|
+
{
|
|
180
|
+
stroke: "currentColor",
|
|
181
|
+
strokeLinecap: "round",
|
|
182
|
+
strokeLinejoin: "round",
|
|
183
|
+
strokeWidth: "1.667",
|
|
184
|
+
d: "M1 1l4 4 4-4"
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
),
|
|
191
|
+
/* @__PURE__ */ jsxs("div", { className: styles.firstContainer, children: [
|
|
192
|
+
/* @__PURE__ */ jsx("div", { className: styles.row, children: /* @__PURE__ */ jsx(
|
|
193
|
+
Logo,
|
|
194
|
+
{
|
|
195
|
+
"aria-hidden": true,
|
|
196
|
+
onClick: (e) => {
|
|
197
|
+
setIsOpen(false);
|
|
198
|
+
onCloseClick(e);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
) }),
|
|
202
|
+
/* @__PURE__ */ jsx("div", { className: styles.routerExplorerContainer, children: /* @__PURE__ */ jsx("div", { className: styles.routerExplorer, children: /* @__PURE__ */ jsx(
|
|
203
|
+
Explorer,
|
|
204
|
+
{
|
|
205
|
+
label: "Router",
|
|
206
|
+
value: Object.fromEntries(
|
|
207
|
+
multiSortBy(
|
|
208
|
+
Object.keys(explorerState),
|
|
209
|
+
[
|
|
210
|
+
"state",
|
|
211
|
+
"routesById",
|
|
212
|
+
"routesByPath",
|
|
213
|
+
"flatRoutes",
|
|
214
|
+
"options",
|
|
215
|
+
"manifest"
|
|
216
|
+
].map((d) => (dd) => dd !== d)
|
|
217
|
+
).map((key) => [key, explorerState[key]]).filter(
|
|
218
|
+
(d) => typeof d[1] !== "function" && ![
|
|
219
|
+
"__store",
|
|
220
|
+
"basepath",
|
|
221
|
+
"injectedHtml",
|
|
222
|
+
"subscribers",
|
|
223
|
+
"latestLoadPromise",
|
|
224
|
+
"navigateTimeout",
|
|
225
|
+
"resetNextScroll",
|
|
226
|
+
"tempLocationKey",
|
|
227
|
+
"latestLocation",
|
|
228
|
+
"routeTree",
|
|
229
|
+
"history"
|
|
230
|
+
].includes(d[0])
|
|
231
|
+
)
|
|
232
|
+
),
|
|
233
|
+
defaultExpanded: {
|
|
234
|
+
state: {},
|
|
235
|
+
context: {},
|
|
236
|
+
options: {}
|
|
237
|
+
},
|
|
238
|
+
filterSubEntries: (subEntries) => {
|
|
239
|
+
return subEntries.filter((d) => typeof d.value !== "function");
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
) }) })
|
|
243
|
+
] }),
|
|
244
|
+
/* @__PURE__ */ jsxs("div", { className: styles.secondContainer, children: [
|
|
245
|
+
/* @__PURE__ */ jsxs("div", { className: styles.matchesContainer, children: [
|
|
246
|
+
/* @__PURE__ */ jsxs("div", { className: styles.detailsHeader, children: [
|
|
247
|
+
/* @__PURE__ */ jsx("span", { children: "Pathname" }),
|
|
248
|
+
routerState.location.maskedLocation ? /* @__PURE__ */ jsx("div", { className: styles.maskedBadgeContainer, children: /* @__PURE__ */ jsx("span", { className: styles.maskedBadge, children: "masked" }) }) : null
|
|
249
|
+
] }),
|
|
250
|
+
/* @__PURE__ */ jsxs("div", { className: styles.detailsContent, children: [
|
|
251
|
+
/* @__PURE__ */ jsx("code", { children: routerState.location.pathname }),
|
|
252
|
+
routerState.location.maskedLocation ? /* @__PURE__ */ jsx("code", { className: styles.maskedLocation, children: routerState.location.maskedLocation.pathname }) : null
|
|
253
|
+
] }),
|
|
254
|
+
/* @__PURE__ */ jsxs("div", { className: styles.detailsHeader, children: [
|
|
255
|
+
/* @__PURE__ */ jsxs("div", { className: styles.routeMatchesToggle, children: [
|
|
256
|
+
/* @__PURE__ */ jsx(
|
|
257
|
+
"button",
|
|
258
|
+
{
|
|
259
|
+
type: "button",
|
|
260
|
+
onClick: () => {
|
|
261
|
+
setShowMatches(false);
|
|
262
|
+
},
|
|
263
|
+
disabled: !showMatches,
|
|
264
|
+
className: clsx(styles.routeMatchesToggleBtn(!showMatches, true)),
|
|
265
|
+
children: "Routes"
|
|
266
|
+
}
|
|
267
|
+
),
|
|
268
|
+
/* @__PURE__ */ jsx(
|
|
269
|
+
"button",
|
|
270
|
+
{
|
|
271
|
+
type: "button",
|
|
272
|
+
onClick: () => {
|
|
273
|
+
setShowMatches(true);
|
|
274
|
+
},
|
|
275
|
+
disabled: showMatches,
|
|
276
|
+
className: clsx(
|
|
277
|
+
styles.routeMatchesToggleBtn(!!showMatches, false)
|
|
278
|
+
),
|
|
279
|
+
children: "Matches"
|
|
280
|
+
}
|
|
281
|
+
)
|
|
282
|
+
] }),
|
|
283
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsHeaderInfo, children: /* @__PURE__ */ jsx("div", { children: "age / staleTime / gcTime" }) })
|
|
284
|
+
] }),
|
|
285
|
+
/* @__PURE__ */ jsx("div", { className: clsx(styles.routesContainer), children: !showMatches ? /* @__PURE__ */ jsx(
|
|
286
|
+
RouteComp,
|
|
287
|
+
{
|
|
288
|
+
router,
|
|
289
|
+
route: router.routeTree,
|
|
290
|
+
isRoot: true,
|
|
291
|
+
activeId,
|
|
292
|
+
setActiveId
|
|
293
|
+
}
|
|
294
|
+
) : /* @__PURE__ */ jsx("div", { children: (((_a = routerState.pendingMatches) == null ? void 0 : _a.length) ? routerState.pendingMatches : routerState.matches).map((match, i) => {
|
|
295
|
+
return /* @__PURE__ */ jsxs(
|
|
296
|
+
"div",
|
|
297
|
+
{
|
|
298
|
+
role: "button",
|
|
299
|
+
"aria-label": `Open match details for ${match.id}`,
|
|
300
|
+
onClick: () => setActiveId(activeId === match.id ? "" : match.id),
|
|
301
|
+
className: clsx(styles.matchRow(match === activeMatch)),
|
|
302
|
+
children: [
|
|
303
|
+
/* @__PURE__ */ jsx(
|
|
304
|
+
"div",
|
|
305
|
+
{
|
|
306
|
+
className: clsx(
|
|
307
|
+
styles.matchIndicator(getStatusColor(match))
|
|
308
|
+
)
|
|
309
|
+
}
|
|
310
|
+
),
|
|
311
|
+
/* @__PURE__ */ jsx(
|
|
312
|
+
"code",
|
|
313
|
+
{
|
|
314
|
+
className: styles.matchID,
|
|
315
|
+
children: `${match.routeId === rootRouteId ? rootRouteId : match.pathname}`
|
|
316
|
+
}
|
|
317
|
+
),
|
|
318
|
+
/* @__PURE__ */ jsx(AgeTicker, { match, router })
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
match.id || i
|
|
322
|
+
);
|
|
323
|
+
}) }) })
|
|
324
|
+
] }),
|
|
325
|
+
routerState.cachedMatches.length ? /* @__PURE__ */ jsxs("div", { className: styles.cachedMatchesContainer, children: [
|
|
326
|
+
/* @__PURE__ */ jsxs("div", { className: styles.detailsHeader, children: [
|
|
327
|
+
/* @__PURE__ */ jsx("div", { children: "Cached Matches" }),
|
|
328
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsHeaderInfo, children: "age / staleTime / gcTime" })
|
|
329
|
+
] }),
|
|
330
|
+
/* @__PURE__ */ jsx("div", { children: routerState.cachedMatches.map((match) => {
|
|
331
|
+
return /* @__PURE__ */ jsxs(
|
|
332
|
+
"div",
|
|
333
|
+
{
|
|
334
|
+
role: "button",
|
|
335
|
+
"aria-label": `Open match details for ${match.id}`,
|
|
336
|
+
onClick: () => setActiveId(activeId === match.id ? "" : match.id),
|
|
337
|
+
className: clsx(styles.matchRow(match === activeMatch)),
|
|
338
|
+
children: [
|
|
339
|
+
/* @__PURE__ */ jsx(
|
|
340
|
+
"div",
|
|
341
|
+
{
|
|
342
|
+
className: clsx(
|
|
343
|
+
styles.matchIndicator(getStatusColor(match))
|
|
344
|
+
)
|
|
345
|
+
}
|
|
346
|
+
),
|
|
347
|
+
/* @__PURE__ */ jsx("code", { className: styles.matchID, children: `${match.id}` }),
|
|
348
|
+
/* @__PURE__ */ jsx(AgeTicker, { match, router })
|
|
349
|
+
]
|
|
350
|
+
},
|
|
351
|
+
match.id
|
|
352
|
+
);
|
|
353
|
+
}) })
|
|
354
|
+
] }) : null
|
|
355
|
+
] }),
|
|
356
|
+
activeMatch ? /* @__PURE__ */ jsxs("div", { className: styles.thirdContainer, children: [
|
|
357
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsHeader, children: "Match Details" }),
|
|
358
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: styles.matchDetails, children: [
|
|
359
|
+
/* @__PURE__ */ jsx(
|
|
360
|
+
"div",
|
|
361
|
+
{
|
|
362
|
+
className: styles.matchStatus(
|
|
363
|
+
activeMatch.status,
|
|
364
|
+
activeMatch.isFetching
|
|
365
|
+
),
|
|
366
|
+
children: /* @__PURE__ */ jsx("div", { children: activeMatch.status === "success" && activeMatch.isFetching ? "fetching" : activeMatch.status })
|
|
367
|
+
}
|
|
368
|
+
),
|
|
369
|
+
/* @__PURE__ */ jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
|
|
370
|
+
/* @__PURE__ */ jsx("div", { children: "ID:" }),
|
|
371
|
+
/* @__PURE__ */ jsx("div", { className: styles.matchDetailsInfo, children: /* @__PURE__ */ jsx("code", { children: activeMatch.id }) })
|
|
372
|
+
] }),
|
|
373
|
+
/* @__PURE__ */ jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
|
|
374
|
+
/* @__PURE__ */ jsx("div", { children: "State:" }),
|
|
375
|
+
/* @__PURE__ */ jsx("div", { className: styles.matchDetailsInfo, children: ((_b = routerState.pendingMatches) == null ? void 0 : _b.find(
|
|
376
|
+
(d) => d.id === activeMatch.id
|
|
377
|
+
)) ? "Pending" : routerState.matches.find((d) => d.id === activeMatch.id) ? "Active" : "Cached" })
|
|
378
|
+
] }),
|
|
379
|
+
/* @__PURE__ */ jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
|
|
380
|
+
/* @__PURE__ */ jsx("div", { children: "Last Updated:" }),
|
|
381
|
+
/* @__PURE__ */ jsx("div", { className: styles.matchDetailsInfo, children: activeMatch.updatedAt ? new Date(activeMatch.updatedAt).toLocaleTimeString() : "N/A" })
|
|
382
|
+
] })
|
|
383
|
+
] }) }),
|
|
384
|
+
activeMatch.loaderData ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
385
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsHeader, children: "Loader Data" }),
|
|
386
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsx(
|
|
387
|
+
Explorer,
|
|
388
|
+
{
|
|
389
|
+
label: "loaderData",
|
|
390
|
+
value: activeMatch.loaderData,
|
|
391
|
+
defaultExpanded: {}
|
|
392
|
+
}
|
|
393
|
+
) })
|
|
394
|
+
] }) : null,
|
|
395
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsHeader, children: "Explorer" }),
|
|
396
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsx(Explorer, { label: "Match", value: activeMatch, defaultExpanded: {} }) })
|
|
397
|
+
] }) : null,
|
|
398
|
+
hasSearch ? /* @__PURE__ */ jsxs("div", { className: styles.fourthContainer, children: [
|
|
399
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsHeader, children: "Search Params" }),
|
|
400
|
+
/* @__PURE__ */ jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsx(
|
|
401
|
+
Explorer,
|
|
402
|
+
{
|
|
403
|
+
value: routerState.location.search,
|
|
404
|
+
defaultExpanded: Object.keys(routerState.location.search).reduce(
|
|
405
|
+
(obj, next) => {
|
|
406
|
+
obj[next] = {};
|
|
407
|
+
return obj;
|
|
408
|
+
},
|
|
409
|
+
{}
|
|
410
|
+
)
|
|
411
|
+
}
|
|
412
|
+
) })
|
|
413
|
+
] }) : null
|
|
414
|
+
]
|
|
415
|
+
}
|
|
416
|
+
);
|
|
417
|
+
});
|
|
418
|
+
export {
|
|
419
|
+
BaseTanStackRouterDevtoolsPanel
|
|
420
|
+
};
|
|
421
|
+
//# sourceMappingURL=BaseTanStackRouterDevtoolsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTanStackRouterDevtoolsPanel.js","sources":["../../src/BaseTanStackRouterDevtoolsPanel.tsx"],"sourcesContent":["import React from 'react'\nimport { clsx as cx } from 'clsx'\nimport {\n invariant,\n rootRouteId,\n trimPath,\n useRouter,\n useRouterState,\n} from '@tanstack/react-router'\nimport { useDevtoolsOnClose } from './context'\nimport { useStyles } from './useStyles'\nimport useLocalStorage from './useLocalStorage'\nimport Explorer from './Explorer'\nimport { getRouteStatusColor, getStatusColor, multiSortBy } from './utils'\nimport { AgeTicker } from './AgeTicker'\nimport type { DevtoolsPanelOptions } from './TanStackRouterDevtoolsPanel'\n\nimport type {\n AnyRootRoute,\n AnyRoute,\n AnyRouter,\n Route,\n} from '@tanstack/react-router'\n\nfunction Logo(props: React.HTMLAttributes<HTMLButtonElement>) {\n const { className, ...rest } = props\n const styles = useStyles()\n return (\n <button {...rest} className={cx(styles.logo, className)}>\n <div className={styles.tanstackLogo}>TANSTACK</div>\n <div className={styles.routerLogo}>React Router v1</div>\n </button>\n )\n}\n\nfunction RouteComp({\n router,\n route,\n isRoot,\n activeId,\n setActiveId,\n}: {\n router: AnyRouter\n route: AnyRootRoute | AnyRoute\n isRoot?: boolean\n activeId: string | undefined\n setActiveId: (id: string) => void\n}) {\n const routerState = useRouterState({\n router,\n } as any)\n const styles = useStyles()\n const matches = routerState.pendingMatches || routerState.matches\n const match = routerState.matches.find((d) => d.routeId === route.id)\n\n const param = React.useMemo(() => {\n try {\n if (match?.params) {\n const p = match.params\n const r: string = route.path || trimPath(route.id)\n if (r.startsWith('$')) {\n const trimmed = r.slice(1)\n if (p[trimmed]) {\n return `(${p[trimmed]})`\n }\n }\n }\n return ''\n } catch (error) {\n return ''\n }\n }, [match, route])\n\n return (\n <div>\n <div\n role=\"button\"\n aria-label={`Open match details for ${route.id}`}\n onClick={() => {\n if (match) {\n setActiveId(activeId === route.id ? '' : route.id)\n }\n }}\n className={cx(\n styles.routesRowContainer(route.id === activeId, !!match),\n )}\n >\n <div\n className={cx(\n styles.matchIndicator(getRouteStatusColor(matches, route)),\n )}\n />\n <div className={cx(styles.routesRow(!!match))}>\n <div>\n <code className={styles.code}>\n {isRoot ? rootRouteId : route.path || trimPath(route.id)}{' '}\n </code>\n <code className={styles.routeParamInfo}>{param}</code>\n </div>\n <AgeTicker match={match} router={router} />\n </div>\n </div>\n {route.children?.length ? (\n <div className={styles.nestedRouteRow(!!isRoot)}>\n {[...(route.children as Array<Route>)]\n .sort((a, b) => {\n return a.rank - b.rank\n })\n .map((r) => (\n <RouteComp\n key={r.id}\n router={router}\n route={r}\n activeId={activeId}\n setActiveId={setActiveId}\n />\n ))}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport const BaseTanStackRouterDevtoolsPanel = React.forwardRef<\n HTMLDivElement,\n DevtoolsPanelOptions\n>(function BaseTanStackRouterDevtoolsPanel(props, ref): React.ReactElement {\n const {\n isOpen = true,\n setIsOpen,\n handleDragStart,\n router: userRouter,\n shadowDOMTarget,\n ...panelProps\n } = props\n\n const { onCloseClick } = useDevtoolsOnClose()\n const styles = useStyles()\n const { className, ...otherPanelProps } = panelProps\n\n const contextRouter = useRouter({ warn: false })\n const router = userRouter ?? contextRouter\n const routerState = useRouterState({\n router,\n } as any)\n\n invariant(\n router,\n 'No router was found for the TanStack Router Devtools. Please place the devtools in the <RouterProvider> component tree or pass the router instance to the devtools manually.',\n )\n\n // useStore(router.__store)\n\n const [showMatches, setShowMatches] = useLocalStorage(\n 'tanstackRouterDevtoolsShowMatches',\n true,\n )\n\n const [activeId, setActiveId] = useLocalStorage(\n 'tanstackRouterDevtoolsActiveRouteId',\n '',\n )\n\n const activeMatch = React.useMemo(() => {\n const matches = [\n ...(routerState.pendingMatches ?? []),\n ...routerState.matches,\n ...routerState.cachedMatches,\n ]\n return matches.find((d) => d.routeId === activeId || d.id === activeId)\n }, [\n activeId,\n routerState.cachedMatches,\n routerState.matches,\n routerState.pendingMatches,\n ])\n\n const hasSearch = Object.keys(routerState.location.search).length\n\n const explorerState = {\n ...router,\n state: router.state,\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n styles.devtoolsPanel,\n 'TanStackRouterDevtoolsPanel',\n className,\n )}\n {...otherPanelProps}\n >\n {handleDragStart ? (\n <div className={styles.dragHandle} onMouseDown={handleDragStart}></div>\n ) : null}\n <button\n className={styles.panelCloseBtn}\n onClick={(e) => {\n setIsOpen(false)\n onCloseClick(e)\n }}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"6\"\n fill=\"none\"\n viewBox=\"0 0 10 6\"\n className={styles.panelCloseBtnIcon}\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.667\"\n d=\"M1 1l4 4 4-4\"\n ></path>\n </svg>\n </button>\n <div className={styles.firstContainer}>\n <div className={styles.row}>\n <Logo\n aria-hidden\n onClick={(e) => {\n setIsOpen(false)\n onCloseClick(e)\n }}\n />\n </div>\n <div className={styles.routerExplorerContainer}>\n <div className={styles.routerExplorer}>\n <Explorer\n label=\"Router\"\n value={Object.fromEntries(\n multiSortBy(\n Object.keys(explorerState),\n (\n [\n 'state',\n 'routesById',\n 'routesByPath',\n 'flatRoutes',\n 'options',\n 'manifest',\n ] as const\n ).map((d) => (dd) => dd !== d),\n )\n .map((key) => [key, (explorerState as any)[key]])\n .filter(\n (d) =>\n typeof d[1] !== 'function' &&\n ![\n '__store',\n 'basepath',\n 'injectedHtml',\n 'subscribers',\n 'latestLoadPromise',\n 'navigateTimeout',\n 'resetNextScroll',\n 'tempLocationKey',\n 'latestLocation',\n 'routeTree',\n 'history',\n ].includes(d[0]),\n ),\n )}\n defaultExpanded={{\n state: {} as any,\n context: {} as any,\n options: {} as any,\n }}\n filterSubEntries={(subEntries) => {\n return subEntries.filter((d) => typeof d.value !== 'function')\n }}\n />\n </div>\n </div>\n </div>\n <div className={styles.secondContainer}>\n <div className={styles.matchesContainer}>\n <div className={styles.detailsHeader}>\n <span>Pathname</span>\n {routerState.location.maskedLocation ? (\n <div className={styles.maskedBadgeContainer}>\n <span className={styles.maskedBadge}>masked</span>\n </div>\n ) : null}\n </div>\n <div className={styles.detailsContent}>\n <code>{routerState.location.pathname}</code>\n {routerState.location.maskedLocation ? (\n <code className={styles.maskedLocation}>\n {routerState.location.maskedLocation.pathname}\n </code>\n ) : null}\n </div>\n <div className={styles.detailsHeader}>\n <div className={styles.routeMatchesToggle}>\n <button\n type=\"button\"\n onClick={() => {\n setShowMatches(false)\n }}\n disabled={!showMatches}\n className={cx(styles.routeMatchesToggleBtn(!showMatches, true))}\n >\n Routes\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowMatches(true)\n }}\n disabled={showMatches}\n className={cx(\n styles.routeMatchesToggleBtn(!!showMatches, false),\n )}\n >\n Matches\n </button>\n </div>\n <div className={styles.detailsHeaderInfo}>\n <div>age / staleTime / gcTime</div>\n </div>\n </div>\n <div className={cx(styles.routesContainer)}>\n {!showMatches ? (\n <RouteComp\n router={router}\n route={router.routeTree}\n isRoot\n activeId={activeId}\n setActiveId={setActiveId}\n />\n ) : (\n <div>\n {(routerState.pendingMatches?.length\n ? routerState.pendingMatches\n : routerState.matches\n ).map((match, i) => {\n return (\n <div\n key={match.id || i}\n role=\"button\"\n aria-label={`Open match details for ${match.id}`}\n onClick={() =>\n setActiveId(activeId === match.id ? '' : match.id)\n }\n className={cx(styles.matchRow(match === activeMatch))}\n >\n <div\n className={cx(\n styles.matchIndicator(getStatusColor(match)),\n )}\n />\n\n <code\n className={styles.matchID}\n >{`${match.routeId === rootRouteId ? rootRouteId : match.pathname}`}</code>\n <AgeTicker match={match} router={router} />\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n {routerState.cachedMatches.length ? (\n <div className={styles.cachedMatchesContainer}>\n <div className={styles.detailsHeader}>\n <div>Cached Matches</div>\n <div className={styles.detailsHeaderInfo}>\n age / staleTime / gcTime\n </div>\n </div>\n <div>\n {routerState.cachedMatches.map((match) => {\n return (\n <div\n key={match.id}\n role=\"button\"\n aria-label={`Open match details for ${match.id}`}\n onClick={() =>\n setActiveId(activeId === match.id ? '' : match.id)\n }\n className={cx(styles.matchRow(match === activeMatch))}\n >\n <div\n className={cx(\n styles.matchIndicator(getStatusColor(match)),\n )}\n />\n\n <code className={styles.matchID}>{`${match.id}`}</code>\n\n <AgeTicker match={match} router={router} />\n </div>\n )\n })}\n </div>\n </div>\n ) : null}\n </div>\n {activeMatch ? (\n <div className={styles.thirdContainer}>\n <div className={styles.detailsHeader}>Match Details</div>\n <div>\n <div className={styles.matchDetails}>\n <div\n className={styles.matchStatus(\n activeMatch.status,\n activeMatch.isFetching,\n )}\n >\n <div>\n {activeMatch.status === 'success' && activeMatch.isFetching\n ? 'fetching'\n : activeMatch.status}\n </div>\n </div>\n <div className={styles.matchDetailsInfoLabel}>\n <div>ID:</div>\n <div className={styles.matchDetailsInfo}>\n <code>{activeMatch.id}</code>\n </div>\n </div>\n <div className={styles.matchDetailsInfoLabel}>\n <div>State:</div>\n <div className={styles.matchDetailsInfo}>\n {routerState.pendingMatches?.find(\n (d) => d.id === activeMatch.id,\n )\n ? 'Pending'\n : routerState.matches.find((d) => d.id === activeMatch.id)\n ? 'Active'\n : 'Cached'}\n </div>\n </div>\n <div className={styles.matchDetailsInfoLabel}>\n <div>Last Updated:</div>\n <div className={styles.matchDetailsInfo}>\n {activeMatch.updatedAt\n ? new Date(activeMatch.updatedAt).toLocaleTimeString()\n : 'N/A'}\n </div>\n </div>\n </div>\n </div>\n {activeMatch.loaderData ? (\n <>\n <div className={styles.detailsHeader}>Loader Data</div>\n <div className={styles.detailsContent}>\n <Explorer\n label=\"loaderData\"\n value={activeMatch.loaderData}\n defaultExpanded={{}}\n />\n </div>\n </>\n ) : null}\n <div className={styles.detailsHeader}>Explorer</div>\n <div className={styles.detailsContent}>\n <Explorer label=\"Match\" value={activeMatch} defaultExpanded={{}} />\n </div>\n </div>\n ) : null}\n {hasSearch ? (\n <div className={styles.fourthContainer}>\n <div className={styles.detailsHeader}>Search Params</div>\n <div className={styles.detailsContent}>\n <Explorer\n value={routerState.location.search}\n defaultExpanded={Object.keys(routerState.location.search).reduce(\n (obj: any, next) => {\n obj[next] = {}\n return obj\n },\n {},\n )}\n />\n </div>\n </div>\n ) : null}\n </div>\n )\n})\n"],"names":["cx","React","BaseTanStackRouterDevtoolsPanel"],"mappings":"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"}
|
|
@@ -37,36 +37,5 @@ interface DevtoolsOptions {
|
|
|
37
37
|
*/
|
|
38
38
|
shadowDOMTarget?: ShadowRoot;
|
|
39
39
|
}
|
|
40
|
-
interface DevtoolsPanelOptions {
|
|
41
|
-
/**
|
|
42
|
-
* The standard React style object used to style a component with inline styles
|
|
43
|
-
*/
|
|
44
|
-
style?: React.CSSProperties;
|
|
45
|
-
/**
|
|
46
|
-
* The standard React className property used to style a component with classes
|
|
47
|
-
*/
|
|
48
|
-
className?: string;
|
|
49
|
-
/**
|
|
50
|
-
* A boolean variable indicating whether the panel is open or closed
|
|
51
|
-
*/
|
|
52
|
-
isOpen?: boolean;
|
|
53
|
-
/**
|
|
54
|
-
* A function that toggles the open and close state of the panel
|
|
55
|
-
*/
|
|
56
|
-
setIsOpen: (isOpen: boolean) => void;
|
|
57
|
-
/**
|
|
58
|
-
* Handles the opening and closing the devtools panel
|
|
59
|
-
*/
|
|
60
|
-
handleDragStart?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
|
61
|
-
/**
|
|
62
|
-
* A boolean variable indicating if the "lite" version of the library is being used
|
|
63
|
-
*/
|
|
64
|
-
router?: AnyRouter;
|
|
65
|
-
/**
|
|
66
|
-
* Use this to attach the devtool's styles to specific element in the DOM.
|
|
67
|
-
*/
|
|
68
|
-
shadowDOMTarget?: ShadowRoot;
|
|
69
|
-
}
|
|
70
40
|
export declare function TanStackRouterDevtools(props: DevtoolsOptions): React.ReactElement | null;
|
|
71
|
-
export declare const TanStackRouterDevtoolsPanel: React.ForwardRefExoticComponent<DevtoolsPanelOptions & React.RefAttributes<HTMLDivElement>>;
|
|
72
41
|
export {};
|