@tanstack/router-devtools 1.112.0 → 1.112.5

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 (64) 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 +438 -0
  5. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
  6. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +5 -0
  7. package/dist/cjs/Explorer.cjs +1 -1
  8. package/dist/cjs/Explorer.cjs.map +1 -1
  9. package/dist/cjs/TanStackRouterDevtools.cjs +177 -0
  10. package/dist/cjs/TanStackRouterDevtools.cjs.map +1 -0
  11. package/dist/cjs/{devtools.d.cts → TanStackRouterDevtools.d.cts} +0 -31
  12. package/dist/cjs/TanStackRouterDevtoolsPanel.cjs +23 -0
  13. package/dist/cjs/TanStackRouterDevtoolsPanel.cjs.map +1 -0
  14. package/dist/cjs/TanStackRouterDevtoolsPanel.d.cts +35 -0
  15. package/dist/cjs/context.cjs +1 -1
  16. package/dist/cjs/context.cjs.map +1 -1
  17. package/dist/cjs/index.cjs +4 -3
  18. package/dist/cjs/index.cjs.map +1 -1
  19. package/dist/cjs/index.d.cts +2 -1
  20. package/dist/cjs/useStyles.cjs +570 -0
  21. package/dist/cjs/useStyles.cjs.map +1 -0
  22. package/dist/cjs/useStyles.d.cts +52 -0
  23. package/dist/cjs/utils.cjs.map +1 -1
  24. package/dist/cjs/utils.d.cts +3 -1
  25. package/dist/esm/AgeTicker.d.ts +5 -0
  26. package/dist/esm/AgeTicker.js +58 -0
  27. package/dist/esm/AgeTicker.js.map +1 -0
  28. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +5 -0
  29. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +438 -0
  30. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
  31. package/dist/esm/Explorer.js +1 -1
  32. package/dist/esm/Explorer.js.map +1 -1
  33. package/dist/esm/{devtools.d.ts → TanStackRouterDevtools.d.ts} +0 -31
  34. package/dist/esm/TanStackRouterDevtools.js +177 -0
  35. package/dist/esm/TanStackRouterDevtools.js.map +1 -0
  36. package/dist/esm/TanStackRouterDevtoolsPanel.d.ts +35 -0
  37. package/dist/esm/TanStackRouterDevtoolsPanel.js +23 -0
  38. package/dist/esm/TanStackRouterDevtoolsPanel.js.map +1 -0
  39. package/dist/esm/context.js +1 -1
  40. package/dist/esm/context.js.map +1 -1
  41. package/dist/esm/index.d.ts +2 -1
  42. package/dist/esm/index.js +2 -1
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/useStyles.d.ts +52 -0
  45. package/dist/esm/useStyles.js +553 -0
  46. package/dist/esm/useStyles.js.map +1 -0
  47. package/dist/esm/utils.d.ts +3 -1
  48. package/dist/esm/utils.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/AgeTicker.tsx +73 -0
  51. package/src/BaseTanStackRouterDevtoolsPanel.tsx +499 -0
  52. package/src/Explorer.tsx +1 -1
  53. package/src/TanStackRouterDevtools.tsx +250 -0
  54. package/src/TanStackRouterDevtoolsPanel.tsx +55 -0
  55. package/src/context.ts +1 -1
  56. package/src/index.tsx +2 -1
  57. package/src/theme.tsx +2 -2
  58. package/src/useStyles.tsx +589 -0
  59. package/src/utils.ts +38 -31
  60. package/dist/cjs/devtools.cjs +0 -1212
  61. package/dist/cjs/devtools.cjs.map +0 -1
  62. package/dist/esm/devtools.js +0 -1195
  63. package/dist/esm/devtools.js.map +0 -1
  64. package/src/devtools.tsx +0 -1443
@@ -0,0 +1,58 @@
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
@@ -0,0 +1 @@
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;;"}
@@ -0,0 +1,5 @@
1
+ import { AnyRouteMatch, AnyRouter } from '@tanstack/react-router';
2
+ export declare function AgeTicker({ match, router, }: {
3
+ match?: AnyRouteMatch;
4
+ router: AnyRouter;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,438 @@
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 = function BaseTanStackRouterDevtoolsPanel2({
103
+ ref,
104
+ ...props
105
+ }) {
106
+ var _a, _b;
107
+ const {
108
+ isOpen = true,
109
+ setIsOpen,
110
+ handleDragStart,
111
+ router: userRouter,
112
+ shadowDOMTarget,
113
+ ...panelProps
114
+ } = props;
115
+ const { onCloseClick } = context.useDevtoolsOnClose();
116
+ const styles = useStyles.useStyles();
117
+ const { className, ...otherPanelProps } = panelProps;
118
+ const contextRouter = reactRouter.useRouter({ warn: false });
119
+ const router = userRouter ?? contextRouter;
120
+ const routerState = reactRouter.useRouterState({
121
+ router
122
+ });
123
+ reactRouter.invariant(
124
+ router,
125
+ "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."
126
+ );
127
+ const [showMatches, setShowMatches] = useLocalStorage(
128
+ "tanstackRouterDevtoolsShowMatches",
129
+ true
130
+ );
131
+ const [activeId, setActiveId] = useLocalStorage(
132
+ "tanstackRouterDevtoolsActiveRouteId",
133
+ ""
134
+ );
135
+ const activeMatch = React.useMemo(() => {
136
+ const matches = [
137
+ ...routerState.pendingMatches ?? [],
138
+ ...routerState.matches,
139
+ ...routerState.cachedMatches
140
+ ];
141
+ return matches.find((d) => d.routeId === activeId || d.id === activeId);
142
+ }, [
143
+ activeId,
144
+ routerState.cachedMatches,
145
+ routerState.matches,
146
+ routerState.pendingMatches
147
+ ]);
148
+ const hasSearch = Object.keys(routerState.location.search).length;
149
+ const explorerState = {
150
+ ...router,
151
+ state: router.state
152
+ };
153
+ return /* @__PURE__ */ jsxRuntime.jsxs(
154
+ "div",
155
+ {
156
+ ref,
157
+ className: clsx.clsx(
158
+ styles.devtoolsPanel,
159
+ "TanStackRouterDevtoolsPanel",
160
+ className
161
+ ),
162
+ ...otherPanelProps,
163
+ children: [
164
+ handleDragStart ? /* @__PURE__ */ jsxRuntime.jsx(
165
+ "div",
166
+ {
167
+ className: styles.dragHandle,
168
+ onMouseDown: handleDragStart
169
+ }
170
+ ) : null,
171
+ /* @__PURE__ */ jsxRuntime.jsx(
172
+ "button",
173
+ {
174
+ className: styles.panelCloseBtn,
175
+ onClick: (e) => {
176
+ setIsOpen(false);
177
+ onCloseClick(e);
178
+ },
179
+ children: /* @__PURE__ */ jsxRuntime.jsx(
180
+ "svg",
181
+ {
182
+ xmlns: "http://www.w3.org/2000/svg",
183
+ width: "10",
184
+ height: "6",
185
+ fill: "none",
186
+ viewBox: "0 0 10 6",
187
+ className: styles.panelCloseBtnIcon,
188
+ children: /* @__PURE__ */ jsxRuntime.jsx(
189
+ "path",
190
+ {
191
+ stroke: "currentColor",
192
+ strokeLinecap: "round",
193
+ strokeLinejoin: "round",
194
+ strokeWidth: "1.667",
195
+ d: "M1 1l4 4 4-4"
196
+ }
197
+ )
198
+ }
199
+ )
200
+ }
201
+ ),
202
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.firstContainer, children: [
203
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.row, children: /* @__PURE__ */ jsxRuntime.jsx(
204
+ Logo,
205
+ {
206
+ "aria-hidden": true,
207
+ onClick: (e) => {
208
+ setIsOpen(false);
209
+ onCloseClick(e);
210
+ }
211
+ }
212
+ ) }),
213
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.routerExplorerContainer, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.routerExplorer, children: /* @__PURE__ */ jsxRuntime.jsx(
214
+ Explorer.default,
215
+ {
216
+ label: "Router",
217
+ value: Object.fromEntries(
218
+ utils.multiSortBy(
219
+ Object.keys(explorerState),
220
+ [
221
+ "state",
222
+ "routesById",
223
+ "routesByPath",
224
+ "flatRoutes",
225
+ "options",
226
+ "manifest"
227
+ ].map((d) => (dd) => dd !== d)
228
+ ).map((key) => [key, explorerState[key]]).filter(
229
+ (d) => typeof d[1] !== "function" && ![
230
+ "__store",
231
+ "basepath",
232
+ "injectedHtml",
233
+ "subscribers",
234
+ "latestLoadPromise",
235
+ "navigateTimeout",
236
+ "resetNextScroll",
237
+ "tempLocationKey",
238
+ "latestLocation",
239
+ "routeTree",
240
+ "history"
241
+ ].includes(d[0])
242
+ )
243
+ ),
244
+ defaultExpanded: {
245
+ state: {},
246
+ context: {},
247
+ options: {}
248
+ },
249
+ filterSubEntries: (subEntries) => {
250
+ return subEntries.filter((d) => typeof d.value !== "function");
251
+ }
252
+ }
253
+ ) }) })
254
+ ] }),
255
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.secondContainer, children: [
256
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchesContainer, children: [
257
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsHeader, children: [
258
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Pathname" }),
259
+ routerState.location.maskedLocation ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.maskedBadgeContainer, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.maskedBadge, children: "masked" }) }) : null
260
+ ] }),
261
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsContent, children: [
262
+ /* @__PURE__ */ jsxRuntime.jsx("code", { children: routerState.location.pathname }),
263
+ routerState.location.maskedLocation ? /* @__PURE__ */ jsxRuntime.jsx("code", { className: styles.maskedLocation, children: routerState.location.maskedLocation.pathname }) : null
264
+ ] }),
265
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsHeader, children: [
266
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.routeMatchesToggle, children: [
267
+ /* @__PURE__ */ jsxRuntime.jsx(
268
+ "button",
269
+ {
270
+ type: "button",
271
+ onClick: () => {
272
+ setShowMatches(false);
273
+ },
274
+ disabled: !showMatches,
275
+ className: clsx.clsx(
276
+ styles.routeMatchesToggleBtn(!showMatches, true)
277
+ ),
278
+ children: "Routes"
279
+ }
280
+ ),
281
+ /* @__PURE__ */ jsxRuntime.jsx(
282
+ "button",
283
+ {
284
+ type: "button",
285
+ onClick: () => {
286
+ setShowMatches(true);
287
+ },
288
+ disabled: showMatches,
289
+ className: clsx.clsx(
290
+ styles.routeMatchesToggleBtn(!!showMatches, false)
291
+ ),
292
+ children: "Matches"
293
+ }
294
+ )
295
+ ] }),
296
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeaderInfo, children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: "age / staleTime / gcTime" }) })
297
+ ] }),
298
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(styles.routesContainer), children: !showMatches ? /* @__PURE__ */ jsxRuntime.jsx(
299
+ RouteComp,
300
+ {
301
+ router,
302
+ route: router.routeTree,
303
+ isRoot: true,
304
+ activeId,
305
+ setActiveId
306
+ }
307
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: (((_a = routerState.pendingMatches) == null ? void 0 : _a.length) ? routerState.pendingMatches : routerState.matches).map((match, i) => {
308
+ return /* @__PURE__ */ jsxRuntime.jsxs(
309
+ "div",
310
+ {
311
+ role: "button",
312
+ "aria-label": `Open match details for ${match.id}`,
313
+ onClick: () => setActiveId(activeId === match.id ? "" : match.id),
314
+ className: clsx.clsx(styles.matchRow(match === activeMatch)),
315
+ children: [
316
+ /* @__PURE__ */ jsxRuntime.jsx(
317
+ "div",
318
+ {
319
+ className: clsx.clsx(
320
+ styles.matchIndicator(utils.getStatusColor(match))
321
+ )
322
+ }
323
+ ),
324
+ /* @__PURE__ */ jsxRuntime.jsx(
325
+ "code",
326
+ {
327
+ className: styles.matchID,
328
+ children: `${match.routeId === reactRouter.rootRouteId ? reactRouter.rootRouteId : match.pathname}`
329
+ }
330
+ ),
331
+ /* @__PURE__ */ jsxRuntime.jsx(AgeTicker.AgeTicker, { match, router })
332
+ ]
333
+ },
334
+ match.id || i
335
+ );
336
+ }) }) })
337
+ ] }),
338
+ routerState.cachedMatches.length ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.cachedMatchesContainer, children: [
339
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.detailsHeader, children: [
340
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Cached Matches" }),
341
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeaderInfo, children: "age / staleTime / gcTime" })
342
+ ] }),
343
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: routerState.cachedMatches.map((match) => {
344
+ return /* @__PURE__ */ jsxRuntime.jsxs(
345
+ "div",
346
+ {
347
+ role: "button",
348
+ "aria-label": `Open match details for ${match.id}`,
349
+ onClick: () => setActiveId(activeId === match.id ? "" : match.id),
350
+ className: clsx.clsx(styles.matchRow(match === activeMatch)),
351
+ children: [
352
+ /* @__PURE__ */ jsxRuntime.jsx(
353
+ "div",
354
+ {
355
+ className: clsx.clsx(
356
+ styles.matchIndicator(utils.getStatusColor(match))
357
+ )
358
+ }
359
+ ),
360
+ /* @__PURE__ */ jsxRuntime.jsx("code", { className: styles.matchID, children: `${match.id}` }),
361
+ /* @__PURE__ */ jsxRuntime.jsx(AgeTicker.AgeTicker, { match, router })
362
+ ]
363
+ },
364
+ match.id
365
+ );
366
+ }) })
367
+ ] }) : null
368
+ ] }),
369
+ activeMatch ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.thirdContainer, children: [
370
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Match Details" }),
371
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetails, children: [
372
+ /* @__PURE__ */ jsxRuntime.jsx(
373
+ "div",
374
+ {
375
+ className: styles.matchStatus(
376
+ activeMatch.status,
377
+ activeMatch.isFetching
378
+ ),
379
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: activeMatch.status === "success" && activeMatch.isFetching ? "fetching" : activeMatch.status })
380
+ }
381
+ ),
382
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
383
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: "ID:" }),
384
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.matchDetailsInfo, children: /* @__PURE__ */ jsxRuntime.jsx("code", { children: activeMatch.id }) })
385
+ ] }),
386
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
387
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: "State:" }),
388
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.matchDetailsInfo, children: ((_b = routerState.pendingMatches) == null ? void 0 : _b.find(
389
+ (d) => d.id === activeMatch.id
390
+ )) ? "Pending" : routerState.matches.find((d) => d.id === activeMatch.id) ? "Active" : "Cached" })
391
+ ] }),
392
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.matchDetailsInfoLabel, children: [
393
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Last Updated:" }),
394
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.matchDetailsInfo, children: activeMatch.updatedAt ? new Date(activeMatch.updatedAt).toLocaleTimeString() : "N/A" })
395
+ ] })
396
+ ] }) }),
397
+ activeMatch.loaderData ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
398
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Loader Data" }),
399
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsxRuntime.jsx(
400
+ Explorer.default,
401
+ {
402
+ label: "loaderData",
403
+ value: activeMatch.loaderData,
404
+ defaultExpanded: {}
405
+ }
406
+ ) })
407
+ ] }) : null,
408
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Explorer" }),
409
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsxRuntime.jsx(
410
+ Explorer.default,
411
+ {
412
+ label: "Match",
413
+ value: activeMatch,
414
+ defaultExpanded: {}
415
+ }
416
+ ) })
417
+ ] }) : null,
418
+ hasSearch ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.fourthContainer, children: [
419
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsHeader, children: "Search Params" }),
420
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.detailsContent, children: /* @__PURE__ */ jsxRuntime.jsx(
421
+ Explorer.default,
422
+ {
423
+ value: routerState.location.search,
424
+ defaultExpanded: Object.keys(
425
+ routerState.location.search
426
+ ).reduce((obj, next) => {
427
+ obj[next] = {};
428
+ return obj;
429
+ }, {})
430
+ }
431
+ ) })
432
+ ] }) : null
433
+ ]
434
+ }
435
+ );
436
+ };
437
+ exports.BaseTanStackRouterDevtoolsPanel = BaseTanStackRouterDevtoolsPanel;
438
+ //# sourceMappingURL=BaseTanStackRouterDevtoolsPanel.cjs.map
@@ -0,0 +1 @@
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 =\n function BaseTanStackRouterDevtoolsPanel({\n ref,\n ...props\n }: DevtoolsPanelOptions & {\n ref?: React.RefObject<HTMLDivElement | null>\n }): 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\n className={styles.dragHandle}\n onMouseDown={handleDragStart}\n ></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(\n styles.routeMatchesToggleBtn(!showMatches, true),\n )}\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\n label=\"Match\"\n value={activeMatch}\n defaultExpanded={{}}\n />\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(\n routerState.location.search,\n ).reduce((obj: any, next) => {\n obj[next] = {}\n return obj\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":";;;;;;;;;;;;AAwBA,SAAS,KAAK,OAAgD;AAC5D,QAAM,EAAE,WAAW,GAAG,KAAA,IAAS;AAC/B,QAAM,SAASA,UAAAA,UAAU;AAEvB,SAAAC,gCAAC,YAAQ,GAAG,MAAM,WAAWC,KAAG,KAAA,OAAO,MAAM,SAAS,GACpD,UAAA;AAAA,IAAAC,2BAAA,IAAC,OAAI,EAAA,WAAW,OAAO,cAAc,UAAQ,YAAA;AAAA,IAC5CA,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,YAAY,UAAe,kBAAA,CAAA;AAAA,EAAA,GACpD;AAEJ;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;;AACD,QAAM,cAAcC,YAAAA,eAAe;AAAA,IACjC;AAAA,EAAA,CACM;AACR,QAAM,SAASJ,UAAAA,UAAU;AACnB,QAAA,UAAU,YAAY,kBAAkB,YAAY;AACpD,QAAA,QAAQ,YAAY,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY,MAAM,EAAE;AAE9D,QAAA,QAAQ,MAAM,QAAQ,MAAM;AAC5B,QAAA;AACF,UAAI,+BAAO,QAAQ;AACjB,cAAM,IAAI,MAAM;AAChB,cAAM,IAAY,MAAM,QAAQK,YAAAA,SAAS,MAAM,EAAE;AAC7C,YAAA,EAAE,WAAW,GAAG,GAAG;AACf,gBAAA,UAAU,EAAE,MAAM,CAAC;AACrB,cAAA,EAAE,OAAO,GAAG;AACP,mBAAA,IAAI,EAAE,OAAO,CAAC;AAAA,UAAA;AAAA,QACvB;AAAA,MACF;AAEK,aAAA;AAAA,aACA,OAAO;AACP,aAAA;AAAA,IAAA;AAAA,EACT,GACC,CAAC,OAAO,KAAK,CAAC;AAEjB,yCACG,OACC,EAAA,UAAA;AAAA,IAAAJ,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAY,0BAA0B,MAAM,EAAE;AAAA,QAC9C,SAAS,MAAM;AACb,cAAI,OAAO;AACT,wBAAY,aAAa,MAAM,KAAK,KAAK,MAAM,EAAE;AAAA,UAAA;AAAA,QAErD;AAAA,QACA,WAAWC,KAAA;AAAA,UACT,OAAO,mBAAmB,MAAM,OAAO,UAAU,CAAC,CAAC,KAAK;AAAA,QAC1D;AAAA,QAEA,UAAA;AAAA,UAAAC,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,KAAA;AAAA,gBACT,OAAO,eAAeI,0BAAoB,SAAS,KAAK,CAAC;AAAA,cAAA;AAAA,YAC3D;AAAA,UACF;AAAA,UACAL,2BAAAA,KAAC,OAAI,EAAA,WAAWC,UAAG,OAAO,UAAU,CAAC,CAAC,KAAK,CAAC,GAC1C,UAAA;AAAA,YAAAD,gCAAC,OACC,EAAA,UAAA;AAAA,cAACA,2BAAA,KAAA,QAAA,EAAK,WAAW,OAAO,MACrB,UAAA;AAAA,gBAAA,SAASM,YAAc,cAAA,MAAM,QAAQF,YAAA,SAAS,MAAM,EAAE;AAAA,gBAAG;AAAA,cAAA,GAC5D;AAAA,cACCF,2BAAA,IAAA,QAAA,EAAK,WAAW,OAAO,gBAAiB,UAAM,MAAA,CAAA;AAAA,YAAA,GACjD;AAAA,YACAA,2BAAAA,IAACK,UAAU,WAAA,EAAA,OAAc,OAAgB,CAAA;AAAA,UAAA,EAC3C,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,MACC,WAAM,aAAN,mBAAgB,UACfL,2BAAA,IAAC,SAAI,WAAW,OAAO,eAAe,CAAC,CAAC,MAAM,GAC3C,UAAA,CAAC,GAAI,MAAM,QAAyB,EAClC,KAAK,CAAC,GAAG,MAAM;AACP,aAAA,EAAE,OAAO,EAAE;AAAA,IAAA,CACnB,EACA,IAAI,CAAC,MACJA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MAAA;AAAA,MAJK,EAAE;AAAA,IAMV,CAAA,EACL,CAAA,IACE;AAAA,EAAA,GACN;AAEJ;AAEa,MAAA,kCACX,SAASM,iCAAgC;AAAA,EACvC;AAAA,EACA,GAAG;AACL,GAEuB;;AACf,QAAA;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EAAA,IACD;AAEE,QAAA,EAAE,aAAa,IAAIC,2BAAmB;AAC5C,QAAM,SAASV,UAAAA,UAAU;AACzB,QAAM,EAAE,WAAW,GAAG,gBAAA,IAAoB;AAE1C,QAAM,gBAAgBW,YAAA,UAAU,EAAE,MAAM,OAAO;AAC/C,QAAM,SAAS,cAAc;AAC7B,QAAM,cAAcP,YAAAA,eAAe;AAAA,IACjC;AAAA,EAAA,CACM;AAERQ,cAAA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAIM,QAAA,CAAC,aAAa,cAAc,IAAI;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AAEM,QAAA,CAAC,UAAU,WAAW,IAAI;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAEM,QAAA,cAAc,MAAM,QAAQ,MAAM;AACtC,UAAM,UAAU;AAAA,MACd,GAAI,YAAY,kBAAkB,CAAC;AAAA,MACnC,GAAG,YAAY;AAAA,MACf,GAAG,YAAY;AAAA,IACjB;AACO,WAAA,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY,YAAY,EAAE,OAAO,QAAQ;AAAA,EAAA,GACrE;AAAA,IACD;AAAA,IACA,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA,CACb;AAED,QAAM,YAAY,OAAO,KAAK,YAAY,SAAS,MAAM,EAAE;AAE3D,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,OAAO,OAAO;AAAA,EAChB;AAGE,SAAAX,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAWC,KAAA;AAAA,QACT,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH,UAAA;AAAA,QACC,kBAAAC,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,OAAO;AAAA,YAClB,aAAa;AAAA,UAAA;AAAA,QAAA,IAEb;AAAA,QACJA,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,OAAO;AAAA,YAClB,SAAS,CAAC,MAAM;AACd,wBAAU,KAAK;AACf,2BAAa,CAAC;AAAA,YAChB;AAAA,YAEA,UAAAA,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,WAAW,OAAO;AAAA,gBAElB,UAAAA,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,QAAO;AAAA,oBACP,eAAc;AAAA,oBACd,gBAAe;AAAA,oBACf,aAAY;AAAA,oBACZ,GAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACH;AAAA,YAAA;AAAA,UACH;AAAA,QACF;AAAA,QACCF,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,gBACrB,UAAA;AAAA,UAACE,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,KACrB,UAAAA,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAW;AAAA,cACX,SAAS,CAAC,MAAM;AACd,0BAAU,KAAK;AACf,6BAAa,CAAC;AAAA,cAAA;AAAA,YAChB;AAAA,UAAA,GAEJ;AAAA,UACAA,2BAAAA,IAAC,SAAI,WAAW,OAAO,yBACrB,UAACA,+BAAA,OAAA,EAAI,WAAW,OAAO,gBACrB,UAAAA,2BAAA;AAAA,YAACU,SAAA;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,OAAO;AAAA,gBACZC,MAAA;AAAA,kBACE,OAAO,KAAK,aAAa;AAAA,kBAEvB;AAAA,oBACE;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBAEF,IAAI,CAAC,MAAM,CAAC,OAAO,OAAO,CAAC;AAAA,gBAAA,EAE5B,IAAI,CAAC,QAAQ,CAAC,KAAM,cAAsB,GAAG,CAAC,CAAC,EAC/C;AAAA,kBACC,CAAC,MACC,OAAO,EAAE,CAAC,MAAM,cAChB,CAAC;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBAAA,EACA,SAAS,EAAE,CAAC,CAAC;AAAA,gBAAA;AAAA,cAEvB;AAAA,cACA,iBAAiB;AAAA,gBACf,OAAO,CAAC;AAAA,gBACR,SAAS,CAAC;AAAA,gBACV,SAAS,CAAA;AAAA,cACX;AAAA,cACA,kBAAkB,CAAC,eAAe;AAChC,uBAAO,WAAW,OAAO,CAAC,MAAM,OAAO,EAAE,UAAU,UAAU;AAAA,cAAA;AAAA,YAC/D;AAAA,aAEJ,EACF,CAAA;AAAA,QAAA,GACF;AAAA,QACCb,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,iBACrB,UAAA;AAAA,UAACA,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,kBACrB,UAAA;AAAA,YAACA,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,eACrB,UAAA;AAAA,cAAAE,2BAAAA,IAAC,UAAK,UAAQ,WAAA,CAAA;AAAA,cACb,YAAY,SAAS,iBACpBA,2BAAA,IAAC,SAAI,WAAW,OAAO,sBACrB,UAAAA,2BAAAA,IAAC,UAAK,WAAW,OAAO,aAAa,UAAA,UAAM,GAC7C,IACE;AAAA,YAAA,GACN;AAAA,YACCF,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,gBACrB,UAAA;AAAA,cAACE,2BAAA,IAAA,QAAA,EAAM,UAAY,YAAA,SAAS,UAAS;AAAA,cACpC,YAAY,SAAS,iBACpBA,2BAAA,IAAC,QAAK,EAAA,WAAW,OAAO,gBACrB,UAAY,YAAA,SAAS,eAAe,SACvC,CAAA,IACE;AAAA,YAAA,GACN;AAAA,YACCF,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,eACrB,UAAA;AAAA,cAACA,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,oBACrB,UAAA;AAAA,gBAAAE,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,MAAM;AACb,qCAAe,KAAK;AAAA,oBACtB;AAAA,oBACA,UAAU,CAAC;AAAA,oBACX,WAAWD,KAAA;AAAA,sBACT,OAAO,sBAAsB,CAAC,aAAa,IAAI;AAAA,oBACjD;AAAA,oBACD,UAAA;AAAA,kBAAA;AAAA,gBAED;AAAA,gBACAC,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,MAAM;AACb,qCAAe,IAAI;AAAA,oBACrB;AAAA,oBACA,UAAU;AAAA,oBACV,WAAWD,KAAA;AAAA,sBACT,OAAO,sBAAsB,CAAC,CAAC,aAAa,KAAK;AAAA,oBACnD;AAAA,oBACD,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED,GACF;AAAA,cACAC,2BAAAA,IAAC,SAAI,WAAW,OAAO,mBACrB,UAACA,2BAAAA,IAAA,OAAA,EAAI,qCAAwB,CAAA,EAC/B,CAAA;AAAA,YAAA,GACF;AAAA,YACAA,+BAAC,SAAI,WAAWD,KAAA,KAAG,OAAO,eAAe,GACtC,WAAC,cACAC,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA,OAAO,OAAO;AAAA,gBACd,QAAM;AAAA,gBACN;AAAA,gBACA;AAAA,cAAA;AAAA,YAAA,IAGFA,2BAAAA,IAAC,OACG,EAAA,aAAA,iBAAY,mBAAZ,mBAA4B,UAC1B,YAAY,iBACZ,YAAY,SACd,IAAI,CAAC,OAAO,MAAM;AAEhB,qBAAAF,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,cAAY,0BAA0B,MAAM,EAAE;AAAA,kBAC9C,SAAS,MACP,YAAY,aAAa,MAAM,KAAK,KAAK,MAAM,EAAE;AAAA,kBAEnD,WAAWC,KAAG,KAAA,OAAO,SAAS,UAAU,WAAW,CAAC;AAAA,kBAEpD,UAAA;AAAA,oBAAAC,2BAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWD,KAAA;AAAA,0BACT,OAAO,eAAea,MAAe,eAAA,KAAK,CAAC;AAAA,wBAAA;AAAA,sBAC7C;AAAA,oBACF;AAAA,oBAEAZ,2BAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,OAAO;AAAA,wBAClB,aAAG,MAAM,YAAYI,YAAAA,cAAcA,YAAA,cAAc,MAAM,QAAQ;AAAA,sBAAA;AAAA,oBAAG;AAAA,oBACpEJ,2BAAAA,IAACK,UAAU,WAAA,EAAA,OAAc,OAAgB,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAjBpC,MAAM,MAAM;AAAA,cAkBnB;AAAA,YAEH,CAAA,EACH,CAAA,EAEJ,CAAA;AAAA,UAAA,GACF;AAAA,UACC,YAAY,cAAc,yCACxB,OAAI,EAAA,WAAW,OAAO,wBACrB,UAAA;AAAA,YAACP,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,eACrB,UAAA;AAAA,cAAAE,2BAAAA,IAAC,SAAI,UAAc,iBAAA,CAAA;AAAA,cAClBA,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,mBAAmB,UAE1C,2BAAA,CAAA;AAAA,YAAA,GACF;AAAA,2CACC,OACE,EAAA,UAAA,YAAY,cAAc,IAAI,CAAC,UAAU;AAEtC,qBAAAF,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,cAAY,0BAA0B,MAAM,EAAE;AAAA,kBAC9C,SAAS,MACP,YAAY,aAAa,MAAM,KAAK,KAAK,MAAM,EAAE;AAAA,kBAEnD,WAAWC,KAAG,KAAA,OAAO,SAAS,UAAU,WAAW,CAAC;AAAA,kBAEpD,UAAA;AAAA,oBAAAC,2BAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWD,KAAA;AAAA,0BACT,OAAO,eAAea,MAAe,eAAA,KAAK,CAAC;AAAA,wBAAA;AAAA,sBAC7C;AAAA,oBACF;AAAA,oBAEAZ,2BAAAA,IAAC,UAAK,WAAW,OAAO,SAAU,UAAG,GAAA,MAAM,EAAE,GAAG,CAAA;AAAA,oBAEhDA,2BAAAA,IAACK,UAAU,WAAA,EAAA,OAAc,OAAgB,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAhBpC,MAAM;AAAA,cAiBb;AAAA,YAAA,CAEH,EACH,CAAA;AAAA,UAAA,EAAA,CACF,IACE;AAAA,QAAA,GACN;AAAA,QACC,cACCP,2BAAA,KAAC,OAAI,EAAA,WAAW,OAAO,gBACrB,UAAA;AAAA,UAAAE,2BAAA,IAAC,OAAI,EAAA,WAAW,OAAO,eAAe,UAAa,iBAAA;AAAA,yCAClD,OACC,EAAA,UAAAF,2BAAA,KAAC,OAAI,EAAA,WAAW,OAAO,cACrB,UAAA;AAAA,YAAAE,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW,OAAO;AAAA,kBAChB,YAAY;AAAA,kBACZ,YAAY;AAAA,gBACd;AAAA,gBAEA,UAAAA,2BAAAA,IAAC,SACE,UAAY,YAAA,WAAW,aAAa,YAAY,aAC7C,aACA,YAAY,OAClB,CAAA;AAAA,cAAA;AAAA,YACF;AAAA,YACCF,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,uBACrB,UAAA;AAAA,cAAAE,2BAAAA,IAAC,SAAI,UAAG,MAAA,CAAA;AAAA,cACRA,2BAAAA,IAAC,SAAI,WAAW,OAAO,kBACrB,UAACA,2BAAA,IAAA,QAAA,EAAM,UAAY,YAAA,GAAG,CAAA,EACxB,CAAA;AAAA,YAAA,GACF;AAAA,YACCF,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,uBACrB,UAAA;AAAA,cAAAE,2BAAAA,IAAC,SAAI,UAAM,SAAA,CAAA;AAAA,6CACV,OAAI,EAAA,WAAW,OAAO,kBACpB,6BAAY,sCAAgB;AAAA,gBAC3B,CAAC,MAAM,EAAE,OAAO,YAAY;AAAA,mBAE1B,YACA,YAAY,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,IACrD,WACA,SACR,CAAA;AAAA,YAAA,GACF;AAAA,YACCF,2BAAA,KAAA,OAAA,EAAI,WAAW,OAAO,uBACrB,UAAA;AAAA,cAAAE,2BAAAA,IAAC,SAAI,UAAa,gBAAA,CAAA;AAAA,cACjBA,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,kBACpB,UAAY,YAAA,YACT,IAAI,KAAK,YAAY,SAAS,EAAE,uBAChC,MACN,CAAA;AAAA,YAAA,EACF,CAAA;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,UACC,YAAY,aAETF,2BAAAA,KAAAe,WAAA,UAAA,EAAA,UAAA;AAAA,YAAAb,2BAAA,IAAC,OAAI,EAAA,WAAW,OAAO,eAAe,UAAW,eAAA;AAAA,YAChDA,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,gBACrB,UAAAA,2BAAA;AAAA,cAACU,SAAA;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,OAAO,YAAY;AAAA,gBACnB,iBAAiB,CAAA;AAAA,cAAC;AAAA,YAAA,EAEtB,CAAA;AAAA,UAAA,EAAA,CACF,IACE;AAAA,UACHV,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,eAAe,UAAQ,YAAA;AAAA,UAC7CA,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,gBACrB,UAAAA,2BAAA;AAAA,YAACU,SAAA;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO;AAAA,cACP,iBAAiB,CAAA;AAAA,YAAC;AAAA,UAAA,EAEtB,CAAA;AAAA,QAAA,EAAA,CACF,IACE;AAAA,QACH,YACCZ,2BAAA,KAAC,OAAI,EAAA,WAAW,OAAO,iBACrB,UAAA;AAAA,UAAAE,2BAAA,IAAC,OAAI,EAAA,WAAW,OAAO,eAAe,UAAa,iBAAA;AAAA,UAClDA,2BAAA,IAAA,OAAA,EAAI,WAAW,OAAO,gBACrB,UAAAA,2BAAA;AAAA,YAACU,SAAA;AAAA,YAAA;AAAA,cACC,OAAO,YAAY,SAAS;AAAA,cAC5B,iBAAiB,OAAO;AAAA,gBACtB,YAAY,SAAS;AAAA,cAAA,EACrB,OAAO,CAAC,KAAU,SAAS;AACvB,oBAAA,IAAI,IAAI,CAAC;AACN,uBAAA;AAAA,cAAA,GACN,CAAE,CAAA;AAAA,YAAA;AAAA,UAAA,EAET,CAAA;AAAA,QAAA,EAAA,CACF,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EACN;AAEJ;;"}
@@ -0,0 +1,5 @@
1
+ import { default as React } from 'react';
2
+ import { DevtoolsPanelOptions } from './TanStackRouterDevtoolsPanel.cjs';
3
+ export declare const BaseTanStackRouterDevtoolsPanel: ({ ref, ...props }: DevtoolsPanelOptions & {
4
+ ref?: React.RefObject<HTMLDivElement | null>;
5
+ }) => React.ReactElement;
@@ -299,7 +299,7 @@ const stylesFactory = (shadowDOMTarget) => {
299
299
  };
300
300
  };
301
301
  function useStyles() {
302
- const shadowDomTarget = React__namespace.useContext(context.ShadowDomTargetContext);
302
+ const shadowDomTarget = React__namespace.use(context.ShadowDomTargetContext);
303
303
  const [_styles] = React__namespace.useState(() => stylesFactory(shadowDomTarget));
304
304
  return _styles;
305
305
  }