@tanstack/router-devtools 1.112.18 → 1.114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +12 -4
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -2
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +6 -4
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -2
- package/src/index.tsx +6 -2
- package/dist/cjs/AgeTicker.cjs +0 -58
- package/dist/cjs/AgeTicker.cjs.map +0 -1
- package/dist/cjs/AgeTicker.d.cts +0 -5
- package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +0 -421
- package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +0 -1
- package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +0 -3
- package/dist/cjs/Explorer.cjs +0 -310
- package/dist/cjs/Explorer.cjs.map +0 -1
- package/dist/cjs/Explorer.d.cts +0 -46
- package/dist/cjs/TanStackRouterDevtools.cjs +0 -177
- package/dist/cjs/TanStackRouterDevtools.cjs.map +0 -1
- package/dist/cjs/TanStackRouterDevtools.d.cts +0 -41
- package/dist/cjs/TanStackRouterDevtoolsPanel.cjs +0 -21
- package/dist/cjs/TanStackRouterDevtoolsPanel.cjs.map +0 -1
- package/dist/cjs/TanStackRouterDevtoolsPanel.d.cts +0 -33
- package/dist/cjs/context.cjs +0 -18
- package/dist/cjs/context.cjs.map +0 -1
- package/dist/cjs/context.d.cts +0 -8
- package/dist/cjs/logo.cjs +0 -1012
- package/dist/cjs/logo.cjs.map +0 -1
- package/dist/cjs/logo.d.cts +0 -1
- package/dist/cjs/theme.d.cts +0 -34
- package/dist/cjs/tokens.cjs +0 -201
- package/dist/cjs/tokens.cjs.map +0 -1
- package/dist/cjs/tokens.d.cts +0 -298
- package/dist/cjs/useLocalStorage.cjs +0 -45
- package/dist/cjs/useLocalStorage.cjs.map +0 -1
- package/dist/cjs/useLocalStorage.d.cts +0 -1
- package/dist/cjs/useMediaQuery.d.cts +0 -1
- package/dist/cjs/useStyles.cjs +0 -570
- package/dist/cjs/useStyles.cjs.map +0 -1
- package/dist/cjs/useStyles.d.cts +0 -52
- package/dist/cjs/utils.cjs +0 -84
- package/dist/cjs/utils.cjs.map +0 -1
- package/dist/cjs/utils.d.cts +0 -23
- package/dist/esm/AgeTicker.d.ts +0 -5
- package/dist/esm/AgeTicker.js +0 -58
- package/dist/esm/AgeTicker.js.map +0 -1
- package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +0 -3
- package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +0 -421
- package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +0 -1
- package/dist/esm/Explorer.d.ts +0 -46
- package/dist/esm/Explorer.js +0 -292
- package/dist/esm/Explorer.js.map +0 -1
- package/dist/esm/TanStackRouterDevtools.d.ts +0 -41
- package/dist/esm/TanStackRouterDevtools.js +0 -177
- package/dist/esm/TanStackRouterDevtools.js.map +0 -1
- package/dist/esm/TanStackRouterDevtoolsPanel.d.ts +0 -33
- package/dist/esm/TanStackRouterDevtoolsPanel.js +0 -21
- package/dist/esm/TanStackRouterDevtoolsPanel.js.map +0 -1
- package/dist/esm/context.d.ts +0 -8
- package/dist/esm/context.js +0 -18
- package/dist/esm/context.js.map +0 -1
- package/dist/esm/logo.d.ts +0 -1
- package/dist/esm/logo.js +0 -1012
- package/dist/esm/logo.js.map +0 -1
- package/dist/esm/theme.d.ts +0 -34
- package/dist/esm/tokens.d.ts +0 -298
- package/dist/esm/tokens.js +0 -201
- package/dist/esm/tokens.js.map +0 -1
- package/dist/esm/useLocalStorage.d.ts +0 -1
- package/dist/esm/useLocalStorage.js +0 -46
- package/dist/esm/useLocalStorage.js.map +0 -1
- package/dist/esm/useMediaQuery.d.ts +0 -1
- package/dist/esm/useStyles.d.ts +0 -52
- package/dist/esm/useStyles.js +0 -553
- package/dist/esm/useStyles.js.map +0 -1
- package/dist/esm/utils.d.ts +0 -23
- package/dist/esm/utils.js +0 -84
- package/dist/esm/utils.js.map +0 -1
- package/src/AgeTicker.tsx +0 -73
- package/src/BaseTanStackRouterDevtoolsPanel.tsx +0 -488
- package/src/Explorer.tsx +0 -362
- package/src/TanStackRouterDevtools.tsx +0 -250
- package/src/TanStackRouterDevtoolsPanel.tsx +0 -54
- package/src/context.ts +0 -22
- package/src/logo.tsx +0 -817
- package/src/theme.tsx +0 -31
- package/src/tokens.ts +0 -305
- package/src/useLocalStorage.ts +0 -52
- package/src/useMediaQuery.ts +0 -41
- package/src/useStyles.tsx +0 -589
- package/src/utils.ts +0 -188
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
const reactRouterDevtools = require("@tanstack/react-router-devtools");
|
|
4
|
+
console.warn(
|
|
5
|
+
"[@tanstack/router-devtools] This package has moved to @tanstack/react-router-devtools. Please switch to the new package at your earliest convenience, as this package will be dropped in the next major version release."
|
|
6
|
+
);
|
|
7
|
+
Object.defineProperty(exports, "TanStackRouterDevtools", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: () => reactRouterDevtools.TanStackRouterDevtoolsInProd
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(exports, "TanStackRouterDevtoolsPanel", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: () => reactRouterDevtools.TanStackRouterDevtoolsPanelInProd
|
|
14
|
+
});
|
|
7
15
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/index.tsx"],"sourcesContent":["console.warn(\n '[@tanstack/router-devtools] This package has moved to @tanstack/react-router-devtools. Please switch to the new package at your earliest convenience, as this package will be dropped in the next major version release.',\n)\n\nexport { TanStackRouterDevtoolsInProd as TanStackRouterDevtools } from '@tanstack/react-router-devtools'\nexport { TanStackRouterDevtoolsPanelInProd as TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools'\n"],"names":[],"mappings":";;;AAAA,QAAQ;AAAA,EACN;AACF;;;;;;;;;"}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { TanStackRouterDevtools } from '
|
|
2
|
-
export { TanStackRouterDevtoolsPanel } from '
|
|
1
|
+
export { TanStackRouterDevtoolsInProd as TanStackRouterDevtools } from '@tanstack/react-router-devtools';
|
|
2
|
+
export { TanStackRouterDevtoolsPanelInProd as TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools';
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { TanStackRouterDevtools } from '
|
|
2
|
-
export { TanStackRouterDevtoolsPanel } from '
|
|
1
|
+
export { TanStackRouterDevtoolsInProd as TanStackRouterDevtools } from '@tanstack/react-router-devtools';
|
|
2
|
+
export { TanStackRouterDevtoolsPanelInProd as TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { TanStackRouterDevtoolsInProd, TanStackRouterDevtoolsPanelInProd } from "@tanstack/react-router-devtools";
|
|
2
|
+
console.warn(
|
|
3
|
+
"[@tanstack/router-devtools] This package has moved to @tanstack/react-router-devtools. Please switch to the new package at your earliest convenience, as this package will be dropped in the next major version release."
|
|
4
|
+
);
|
|
3
5
|
export {
|
|
4
|
-
TanStackRouterDevtools,
|
|
5
|
-
TanStackRouterDevtoolsPanel
|
|
6
|
+
TanStackRouterDevtoolsInProd as TanStackRouterDevtools,
|
|
7
|
+
TanStackRouterDevtoolsPanelInProd as TanStackRouterDevtoolsPanel
|
|
6
8
|
};
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.tsx"],"sourcesContent":["console.warn(\n '[@tanstack/router-devtools] This package has moved to @tanstack/react-router-devtools. Please switch to the new package at your earliest convenience, as this package will be dropped in the next major version release.',\n)\n\nexport { TanStackRouterDevtoolsInProd as TanStackRouterDevtools } from '@tanstack/react-router-devtools'\nexport { TanStackRouterDevtoolsPanelInProd as TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools'\n"],"names":[],"mappings":";AAAA,QAAQ;AAAA,EACN;AACF;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/router-devtools",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.114.0",
|
|
4
4
|
"description": "Modern and scalable routing for React applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -50,7 +50,8 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"clsx": "^2.1.1",
|
|
53
|
-
"goober": "^2.1.16"
|
|
53
|
+
"goober": "^2.1.16",
|
|
54
|
+
"@tanstack/react-router-devtools": "^1.114.0"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
57
|
"@vitejs/plugin-react": "^4.3.4",
|
package/src/index.tsx
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
console.warn(
|
|
2
|
+
'[@tanstack/router-devtools] This package has moved to @tanstack/react-router-devtools. Please switch to the new package at your earliest convenience, as this package will be dropped in the next major version release.',
|
|
3
|
+
)
|
|
4
|
+
|
|
5
|
+
export { TanStackRouterDevtoolsInProd as TanStackRouterDevtools } from '@tanstack/react-router-devtools'
|
|
6
|
+
export { TanStackRouterDevtoolsPanelInProd as TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools'
|
package/dist/cjs/AgeTicker.cjs
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const clsx = require("clsx");
|
|
5
|
-
const React = require("react");
|
|
6
|
-
const useStyles = require("./useStyles.cjs");
|
|
7
|
-
function formatTime(ms) {
|
|
8
|
-
const units = ["s", "min", "h", "d"];
|
|
9
|
-
const values = [ms / 1e3, ms / 6e4, ms / 36e5, ms / 864e5];
|
|
10
|
-
let chosenUnitIndex = 0;
|
|
11
|
-
for (let i = 1; i < values.length; i++) {
|
|
12
|
-
if (values[i] < 1) break;
|
|
13
|
-
chosenUnitIndex = i;
|
|
14
|
-
}
|
|
15
|
-
const formatter = new Intl.NumberFormat(navigator.language, {
|
|
16
|
-
compactDisplay: "short",
|
|
17
|
-
notation: "compact",
|
|
18
|
-
maximumFractionDigits: 0
|
|
19
|
-
});
|
|
20
|
-
return formatter.format(values[chosenUnitIndex]) + units[chosenUnitIndex];
|
|
21
|
-
}
|
|
22
|
-
function AgeTicker({
|
|
23
|
-
match,
|
|
24
|
-
router
|
|
25
|
-
}) {
|
|
26
|
-
const styles = useStyles.useStyles();
|
|
27
|
-
const rerender = React.useReducer(
|
|
28
|
-
() => ({}),
|
|
29
|
-
() => ({})
|
|
30
|
-
)[1];
|
|
31
|
-
React.useEffect(() => {
|
|
32
|
-
const interval = setInterval(() => {
|
|
33
|
-
rerender();
|
|
34
|
-
}, 1e3);
|
|
35
|
-
return () => {
|
|
36
|
-
clearInterval(interval);
|
|
37
|
-
};
|
|
38
|
-
}, [rerender]);
|
|
39
|
-
if (!match) {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
const route = router.looseRoutesById[match.routeId];
|
|
43
|
-
if (!route.options.loader) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
const age = Date.now() - match.updatedAt;
|
|
47
|
-
const staleTime = route.options.staleTime ?? router.options.defaultStaleTime ?? 0;
|
|
48
|
-
const gcTime = route.options.gcTime ?? router.options.defaultGcTime ?? 30 * 60 * 1e3;
|
|
49
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx.clsx(styles.ageTicker(age > staleTime)), children: [
|
|
50
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: formatTime(age) }),
|
|
51
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "/" }),
|
|
52
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: formatTime(staleTime) }),
|
|
53
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "/" }),
|
|
54
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: formatTime(gcTime) })
|
|
55
|
-
] });
|
|
56
|
-
}
|
|
57
|
-
exports.AgeTicker = AgeTicker;
|
|
58
|
-
//# sourceMappingURL=AgeTicker.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgeTicker.cjs","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":["useStyles","jsxs","cx","jsx"],"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,SAASA,UAAAA,UAAU;AACzB,QAAM,WAAW,MAAM;AAAA,IACrB,OAAO;IACP,OAAO,CAAC;AAAA,IACR,CAAC;AAEH,QAAM,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,SAAAC,gCAAC,SAAI,WAAWC,KAAA,KAAG,OAAO,UAAU,MAAM,SAAS,CAAC,GAClD,UAAA;AAAA,IAACC,2BAAA,IAAA,OAAA,EAAK,UAAW,WAAA,GAAG,EAAE,CAAA;AAAA,IACtBA,2BAAAA,IAAC,SAAI,UAAC,IAAA,CAAA;AAAA,IACLA,2BAAA,IAAA,OAAA,EAAK,UAAW,WAAA,SAAS,EAAE,CAAA;AAAA,IAC5BA,2BAAAA,IAAC,SAAI,UAAC,IAAA,CAAA;AAAA,IACLA,2BAAAA,IAAA,OAAA,EAAK,UAAW,WAAA,MAAM,EAAE,CAAA;AAAA,EAAA,GAC3B;AAEJ;;"}
|
package/dist/cjs/AgeTicker.d.cts
DELETED
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const React = require("react");
|
|
5
|
-
const clsx = require("clsx");
|
|
6
|
-
const reactRouter = require("@tanstack/react-router");
|
|
7
|
-
const context = require("./context.cjs");
|
|
8
|
-
const useStyles = require("./useStyles.cjs");
|
|
9
|
-
const useLocalStorage = require("./useLocalStorage.cjs");
|
|
10
|
-
const Explorer = require("./Explorer.cjs");
|
|
11
|
-
const utils = require("./utils.cjs");
|
|
12
|
-
const AgeTicker = require("./AgeTicker.cjs");
|
|
13
|
-
function Logo(props) {
|
|
14
|
-
const { className, ...rest } = props;
|
|
15
|
-
const styles = useStyles.useStyles();
|
|
16
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("button", { ...rest, className: clsx.clsx(styles.logo, className), children: [
|
|
17
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.tanstackLogo, children: "TANSTACK" }),
|
|
18
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.routerLogo, children: "React Router v1" })
|
|
19
|
-
] });
|
|
20
|
-
}
|
|
21
|
-
function RouteComp({
|
|
22
|
-
router,
|
|
23
|
-
route,
|
|
24
|
-
isRoot,
|
|
25
|
-
activeId,
|
|
26
|
-
setActiveId
|
|
27
|
-
}) {
|
|
28
|
-
var _a;
|
|
29
|
-
const routerState = reactRouter.useRouterState({
|
|
30
|
-
router
|
|
31
|
-
});
|
|
32
|
-
const styles = useStyles.useStyles();
|
|
33
|
-
const matches = routerState.pendingMatches || routerState.matches;
|
|
34
|
-
const match = routerState.matches.find((d) => d.routeId === route.id);
|
|
35
|
-
const param = React.useMemo(() => {
|
|
36
|
-
try {
|
|
37
|
-
if (match == null ? void 0 : match.params) {
|
|
38
|
-
const p = match.params;
|
|
39
|
-
const r = route.path || reactRouter.trimPath(route.id);
|
|
40
|
-
if (r.startsWith("$")) {
|
|
41
|
-
const trimmed = r.slice(1);
|
|
42
|
-
if (p[trimmed]) {
|
|
43
|
-
return `(${p[trimmed]})`;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return "";
|
|
48
|
-
} catch (error) {
|
|
49
|
-
return "";
|
|
50
|
-
}
|
|
51
|
-
}, [match, route]);
|
|
52
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
53
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
54
|
-
"div",
|
|
55
|
-
{
|
|
56
|
-
role: "button",
|
|
57
|
-
"aria-label": `Open match details for ${route.id}`,
|
|
58
|
-
onClick: () => {
|
|
59
|
-
if (match) {
|
|
60
|
-
setActiveId(activeId === route.id ? "" : route.id);
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
className: clsx.clsx(
|
|
64
|
-
styles.routesRowContainer(route.id === activeId, !!match)
|
|
65
|
-
),
|
|
66
|
-
children: [
|
|
67
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
68
|
-
"div",
|
|
69
|
-
{
|
|
70
|
-
className: clsx.clsx(
|
|
71
|
-
styles.matchIndicator(utils.getRouteStatusColor(matches, route))
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
),
|
|
75
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx.clsx(styles.routesRow(!!match)), children: [
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
77
|
-
/* @__PURE__ */ jsxRuntime.jsxs("code", { className: styles.code, children: [
|
|
78
|
-
isRoot ? reactRouter.rootRouteId : route.path || reactRouter.trimPath(route.id),
|
|
79
|
-
" "
|
|
80
|
-
] }),
|
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx("code", { className: styles.routeParamInfo, children: param })
|
|
82
|
-
] }),
|
|
83
|
-
/* @__PURE__ */ jsxRuntime.jsx(AgeTicker.AgeTicker, { match, router })
|
|
84
|
-
] })
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
),
|
|
88
|
-
((_a = route.children) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.nestedRouteRow(!!isRoot), children: [...route.children].sort((a, b) => {
|
|
89
|
-
return a.rank - b.rank;
|
|
90
|
-
}).map((r) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
91
|
-
RouteComp,
|
|
92
|
-
{
|
|
93
|
-
router,
|
|
94
|
-
route: r,
|
|
95
|
-
activeId,
|
|
96
|
-
setActiveId
|
|
97
|
-
},
|
|
98
|
-
r.id
|
|
99
|
-
)) }) : null
|
|
100
|
-
] });
|
|
101
|
-
}
|
|
102
|
-
const BaseTanStackRouterDevtoolsPanel = React.forwardRef(function BaseTanStackRouterDevtoolsPanel2(props, ref) {
|
|
103
|
-
var _a, _b;
|
|
104
|
-
const {
|
|
105
|
-
isOpen = true,
|
|
106
|
-
setIsOpen,
|
|
107
|
-
handleDragStart,
|
|
108
|
-
router: userRouter,
|
|
109
|
-
shadowDOMTarget,
|
|
110
|
-
...panelProps
|
|
111
|
-
} = props;
|
|
112
|
-
const { onCloseClick } = context.useDevtoolsOnClose();
|
|
113
|
-
const styles = useStyles.useStyles();
|
|
114
|
-
const { className, ...otherPanelProps } = panelProps;
|
|
115
|
-
const contextRouter = reactRouter.useRouter({ warn: false });
|
|
116
|
-
const router = userRouter ?? contextRouter;
|
|
117
|
-
const routerState = reactRouter.useRouterState({
|
|
118
|
-
router
|
|
119
|
-
});
|
|
120
|
-
reactRouter.invariant(
|
|
121
|
-
router,
|
|
122
|
-
"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."
|
|
123
|
-
);
|
|
124
|
-
const [showMatches, setShowMatches] = useLocalStorage(
|
|
125
|
-
"tanstackRouterDevtoolsShowMatches",
|
|
126
|
-
true
|
|
127
|
-
);
|
|
128
|
-
const [activeId, setActiveId] = useLocalStorage(
|
|
129
|
-
"tanstackRouterDevtoolsActiveRouteId",
|
|
130
|
-
""
|
|
131
|
-
);
|
|
132
|
-
const activeMatch = React.useMemo(() => {
|
|
133
|
-
const matches = [
|
|
134
|
-
...routerState.pendingMatches ?? [],
|
|
135
|
-
...routerState.matches,
|
|
136
|
-
...routerState.cachedMatches
|
|
137
|
-
];
|
|
138
|
-
return matches.find((d) => d.routeId === activeId || d.id === activeId);
|
|
139
|
-
}, [
|
|
140
|
-
activeId,
|
|
141
|
-
routerState.cachedMatches,
|
|
142
|
-
routerState.matches,
|
|
143
|
-
routerState.pendingMatches
|
|
144
|
-
]);
|
|
145
|
-
const hasSearch = Object.keys(routerState.location.search).length;
|
|
146
|
-
const explorerState = {
|
|
147
|
-
...router,
|
|
148
|
-
state: router.state
|
|
149
|
-
};
|
|
150
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
151
|
-
"div",
|
|
152
|
-
{
|
|
153
|
-
ref,
|
|
154
|
-
className: clsx.clsx(
|
|
155
|
-
styles.devtoolsPanel,
|
|
156
|
-
"TanStackRouterDevtoolsPanel",
|
|
157
|
-
className
|
|
158
|
-
),
|
|
159
|
-
...otherPanelProps,
|
|
160
|
-
children: [
|
|
161
|
-
handleDragStart ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.dragHandle, onMouseDown: handleDragStart }) : null,
|
|
162
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
163
|
-
"button",
|
|
164
|
-
{
|
|
165
|
-
className: styles.panelCloseBtn,
|
|
166
|
-
onClick: (e) => {
|
|
167
|
-
setIsOpen(false);
|
|
168
|
-
onCloseClick(e);
|
|
169
|
-
},
|
|
170
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
171
|
-
"svg",
|
|
172
|
-
{
|
|
173
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
174
|
-
width: "10",
|
|
175
|
-
height: "6",
|
|
176
|
-
fill: "none",
|
|
177
|
-
viewBox: "0 0 10 6",
|
|
178
|
-
className: styles.panelCloseBtnIcon,
|
|
179
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
180
|
-
"path",
|
|
181
|
-
{
|
|
182
|
-
stroke: "currentColor",
|
|
183
|
-
strokeLinecap: "round",
|
|
184
|
-
strokeLinejoin: "round",
|
|
185
|
-
strokeWidth: "1.667",
|
|
186
|
-
d: "M1 1l4 4 4-4"
|
|
187
|
-
}
|
|
188
|
-
)
|
|
189
|
-
}
|
|
190
|
-
)
|
|
191
|
-
}
|
|
192
|
-
),
|
|
193
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.firstContainer, children: [
|
|
194
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.row, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
195
|
-
Logo,
|
|
196
|
-
{
|
|
197
|
-
"aria-hidden": true,
|
|
198
|
-
onClick: (e) => {
|
|
199
|
-
setIsOpen(false);
|
|
200
|
-
onCloseClick(e);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
) }),
|
|
204
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.routerExplorerContainer, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.routerExplorer, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
205
|
-
Explorer.default,
|
|
206
|
-
{
|
|
207
|
-
label: "Router",
|
|
208
|
-
value: Object.fromEntries(
|
|
209
|
-
utils.multiSortBy(
|
|
210
|
-
Object.keys(explorerState),
|
|
211
|
-
[
|
|
212
|
-
"state",
|
|
213
|
-
"routesById",
|
|
214
|
-
"routesByPath",
|
|
215
|
-
"flatRoutes",
|
|
216
|
-
"options",
|
|
217
|
-
"manifest"
|
|
218
|
-
].map((d) => (dd) => dd !== d)
|
|
219
|
-
).map((key) => [key, explorerState[key]]).filter(
|
|
220
|
-
(d) => typeof d[1] !== "function" && ![
|
|
221
|
-
"__store",
|
|
222
|
-
"basepath",
|
|
223
|
-
"injectedHtml",
|
|
224
|
-
"subscribers",
|
|
225
|
-
"latestLoadPromise",
|
|
226
|
-
"navigateTimeout",
|
|
227
|
-
"resetNextScroll",
|
|
228
|
-
"tempLocationKey",
|
|
229
|
-
"latestLocation",
|
|
230
|
-
"routeTree",
|
|
231
|
-
"history"
|
|
232
|
-
].includes(d[0])
|
|
233
|
-
)
|
|
234
|
-
),
|
|
235
|
-
defaultExpanded: {
|
|
236
|
-
state: {},
|
|
237
|
-
context: {},
|
|
238
|
-
options: {}
|
|
239
|
-
},
|
|
240
|
-
filterSubEntries: (subEntries) => {
|
|
241
|
-
return subEntries.filter((d) => typeof d.value !== "function");
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
) }) })
|
|
245
|
-
] }),
|
|
246
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.secondContainer, children: [
|
|
247
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchesContainer, children: [
|
|
248
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsHeader, children: [
|
|
249
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Pathname" }),
|
|
250
|
-
routerState.location.maskedLocation ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.maskedBadgeContainer, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.maskedBadge, children: "masked" }) }) : null
|
|
251
|
-
] }),
|
|
252
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsContent, children: [
|
|
253
|
-
/* @__PURE__ */ jsxRuntime.jsx("code", { children: routerState.location.pathname }),
|
|
254
|
-
routerState.location.maskedLocation ? /* @__PURE__ */ jsxRuntime.jsx("code", { className: styles.maskedLocation, children: routerState.location.maskedLocation.pathname }) : null
|
|
255
|
-
] }),
|
|
256
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsHeader, children: [
|
|
257
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.routeMatchesToggle, children: [
|
|
258
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
259
|
-
"button",
|
|
260
|
-
{
|
|
261
|
-
type: "button",
|
|
262
|
-
onClick: () => {
|
|
263
|
-
setShowMatches(false);
|
|
264
|
-
},
|
|
265
|
-
disabled: !showMatches,
|
|
266
|
-
className: clsx.clsx(styles.routeMatchesToggleBtn(!showMatches, true)),
|
|
267
|
-
children: "Routes"
|
|
268
|
-
}
|
|
269
|
-
),
|
|
270
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
271
|
-
"button",
|
|
272
|
-
{
|
|
273
|
-
type: "button",
|
|
274
|
-
onClick: () => {
|
|
275
|
-
setShowMatches(true);
|
|
276
|
-
},
|
|
277
|
-
disabled: showMatches,
|
|
278
|
-
className: clsx.clsx(
|
|
279
|
-
styles.routeMatchesToggleBtn(!!showMatches, false)
|
|
280
|
-
),
|
|
281
|
-
children: "Matches"
|
|
282
|
-
}
|
|
283
|
-
)
|
|
284
|
-
] }),
|
|
285
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeaderInfo, children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: "age / staleTime / gcTime" }) })
|
|
286
|
-
] }),
|
|
287
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(styles.routesContainer), children: !showMatches ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
288
|
-
RouteComp,
|
|
289
|
-
{
|
|
290
|
-
router,
|
|
291
|
-
route: router.routeTree,
|
|
292
|
-
isRoot: true,
|
|
293
|
-
activeId,
|
|
294
|
-
setActiveId
|
|
295
|
-
}
|
|
296
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: (((_a = routerState.pendingMatches) == null ? void 0 : _a.length) ? routerState.pendingMatches : routerState.matches).map((match, i) => {
|
|
297
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
298
|
-
"div",
|
|
299
|
-
{
|
|
300
|
-
role: "button",
|
|
301
|
-
"aria-label": `Open match details for ${match.id}`,
|
|
302
|
-
onClick: () => setActiveId(activeId === match.id ? "" : match.id),
|
|
303
|
-
className: clsx.clsx(styles.matchRow(match === activeMatch)),
|
|
304
|
-
children: [
|
|
305
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
306
|
-
"div",
|
|
307
|
-
{
|
|
308
|
-
className: clsx.clsx(
|
|
309
|
-
styles.matchIndicator(utils.getStatusColor(match))
|
|
310
|
-
)
|
|
311
|
-
}
|
|
312
|
-
),
|
|
313
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
314
|
-
"code",
|
|
315
|
-
{
|
|
316
|
-
className: styles.matchID,
|
|
317
|
-
children: `${match.routeId === reactRouter.rootRouteId ? reactRouter.rootRouteId : match.pathname}`
|
|
318
|
-
}
|
|
319
|
-
),
|
|
320
|
-
/* @__PURE__ */ jsxRuntime.jsx(AgeTicker.AgeTicker, { match, router })
|
|
321
|
-
]
|
|
322
|
-
},
|
|
323
|
-
match.id || i
|
|
324
|
-
);
|
|
325
|
-
}) }) })
|
|
326
|
-
] }),
|
|
327
|
-
routerState.cachedMatches.length ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.cachedMatchesContainer, children: [
|
|
328
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsHeader, children: [
|
|
329
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "Cached Matches" }),
|
|
330
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeaderInfo, children: "age / staleTime / gcTime" })
|
|
331
|
-
] }),
|
|
332
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: routerState.cachedMatches.map((match) => {
|
|
333
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
334
|
-
"div",
|
|
335
|
-
{
|
|
336
|
-
role: "button",
|
|
337
|
-
"aria-label": `Open match details for ${match.id}`,
|
|
338
|
-
onClick: () => setActiveId(activeId === match.id ? "" : match.id),
|
|
339
|
-
className: clsx.clsx(styles.matchRow(match === activeMatch)),
|
|
340
|
-
children: [
|
|
341
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
342
|
-
"div",
|
|
343
|
-
{
|
|
344
|
-
className: clsx.clsx(
|
|
345
|
-
styles.matchIndicator(utils.getStatusColor(match))
|
|
346
|
-
)
|
|
347
|
-
}
|
|
348
|
-
),
|
|
349
|
-
/* @__PURE__ */ jsxRuntime.jsx("code", { className: styles.matchID, children: `${match.id}` }),
|
|
350
|
-
/* @__PURE__ */ jsxRuntime.jsx(AgeTicker.AgeTicker, { match, router })
|
|
351
|
-
]
|
|
352
|
-
},
|
|
353
|
-
match.id
|
|
354
|
-
);
|
|
355
|
-
}) })
|
|
356
|
-
] }) : null
|
|
357
|
-
] }),
|
|
358
|
-
activeMatch ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.thirdContainer, children: [
|
|
359
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Match Details" }),
|
|
360
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetails, children: [
|
|
361
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
362
|
-
"div",
|
|
363
|
-
{
|
|
364
|
-
className: styles.matchStatus(
|
|
365
|
-
activeMatch.status,
|
|
366
|
-
activeMatch.isFetching
|
|
367
|
-
),
|
|
368
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: activeMatch.status === "success" && activeMatch.isFetching ? "fetching" : activeMatch.status })
|
|
369
|
-
}
|
|
370
|
-
),
|
|
371
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
|
|
372
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "ID:" }),
|
|
373
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.matchDetailsInfo, children: /* @__PURE__ */ jsxRuntime.jsx("code", { children: activeMatch.id }) })
|
|
374
|
-
] }),
|
|
375
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
|
|
376
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "State:" }),
|
|
377
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.matchDetailsInfo, children: ((_b = routerState.pendingMatches) == null ? void 0 : _b.find(
|
|
378
|
-
(d) => d.id === activeMatch.id
|
|
379
|
-
)) ? "Pending" : routerState.matches.find((d) => d.id === activeMatch.id) ? "Active" : "Cached" })
|
|
380
|
-
] }),
|
|
381
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
|
|
382
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: "Last Updated:" }),
|
|
383
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.matchDetailsInfo, children: activeMatch.updatedAt ? new Date(activeMatch.updatedAt).toLocaleTimeString() : "N/A" })
|
|
384
|
-
] })
|
|
385
|
-
] }) }),
|
|
386
|
-
activeMatch.loaderData ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
387
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Loader Data" }),
|
|
388
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
-
Explorer.default,
|
|
390
|
-
{
|
|
391
|
-
label: "loaderData",
|
|
392
|
-
value: activeMatch.loaderData,
|
|
393
|
-
defaultExpanded: {}
|
|
394
|
-
}
|
|
395
|
-
) })
|
|
396
|
-
] }) : null,
|
|
397
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Explorer" }),
|
|
398
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsxRuntime.jsx(Explorer.default, { label: "Match", value: activeMatch, defaultExpanded: {} }) })
|
|
399
|
-
] }) : null,
|
|
400
|
-
hasSearch ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.fourthContainer, children: [
|
|
401
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Search Params" }),
|
|
402
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
403
|
-
Explorer.default,
|
|
404
|
-
{
|
|
405
|
-
value: routerState.location.search,
|
|
406
|
-
defaultExpanded: Object.keys(routerState.location.search).reduce(
|
|
407
|
-
(obj, next) => {
|
|
408
|
-
obj[next] = {};
|
|
409
|
-
return obj;
|
|
410
|
-
},
|
|
411
|
-
{}
|
|
412
|
-
)
|
|
413
|
-
}
|
|
414
|
-
) })
|
|
415
|
-
] }) : null
|
|
416
|
-
]
|
|
417
|
-
}
|
|
418
|
-
);
|
|
419
|
-
});
|
|
420
|
-
exports.BaseTanStackRouterDevtoolsPanel = BaseTanStackRouterDevtoolsPanel;
|
|
421
|
-
//# sourceMappingURL=BaseTanStackRouterDevtoolsPanel.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTanStackRouterDevtoolsPanel.cjs","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":["useStyles","jsxs","cx","jsx","useRouterState","trimPath","getRouteStatusColor","rootRouteId","AgeTicker","BaseTanStackRouterDevtoolsPanel","useDevtoolsOnClose","useRouter","invariant","Explorer","multiSortBy","getStatusColor","Fragment"],"mappings":"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"}
|