@tanstack/router-devtools 0.0.1-alpha.0 → 0.0.1-beta.84

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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/build/cjs/Explorer.js +57 -81
  4. package/build/cjs/Explorer.js.map +1 -1
  5. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +1 -19
  6. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  7. package/build/cjs/devtools.js +256 -266
  8. package/build/cjs/devtools.js.map +1 -1
  9. package/build/cjs/index.js +3 -3
  10. package/build/cjs/styledComponents.js +10 -38
  11. package/build/cjs/styledComponents.js.map +1 -1
  12. package/build/cjs/theme.js +5 -8
  13. package/build/cjs/theme.js.map +1 -1
  14. package/build/cjs/useLocalStorage.js +3 -10
  15. package/build/cjs/useLocalStorage.js.map +1 -1
  16. package/build/cjs/useMediaQuery.js +13 -12
  17. package/build/cjs/useMediaQuery.js.map +1 -1
  18. package/build/cjs/utils.js +25 -35
  19. package/build/cjs/utils.js.map +1 -1
  20. package/build/esm/index.js +308 -1337
  21. package/build/esm/index.js.map +1 -1
  22. package/build/stats-html.html +59 -49
  23. package/build/stats-react.json +223 -9444
  24. package/build/types/index.d.ts +6 -5
  25. package/build/umd/index.development.js +347 -1316
  26. package/build/umd/index.development.js.map +1 -1
  27. package/build/umd/index.production.js +22 -2
  28. package/build/umd/index.production.js.map +1 -1
  29. package/package.json +9 -11
  30. package/src/Explorer.tsx +14 -12
  31. package/src/devtools.tsx +263 -240
  32. package/src/useLocalStorage.ts +5 -5
  33. package/src/useMediaQuery.ts +3 -0
  34. package/src/utils.ts +35 -17
  35. package/build/cjs/Logo.js +0 -73
  36. package/build/cjs/Logo.js.map +0 -1
  37. package/build/cjs/packages/react-location-devtools/src/Explorer.js +0 -240
  38. package/build/cjs/packages/react-location-devtools/src/Explorer.js.map +0 -1
  39. package/build/cjs/packages/react-location-devtools/src/Logo.js +0 -73
  40. package/build/cjs/packages/react-location-devtools/src/Logo.js.map +0 -1
  41. package/build/cjs/packages/react-location-devtools/src/devtools.js +0 -614
  42. package/build/cjs/packages/react-location-devtools/src/devtools.js.map +0 -1
  43. package/build/cjs/packages/react-location-devtools/src/index.js +0 -21
  44. package/build/cjs/packages/react-location-devtools/src/index.js.map +0 -1
  45. package/build/cjs/packages/react-location-devtools/src/styledComponents.js +0 -107
  46. package/build/cjs/packages/react-location-devtools/src/styledComponents.js.map +0 -1
  47. package/build/cjs/packages/react-location-devtools/src/theme.js +0 -54
  48. package/build/cjs/packages/react-location-devtools/src/theme.js.map +0 -1
  49. package/build/cjs/packages/react-location-devtools/src/useLocalStorage.js +0 -65
  50. package/build/cjs/packages/react-location-devtools/src/useLocalStorage.js.map +0 -1
  51. package/build/cjs/packages/react-location-devtools/src/useMediaQuery.js +0 -57
  52. package/build/cjs/packages/react-location-devtools/src/useMediaQuery.js.map +0 -1
  53. package/build/cjs/packages/react-location-devtools/src/utils.js +0 -117
  54. package/build/cjs/packages/react-location-devtools/src/utils.js.map +0 -1
  55. package/build/cjs/packages/react-router-devtools/src/Explorer.js +0 -245
  56. package/build/cjs/packages/react-router-devtools/src/Explorer.js.map +0 -1
  57. package/build/cjs/packages/react-router-devtools/src/Logo.js +0 -73
  58. package/build/cjs/packages/react-router-devtools/src/Logo.js.map +0 -1
  59. package/build/cjs/packages/react-router-devtools/src/devtools.js +0 -654
  60. package/build/cjs/packages/react-router-devtools/src/devtools.js.map +0 -1
  61. package/build/cjs/packages/react-router-devtools/src/index.js +0 -21
  62. package/build/cjs/packages/react-router-devtools/src/index.js.map +0 -1
  63. package/build/cjs/packages/react-router-devtools/src/styledComponents.js +0 -107
  64. package/build/cjs/packages/react-router-devtools/src/styledComponents.js.map +0 -1
  65. package/build/cjs/packages/react-router-devtools/src/theme.js +0 -54
  66. package/build/cjs/packages/react-router-devtools/src/theme.js.map +0 -1
  67. package/build/cjs/packages/react-router-devtools/src/useLocalStorage.js +0 -65
  68. package/build/cjs/packages/react-router-devtools/src/useLocalStorage.js.map +0 -1
  69. package/build/cjs/packages/react-router-devtools/src/useMediaQuery.js +0 -57
  70. package/build/cjs/packages/react-router-devtools/src/useMediaQuery.js.map +0 -1
  71. package/build/cjs/packages/react-router-devtools/src/utils.js +0 -117
  72. package/build/cjs/packages/react-router-devtools/src/utils.js.map +0 -1
  73. package/src/Logo.tsx +0 -37
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-location-devtools
2
+ * router-devtools
3
3
  *
4
4
  * Copyright (c) TanStack
5
5
  *
@@ -14,97 +14,108 @@ Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
15
  var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
16
16
  var React = require('react');
17
- var reactLocation = require('@tanstack/react-location');
17
+ var router = require('@tanstack/router');
18
18
  var useLocalStorage = require('./useLocalStorage.js');
19
19
  var utils = require('./utils.js');
20
20
  var styledComponents = require('./styledComponents.js');
21
21
  var theme = require('./theme.js');
22
22
  var Explorer = require('./Explorer.js');
23
- var Logo = require('./Logo.js');
24
23
 
25
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
25
 
27
26
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
27
 
29
- const _excluded = ["style"],
30
- _excluded2 = ["style", "onClick"],
31
- _excluded3 = ["style", "onClick"],
32
- _excluded4 = ["isOpen", "setIsOpen", "handleDragStart", "useRouter"],
33
- _excluded5 = ["listeners", "buildLocation", "mount", "update", "buildNext", "navigate", "cancelMatches", "loadLocation", "cleanPreloadCache", "loadRoute", "matchRoutes", "resolveMatches", "loadMatches", "invalidateRoute", "getOutletElement", "resolvePath", "matchRoute", "loaderData", "getLoaderData", "buildLinkInfo", "__experimental__createSnapshot", "stringifySearch", "parseSearch", "destroy", "defaultPendingElement", "rootMatch"],
34
- _excluded6 = ["abortController", "resolve", "ready", "cancel", "startPending", "cancelPending", "setParentMatch", "load", "router", "element", "errorElement", "pendingElement", "dataPromise", "onExit"];
35
28
  const isServer = typeof window === 'undefined';
36
- function ReactLocationDevtools(_ref) {
37
- let {
38
- initialIsOpen,
39
- panelProps = {},
40
- closeButtonProps = {},
41
- toggleButtonProps = {},
42
- position = 'bottom-left',
43
- containerElement: Container = 'footer',
44
- useRouter: useRouterImpl = reactLocation.useRouter
45
- } = _ref;
29
+ function Logo(props) {
30
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, props, {
31
+ style: {
32
+ ...(props.style ?? {}),
33
+ display: 'flex',
34
+ alignItems: 'center',
35
+ flexDirection: 'column',
36
+ fontSize: '0.8rem',
37
+ fontWeight: 'bolder',
38
+ lineHeight: '1'
39
+ }
40
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
41
+ style: {
42
+ letterSpacing: '-0.05rem'
43
+ }
44
+ }, "TANSTACK"), /*#__PURE__*/React__default["default"].createElement("div", {
45
+ style: {
46
+ backgroundImage: 'linear-gradient(to right, var(--tw-gradient-stops))',
47
+ // @ts-ignore
48
+ '--tw-gradient-from': '#84cc16',
49
+ '--tw-gradient-stops': 'var(--tw-gradient-from), var(--tw-gradient-to)',
50
+ '--tw-gradient-to': '#10b981',
51
+ WebkitBackgroundClip: 'text',
52
+ color: 'transparent',
53
+ letterSpacing: '0.1rem',
54
+ marginRight: '-0.2rem'
55
+ }
56
+ }, "ROUTER"));
57
+ }
58
+ function TanStackRouterDevtools({
59
+ initialIsOpen,
60
+ panelProps = {},
61
+ closeButtonProps = {},
62
+ toggleButtonProps = {},
63
+ position = 'bottom-left',
64
+ containerElement: Container = 'footer',
65
+ router
66
+ }) {
46
67
  const rootRef = React__default["default"].useRef(null);
47
68
  const panelRef = React__default["default"].useRef(null);
48
- const [isOpen, setIsOpen] = useLocalStorage["default"]('reactLocationDevtoolsOpen', initialIsOpen);
49
- const [devtoolsHeight, setDevtoolsHeight] = useLocalStorage["default"]('reactLocationDevtoolsHeight', null);
69
+ const [isOpen, setIsOpen] = useLocalStorage["default"]('tanstackRouterDevtoolsOpen', initialIsOpen);
70
+ const [devtoolsHeight, setDevtoolsHeight] = useLocalStorage["default"]('tanstackRouterDevtoolsHeight', null);
50
71
  const [isResolvedOpen, setIsResolvedOpen] = utils.useSafeState(false);
51
72
  const [isResizing, setIsResizing] = utils.useSafeState(false);
52
73
  const isMounted = utils.useIsMounted();
53
-
54
- const _handleDragStart = (panelElement, startEvent) => {
55
- var _panelElement$getBoun;
56
-
74
+ const handleDragStart = (panelElement, startEvent) => {
57
75
  if (startEvent.button !== 0) return; // Only allow left click for drag
58
76
 
59
77
  setIsResizing(true);
60
78
  const dragInfo = {
61
- originalHeight: (_panelElement$getBoun = panelElement == null ? void 0 : panelElement.getBoundingClientRect().height) != null ? _panelElement$getBoun : 0,
79
+ originalHeight: panelElement?.getBoundingClientRect().height ?? 0,
62
80
  pageY: startEvent.pageY
63
81
  };
64
-
65
82
  const run = moveEvent => {
66
83
  const delta = dragInfo.pageY - moveEvent.pageY;
67
- const newHeight = (dragInfo == null ? void 0 : dragInfo.originalHeight) + delta;
84
+ const newHeight = dragInfo?.originalHeight + delta;
68
85
  setDevtoolsHeight(newHeight);
69
-
70
86
  if (newHeight < 70) {
71
87
  setIsOpen(false);
72
88
  } else {
73
89
  setIsOpen(true);
74
90
  }
75
91
  };
76
-
77
92
  const unsub = () => {
78
93
  setIsResizing(false);
79
94
  document.removeEventListener('mousemove', run);
80
95
  document.removeEventListener('mouseUp', unsub);
81
96
  };
82
-
83
97
  document.addEventListener('mousemove', run);
84
98
  document.addEventListener('mouseup', unsub);
85
99
  };
86
-
87
100
  React__default["default"].useEffect(() => {
88
- setIsResolvedOpen(isOpen != null ? isOpen : false);
89
- }, [isOpen, isResolvedOpen, setIsResolvedOpen]); // Toggle panel visibility before/after transition (depending on direction).
90
- // Prevents focusing in a closed panel.
101
+ setIsResolvedOpen(isOpen ?? false);
102
+ }, [isOpen, isResolvedOpen, setIsResolvedOpen]);
91
103
 
104
+ // Toggle panel visibility before/after transition (depending on direction).
105
+ // Prevents focusing in a closed panel.
92
106
  React__default["default"].useEffect(() => {
93
107
  const ref = panelRef.current;
94
-
95
108
  if (ref) {
96
109
  const handlePanelTransitionStart = () => {
97
110
  if (ref && isResolvedOpen) {
98
111
  ref.style.visibility = 'visible';
99
112
  }
100
113
  };
101
-
102
114
  const handlePanelTransitionEnd = () => {
103
115
  if (ref && !isResolvedOpen) {
104
116
  ref.style.visibility = 'hidden';
105
117
  }
106
118
  };
107
-
108
119
  ref.addEventListener('transitionstart', handlePanelTransitionStart);
109
120
  ref.addEventListener('transitionend', handlePanelTransitionEnd);
110
121
  return () => {
@@ -112,128 +123,122 @@ function ReactLocationDevtools(_ref) {
112
123
  ref.removeEventListener('transitionend', handlePanelTransitionEnd);
113
124
  };
114
125
  }
126
+ return;
115
127
  }, [isResolvedOpen]);
116
128
  React__default["default"][isServer ? 'useEffect' : 'useLayoutEffect'](() => {
117
129
  if (isResolvedOpen) {
118
- var _rootRef$current, _rootRef$current$pare;
119
-
120
- const previousValue = (_rootRef$current = rootRef.current) == null ? void 0 : (_rootRef$current$pare = _rootRef$current.parentElement) == null ? void 0 : _rootRef$current$pare.style.paddingBottom;
121
-
130
+ const previousValue = rootRef.current?.parentElement?.style.paddingBottom;
122
131
  const run = () => {
123
- var _panelRef$current, _rootRef$current2;
124
-
125
- const containerHeight = (_panelRef$current = panelRef.current) == null ? void 0 : _panelRef$current.getBoundingClientRect().height;
126
-
127
- if ((_rootRef$current2 = rootRef.current) != null && _rootRef$current2.parentElement) {
128
- rootRef.current.parentElement.style.paddingBottom = containerHeight + "px";
132
+ const containerHeight = panelRef.current?.getBoundingClientRect().height;
133
+ if (rootRef.current?.parentElement) {
134
+ rootRef.current.parentElement.style.paddingBottom = `${containerHeight}px`;
129
135
  }
130
136
  };
131
-
132
137
  run();
133
-
134
138
  if (typeof window !== 'undefined') {
135
139
  window.addEventListener('resize', run);
136
140
  return () => {
137
- var _rootRef$current3;
138
-
139
141
  window.removeEventListener('resize', run);
140
-
141
- if ((_rootRef$current3 = rootRef.current) != null && _rootRef$current3.parentElement && typeof previousValue === 'string') {
142
+ if (rootRef.current?.parentElement && typeof previousValue === 'string') {
142
143
  rootRef.current.parentElement.style.paddingBottom = previousValue;
143
144
  }
144
145
  };
145
146
  }
146
147
  }
148
+ return;
147
149
  }, [isResolvedOpen]);
148
-
149
150
  const {
150
- style: panelStyle = {}
151
- } = panelProps,
152
- otherPanelProps = _rollupPluginBabelHelpers.objectWithoutPropertiesLoose(panelProps, _excluded);
153
-
151
+ style: panelStyle = {},
152
+ ...otherPanelProps
153
+ } = panelProps;
154
154
  const {
155
155
  style: closeButtonStyle = {},
156
- onClick: onCloseClick
157
- } = closeButtonProps,
158
- otherCloseButtonProps = _rollupPluginBabelHelpers.objectWithoutPropertiesLoose(closeButtonProps, _excluded2);
159
-
156
+ onClick: onCloseClick,
157
+ ...otherCloseButtonProps
158
+ } = closeButtonProps;
160
159
  const {
161
160
  style: toggleButtonStyle = {},
162
- onClick: onToggleClick
163
- } = toggleButtonProps,
164
- otherToggleButtonProps = _rollupPluginBabelHelpers.objectWithoutPropertiesLoose(toggleButtonProps, _excluded3); // Do not render on the server
165
-
161
+ onClick: onToggleClick,
162
+ ...otherToggleButtonProps
163
+ } = toggleButtonProps;
166
164
 
165
+ // Do not render on the server
167
166
  if (!isMounted()) return null;
168
167
  return /*#__PURE__*/React__default["default"].createElement(Container, {
169
168
  ref: rootRef,
170
- className: "ReactLocationDevtools"
169
+ className: "TanStackRouterDevtools"
171
170
  }, /*#__PURE__*/React__default["default"].createElement(theme.ThemeProvider, {
172
171
  theme: theme.defaultTheme
173
- }, /*#__PURE__*/React__default["default"].createElement(ReactLocationDevtoolsPanel, _rollupPluginBabelHelpers["extends"]({
172
+ }, /*#__PURE__*/React__default["default"].createElement(TanStackRouterDevtoolsPanel, _rollupPluginBabelHelpers["extends"]({
174
173
  ref: panelRef
175
174
  }, otherPanelProps, {
176
- useRouter: useRouterImpl,
177
- style: _rollupPluginBabelHelpers["extends"]({
175
+ router: router,
176
+ style: {
178
177
  position: 'fixed',
179
178
  bottom: '0',
180
179
  right: '0',
181
180
  zIndex: 99999,
182
181
  width: '100%',
183
- height: devtoolsHeight != null ? devtoolsHeight : 500,
182
+ height: devtoolsHeight ?? 500,
184
183
  maxHeight: '90%',
185
184
  boxShadow: '0 0 20px rgba(0,0,0,.3)',
186
- borderTop: "1px solid " + theme.defaultTheme.gray,
185
+ borderTop: `1px solid ${theme.defaultTheme.gray}`,
187
186
  transformOrigin: 'top',
188
187
  // visibility will be toggled after transitions, but set initial state here
189
- visibility: isOpen ? 'visible' : 'hidden'
190
- }, panelStyle, isResizing ? {
191
- transition: "none"
192
- } : {
193
- transition: "all .2s ease"
194
- }, isResolvedOpen ? {
195
- opacity: 1,
196
- pointerEvents: 'all',
197
- transform: "translateY(0) scale(1)"
198
- } : {
199
- opacity: 0,
200
- pointerEvents: 'none',
201
- transform: "translateY(15px) scale(1.02)"
202
- }),
188
+ visibility: isOpen ? 'visible' : 'hidden',
189
+ ...panelStyle,
190
+ ...(isResizing ? {
191
+ transition: `none`
192
+ } : {
193
+ transition: `all .2s ease`
194
+ }),
195
+ ...(isResolvedOpen ? {
196
+ opacity: 1,
197
+ pointerEvents: 'all',
198
+ transform: `translateY(0) scale(1)`
199
+ } : {
200
+ opacity: 0,
201
+ pointerEvents: 'none',
202
+ transform: `translateY(15px) scale(1.02)`
203
+ })
204
+ },
203
205
  isOpen: isResolvedOpen,
204
206
  setIsOpen: setIsOpen,
205
- handleDragStart: e => _handleDragStart(panelRef.current, e)
207
+ handleDragStart: e => handleDragStart(panelRef.current, e)
206
208
  })), isResolvedOpen ? /*#__PURE__*/React__default["default"].createElement(styledComponents.Button, _rollupPluginBabelHelpers["extends"]({
207
209
  type: "button",
208
- "aria-label": "Close TanStack Location Devtools"
210
+ "aria-label": "Close TanStack Router Devtools"
209
211
  }, otherCloseButtonProps, {
210
212
  onClick: e => {
211
213
  setIsOpen(false);
212
214
  onCloseClick && onCloseClick(e);
213
215
  },
214
- style: _rollupPluginBabelHelpers["extends"]({
216
+ style: {
215
217
  position: 'fixed',
216
218
  zIndex: 99999,
217
219
  margin: '.5em',
218
- bottom: 0
219
- }, position === 'top-right' ? {
220
- right: '0'
221
- } : position === 'top-left' ? {
222
- left: '0'
223
- } : position === 'bottom-right' ? {
224
- right: '0'
225
- } : {
226
- left: '0'
227
- }, closeButtonStyle)
220
+ bottom: 0,
221
+ ...(position === 'top-right' ? {
222
+ right: '0'
223
+ } : position === 'top-left' ? {
224
+ left: '0'
225
+ } : position === 'bottom-right' ? {
226
+ right: '0'
227
+ } : {
228
+ left: '0'
229
+ }),
230
+ ...closeButtonStyle
231
+ }
228
232
  }), "Close") : null), !isResolvedOpen ? /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({
229
233
  type: "button"
230
234
  }, otherToggleButtonProps, {
231
- "aria-label": "Open TanStack Location Devtools",
235
+ "aria-label": "Open TanStack Router Devtools",
232
236
  onClick: e => {
233
237
  setIsOpen(true);
234
238
  onToggleClick && onToggleClick(e);
235
239
  },
236
- style: _rollupPluginBabelHelpers["extends"]({
240
+ style: {
241
+ appearance: 'none',
237
242
  background: 'none',
238
243
  border: 0,
239
244
  padding: 0,
@@ -243,45 +248,95 @@ function ReactLocationDevtools(_ref) {
243
248
  fontSize: '1.5em',
244
249
  margin: '.5em',
245
250
  cursor: 'pointer',
246
- width: 'fit-content'
247
- }, position === 'top-right' ? {
248
- top: '0',
249
- right: '0'
250
- } : position === 'top-left' ? {
251
- top: '0',
252
- left: '0'
253
- } : position === 'bottom-right' ? {
254
- bottom: '0',
255
- right: '0'
256
- } : {
257
- bottom: '0',
258
- left: '0'
259
- }, toggleButtonStyle)
260
- }), /*#__PURE__*/React__default["default"].createElement(Logo["default"], {
251
+ width: 'fit-content',
252
+ ...(position === 'top-right' ? {
253
+ top: '0',
254
+ right: '0'
255
+ } : position === 'top-left' ? {
256
+ top: '0',
257
+ left: '0'
258
+ } : position === 'bottom-right' ? {
259
+ bottom: '0',
260
+ right: '0'
261
+ } : {
262
+ bottom: '0',
263
+ left: '0'
264
+ }),
265
+ ...toggleButtonStyle
266
+ }
267
+ }), /*#__PURE__*/React__default["default"].createElement(Logo, {
261
268
  "aria-hidden": true
262
269
  })) : null);
263
270
  }
264
- const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwardRef(function ReactLocationDevtoolsPanel(props, ref) {
265
- var _router$state$current, _router$state$pending;
266
-
271
+ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwardRef(function TanStackRouterDevtoolsPanel(props, ref) {
267
272
  const {
268
273
  isOpen = true,
274
+ setIsOpen,
269
275
  handleDragStart,
270
- useRouter
271
- } = props,
272
- panelProps = _rollupPluginBabelHelpers.objectWithoutPropertiesLoose(props, _excluded4);
273
-
274
- const router = useRouter();
275
- const [activeMatchId, setActiveRouteId] = useLocalStorage["default"]('reactLocationDevtoolsActiveRouteId', '');
276
- const activeMatch = (_router$state$current = router.state.current.matches) == null ? void 0 : _router$state$current.find(d => d.id === activeMatchId);
276
+ router: userRouter,
277
+ ...panelProps
278
+ } = props;
279
+ const routerContextValue = React__default["default"].useContext(router.routerContext);
280
+ const router$1 = userRouter ?? routerContextValue?.router;
281
+ router.invariant(router$1, '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.');
282
+ router.useStore(router$1.__store);
283
+ const [activeRouteId, setActiveRouteId] = useLocalStorage["default"]('tanstackRouterDevtoolsActiveRouteId', '');
284
+ const [activeMatchId, setActiveMatchId] = useLocalStorage["default"]('tanstackRouterDevtoolsActiveMatchId', '');
285
+ React__default["default"].useEffect(() => {
286
+ setActiveMatchId('');
287
+ }, [activeRouteId]);
288
+ const allMatches = React__default["default"].useMemo(() => [...Object.values(router$1.state.currentMatches), ...Object.values(router$1.state.pendingMatches ?? [])], [router$1.state.currentMatches, router$1.state.pendingMatches]);
289
+ const activeMatch = allMatches?.find(d => d.id === activeMatchId) || allMatches?.find(d => d.route.id === activeRouteId);
277
290
  return /*#__PURE__*/React__default["default"].createElement(theme.ThemeProvider, {
278
291
  theme: theme.defaultTheme
279
292
  }, /*#__PURE__*/React__default["default"].createElement(styledComponents.Panel, _rollupPluginBabelHelpers["extends"]({
280
293
  ref: ref,
281
- className: "ReactLocationDevtoolsPanel"
294
+ className: "TanStackRouterDevtoolsPanel"
282
295
  }, panelProps), /*#__PURE__*/React__default["default"].createElement("style", {
283
296
  dangerouslySetInnerHTML: {
284
- __html: "\n\n .ReactLocationDevtoolsPanel * {\n scrollbar-color: " + theme.defaultTheme.backgroundAlt + " " + theme.defaultTheme.gray + ";\n }\n\n .ReactLocationDevtoolsPanel *::-webkit-scrollbar, .ReactLocationDevtoolsPanel scrollbar {\n width: 1em;\n height: 1em;\n }\n\n .ReactLocationDevtoolsPanel *::-webkit-scrollbar-track, .ReactLocationDevtoolsPanel scrollbar-track {\n background: " + theme.defaultTheme.backgroundAlt + ";\n }\n\n .ReactLocationDevtoolsPanel *::-webkit-scrollbar-thumb, .ReactLocationDevtoolsPanel scrollbar-thumb {\n background: " + theme.defaultTheme.gray + ";\n border-radius: .5em;\n border: 3px solid " + theme.defaultTheme.backgroundAlt + ";\n }\n\n .ReactLocationDevtoolsPanel table {\n width: 100%;\n }\n\n .ReactLocationDevtoolsPanel table tr {\n border-bottom: 2px dotted rgba(255, 255, 255, .2);\n }\n\n .ReactLocationDevtoolsPanel table tr:last-child {\n border-bottom: none\n }\n\n .ReactLocationDevtoolsPanel table td {\n padding: .25rem .5rem;\n border-right: 2px dotted rgba(255, 255, 255, .05);\n }\n\n .ReactLocationDevtoolsPanel table td:last-child {\n border-right: none\n }\n\n "
297
+ __html: `
298
+
299
+ .TanStackRouterDevtoolsPanel * {
300
+ scrollbar-color: ${theme.defaultTheme.backgroundAlt} ${theme.defaultTheme.gray};
301
+ }
302
+
303
+ .TanStackRouterDevtoolsPanel *::-webkit-scrollbar, .TanStackRouterDevtoolsPanel scrollbar {
304
+ width: 1em;
305
+ height: 1em;
306
+ }
307
+
308
+ .TanStackRouterDevtoolsPanel *::-webkit-scrollbar-track, .TanStackRouterDevtoolsPanel scrollbar-track {
309
+ background: ${theme.defaultTheme.backgroundAlt};
310
+ }
311
+
312
+ .TanStackRouterDevtoolsPanel *::-webkit-scrollbar-thumb, .TanStackRouterDevtoolsPanel scrollbar-thumb {
313
+ background: ${theme.defaultTheme.gray};
314
+ border-radius: .5em;
315
+ border: 3px solid ${theme.defaultTheme.backgroundAlt};
316
+ }
317
+
318
+ .TanStackRouterDevtoolsPanel table {
319
+ width: 100%;
320
+ }
321
+
322
+ .TanStackRouterDevtoolsPanel table tr {
323
+ border-bottom: 2px dotted rgba(255, 255, 255, .2);
324
+ }
325
+
326
+ .TanStackRouterDevtoolsPanel table tr:last-child {
327
+ border-bottom: none
328
+ }
329
+
330
+ .TanStackRouterDevtoolsPanel table td {
331
+ padding: .25rem .5rem;
332
+ border-right: 2px dotted rgba(255, 255, 255, .05);
333
+ }
334
+
335
+ .TanStackRouterDevtoolsPanel table td:last-child {
336
+ border-right: none
337
+ }
338
+
339
+ `
285
340
  }
286
341
  }), /*#__PURE__*/React__default["default"].createElement("div", {
287
342
  style: {
@@ -301,39 +356,31 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
301
356
  minHeight: '40%',
302
357
  maxHeight: '100%',
303
358
  overflow: 'auto',
304
- borderRight: "1px solid " + theme.defaultTheme.grayAlt,
359
+ borderRight: `1px solid ${theme.defaultTheme.grayAlt}`,
305
360
  display: 'flex',
306
361
  flexDirection: 'column'
307
362
  }
308
363
  }, /*#__PURE__*/React__default["default"].createElement("div", {
309
364
  style: {
310
- padding: '.5em',
311
- background: theme.defaultTheme.backgroundAlt,
312
365
  display: 'flex',
313
- justifyContent: 'space-between',
314
- alignItems: 'center'
315
- }
316
- }, /*#__PURE__*/React__default["default"].createElement(Logo["default"], {
317
- "aria-hidden": true,
318
- style: {
319
- marginRight: '.5em'
366
+ justifyContent: 'start',
367
+ gap: '1rem',
368
+ padding: '1rem',
369
+ alignItems: 'center',
370
+ background: theme.defaultTheme.backgroundAlt
320
371
  }
372
+ }, /*#__PURE__*/React__default["default"].createElement(Logo, {
373
+ "aria-hidden": true
321
374
  }), /*#__PURE__*/React__default["default"].createElement("div", {
322
375
  style: {
323
- marginRight: 'auto',
324
376
  fontSize: 'clamp(.8rem, 2vw, 1.3rem)',
325
377
  fontWeight: 'bold'
326
378
  }
327
- }, "TanStack Location", ' ', /*#__PURE__*/React__default["default"].createElement("span", {
379
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
328
380
  style: {
329
381
  fontWeight: 100
330
382
  }
331
- }, "Devtools")), /*#__PURE__*/React__default["default"].createElement("div", {
332
- style: {
333
- display: 'flex',
334
- flexDirection: 'column'
335
- }
336
- })), /*#__PURE__*/React__default["default"].createElement("div", {
383
+ }, "Devtools"))), /*#__PURE__*/React__default["default"].createElement("div", {
337
384
  style: {
338
385
  overflowY: 'auto',
339
386
  flex: '1'
@@ -344,11 +391,7 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
344
391
  }
345
392
  }, /*#__PURE__*/React__default["default"].createElement(Explorer["default"], {
346
393
  label: "Router",
347
- value: (() => {
348
- const rest = _rollupPluginBabelHelpers.objectWithoutPropertiesLoose(router, _excluded5);
349
-
350
- return rest;
351
- })(),
394
+ value: router$1,
352
395
  defaultExpanded: {}
353
396
  })))), /*#__PURE__*/React__default["default"].createElement("div", {
354
397
  style: {
@@ -356,7 +399,7 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
356
399
  minHeight: '40%',
357
400
  maxHeight: '100%',
358
401
  overflow: 'auto',
359
- borderRight: "1px solid " + theme.defaultTheme.grayAlt,
402
+ borderRight: `1px solid ${theme.defaultTheme.grayAlt}`,
360
403
  display: 'flex',
361
404
  flexDirection: 'column'
362
405
  }
@@ -368,43 +411,15 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
368
411
  top: 0,
369
412
  zIndex: 1
370
413
  }
371
- }, "Loader Data"), /*#__PURE__*/React__default["default"].createElement("div", {
372
- style: {
373
- padding: '.5em'
374
- }
375
- }, /*#__PURE__*/React__default["default"].createElement(Explorer["default"], {
376
- value: router.getLoaderData(),
377
- defaultExpanded: Object.keys(router.getLoaderData()).reduce((obj, next) => {
378
- obj[next] = {};
379
- return obj;
380
- }, {})
381
- }))), /*#__PURE__*/React__default["default"].createElement("div", {
382
- style: {
383
- flex: '1 1 500px',
384
- minHeight: '40%',
385
- maxHeight: '100%',
386
- overflow: 'auto',
387
- borderRight: "1px solid " + theme.defaultTheme.grayAlt,
388
- display: 'flex',
389
- flexDirection: 'column'
390
- }
391
- }, /*#__PURE__*/React__default["default"].createElement("div", {
392
- style: {
393
- padding: '.5em',
394
- background: theme.defaultTheme.backgroundAlt,
395
- position: 'sticky',
396
- top: 0,
397
- zIndex: 1
398
- }
399
- }, "Current Matches"), router.state.current.matches.map((match, i) => {
414
+ }, "Active Matches"), router$1.state.currentMatches.map((match, i) => {
400
415
  return /*#__PURE__*/React__default["default"].createElement("div", {
401
- key: match.id || i,
416
+ key: match.route.id || i,
402
417
  role: "button",
403
- "aria-label": "Open match details for " + match.id,
404
- onClick: () => setActiveRouteId(activeMatchId === match.id ? '' : match.id),
418
+ "aria-label": `Open match details for ${match.route.id}`,
419
+ onClick: () => setActiveRouteId(activeRouteId === match.route.id ? '' : match.route.id),
405
420
  style: {
406
421
  display: 'flex',
407
- borderBottom: "solid 1px " + theme.defaultTheme.grayAlt,
422
+ borderBottom: `solid 1px ${theme.defaultTheme.grayAlt}`,
408
423
  cursor: 'pointer',
409
424
  alignItems: 'center',
410
425
  background: match === activeMatch ? 'rgba(255,255,255,.1)' : undefined
@@ -426,8 +441,8 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
426
441
  style: {
427
442
  padding: '.5em'
428
443
  }
429
- }, "" + match.id));
430
- }), /*#__PURE__*/React__default["default"].createElement("div", {
444
+ }, `${match.id}`));
445
+ }), router$1.state.pendingMatches?.length ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
431
446
  style: {
432
447
  marginTop: '2rem',
433
448
  padding: '.5em',
@@ -436,15 +451,15 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
436
451
  top: 0,
437
452
  zIndex: 1
438
453
  }
439
- }, "Pending Matches"), (_router$state$pending = router.state.pending) == null ? void 0 : _router$state$pending.matches.map((match, i) => {
454
+ }, "Pending Matches"), router$1.state.pendingMatches?.map((match, i) => {
440
455
  return /*#__PURE__*/React__default["default"].createElement("div", {
441
- key: match.id || i,
456
+ key: match.route.id || i,
442
457
  role: "button",
443
- "aria-label": "Open match details for " + match.id,
444
- onClick: () => setActiveRouteId(activeMatchId === match.id ? '' : match.id),
458
+ "aria-label": `Open match details for ${match.route.id}`,
459
+ onClick: () => setActiveRouteId(activeRouteId === match.route.id ? '' : match.route.id),
445
460
  style: {
446
461
  display: 'flex',
447
- borderBottom: "solid 1px " + theme.defaultTheme.grayAlt,
462
+ borderBottom: `solid 1px ${theme.defaultTheme.grayAlt}`,
448
463
  cursor: 'pointer',
449
464
  background: match === activeMatch ? 'rgba(255,255,255,.1)' : undefined
450
465
  }
@@ -465,64 +480,14 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
465
480
  style: {
466
481
  padding: '.5em'
467
482
  }
468
- }, "" + match.id));
469
- }), /*#__PURE__*/React__default["default"].createElement("div", {
470
- style: {
471
- marginTop: '2rem',
472
- padding: '.5em',
473
- background: theme.defaultTheme.backgroundAlt,
474
- position: 'sticky',
475
- top: 0,
476
- zIndex: 1
477
- }
478
- }, "Preloading Matches"), Object.keys(router.preloadCache).map((key, i) => {
479
- const {
480
- match,
481
- expiresAt
482
- } = router.preloadCache[key];
483
- return /*#__PURE__*/React__default["default"].createElement("div", {
484
- key: match.id || i,
485
- role: "button",
486
- "aria-label": "Open match details for " + match.id,
487
- onClick: () => setActiveRouteId(activeMatchId === match.id ? '' : match.id),
488
- style: {
489
- display: 'flex',
490
- borderBottom: "solid 1px " + theme.defaultTheme.grayAlt,
491
- cursor: 'pointer',
492
- background: match === activeMatch ? 'rgba(255,255,255,.1)' : undefined
493
- }
494
- }, /*#__PURE__*/React__default["default"].createElement("div", {
495
- style: {
496
- display: 'flex',
497
- flexDirection: 'column',
498
- padding: '.5rem',
499
- gap: '.3rem'
500
- }
501
- }, /*#__PURE__*/React__default["default"].createElement("div", {
502
- style: {
503
- display: 'flex',
504
- alignItems: 'center',
505
- gap: '.5rem'
506
- }
507
- }, /*#__PURE__*/React__default["default"].createElement("div", {
508
- style: {
509
- flex: '0 0 auto',
510
- width: '1.3rem',
511
- height: '1.3rem',
512
- background: utils.getStatusColor(match, theme.defaultTheme),
513
- alignItems: 'center',
514
- justifyContent: 'center',
515
- fontWeight: 'bold',
516
- borderRadius: '.25rem',
517
- transition: 'all .2s ease-out'
518
- }
519
- }), /*#__PURE__*/React__default["default"].createElement(styledComponents.Code, null, "" + match.id)), /*#__PURE__*/React__default["default"].createElement(styledComponents.Code, null, "Expires: ", new Date(expiresAt).toLocaleTimeString())));
520
- })), activeMatch ? /*#__PURE__*/React__default["default"].createElement(styledComponents.ActivePanel, null, /*#__PURE__*/React__default["default"].createElement("div", {
483
+ }, `${match.id}`));
484
+ })) : null), activeMatch ? /*#__PURE__*/React__default["default"].createElement(styledComponents.ActivePanel, null, /*#__PURE__*/React__default["default"].createElement("div", {
521
485
  style: {
522
486
  padding: '.5em',
523
487
  background: theme.defaultTheme.backgroundAlt,
524
488
  position: 'sticky',
525
489
  top: 0,
490
+ bottom: 0,
526
491
  zIndex: 1
527
492
  }
528
493
  }, "Match Details"), /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("table", null, /*#__PURE__*/React__default["default"].createElement("tbody", null, /*#__PURE__*/React__default["default"].createElement("tr", null, /*#__PURE__*/React__default["default"].createElement("td", {
@@ -537,12 +502,17 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
537
502
  style: {
538
503
  opacity: '.5'
539
504
  }
540
- }, "Last Updated"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.updatedAt ? /*#__PURE__*/React__default["default"].createElement(styledComponents.Code, null, new Date(activeMatch.updatedAt).toLocaleTimeString()) : 'N/A'))))), /*#__PURE__*/React__default["default"].createElement("div", {
505
+ }, "Status"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.state.status)), /*#__PURE__*/React__default["default"].createElement("tr", null, /*#__PURE__*/React__default["default"].createElement("td", {
506
+ style: {
507
+ opacity: '.5'
508
+ }
509
+ }, "Last Updated"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.state.updatedAt ? new Date(activeMatch.state.updatedAt).toLocaleTimeString() : 'N/A'))))), /*#__PURE__*/React__default["default"].createElement("div", {
541
510
  style: {
542
511
  background: theme.defaultTheme.backgroundAlt,
543
512
  padding: '.5em',
544
513
  position: 'sticky',
545
514
  top: 0,
515
+ bottom: 0,
546
516
  zIndex: 1
547
517
  }
548
518
  }, "Actions"), /*#__PURE__*/React__default["default"].createElement("div", {
@@ -551,17 +521,7 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
551
521
  }
552
522
  }, /*#__PURE__*/React__default["default"].createElement(styledComponents.Button, {
553
523
  type: "button",
554
- onClick: () => {
555
- router.invalidateRoute(activeMatch);
556
- router.notify();
557
- },
558
- style: {
559
- background: theme.defaultTheme.warning,
560
- color: theme.defaultTheme.inputTextColor
561
- }
562
- }, "Invalidate"), ' ', /*#__PURE__*/React__default["default"].createElement(styledComponents.Button, {
563
- type: "button",
564
- onClick: () => router.reload(),
524
+ onClick: () => activeMatch.load(),
565
525
  style: {
566
526
  background: theme.defaultTheme.gray
567
527
  }
@@ -571,6 +531,7 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
571
531
  padding: '.5em',
572
532
  position: 'sticky',
573
533
  top: 0,
534
+ bottom: 0,
574
535
  zIndex: 1
575
536
  }
576
537
  }, "Explorer"), /*#__PURE__*/React__default["default"].createElement("div", {
@@ -579,15 +540,44 @@ const ReactLocationDevtoolsPanel = /*#__PURE__*/React__default["default"].forwar
579
540
  }
580
541
  }, /*#__PURE__*/React__default["default"].createElement(Explorer["default"], {
581
542
  label: "Match",
582
- value: (() => {
583
- const rest = _rollupPluginBabelHelpers.objectWithoutPropertiesLoose(activeMatch, _excluded6);
584
-
585
- return rest;
586
- })(),
543
+ value: activeMatch,
587
544
  defaultExpanded: {}
588
- }))) : null));
545
+ }))) : null, /*#__PURE__*/React__default["default"].createElement("div", {
546
+ style: {
547
+ flex: '1 1 500px',
548
+ minHeight: '40%',
549
+ maxHeight: '100%',
550
+ overflow: 'auto',
551
+ borderRight: `1px solid ${theme.defaultTheme.grayAlt}`,
552
+ display: 'flex',
553
+ flexDirection: 'column'
554
+ }
555
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
556
+ style: {
557
+ padding: '.5em',
558
+ background: theme.defaultTheme.backgroundAlt,
559
+ position: 'sticky',
560
+ top: 0,
561
+ bottom: 0,
562
+ zIndex: 1
563
+ }
564
+ }, "Search Params"), /*#__PURE__*/React__default["default"].createElement("div", {
565
+ style: {
566
+ padding: '.5em'
567
+ }
568
+ }, Object.keys(router.last(router$1.state.currentMatches)?.state.search || {}).length ? /*#__PURE__*/React__default["default"].createElement(Explorer["default"], {
569
+ value: router.last(router$1.state.currentMatches)?.state.search || {},
570
+ defaultExpanded: Object.keys(router.last(router$1.state.currentMatches)?.state.search || {}).reduce((obj, next) => {
571
+ obj[next] = {};
572
+ return obj;
573
+ }, {})
574
+ }) : /*#__PURE__*/React__default["default"].createElement("em", {
575
+ style: {
576
+ opacity: 0.5
577
+ }
578
+ }, '{ }')))));
589
579
  });
590
580
 
591
- exports.ReactLocationDevtools = ReactLocationDevtools;
592
- exports.ReactLocationDevtoolsPanel = ReactLocationDevtoolsPanel;
581
+ exports.TanStackRouterDevtools = TanStackRouterDevtools;
582
+ exports.TanStackRouterDevtoolsPanel = TanStackRouterDevtoolsPanel;
593
583
  //# sourceMappingURL=devtools.js.map