@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.
Files changed (48) hide show
  1. package/dist/cjs/AgeTicker.cjs +58 -0
  2. package/dist/cjs/AgeTicker.cjs.map +1 -0
  3. package/dist/cjs/AgeTicker.d.cts +5 -0
  4. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +421 -0
  5. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
  6. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +3 -0
  7. package/dist/cjs/TanStackRouterDevtools.cjs +177 -0
  8. package/dist/cjs/TanStackRouterDevtools.cjs.map +1 -0
  9. package/dist/cjs/{devtools.d.cts → TanStackRouterDevtools.d.cts} +0 -31
  10. package/dist/cjs/TanStackRouterDevtoolsPanel.cjs +21 -0
  11. package/dist/cjs/TanStackRouterDevtoolsPanel.cjs.map +1 -0
  12. package/dist/cjs/TanStackRouterDevtoolsPanel.d.cts +33 -0
  13. package/dist/cjs/index.cjs +4 -3
  14. package/dist/cjs/index.cjs.map +1 -1
  15. package/dist/cjs/index.d.cts +2 -1
  16. package/dist/cjs/useStyles.cjs +570 -0
  17. package/dist/cjs/useStyles.cjs.map +1 -0
  18. package/dist/cjs/useStyles.d.cts +52 -0
  19. package/dist/esm/AgeTicker.d.ts +5 -0
  20. package/dist/esm/AgeTicker.js +58 -0
  21. package/dist/esm/AgeTicker.js.map +1 -0
  22. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +3 -0
  23. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +421 -0
  24. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
  25. package/dist/esm/{devtools.d.ts → TanStackRouterDevtools.d.ts} +0 -31
  26. package/dist/esm/TanStackRouterDevtools.js +177 -0
  27. package/dist/esm/TanStackRouterDevtools.js.map +1 -0
  28. package/dist/esm/TanStackRouterDevtoolsPanel.d.ts +33 -0
  29. package/dist/esm/TanStackRouterDevtoolsPanel.js +21 -0
  30. package/dist/esm/TanStackRouterDevtoolsPanel.js.map +1 -0
  31. package/dist/esm/index.d.ts +2 -1
  32. package/dist/esm/index.js +2 -1
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/esm/useStyles.d.ts +52 -0
  35. package/dist/esm/useStyles.js +553 -0
  36. package/dist/esm/useStyles.js.map +1 -0
  37. package/package.json +1 -1
  38. package/src/AgeTicker.tsx +73 -0
  39. package/src/BaseTanStackRouterDevtoolsPanel.tsx +488 -0
  40. package/src/TanStackRouterDevtools.tsx +250 -0
  41. package/src/TanStackRouterDevtoolsPanel.tsx +54 -0
  42. package/src/index.tsx +2 -1
  43. package/src/useStyles.tsx +589 -0
  44. package/dist/cjs/devtools.cjs +0 -1212
  45. package/dist/cjs/devtools.cjs.map +0 -1
  46. package/dist/esm/devtools.js +0 -1195
  47. package/dist/esm/devtools.js.map +0 -1
  48. 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,3 @@
1
+ import { default as React } from 'react';
2
+ import { DevtoolsPanelOptions } from './TanStackRouterDevtoolsPanel.js';
3
+ export declare const BaseTanStackRouterDevtoolsPanel: React.ForwardRefExoticComponent<DevtoolsPanelOptions & React.RefAttributes<HTMLDivElement>>;
@@ -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 {};