@tanstack/react-router-devtools 0.0.1-alpha.1

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