@tanstack/router-devtools-core 1.166.7 → 1.166.9

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 (29) hide show
  1. package/dist/BaseTanStackRouterDevtoolsPanel-B43j38ty.js +1940 -0
  2. package/dist/BaseTanStackRouterDevtoolsPanel-B43j38ty.js.map +1 -0
  3. package/dist/BaseTanStackRouterDevtoolsPanel-DdB0IT5G.cjs +1969 -0
  4. package/dist/BaseTanStackRouterDevtoolsPanel-DdB0IT5G.cjs.map +1 -0
  5. package/dist/FloatingTanStackRouterDevtools-B12ktJLj.js +240 -0
  6. package/dist/FloatingTanStackRouterDevtools-B12ktJLj.js.map +1 -0
  7. package/dist/FloatingTanStackRouterDevtools-TVrd9NKL.cjs +241 -0
  8. package/dist/FloatingTanStackRouterDevtools-TVrd9NKL.cjs.map +1 -0
  9. package/dist/cjs/index.cjs +170 -5
  10. package/dist/cjs/index.cjs.map +1 -1
  11. package/dist/context-D56_tqst.js +1749 -0
  12. package/dist/context-D56_tqst.js.map +1 -0
  13. package/dist/context-DZa5WwQ_.cjs +1916 -0
  14. package/dist/context-DZa5WwQ_.cjs.map +1 -0
  15. package/dist/esm/index.js +168 -5
  16. package/dist/esm/index.js.map +1 -1
  17. package/package.json +2 -2
  18. package/dist/BaseTanStackRouterDevtoolsPanel-BgiCKo12.cjs +0 -1936
  19. package/dist/BaseTanStackRouterDevtoolsPanel-BgiCKo12.cjs.map +0 -1
  20. package/dist/BaseTanStackRouterDevtoolsPanel-Bmws3ikM.js +0 -1920
  21. package/dist/BaseTanStackRouterDevtoolsPanel-Bmws3ikM.js.map +0 -1
  22. package/dist/FloatingTanStackRouterDevtools-B7vy70jP.js +0 -281
  23. package/dist/FloatingTanStackRouterDevtools-B7vy70jP.js.map +0 -1
  24. package/dist/FloatingTanStackRouterDevtools-C-LyXpEh.cjs +0 -281
  25. package/dist/FloatingTanStackRouterDevtools-C-LyXpEh.cjs.map +0 -1
  26. package/dist/index-BoYu2KZp.cjs +0 -1822
  27. package/dist/index-BoYu2KZp.cjs.map +0 -1
  28. package/dist/index-DQ3FiKl6.js +0 -1823
  29. package/dist/index-DQ3FiKl6.js.map +0 -1
@@ -0,0 +1,1940 @@
1
+ import { D as untrack, E as onCleanup, O as useContext, S as createSignal, T as mergeProps, _ as Switch, a as addEventListener, b as createMemo, c as insert, d as setAttribute, f as spread, g as Show, h as Match, l as memo, m as For, n as ShadowDomTargetContext, o as className, p as template, r as useDevtoolsOnClose, s as delegateEvents, v as createComponent, x as createRenderEffect, y as createEffect } from "./context-D56_tqst.js";
2
+ import { clsx } from "clsx";
3
+ import invariant from "tiny-invariant";
4
+ import { interpolatePath, rootRouteId, trimPath } from "@tanstack/router-core";
5
+ import * as goober from "goober";
6
+ //#region src/tokens.ts
7
+ var tokens = {
8
+ colors: {
9
+ inherit: "inherit",
10
+ current: "currentColor",
11
+ transparent: "transparent",
12
+ black: "#000000",
13
+ white: "#ffffff",
14
+ neutral: {
15
+ 50: "#f9fafb",
16
+ 100: "#f2f4f7",
17
+ 200: "#eaecf0",
18
+ 300: "#d0d5dd",
19
+ 400: "#98a2b3",
20
+ 500: "#667085",
21
+ 600: "#475467",
22
+ 700: "#344054",
23
+ 800: "#1d2939",
24
+ 900: "#101828"
25
+ },
26
+ darkGray: {
27
+ 50: "#525c7a",
28
+ 100: "#49536e",
29
+ 200: "#414962",
30
+ 300: "#394056",
31
+ 400: "#313749",
32
+ 500: "#292e3d",
33
+ 600: "#212530",
34
+ 700: "#191c24",
35
+ 800: "#111318",
36
+ 900: "#0b0d10"
37
+ },
38
+ gray: {
39
+ 50: "#f9fafb",
40
+ 100: "#f2f4f7",
41
+ 200: "#eaecf0",
42
+ 300: "#d0d5dd",
43
+ 400: "#98a2b3",
44
+ 500: "#667085",
45
+ 600: "#475467",
46
+ 700: "#344054",
47
+ 800: "#1d2939",
48
+ 900: "#101828"
49
+ },
50
+ blue: {
51
+ 25: "#F5FAFF",
52
+ 50: "#EFF8FF",
53
+ 100: "#D1E9FF",
54
+ 200: "#B2DDFF",
55
+ 300: "#84CAFF",
56
+ 400: "#53B1FD",
57
+ 500: "#2E90FA",
58
+ 600: "#1570EF",
59
+ 700: "#175CD3",
60
+ 800: "#1849A9",
61
+ 900: "#194185"
62
+ },
63
+ green: {
64
+ 25: "#F6FEF9",
65
+ 50: "#ECFDF3",
66
+ 100: "#D1FADF",
67
+ 200: "#A6F4C5",
68
+ 300: "#6CE9A6",
69
+ 400: "#32D583",
70
+ 500: "#12B76A",
71
+ 600: "#039855",
72
+ 700: "#027A48",
73
+ 800: "#05603A",
74
+ 900: "#054F31"
75
+ },
76
+ red: {
77
+ 50: "#fef2f2",
78
+ 100: "#fee2e2",
79
+ 200: "#fecaca",
80
+ 300: "#fca5a5",
81
+ 400: "#f87171",
82
+ 500: "#ef4444",
83
+ 600: "#dc2626",
84
+ 700: "#b91c1c",
85
+ 800: "#991b1b",
86
+ 900: "#7f1d1d",
87
+ 950: "#450a0a"
88
+ },
89
+ yellow: {
90
+ 25: "#FFFCF5",
91
+ 50: "#FFFAEB",
92
+ 100: "#FEF0C7",
93
+ 200: "#FEDF89",
94
+ 300: "#FEC84B",
95
+ 400: "#FDB022",
96
+ 500: "#F79009",
97
+ 600: "#DC6803",
98
+ 700: "#B54708",
99
+ 800: "#93370D",
100
+ 900: "#7A2E0E"
101
+ },
102
+ purple: {
103
+ 25: "#FAFAFF",
104
+ 50: "#F4F3FF",
105
+ 100: "#EBE9FE",
106
+ 200: "#D9D6FE",
107
+ 300: "#BDB4FE",
108
+ 400: "#9B8AFB",
109
+ 500: "#7A5AF8",
110
+ 600: "#6938EF",
111
+ 700: "#5925DC",
112
+ 800: "#4A1FB8",
113
+ 900: "#3E1C96"
114
+ },
115
+ teal: {
116
+ 25: "#F6FEFC",
117
+ 50: "#F0FDF9",
118
+ 100: "#CCFBEF",
119
+ 200: "#99F6E0",
120
+ 300: "#5FE9D0",
121
+ 400: "#2ED3B7",
122
+ 500: "#15B79E",
123
+ 600: "#0E9384",
124
+ 700: "#107569",
125
+ 800: "#125D56",
126
+ 900: "#134E48"
127
+ },
128
+ pink: {
129
+ 25: "#fdf2f8",
130
+ 50: "#fce7f3",
131
+ 100: "#fbcfe8",
132
+ 200: "#f9a8d4",
133
+ 300: "#f472b6",
134
+ 400: "#ec4899",
135
+ 500: "#db2777",
136
+ 600: "#be185d",
137
+ 700: "#9d174d",
138
+ 800: "#831843",
139
+ 900: "#500724"
140
+ },
141
+ cyan: {
142
+ 25: "#ecfeff",
143
+ 50: "#cffafe",
144
+ 100: "#a5f3fc",
145
+ 200: "#67e8f9",
146
+ 300: "#22d3ee",
147
+ 400: "#06b6d4",
148
+ 500: "#0891b2",
149
+ 600: "#0e7490",
150
+ 700: "#155e75",
151
+ 800: "#164e63",
152
+ 900: "#083344"
153
+ }
154
+ },
155
+ alpha: {
156
+ 100: "ff",
157
+ 90: "e5",
158
+ 80: "cc",
159
+ 70: "b3",
160
+ 60: "99",
161
+ 50: "80",
162
+ 40: "66",
163
+ 30: "4d",
164
+ 20: "33",
165
+ 10: "1a",
166
+ 0: "00"
167
+ },
168
+ font: {
169
+ size: {
170
+ "2xs": "calc(var(--tsrd-font-size) * 0.625)",
171
+ xs: "calc(var(--tsrd-font-size) * 0.75)",
172
+ sm: "calc(var(--tsrd-font-size) * 0.875)",
173
+ md: "var(--tsrd-font-size)",
174
+ lg: "calc(var(--tsrd-font-size) * 1.125)",
175
+ xl: "calc(var(--tsrd-font-size) * 1.25)",
176
+ "2xl": "calc(var(--tsrd-font-size) * 1.5)",
177
+ "3xl": "calc(var(--tsrd-font-size) * 1.875)",
178
+ "4xl": "calc(var(--tsrd-font-size) * 2.25)",
179
+ "5xl": "calc(var(--tsrd-font-size) * 3)",
180
+ "6xl": "calc(var(--tsrd-font-size) * 3.75)",
181
+ "7xl": "calc(var(--tsrd-font-size) * 4.5)",
182
+ "8xl": "calc(var(--tsrd-font-size) * 6)",
183
+ "9xl": "calc(var(--tsrd-font-size) * 8)"
184
+ },
185
+ lineHeight: {
186
+ "3xs": "calc(var(--tsrd-font-size) * 0.75)",
187
+ "2xs": "calc(var(--tsrd-font-size) * 0.875)",
188
+ xs: "calc(var(--tsrd-font-size) * 1)",
189
+ sm: "calc(var(--tsrd-font-size) * 1.25)",
190
+ md: "calc(var(--tsrd-font-size) * 1.5)",
191
+ lg: "calc(var(--tsrd-font-size) * 1.75)",
192
+ xl: "calc(var(--tsrd-font-size) * 2)",
193
+ "2xl": "calc(var(--tsrd-font-size) * 2.25)",
194
+ "3xl": "calc(var(--tsrd-font-size) * 2.5)",
195
+ "4xl": "calc(var(--tsrd-font-size) * 2.75)",
196
+ "5xl": "calc(var(--tsrd-font-size) * 3)",
197
+ "6xl": "calc(var(--tsrd-font-size) * 3.25)",
198
+ "7xl": "calc(var(--tsrd-font-size) * 3.5)",
199
+ "8xl": "calc(var(--tsrd-font-size) * 3.75)",
200
+ "9xl": "calc(var(--tsrd-font-size) * 4)"
201
+ },
202
+ weight: {
203
+ thin: "100",
204
+ extralight: "200",
205
+ light: "300",
206
+ normal: "400",
207
+ medium: "500",
208
+ semibold: "600",
209
+ bold: "700",
210
+ extrabold: "800",
211
+ black: "900"
212
+ },
213
+ fontFamily: {
214
+ sans: "ui-sans-serif, Inter, system-ui, sans-serif, sans-serif",
215
+ mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`
216
+ }
217
+ },
218
+ breakpoints: {
219
+ xs: "320px",
220
+ sm: "640px",
221
+ md: "768px",
222
+ lg: "1024px",
223
+ xl: "1280px",
224
+ "2xl": "1536px"
225
+ },
226
+ border: { radius: {
227
+ none: "0px",
228
+ xs: "calc(var(--tsrd-font-size) * 0.125)",
229
+ sm: "calc(var(--tsrd-font-size) * 0.25)",
230
+ md: "calc(var(--tsrd-font-size) * 0.375)",
231
+ lg: "calc(var(--tsrd-font-size) * 0.5)",
232
+ xl: "calc(var(--tsrd-font-size) * 0.75)",
233
+ "2xl": "calc(var(--tsrd-font-size) * 1)",
234
+ "3xl": "calc(var(--tsrd-font-size) * 1.5)",
235
+ full: "9999px"
236
+ } },
237
+ size: {
238
+ 0: "0px",
239
+ .25: "calc(var(--tsrd-font-size) * 0.0625)",
240
+ .5: "calc(var(--tsrd-font-size) * 0.125)",
241
+ 1: "calc(var(--tsrd-font-size) * 0.25)",
242
+ 1.5: "calc(var(--tsrd-font-size) * 0.375)",
243
+ 2: "calc(var(--tsrd-font-size) * 0.5)",
244
+ 2.5: "calc(var(--tsrd-font-size) * 0.625)",
245
+ 3: "calc(var(--tsrd-font-size) * 0.75)",
246
+ 3.5: "calc(var(--tsrd-font-size) * 0.875)",
247
+ 4: "calc(var(--tsrd-font-size) * 1)",
248
+ 4.5: "calc(var(--tsrd-font-size) * 1.125)",
249
+ 5: "calc(var(--tsrd-font-size) * 1.25)",
250
+ 5.5: "calc(var(--tsrd-font-size) * 1.375)",
251
+ 6: "calc(var(--tsrd-font-size) * 1.5)",
252
+ 6.5: "calc(var(--tsrd-font-size) * 1.625)",
253
+ 7: "calc(var(--tsrd-font-size) * 1.75)",
254
+ 8: "calc(var(--tsrd-font-size) * 2)",
255
+ 9: "calc(var(--tsrd-font-size) * 2.25)",
256
+ 10: "calc(var(--tsrd-font-size) * 2.5)",
257
+ 11: "calc(var(--tsrd-font-size) * 2.75)",
258
+ 12: "calc(var(--tsrd-font-size) * 3)",
259
+ 14: "calc(var(--tsrd-font-size) * 3.5)",
260
+ 16: "calc(var(--tsrd-font-size) * 4)",
261
+ 20: "calc(var(--tsrd-font-size) * 5)",
262
+ 24: "calc(var(--tsrd-font-size) * 6)",
263
+ 28: "calc(var(--tsrd-font-size) * 7)",
264
+ 32: "calc(var(--tsrd-font-size) * 8)",
265
+ 36: "calc(var(--tsrd-font-size) * 9)",
266
+ 40: "calc(var(--tsrd-font-size) * 10)",
267
+ 44: "calc(var(--tsrd-font-size) * 11)",
268
+ 48: "calc(var(--tsrd-font-size) * 12)",
269
+ 52: "calc(var(--tsrd-font-size) * 13)",
270
+ 56: "calc(var(--tsrd-font-size) * 14)",
271
+ 60: "calc(var(--tsrd-font-size) * 15)",
272
+ 64: "calc(var(--tsrd-font-size) * 16)",
273
+ 72: "calc(var(--tsrd-font-size) * 18)",
274
+ 80: "calc(var(--tsrd-font-size) * 20)",
275
+ 96: "calc(var(--tsrd-font-size) * 24)"
276
+ },
277
+ shadow: {
278
+ xs: (_ = "rgb(0 0 0 / 0.1)") => `0 1px 2px 0 rgb(0 0 0 / 0.05)`,
279
+ sm: (color = "rgb(0 0 0 / 0.1)") => `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}`,
280
+ md: (color = "rgb(0 0 0 / 0.1)") => `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}`,
281
+ lg: (color = "rgb(0 0 0 / 0.1)") => `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}`,
282
+ xl: (color = "rgb(0 0 0 / 0.1)") => `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}`,
283
+ "2xl": (color = "rgb(0 0 0 / 0.25)") => `0 25px 50px -12px ${color}`,
284
+ inner: (color = "rgb(0 0 0 / 0.05)") => `inset 0 2px 4px 0 ${color}`,
285
+ none: () => `none`
286
+ },
287
+ zIndices: {
288
+ hide: -1,
289
+ auto: "auto",
290
+ base: 0,
291
+ docked: 10,
292
+ dropdown: 1e3,
293
+ sticky: 1100,
294
+ banner: 1200,
295
+ overlay: 1300,
296
+ modal: 1400,
297
+ popover: 1500,
298
+ skipLink: 1600,
299
+ toast: 1700,
300
+ tooltip: 1800
301
+ }
302
+ };
303
+ //#endregion
304
+ //#region src/useStyles.tsx
305
+ var stylesFactory$1 = (shadowDOMTarget) => {
306
+ const { colors, font, size, alpha, shadow, border } = tokens;
307
+ const { fontFamily, lineHeight, size: fontSize } = font;
308
+ const css = shadowDOMTarget ? goober.css.bind({ target: shadowDOMTarget }) : goober.css;
309
+ return {
310
+ devtoolsPanelContainer: css`
311
+ direction: ltr;
312
+ position: fixed;
313
+ bottom: 0;
314
+ right: 0;
315
+ z-index: 99999;
316
+ width: 100%;
317
+ max-height: 90%;
318
+ border-top: 1px solid ${colors.gray[700]};
319
+ transform-origin: top;
320
+ `,
321
+ devtoolsPanelContainerVisibility: (isOpen) => {
322
+ return css`
323
+ visibility: ${isOpen ? "visible" : "hidden"};
324
+ `;
325
+ },
326
+ devtoolsPanelContainerResizing: (isResizing) => {
327
+ if (isResizing()) return css`
328
+ transition: none;
329
+ `;
330
+ return css`
331
+ transition: all 0.4s ease;
332
+ `;
333
+ },
334
+ devtoolsPanelContainerAnimation: (isOpen, height) => {
335
+ if (isOpen) return css`
336
+ pointer-events: auto;
337
+ transform: translateY(0);
338
+ `;
339
+ return css`
340
+ pointer-events: none;
341
+ transform: translateY(${height}px);
342
+ `;
343
+ },
344
+ logo: css`
345
+ cursor: pointer;
346
+ display: flex;
347
+ flex-direction: column;
348
+ background-color: transparent;
349
+ border: none;
350
+ font-family: ${fontFamily.sans};
351
+ gap: ${tokens.size[.5]};
352
+ padding: 0px;
353
+ &:hover {
354
+ opacity: 0.7;
355
+ }
356
+ &:focus-visible {
357
+ outline-offset: 4px;
358
+ border-radius: ${border.radius.xs};
359
+ outline: 2px solid ${colors.blue[800]};
360
+ }
361
+ `,
362
+ tanstackLogo: css`
363
+ font-size: ${font.size.md};
364
+ font-weight: ${font.weight.bold};
365
+ line-height: ${font.lineHeight.xs};
366
+ white-space: nowrap;
367
+ color: ${colors.gray[300]};
368
+ `,
369
+ routerLogo: css`
370
+ font-weight: ${font.weight.semibold};
371
+ font-size: ${font.size.xs};
372
+ background: linear-gradient(to right, #84cc16, #10b981);
373
+ background-clip: text;
374
+ -webkit-background-clip: text;
375
+ line-height: 1;
376
+ -webkit-text-fill-color: transparent;
377
+ white-space: nowrap;
378
+ `,
379
+ devtoolsPanel: css`
380
+ display: flex;
381
+ font-size: ${fontSize.sm};
382
+ font-family: ${fontFamily.sans};
383
+ background-color: ${colors.darkGray[700]};
384
+ color: ${colors.gray[300]};
385
+
386
+ @media (max-width: 700px) {
387
+ flex-direction: column;
388
+ }
389
+ @media (max-width: 600px) {
390
+ font-size: ${fontSize.xs};
391
+ }
392
+ `,
393
+ dragHandle: css`
394
+ position: absolute;
395
+ left: 0;
396
+ top: 0;
397
+ width: 100%;
398
+ height: 4px;
399
+ cursor: row-resize;
400
+ z-index: 100000;
401
+ &:hover {
402
+ background-color: ${colors.purple[400]}${alpha[90]};
403
+ }
404
+ `,
405
+ firstContainer: css`
406
+ flex: 1 1 500px;
407
+ min-height: 40%;
408
+ max-height: 100%;
409
+ overflow: auto;
410
+ border-right: 1px solid ${colors.gray[700]};
411
+ display: flex;
412
+ flex-direction: column;
413
+ `,
414
+ routerExplorerContainer: css`
415
+ overflow-y: auto;
416
+ flex: 1;
417
+ `,
418
+ routerExplorer: css`
419
+ padding: ${tokens.size[2]};
420
+ `,
421
+ row: css`
422
+ display: flex;
423
+ align-items: center;
424
+ padding: ${tokens.size[2]} ${tokens.size[2.5]};
425
+ gap: ${tokens.size[2.5]};
426
+ border-bottom: ${colors.darkGray[500]} 1px solid;
427
+ align-items: center;
428
+ `,
429
+ detailsHeader: css`
430
+ font-family: ui-sans-serif, Inter, system-ui, sans-serif, sans-serif;
431
+ position: sticky;
432
+ top: 0;
433
+ z-index: 2;
434
+ background-color: ${colors.darkGray[600]};
435
+ padding: 0px ${tokens.size[2]};
436
+ font-weight: ${font.weight.medium};
437
+ font-size: ${font.size.xs};
438
+ min-height: ${tokens.size[8]};
439
+ line-height: ${font.lineHeight.xs};
440
+ text-align: left;
441
+ display: flex;
442
+ align-items: center;
443
+ `,
444
+ maskedBadge: css`
445
+ background: ${colors.yellow[900]}${alpha[70]};
446
+ color: ${colors.yellow[300]};
447
+ display: inline-block;
448
+ padding: ${tokens.size[0]} ${tokens.size[2.5]};
449
+ border-radius: ${border.radius.full};
450
+ font-size: ${font.size.xs};
451
+ font-weight: ${font.weight.normal};
452
+ border: 1px solid ${colors.yellow[300]};
453
+ `,
454
+ maskedLocation: css`
455
+ color: ${colors.yellow[300]};
456
+ `,
457
+ detailsContent: css`
458
+ padding: ${tokens.size[1.5]} ${tokens.size[2]};
459
+ display: flex;
460
+ align-items: center;
461
+ justify-content: space-between;
462
+ font-size: ${font.size.xs};
463
+ `,
464
+ routeMatchesToggle: css`
465
+ display: flex;
466
+ align-items: center;
467
+ border: 1px solid ${colors.gray[500]};
468
+ border-radius: ${border.radius.sm};
469
+ overflow: hidden;
470
+ `,
471
+ routeMatchesToggleBtn: (active, showBorder) => {
472
+ const classes = [css`
473
+ appearance: none;
474
+ border: none;
475
+ font-size: 12px;
476
+ padding: 4px 8px;
477
+ background: transparent;
478
+ cursor: pointer;
479
+ font-family: ${fontFamily.sans};
480
+ font-weight: ${font.weight.medium};
481
+ `];
482
+ if (active) {
483
+ const activeStyles = css`
484
+ background: ${colors.darkGray[400]};
485
+ color: ${colors.gray[300]};
486
+ `;
487
+ classes.push(activeStyles);
488
+ } else {
489
+ const inactiveStyles = css`
490
+ color: ${colors.gray[500]};
491
+ background: ${colors.darkGray[800]}${alpha[20]};
492
+ `;
493
+ classes.push(inactiveStyles);
494
+ }
495
+ if (showBorder) classes.push(css`
496
+ border-right: 1px solid ${tokens.colors.gray[500]};
497
+ `);
498
+ return classes;
499
+ },
500
+ detailsHeaderInfo: css`
501
+ flex: 1;
502
+ justify-content: flex-end;
503
+ display: flex;
504
+ align-items: center;
505
+ font-weight: ${font.weight.normal};
506
+ color: ${colors.gray[400]};
507
+ `,
508
+ matchRow: (active) => {
509
+ const classes = [css`
510
+ display: flex;
511
+ border-bottom: 1px solid ${colors.darkGray[400]};
512
+ cursor: pointer;
513
+ align-items: center;
514
+ padding: ${size[1]} ${size[2]};
515
+ gap: ${size[2]};
516
+ font-size: ${fontSize.xs};
517
+ color: ${colors.gray[300]};
518
+ `];
519
+ if (active) {
520
+ const activeStyles = css`
521
+ background: ${colors.darkGray[500]};
522
+ `;
523
+ classes.push(activeStyles);
524
+ }
525
+ return classes;
526
+ },
527
+ matchIndicator: (color) => {
528
+ const classes = [css`
529
+ flex: 0 0 auto;
530
+ width: ${size[3]};
531
+ height: ${size[3]};
532
+ background: ${colors[color][900]};
533
+ border: 1px solid ${colors[color][500]};
534
+ border-radius: ${border.radius.full};
535
+ transition: all 0.25s ease-out;
536
+ box-sizing: border-box;
537
+ `];
538
+ if (color === "gray") {
539
+ const grayStyles = css`
540
+ background: ${colors.gray[700]};
541
+ border-color: ${colors.gray[400]};
542
+ `;
543
+ classes.push(grayStyles);
544
+ }
545
+ return classes;
546
+ },
547
+ matchID: css`
548
+ flex: 1;
549
+ line-height: ${lineHeight["xs"]};
550
+ `,
551
+ ageTicker: (showWarning) => {
552
+ const classes = [css`
553
+ display: flex;
554
+ gap: ${size[1]};
555
+ font-size: ${fontSize.xs};
556
+ color: ${colors.gray[400]};
557
+ font-variant-numeric: tabular-nums;
558
+ line-height: ${lineHeight["xs"]};
559
+ `];
560
+ if (showWarning) {
561
+ const warningStyles = css`
562
+ color: ${colors.yellow[400]};
563
+ `;
564
+ classes.push(warningStyles);
565
+ }
566
+ return classes;
567
+ },
568
+ secondContainer: css`
569
+ flex: 1 1 500px;
570
+ min-height: 40%;
571
+ max-height: 100%;
572
+ overflow: auto;
573
+ border-right: 1px solid ${colors.gray[700]};
574
+ display: flex;
575
+ flex-direction: column;
576
+ `,
577
+ thirdContainer: css`
578
+ flex: 1 1 500px;
579
+ overflow: auto;
580
+ display: flex;
581
+ flex-direction: column;
582
+ height: 100%;
583
+ border-right: 1px solid ${colors.gray[700]};
584
+
585
+ @media (max-width: 700px) {
586
+ border-top: 2px solid ${colors.gray[700]};
587
+ }
588
+ `,
589
+ fourthContainer: css`
590
+ flex: 1 1 500px;
591
+ min-height: 40%;
592
+ max-height: 100%;
593
+ overflow: auto;
594
+ display: flex;
595
+ flex-direction: column;
596
+ `,
597
+ routesContainer: css`
598
+ overflow-x: auto;
599
+ overflow-y: visible;
600
+ `,
601
+ routesRowContainer: (active, isMatch) => {
602
+ const classes = [css`
603
+ display: flex;
604
+ border-bottom: 1px solid ${colors.darkGray[400]};
605
+ align-items: center;
606
+ padding: ${size[1]} ${size[2]};
607
+ gap: ${size[2]};
608
+ font-size: ${fontSize.xs};
609
+ color: ${colors.gray[300]};
610
+ cursor: ${isMatch ? "pointer" : "default"};
611
+ line-height: ${lineHeight["xs"]};
612
+ `];
613
+ if (active) {
614
+ const activeStyles = css`
615
+ background: ${colors.darkGray[500]};
616
+ `;
617
+ classes.push(activeStyles);
618
+ }
619
+ return classes;
620
+ },
621
+ routesRow: (isMatch) => {
622
+ const classes = [css`
623
+ flex: 1 0 auto;
624
+ display: flex;
625
+ justify-content: space-between;
626
+ align-items: center;
627
+ font-size: ${fontSize.xs};
628
+ line-height: ${lineHeight["xs"]};
629
+ `];
630
+ if (!isMatch) {
631
+ const matchStyles = css`
632
+ color: ${colors.gray[400]};
633
+ `;
634
+ classes.push(matchStyles);
635
+ }
636
+ return classes;
637
+ },
638
+ routesRowInner: css`
639
+ display: 'flex';
640
+ align-items: 'center';
641
+ flex-grow: 1;
642
+ min-width: 0;
643
+ `,
644
+ routeParamInfo: css`
645
+ color: ${colors.gray[400]};
646
+ font-size: ${fontSize.xs};
647
+ line-height: ${lineHeight["xs"]};
648
+ `,
649
+ nestedRouteRow: (isRoot) => {
650
+ return css`
651
+ margin-left: ${isRoot ? 0 : size[3.5]};
652
+ border-left: ${isRoot ? "" : `solid 1px ${colors.gray[700]}`};
653
+ `;
654
+ },
655
+ code: css`
656
+ font-size: ${fontSize.xs};
657
+ line-height: ${lineHeight["xs"]};
658
+ white-space: nowrap;
659
+ overflow: hidden;
660
+ text-overflow: ellipsis;
661
+ `,
662
+ matchesContainer: css`
663
+ flex: 1 1 auto;
664
+ overflow-y: auto;
665
+ `,
666
+ cachedMatchesContainer: css`
667
+ flex: 1 1 auto;
668
+ overflow-y: auto;
669
+ max-height: 50%;
670
+ `,
671
+ historyContainer: css`
672
+ display: flex;
673
+ flex: 1 1 auto;
674
+ overflow-y: auto;
675
+ max-height: 50%;
676
+ `,
677
+ historyOverflowContainer: css`
678
+ padding: ${size[1]} ${size[2]};
679
+ font-size: ${tokens.font.size.xs};
680
+ `,
681
+ maskedBadgeContainer: css`
682
+ flex: 1;
683
+ justify-content: flex-end;
684
+ display: flex;
685
+ `,
686
+ matchDetails: css`
687
+ display: flex;
688
+ flex-direction: column;
689
+ padding: ${tokens.size[2]};
690
+ font-size: ${tokens.font.size.xs};
691
+ color: ${tokens.colors.gray[300]};
692
+ line-height: ${tokens.font.lineHeight.sm};
693
+ `,
694
+ matchStatus: (status, isFetching) => {
695
+ const color = isFetching && status === "success" ? isFetching === "beforeLoad" ? "purple" : "blue" : {
696
+ pending: "yellow",
697
+ success: "green",
698
+ error: "red",
699
+ notFound: "purple",
700
+ redirected: "gray"
701
+ }[status];
702
+ return css`
703
+ display: flex;
704
+ justify-content: center;
705
+ align-items: center;
706
+ height: 40px;
707
+ border-radius: ${tokens.border.radius.sm};
708
+ font-weight: ${tokens.font.weight.normal};
709
+ background-color: ${tokens.colors[color][900]}${tokens.alpha[90]};
710
+ color: ${tokens.colors[color][300]};
711
+ border: 1px solid ${tokens.colors[color][600]};
712
+ margin-bottom: ${tokens.size[2]};
713
+ transition: all 0.25s ease-out;
714
+ `;
715
+ },
716
+ matchDetailsInfo: css`
717
+ display: flex;
718
+ justify-content: flex-end;
719
+ flex: 1;
720
+ `,
721
+ matchDetailsInfoLabel: css`
722
+ display: flex;
723
+ `,
724
+ mainCloseBtn: css`
725
+ background: ${colors.darkGray[700]};
726
+ padding: ${size[1]} ${size[2]} ${size[1]} ${size[1.5]};
727
+ border-radius: ${border.radius.md};
728
+ position: fixed;
729
+ z-index: 99999;
730
+ display: inline-flex;
731
+ width: fit-content;
732
+ cursor: pointer;
733
+ appearance: none;
734
+ border: 0;
735
+ gap: 8px;
736
+ align-items: center;
737
+ border: 1px solid ${colors.gray[500]};
738
+ font-size: ${font.size.xs};
739
+ cursor: pointer;
740
+ transition: all 0.25s ease-out;
741
+
742
+ &:hover {
743
+ background: ${colors.darkGray[500]};
744
+ }
745
+ `,
746
+ mainCloseBtnPosition: (position) => {
747
+ return css`
748
+ ${position === "top-left" ? `top: ${size[2]}; left: ${size[2]};` : ""}
749
+ ${position === "top-right" ? `top: ${size[2]}; right: ${size[2]};` : ""}
750
+ ${position === "bottom-left" ? `bottom: ${size[2]}; left: ${size[2]};` : ""}
751
+ ${position === "bottom-right" ? `bottom: ${size[2]}; right: ${size[2]};` : ""}
752
+ `;
753
+ },
754
+ mainCloseBtnAnimation: (isOpen) => {
755
+ if (!isOpen) return css`
756
+ opacity: 1;
757
+ pointer-events: auto;
758
+ visibility: visible;
759
+ `;
760
+ return css`
761
+ opacity: 0;
762
+ pointer-events: none;
763
+ visibility: hidden;
764
+ `;
765
+ },
766
+ routerLogoCloseButton: css`
767
+ font-weight: ${font.weight.semibold};
768
+ font-size: ${font.size.xs};
769
+ background: linear-gradient(to right, #98f30c, #00f4a3);
770
+ background-clip: text;
771
+ -webkit-background-clip: text;
772
+ line-height: 1;
773
+ -webkit-text-fill-color: transparent;
774
+ white-space: nowrap;
775
+ `,
776
+ mainCloseBtnDivider: css`
777
+ width: 1px;
778
+ background: ${tokens.colors.gray[600]};
779
+ height: 100%;
780
+ border-radius: 999999px;
781
+ color: transparent;
782
+ `,
783
+ mainCloseBtnIconContainer: css`
784
+ position: relative;
785
+ width: ${size[5]};
786
+ height: ${size[5]};
787
+ background: pink;
788
+ border-radius: 999999px;
789
+ overflow: hidden;
790
+ `,
791
+ mainCloseBtnIconOuter: css`
792
+ width: ${size[5]};
793
+ height: ${size[5]};
794
+ position: absolute;
795
+ top: 50%;
796
+ left: 50%;
797
+ transform: translate(-50%, -50%);
798
+ filter: blur(3px) saturate(1.8) contrast(2);
799
+ `,
800
+ mainCloseBtnIconInner: css`
801
+ width: ${size[4]};
802
+ height: ${size[4]};
803
+ position: absolute;
804
+ top: 50%;
805
+ left: 50%;
806
+ transform: translate(-50%, -50%);
807
+ `,
808
+ panelCloseBtn: css`
809
+ position: absolute;
810
+ cursor: pointer;
811
+ z-index: 100001;
812
+ display: flex;
813
+ align-items: center;
814
+ justify-content: center;
815
+ outline: none;
816
+ background-color: ${colors.darkGray[700]};
817
+ &:hover {
818
+ background-color: ${colors.darkGray[500]};
819
+ }
820
+
821
+ top: 0;
822
+ right: ${size[2]};
823
+ transform: translate(0, -100%);
824
+ border-right: ${colors.darkGray[300]} 1px solid;
825
+ border-left: ${colors.darkGray[300]} 1px solid;
826
+ border-top: ${colors.darkGray[300]} 1px solid;
827
+ border-bottom: none;
828
+ border-radius: ${border.radius.sm} ${border.radius.sm} 0px 0px;
829
+ padding: ${size[1]} ${size[1.5]} ${size[.5]} ${size[1.5]};
830
+
831
+ &::after {
832
+ content: ' ';
833
+ position: absolute;
834
+ top: 100%;
835
+ left: -${size[2.5]};
836
+ height: ${size[1.5]};
837
+ width: calc(100% + ${size[5]});
838
+ }
839
+ `,
840
+ panelCloseBtnIcon: css`
841
+ color: ${colors.gray[400]};
842
+ width: ${size[2]};
843
+ height: ${size[2]};
844
+ `,
845
+ navigateButton: css`
846
+ background: none;
847
+ border: none;
848
+ padding: 0 0 0 4px;
849
+ margin: 0;
850
+ color: ${colors.gray[400]};
851
+ font-size: ${fontSize.md};
852
+ cursor: pointer;
853
+ line-height: 1;
854
+ vertical-align: middle;
855
+ margin-right: 0.5ch;
856
+ flex-shrink: 0;
857
+ &:hover {
858
+ color: ${colors.blue[300]};
859
+ }
860
+ `
861
+ };
862
+ };
863
+ function useStyles$1() {
864
+ const [_styles] = createSignal(stylesFactory$1(useContext(ShadowDomTargetContext)));
865
+ return _styles;
866
+ }
867
+ //#endregion
868
+ //#region src/useLocalStorage.ts
869
+ var getItem = (key) => {
870
+ try {
871
+ const itemValue = localStorage.getItem(key);
872
+ if (typeof itemValue === "string") return JSON.parse(itemValue);
873
+ return;
874
+ } catch {
875
+ return;
876
+ }
877
+ };
878
+ function useLocalStorage(key, defaultValue) {
879
+ const [value, setValue] = createSignal();
880
+ createEffect(() => {
881
+ const initialValue = getItem(key);
882
+ if (typeof initialValue === "undefined" || initialValue === null) setValue(typeof defaultValue === "function" ? defaultValue() : defaultValue);
883
+ else setValue(initialValue);
884
+ });
885
+ const setter = (updater) => {
886
+ setValue((old) => {
887
+ let newVal = updater;
888
+ if (typeof updater == "function") newVal = updater(old);
889
+ try {
890
+ localStorage.setItem(key, JSON.stringify(newVal));
891
+ } catch {}
892
+ return newVal;
893
+ });
894
+ };
895
+ return [value, setter];
896
+ }
897
+ //#endregion
898
+ //#region src/utils.tsx
899
+ var isServer = typeof window === "undefined";
900
+ function getStatusColor(match) {
901
+ return match.isFetching && match.status === "success" ? match.isFetching === "beforeLoad" ? "purple" : "blue" : {
902
+ pending: "yellow",
903
+ success: "green",
904
+ error: "red",
905
+ notFound: "purple",
906
+ redirected: "gray"
907
+ }[match.status];
908
+ }
909
+ function getRouteStatusColor(matches, route) {
910
+ const found = matches.find((d) => d.routeId === route.id);
911
+ if (!found) return "gray";
912
+ return getStatusColor(found);
913
+ }
914
+ function useIsMounted() {
915
+ const [isMounted, setIsMounted] = createSignal(false);
916
+ (isServer ? createEffect : createRenderEffect)(() => {
917
+ setIsMounted(true);
918
+ });
919
+ return isMounted;
920
+ }
921
+ /**
922
+ * Displays a string regardless the type of the data
923
+ * @param {unknown} value Value to be stringified
924
+ */
925
+ var displayValue = (value) => {
926
+ const name = Object.getOwnPropertyNames(Object(value));
927
+ const newValue = typeof value === "bigint" ? `${value.toString()}n` : value;
928
+ try {
929
+ return JSON.stringify(newValue, name);
930
+ } catch (e) {
931
+ return `unable to stringify`;
932
+ }
933
+ };
934
+ function multiSortBy(arr, accessors = [(d) => d]) {
935
+ return arr.map((d, i) => [d, i]).sort(([a, ai], [b, bi]) => {
936
+ for (const accessor of accessors) {
937
+ const ao = accessor(a);
938
+ const bo = accessor(b);
939
+ if (typeof ao === "undefined") {
940
+ if (typeof bo === "undefined") continue;
941
+ return 1;
942
+ }
943
+ if (ao === bo) continue;
944
+ return ao > bo ? 1 : -1;
945
+ }
946
+ return ai - bi;
947
+ }).map(([d]) => d);
948
+ }
949
+ //#endregion
950
+ //#region src/Explorer.tsx
951
+ var _tmpl$$3 = /* @__PURE__ */ template(`<span><svg xmlns=http://www.w3.org/2000/svg width=12 height=12 fill=none viewBox="0 0 24 24"><path stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M9 18l6-6-6-6">`), _tmpl$2$1 = /* @__PURE__ */ template(`<div>`), _tmpl$3$1 = /* @__PURE__ */ template(`<button><span> `), _tmpl$4$1 = /* @__PURE__ */ template(`<div><div><button> [<!> ... <!>]`), _tmpl$5$1 = /* @__PURE__ */ template(`<button><span></span> 🔄 `), _tmpl$6$1 = /* @__PURE__ */ template(`<span>:`), _tmpl$7$1 = /* @__PURE__ */ template(`<span>`);
952
+ var Expander = ({ expanded, style = {} }) => {
953
+ const styles = useStyles();
954
+ return (() => {
955
+ var _el$ = _tmpl$$3(), _el$2 = _el$.firstChild;
956
+ createRenderEffect((_p$) => {
957
+ var _v$ = styles().expander, _v$2 = clsx(styles().expanderIcon(expanded));
958
+ _v$ !== _p$.e && className(_el$, _p$.e = _v$);
959
+ _v$2 !== _p$.t && setAttribute(_el$2, "class", _p$.t = _v$2);
960
+ return _p$;
961
+ }, {
962
+ e: void 0,
963
+ t: void 0
964
+ });
965
+ return _el$;
966
+ })();
967
+ };
968
+ /**
969
+ * Chunk elements in the array by size
970
+ *
971
+ * when the array cannot be chunked evenly by size, the last chunk will be
972
+ * filled with the remaining elements
973
+ *
974
+ * @example
975
+ * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]
976
+ */
977
+ function chunkArray(array, size) {
978
+ if (size < 1) return [];
979
+ let i = 0;
980
+ const result = [];
981
+ while (i < array.length) {
982
+ result.push(array.slice(i, i + size));
983
+ i = i + size;
984
+ }
985
+ return result;
986
+ }
987
+ function isIterable(x) {
988
+ return Symbol.iterator in x;
989
+ }
990
+ function Explorer({ value, defaultExpanded, pageSize = 100, filterSubEntries, ...rest }) {
991
+ const [expanded, setExpanded] = createSignal(Boolean(defaultExpanded));
992
+ const toggleExpanded = () => setExpanded((old) => !old);
993
+ const type = createMemo(() => typeof value());
994
+ const subEntries = createMemo(() => {
995
+ let entries = [];
996
+ const makeProperty = (sub) => {
997
+ const subDefaultExpanded = defaultExpanded === true ? { [sub.label]: true } : defaultExpanded?.[sub.label];
998
+ return {
999
+ ...sub,
1000
+ value: () => sub.value,
1001
+ defaultExpanded: subDefaultExpanded
1002
+ };
1003
+ };
1004
+ if (Array.isArray(value())) entries = value().map((d, i) => makeProperty({
1005
+ label: i.toString(),
1006
+ value: d
1007
+ }));
1008
+ else if (value() !== null && typeof value() === "object" && isIterable(value()) && typeof value()[Symbol.iterator] === "function") entries = Array.from(value(), (val, i) => makeProperty({
1009
+ label: i.toString(),
1010
+ value: val
1011
+ }));
1012
+ else if (typeof value() === "object" && value() !== null) entries = Object.entries(value()).map(([key, val]) => makeProperty({
1013
+ label: key,
1014
+ value: val
1015
+ }));
1016
+ return filterSubEntries ? filterSubEntries(entries) : entries;
1017
+ });
1018
+ const subEntryPages = createMemo(() => chunkArray(subEntries(), pageSize));
1019
+ const [expandedPages, setExpandedPages] = createSignal([]);
1020
+ const [valueSnapshot, setValueSnapshot] = createSignal(void 0);
1021
+ const styles = useStyles();
1022
+ const refreshValueSnapshot = () => {
1023
+ setValueSnapshot(value()());
1024
+ };
1025
+ const handleEntry = (entry) => createComponent(Explorer, mergeProps({
1026
+ value,
1027
+ filterSubEntries
1028
+ }, rest, entry));
1029
+ return (() => {
1030
+ var _el$3 = _tmpl$2$1();
1031
+ insert(_el$3, (() => {
1032
+ var _c$ = memo(() => !!subEntryPages().length);
1033
+ return () => _c$() ? [(() => {
1034
+ var _el$4 = _tmpl$3$1(), _el$5 = _el$4.firstChild, _el$6 = _el$5.firstChild;
1035
+ _el$4.$$click = () => toggleExpanded();
1036
+ insert(_el$4, createComponent(Expander, { get expanded() {
1037
+ return expanded() ?? false;
1038
+ } }), _el$5);
1039
+ insert(_el$4, () => rest.label, _el$5);
1040
+ insert(_el$5, () => String(type).toLowerCase() === "iterable" ? "(Iterable) " : "", _el$6);
1041
+ insert(_el$5, () => subEntries().length, _el$6);
1042
+ insert(_el$5, () => subEntries().length > 1 ? `items` : `item`, null);
1043
+ createRenderEffect((_p$) => {
1044
+ var _v$3 = styles().expandButton, _v$4 = styles().info;
1045
+ _v$3 !== _p$.e && className(_el$4, _p$.e = _v$3);
1046
+ _v$4 !== _p$.t && className(_el$5, _p$.t = _v$4);
1047
+ return _p$;
1048
+ }, {
1049
+ e: void 0,
1050
+ t: void 0
1051
+ });
1052
+ return _el$4;
1053
+ })(), memo(() => memo(() => !!(expanded() ?? false))() ? memo(() => subEntryPages().length === 1)() ? (() => {
1054
+ var _el$7 = _tmpl$2$1();
1055
+ insert(_el$7, () => subEntries().map((entry, index) => handleEntry(entry)));
1056
+ createRenderEffect(() => className(_el$7, styles().subEntries));
1057
+ return _el$7;
1058
+ })() : (() => {
1059
+ var _el$8 = _tmpl$2$1();
1060
+ insert(_el$8, () => subEntryPages().map((entries, index) => {
1061
+ return (() => {
1062
+ var _el$9 = _tmpl$4$1(), _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$15 = _el$10.nextSibling, _el$16 = _el$15.nextSibling.nextSibling;
1063
+ _el$16.nextSibling;
1064
+ _el$1.$$click = () => setExpandedPages((old) => old.includes(index) ? old.filter((d) => d !== index) : [...old, index]);
1065
+ insert(_el$1, createComponent(Expander, { get expanded() {
1066
+ return expandedPages().includes(index);
1067
+ } }), _el$10);
1068
+ insert(_el$1, index * pageSize, _el$15);
1069
+ insert(_el$1, index * pageSize + pageSize - 1, _el$16);
1070
+ insert(_el$0, (() => {
1071
+ var _c$2 = memo(() => !!expandedPages().includes(index));
1072
+ return () => _c$2() ? (() => {
1073
+ var _el$17 = _tmpl$2$1();
1074
+ insert(_el$17, () => entries.map((entry) => handleEntry(entry)));
1075
+ createRenderEffect(() => className(_el$17, styles().subEntries));
1076
+ return _el$17;
1077
+ })() : null;
1078
+ })(), null);
1079
+ createRenderEffect((_p$) => {
1080
+ var _v$5 = styles().entry, _v$6 = clsx(styles().labelButton, "labelButton");
1081
+ _v$5 !== _p$.e && className(_el$0, _p$.e = _v$5);
1082
+ _v$6 !== _p$.t && className(_el$1, _p$.t = _v$6);
1083
+ return _p$;
1084
+ }, {
1085
+ e: void 0,
1086
+ t: void 0
1087
+ });
1088
+ return _el$9;
1089
+ })();
1090
+ }));
1091
+ createRenderEffect(() => className(_el$8, styles().subEntries));
1092
+ return _el$8;
1093
+ })() : null)] : memo(() => type() === "function")() ? createComponent(Explorer, {
1094
+ get label() {
1095
+ return (() => {
1096
+ var _el$18 = _tmpl$5$1(), _el$19 = _el$18.firstChild;
1097
+ _el$18.$$click = refreshValueSnapshot;
1098
+ insert(_el$19, () => rest.label);
1099
+ createRenderEffect(() => className(_el$18, styles().refreshValueBtn));
1100
+ return _el$18;
1101
+ })();
1102
+ },
1103
+ value: valueSnapshot,
1104
+ defaultExpanded: {}
1105
+ }) : [
1106
+ (() => {
1107
+ var _el$20 = _tmpl$6$1(), _el$21 = _el$20.firstChild;
1108
+ insert(_el$20, () => rest.label, _el$21);
1109
+ return _el$20;
1110
+ })(),
1111
+ " ",
1112
+ (() => {
1113
+ var _el$22 = _tmpl$7$1();
1114
+ insert(_el$22, () => displayValue(value()));
1115
+ createRenderEffect(() => className(_el$22, styles().value));
1116
+ return _el$22;
1117
+ })()
1118
+ ];
1119
+ })());
1120
+ createRenderEffect(() => className(_el$3, styles().entry));
1121
+ return _el$3;
1122
+ })();
1123
+ }
1124
+ var stylesFactory = (shadowDOMTarget) => {
1125
+ const { colors, font, size, alpha, shadow, border } = tokens;
1126
+ const { fontFamily, lineHeight, size: fontSize } = font;
1127
+ const css = shadowDOMTarget ? goober.css.bind({ target: shadowDOMTarget }) : goober.css;
1128
+ return {
1129
+ entry: css`
1130
+ font-family: ${fontFamily.mono};
1131
+ font-size: ${fontSize.xs};
1132
+ line-height: ${lineHeight.sm};
1133
+ outline: none;
1134
+ word-break: break-word;
1135
+ `,
1136
+ labelButton: css`
1137
+ cursor: pointer;
1138
+ color: inherit;
1139
+ font: inherit;
1140
+ outline: inherit;
1141
+ background: transparent;
1142
+ border: none;
1143
+ padding: 0;
1144
+ `,
1145
+ expander: css`
1146
+ display: inline-flex;
1147
+ align-items: center;
1148
+ justify-content: center;
1149
+ width: ${size[3]};
1150
+ height: ${size[3]};
1151
+ padding-left: 3px;
1152
+ box-sizing: content-box;
1153
+ `,
1154
+ expanderIcon: (expanded) => {
1155
+ if (expanded) return css`
1156
+ transform: rotate(90deg);
1157
+ transition: transform 0.1s ease;
1158
+ `;
1159
+ return css`
1160
+ transform: rotate(0deg);
1161
+ transition: transform 0.1s ease;
1162
+ `;
1163
+ },
1164
+ expandButton: css`
1165
+ display: flex;
1166
+ gap: ${size[1]};
1167
+ align-items: center;
1168
+ cursor: pointer;
1169
+ color: inherit;
1170
+ font: inherit;
1171
+ outline: inherit;
1172
+ background: transparent;
1173
+ border: none;
1174
+ padding: 0;
1175
+ `,
1176
+ value: css`
1177
+ color: ${colors.purple[400]};
1178
+ `,
1179
+ subEntries: css`
1180
+ margin-left: ${size[2]};
1181
+ padding-left: ${size[2]};
1182
+ border-left: 2px solid ${colors.darkGray[400]};
1183
+ `,
1184
+ info: css`
1185
+ color: ${colors.gray[500]};
1186
+ font-size: ${fontSize["2xs"]};
1187
+ padding-left: ${size[1]};
1188
+ `,
1189
+ refreshValueBtn: css`
1190
+ appearance: none;
1191
+ border: 0;
1192
+ cursor: pointer;
1193
+ background: transparent;
1194
+ color: inherit;
1195
+ padding: 0;
1196
+ font-family: ${fontFamily.mono};
1197
+ font-size: ${fontSize.xs};
1198
+ `
1199
+ };
1200
+ };
1201
+ function useStyles() {
1202
+ const [_styles] = createSignal(stylesFactory(useContext(ShadowDomTargetContext)));
1203
+ return _styles;
1204
+ }
1205
+ delegateEvents(["click"]);
1206
+ //#endregion
1207
+ //#region src/AgeTicker.tsx
1208
+ var _tmpl$$2 = /* @__PURE__ */ template(`<div><div></div><div>/</div><div></div><div>/</div><div>`);
1209
+ function formatTime(ms) {
1210
+ const units = [
1211
+ "s",
1212
+ "min",
1213
+ "h",
1214
+ "d"
1215
+ ];
1216
+ const values = [
1217
+ ms / 1e3,
1218
+ ms / 6e4,
1219
+ ms / 36e5,
1220
+ ms / 864e5
1221
+ ];
1222
+ let chosenUnitIndex = 0;
1223
+ for (let i = 1; i < values.length; i++) {
1224
+ if (values[i] < 1) break;
1225
+ chosenUnitIndex = i;
1226
+ }
1227
+ return new Intl.NumberFormat(navigator.language, {
1228
+ compactDisplay: "short",
1229
+ notation: "compact",
1230
+ maximumFractionDigits: 0
1231
+ }).format(values[chosenUnitIndex]) + units[chosenUnitIndex];
1232
+ }
1233
+ function AgeTicker({ match, router }) {
1234
+ const styles = useStyles$1();
1235
+ if (!match) return null;
1236
+ const route = router().looseRoutesById[match.routeId];
1237
+ if (!route.options.loader) return null;
1238
+ const age = Date.now() - match.updatedAt;
1239
+ const staleTime = route.options.staleTime ?? router().options.defaultStaleTime ?? 0;
1240
+ const gcTime = route.options.gcTime ?? router().options.defaultGcTime ?? 1800 * 1e3;
1241
+ return (() => {
1242
+ var _el$ = _tmpl$$2(), _el$2 = _el$.firstChild, _el$4 = _el$2.nextSibling.nextSibling, _el$6 = _el$4.nextSibling.nextSibling;
1243
+ insert(_el$2, () => formatTime(age));
1244
+ insert(_el$4, () => formatTime(staleTime));
1245
+ insert(_el$6, () => formatTime(gcTime));
1246
+ createRenderEffect(() => className(_el$, clsx(styles().ageTicker(age > staleTime))));
1247
+ return _el$;
1248
+ })();
1249
+ }
1250
+ //#endregion
1251
+ //#region src/NavigateButton.tsx
1252
+ var _tmpl$$1 = /* @__PURE__ */ template(`<button type=button>➔`);
1253
+ function NavigateButton({ to, params, search, router }) {
1254
+ const styles = useStyles$1();
1255
+ return (() => {
1256
+ var _el$ = _tmpl$$1();
1257
+ _el$.$$click = (e) => {
1258
+ e.stopPropagation();
1259
+ router().navigate({
1260
+ to,
1261
+ params,
1262
+ search
1263
+ });
1264
+ };
1265
+ setAttribute(_el$, "title", `Navigate to ${to}`);
1266
+ createRenderEffect(() => className(_el$, styles().navigateButton));
1267
+ return _el$;
1268
+ })();
1269
+ }
1270
+ delegateEvents(["click"]);
1271
+ //#endregion
1272
+ //#region src/BaseTanStackRouterDevtoolsPanel.tsx
1273
+ var _tmpl$ = /* @__PURE__ */ template(`<button><div>TANSTACK</div><div>TanStack Router v1`), _tmpl$2 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;width:100%><div style=flex-grow:1;min-width:0>`), _tmpl$3 = /* @__PURE__ */ template(`<code> `), _tmpl$4 = /* @__PURE__ */ template(`<code>`), _tmpl$5 = /* @__PURE__ */ template(`<div><div role=button><div>`), _tmpl$6 = /* @__PURE__ */ template(`<div>`), _tmpl$7 = /* @__PURE__ */ template(`<div><ul>`), _tmpl$8 = /* @__PURE__ */ template(`<div><button><svg xmlns=http://www.w3.org/2000/svg width=10 height=6 fill=none viewBox="0 0 10 6"><path stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=1.667 d="M1 1l4 4 4-4"></path></svg></button><div><div></div><div><div></div></div></div><div><div><div><span>Pathname</span></div><div><code></code></div><div><div><button type=button>Routes</button><button type=button>Matches</button><button type=button>History</button></div><div><div>age / staleTime / gcTime</div></div></div><div>`), _tmpl$9 = /* @__PURE__ */ template(`<div><span>masked`), _tmpl$0 = /* @__PURE__ */ template(`<div role=button><div>`), _tmpl$1 = /* @__PURE__ */ template(`<li><div>`), _tmpl$10 = /* @__PURE__ */ template(`<li>This panel displays the most recent 15 navigations.`), _tmpl$11 = /* @__PURE__ */ template(`<div><div><div>Cached Matches</div><div>age / staleTime / gcTime</div></div><div>`), _tmpl$12 = /* @__PURE__ */ template(`<div><div>Match Details</div><div><div><div><div></div></div><div><div>ID:</div><div><code></code></div></div><div><div>State:</div><div></div></div><div><div>Last Updated:</div><div></div></div></div></div><div>Explorer</div><div>`), _tmpl$13 = /* @__PURE__ */ template(`<div>Loader Data`), _tmpl$14 = /* @__PURE__ */ template(`<div><div><span>Search Params</span></div><div>`), _tmpl$15 = /* @__PURE__ */ template(`<span style=margin-left:0.5rem>`), _tmpl$16 = /* @__PURE__ */ template(`<button type=button aria-label="Copy value to clipboard"style=cursor:pointer>`);
1274
+ var HISTORY_LIMIT = 15;
1275
+ function Logo(props) {
1276
+ const { className: className$1, ...rest } = props;
1277
+ const styles = useStyles$1();
1278
+ return (() => {
1279
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
1280
+ spread(_el$, mergeProps(rest, { get ["class"]() {
1281
+ return clsx(styles().logo, className$1 ? className$1() : "");
1282
+ } }), false, true);
1283
+ createRenderEffect((_p$) => {
1284
+ var _v$ = styles().tanstackLogo, _v$2 = styles().routerLogo;
1285
+ _v$ !== _p$.e && className(_el$2, _p$.e = _v$);
1286
+ _v$2 !== _p$.t && className(_el$3, _p$.t = _v$2);
1287
+ return _p$;
1288
+ }, {
1289
+ e: void 0,
1290
+ t: void 0
1291
+ });
1292
+ return _el$;
1293
+ })();
1294
+ }
1295
+ function NavigateLink(props) {
1296
+ return (() => {
1297
+ var _el$4 = _tmpl$2(), _el$5 = _el$4.firstChild;
1298
+ insert(_el$4, () => props.left, _el$5);
1299
+ insert(_el$5, () => props.children);
1300
+ insert(_el$4, () => props.right, null);
1301
+ createRenderEffect(() => className(_el$4, props.class));
1302
+ return _el$4;
1303
+ })();
1304
+ }
1305
+ function RouteComp({ routerState, router, route, isRoot, activeId, setActiveId }) {
1306
+ const styles = useStyles$1();
1307
+ const matches = createMemo(() => routerState().pendingMatches || routerState().matches);
1308
+ const match = createMemo(() => routerState().matches.find((d) => d.routeId === route.id));
1309
+ const param = createMemo(() => {
1310
+ try {
1311
+ if (match()?.params) {
1312
+ const p = match()?.params;
1313
+ const r = route.path || trimPath(route.id);
1314
+ if (r.startsWith("$")) {
1315
+ const trimmed = r.slice(1);
1316
+ if (p[trimmed]) return `(${p[trimmed]})`;
1317
+ }
1318
+ }
1319
+ return "";
1320
+ } catch (error) {
1321
+ return "";
1322
+ }
1323
+ });
1324
+ const navigationTarget = createMemo(() => {
1325
+ if (isRoot) return void 0;
1326
+ if (!route.path) return void 0;
1327
+ const allParams = Object.assign({}, ...matches().map((m) => m.params));
1328
+ const interpolated = interpolatePath({
1329
+ path: route.fullPath,
1330
+ params: allParams,
1331
+ decoder: router().pathParamsDecoder
1332
+ });
1333
+ return !interpolated.isMissingParams ? interpolated.interpolatedPath : void 0;
1334
+ });
1335
+ return (() => {
1336
+ var _el$6 = _tmpl$5(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild;
1337
+ _el$7.$$click = () => {
1338
+ if (match()) setActiveId(activeId() === route.id ? "" : route.id);
1339
+ };
1340
+ insert(_el$7, createComponent(NavigateLink, {
1341
+ get ["class"]() {
1342
+ return clsx(styles().routesRow(!!match()));
1343
+ },
1344
+ get left() {
1345
+ return createComponent(Show, {
1346
+ get when() {
1347
+ return navigationTarget();
1348
+ },
1349
+ children: (navigate) => createComponent(NavigateButton, {
1350
+ get to() {
1351
+ return navigate();
1352
+ },
1353
+ router
1354
+ })
1355
+ });
1356
+ },
1357
+ get right() {
1358
+ return createComponent(AgeTicker, {
1359
+ get match() {
1360
+ return match();
1361
+ },
1362
+ router
1363
+ });
1364
+ },
1365
+ get children() {
1366
+ return [(() => {
1367
+ var _el$9 = _tmpl$3(), _el$0 = _el$9.firstChild;
1368
+ insert(_el$9, () => isRoot ? rootRouteId : route.path || trimPath(route.id), _el$0);
1369
+ createRenderEffect(() => className(_el$9, styles().code));
1370
+ return _el$9;
1371
+ })(), (() => {
1372
+ var _el$1 = _tmpl$4();
1373
+ insert(_el$1, param);
1374
+ createRenderEffect(() => className(_el$1, styles().routeParamInfo));
1375
+ return _el$1;
1376
+ })()];
1377
+ }
1378
+ }), null);
1379
+ insert(_el$6, (() => {
1380
+ var _c$ = memo(() => !!route.children?.length);
1381
+ return () => _c$() ? (() => {
1382
+ var _el$10 = _tmpl$6();
1383
+ insert(_el$10, () => [...route.children].sort((a, b) => {
1384
+ return a.rank - b.rank;
1385
+ }).map((r) => createComponent(RouteComp, {
1386
+ routerState,
1387
+ router,
1388
+ route: r,
1389
+ activeId,
1390
+ setActiveId
1391
+ })));
1392
+ createRenderEffect(() => className(_el$10, styles().nestedRouteRow(!!isRoot)));
1393
+ return _el$10;
1394
+ })() : null;
1395
+ })(), null);
1396
+ createRenderEffect((_p$) => {
1397
+ var _v$3 = `Open match details for ${route.id}`, _v$4 = clsx(styles().routesRowContainer(route.id === activeId(), !!match())), _v$5 = clsx(styles().matchIndicator(getRouteStatusColor(matches(), route)));
1398
+ _v$3 !== _p$.e && setAttribute(_el$7, "aria-label", _p$.e = _v$3);
1399
+ _v$4 !== _p$.t && className(_el$7, _p$.t = _v$4);
1400
+ _v$5 !== _p$.a && className(_el$8, _p$.a = _v$5);
1401
+ return _p$;
1402
+ }, {
1403
+ e: void 0,
1404
+ t: void 0,
1405
+ a: void 0
1406
+ });
1407
+ return _el$6;
1408
+ })();
1409
+ }
1410
+ var BaseTanStackRouterDevtoolsPanel = function BaseTanStackRouterDevtoolsPanel({ ...props }) {
1411
+ const { isOpen = true, setIsOpen, handleDragStart, router, routerState, shadowDOMTarget, ...panelProps } = props;
1412
+ const { onCloseClick } = useDevtoolsOnClose();
1413
+ const styles = useStyles$1();
1414
+ const { className: className$2, style, ...otherPanelProps } = panelProps;
1415
+ invariant(router, "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.");
1416
+ const [currentTab, setCurrentTab] = useLocalStorage("tanstackRouterDevtoolsActiveTab", "routes");
1417
+ const [activeId, setActiveId] = useLocalStorage("tanstackRouterDevtoolsActiveRouteId", "");
1418
+ const [history, setHistory] = createSignal([]);
1419
+ const [hasHistoryOverflowed, setHasHistoryOverflowed] = createSignal(false);
1420
+ createEffect(() => {
1421
+ const matches = routerState().matches;
1422
+ const currentMatch = matches[matches.length - 1];
1423
+ if (!currentMatch) return;
1424
+ const historyUntracked = untrack(() => history());
1425
+ const lastMatch = historyUntracked[0];
1426
+ const sameLocation = lastMatch && lastMatch.pathname === currentMatch.pathname && JSON.stringify(lastMatch.search ?? {}) === JSON.stringify(currentMatch.search ?? {});
1427
+ if (!lastMatch || !sameLocation) {
1428
+ if (historyUntracked.length >= HISTORY_LIMIT) setHasHistoryOverflowed(true);
1429
+ setHistory((prev) => {
1430
+ const newHistory = [currentMatch, ...prev];
1431
+ newHistory.splice(HISTORY_LIMIT);
1432
+ return newHistory;
1433
+ });
1434
+ }
1435
+ });
1436
+ const activeMatch = createMemo(() => {
1437
+ return [
1438
+ ...routerState().pendingMatches ?? [],
1439
+ ...routerState().matches,
1440
+ ...routerState().cachedMatches
1441
+ ].find((d) => d.routeId === activeId() || d.id === activeId());
1442
+ });
1443
+ const hasSearch = createMemo(() => Object.keys(routerState().location.search).length);
1444
+ const explorerState = createMemo(() => {
1445
+ return {
1446
+ ...router(),
1447
+ state: routerState()
1448
+ };
1449
+ });
1450
+ const routerExplorerValue = createMemo(() => Object.fromEntries(multiSortBy(Object.keys(explorerState()), [
1451
+ "state",
1452
+ "routesById",
1453
+ "routesByPath",
1454
+ "options",
1455
+ "manifest"
1456
+ ].map((d) => (dd) => dd !== d)).map((key) => [key, explorerState()[key]]).filter((d) => typeof d[1] !== "function" && ![
1457
+ "__store",
1458
+ "basepath",
1459
+ "injectedHtml",
1460
+ "subscribers",
1461
+ "latestLoadPromise",
1462
+ "navigateTimeout",
1463
+ "resetNextScroll",
1464
+ "tempLocationKey",
1465
+ "latestLocation",
1466
+ "routeTree",
1467
+ "history"
1468
+ ].includes(d[0]))));
1469
+ const activeMatchLoaderData = createMemo(() => activeMatch()?.loaderData);
1470
+ const activeMatchValue = createMemo(() => activeMatch());
1471
+ const locationSearchValue = createMemo(() => routerState().location.search);
1472
+ return (() => {
1473
+ var _el$11 = _tmpl$8(), _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$14 = _el$12.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling, _el$17 = _el$16.firstChild, _el$18 = _el$14.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$19.firstChild;
1474
+ _el$20.firstChild;
1475
+ var _el$22 = _el$20.nextSibling, _el$23 = _el$22.firstChild, _el$24 = _el$22.nextSibling, _el$25 = _el$24.firstChild, _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling, _el$28 = _el$27.nextSibling, _el$29 = _el$25.nextSibling, _el$30 = _el$24.nextSibling;
1476
+ spread(_el$11, mergeProps({
1477
+ get ["class"]() {
1478
+ return clsx(styles().devtoolsPanel, "TanStackRouterDevtoolsPanel", className$2 ? className$2() : "");
1479
+ },
1480
+ get style() {
1481
+ return style ? style() : "";
1482
+ }
1483
+ }, otherPanelProps), false, true);
1484
+ insert(_el$11, handleDragStart ? (() => {
1485
+ var _el$34 = _tmpl$6();
1486
+ addEventListener(_el$34, "mousedown", handleDragStart, true);
1487
+ createRenderEffect(() => className(_el$34, styles().dragHandle));
1488
+ return _el$34;
1489
+ })() : null, _el$12);
1490
+ _el$12.$$click = (e) => {
1491
+ if (setIsOpen) setIsOpen(false);
1492
+ onCloseClick(e);
1493
+ };
1494
+ insert(_el$15, createComponent(Logo, {
1495
+ "aria-hidden": true,
1496
+ onClick: (e) => {
1497
+ if (setIsOpen) setIsOpen(false);
1498
+ onCloseClick(e);
1499
+ }
1500
+ }));
1501
+ insert(_el$17, createComponent(Explorer, {
1502
+ label: "Router",
1503
+ value: routerExplorerValue,
1504
+ defaultExpanded: {
1505
+ state: {},
1506
+ context: {},
1507
+ options: {}
1508
+ },
1509
+ filterSubEntries: (subEntries) => {
1510
+ return subEntries.filter((d) => typeof d.value() !== "function");
1511
+ }
1512
+ }));
1513
+ insert(_el$20, (() => {
1514
+ var _c$2 = memo(() => !!routerState().location.maskedLocation);
1515
+ return () => _c$2() ? (() => {
1516
+ var _el$35 = _tmpl$9(), _el$36 = _el$35.firstChild;
1517
+ createRenderEffect((_p$) => {
1518
+ var _v$24 = styles().maskedBadgeContainer, _v$25 = styles().maskedBadge;
1519
+ _v$24 !== _p$.e && className(_el$35, _p$.e = _v$24);
1520
+ _v$25 !== _p$.t && className(_el$36, _p$.t = _v$25);
1521
+ return _p$;
1522
+ }, {
1523
+ e: void 0,
1524
+ t: void 0
1525
+ });
1526
+ return _el$35;
1527
+ })() : null;
1528
+ })(), null);
1529
+ insert(_el$23, () => routerState().location.pathname);
1530
+ insert(_el$22, (() => {
1531
+ var _c$3 = memo(() => !!routerState().location.maskedLocation);
1532
+ return () => _c$3() ? (() => {
1533
+ var _el$37 = _tmpl$4();
1534
+ insert(_el$37, () => routerState().location.maskedLocation?.pathname);
1535
+ createRenderEffect(() => className(_el$37, styles().maskedLocation));
1536
+ return _el$37;
1537
+ })() : null;
1538
+ })(), null);
1539
+ _el$26.$$click = () => {
1540
+ setCurrentTab("routes");
1541
+ };
1542
+ _el$27.$$click = () => {
1543
+ setCurrentTab("matches");
1544
+ };
1545
+ _el$28.$$click = () => {
1546
+ setCurrentTab("history");
1547
+ };
1548
+ insert(_el$30, createComponent(Switch, { get children() {
1549
+ return [
1550
+ createComponent(Match, {
1551
+ get when() {
1552
+ return currentTab() === "routes";
1553
+ },
1554
+ get children() {
1555
+ return createComponent(RouteComp, {
1556
+ routerState,
1557
+ router,
1558
+ get route() {
1559
+ return router().routeTree;
1560
+ },
1561
+ isRoot: true,
1562
+ activeId,
1563
+ setActiveId
1564
+ });
1565
+ }
1566
+ }),
1567
+ createComponent(Match, {
1568
+ get when() {
1569
+ return currentTab() === "matches";
1570
+ },
1571
+ get children() {
1572
+ var _el$31 = _tmpl$6();
1573
+ insert(_el$31, () => (routerState().pendingMatches?.length ? routerState().pendingMatches : routerState().matches)?.map((match, _i) => {
1574
+ return (() => {
1575
+ var _el$38 = _tmpl$0(), _el$39 = _el$38.firstChild;
1576
+ _el$38.$$click = () => setActiveId(activeId() === match.id ? "" : match.id);
1577
+ insert(_el$38, createComponent(NavigateLink, {
1578
+ get left() {
1579
+ return createComponent(NavigateButton, {
1580
+ get to() {
1581
+ return match.pathname;
1582
+ },
1583
+ get params() {
1584
+ return match.params;
1585
+ },
1586
+ get search() {
1587
+ return match.search;
1588
+ },
1589
+ router
1590
+ });
1591
+ },
1592
+ get right() {
1593
+ return createComponent(AgeTicker, {
1594
+ match,
1595
+ router
1596
+ });
1597
+ },
1598
+ get children() {
1599
+ var _el$40 = _tmpl$4();
1600
+ insert(_el$40, () => `${match.routeId === rootRouteId ? rootRouteId : match.pathname}`);
1601
+ createRenderEffect(() => className(_el$40, styles().matchID));
1602
+ return _el$40;
1603
+ }
1604
+ }), null);
1605
+ createRenderEffect((_p$) => {
1606
+ var _v$26 = `Open match details for ${match.id}`, _v$27 = clsx(styles().matchRow(match === activeMatch())), _v$28 = clsx(styles().matchIndicator(getStatusColor(match)));
1607
+ _v$26 !== _p$.e && setAttribute(_el$38, "aria-label", _p$.e = _v$26);
1608
+ _v$27 !== _p$.t && className(_el$38, _p$.t = _v$27);
1609
+ _v$28 !== _p$.a && className(_el$39, _p$.a = _v$28);
1610
+ return _p$;
1611
+ }, {
1612
+ e: void 0,
1613
+ t: void 0,
1614
+ a: void 0
1615
+ });
1616
+ return _el$38;
1617
+ })();
1618
+ }));
1619
+ return _el$31;
1620
+ }
1621
+ }),
1622
+ createComponent(Match, {
1623
+ get when() {
1624
+ return currentTab() === "history";
1625
+ },
1626
+ get children() {
1627
+ var _el$32 = _tmpl$7(), _el$33 = _el$32.firstChild;
1628
+ insert(_el$33, createComponent(For, {
1629
+ get each() {
1630
+ return history();
1631
+ },
1632
+ children: (match, index) => (() => {
1633
+ var _el$41 = _tmpl$1(), _el$42 = _el$41.firstChild;
1634
+ insert(_el$41, createComponent(NavigateLink, {
1635
+ get left() {
1636
+ return createComponent(NavigateButton, {
1637
+ get to() {
1638
+ return match.pathname;
1639
+ },
1640
+ get params() {
1641
+ return match.params;
1642
+ },
1643
+ get search() {
1644
+ return match.search;
1645
+ },
1646
+ router
1647
+ });
1648
+ },
1649
+ get right() {
1650
+ return createComponent(AgeTicker, {
1651
+ match,
1652
+ router
1653
+ });
1654
+ },
1655
+ get children() {
1656
+ var _el$43 = _tmpl$4();
1657
+ insert(_el$43, () => `${match.routeId === rootRouteId ? rootRouteId : match.pathname}`);
1658
+ createRenderEffect(() => className(_el$43, styles().matchID));
1659
+ return _el$43;
1660
+ }
1661
+ }), null);
1662
+ createRenderEffect((_p$) => {
1663
+ var _v$29 = clsx(styles().matchRow(match === activeMatch())), _v$30 = clsx(styles().matchIndicator(index() === 0 ? "green" : "gray"));
1664
+ _v$29 !== _p$.e && className(_el$41, _p$.e = _v$29);
1665
+ _v$30 !== _p$.t && className(_el$42, _p$.t = _v$30);
1666
+ return _p$;
1667
+ }, {
1668
+ e: void 0,
1669
+ t: void 0
1670
+ });
1671
+ return _el$41;
1672
+ })()
1673
+ }), null);
1674
+ insert(_el$33, (() => {
1675
+ var _c$4 = memo(() => !!hasHistoryOverflowed());
1676
+ return () => _c$4() ? (() => {
1677
+ var _el$44 = _tmpl$10();
1678
+ createRenderEffect(() => className(_el$44, styles().historyOverflowContainer));
1679
+ return _el$44;
1680
+ })() : null;
1681
+ })(), null);
1682
+ return _el$32;
1683
+ }
1684
+ })
1685
+ ];
1686
+ } }));
1687
+ insert(_el$18, (() => {
1688
+ var _c$5 = memo(() => !!routerState().cachedMatches.length);
1689
+ return () => _c$5() ? (() => {
1690
+ var _el$45 = _tmpl$11(), _el$46 = _el$45.firstChild, _el$48 = _el$46.firstChild.nextSibling, _el$49 = _el$46.nextSibling;
1691
+ insert(_el$49, () => routerState().cachedMatches.map((match) => {
1692
+ return (() => {
1693
+ var _el$50 = _tmpl$0(), _el$51 = _el$50.firstChild;
1694
+ _el$50.$$click = () => setActiveId(activeId() === match.id ? "" : match.id);
1695
+ insert(_el$50, createComponent(NavigateLink, {
1696
+ get left() {
1697
+ return createComponent(NavigateButton, {
1698
+ get to() {
1699
+ return match.pathname;
1700
+ },
1701
+ get params() {
1702
+ return match.params;
1703
+ },
1704
+ get search() {
1705
+ return match.search;
1706
+ },
1707
+ router
1708
+ });
1709
+ },
1710
+ get right() {
1711
+ return createComponent(AgeTicker, {
1712
+ match,
1713
+ router
1714
+ });
1715
+ },
1716
+ get children() {
1717
+ var _el$52 = _tmpl$4();
1718
+ insert(_el$52, () => `${match.id}`);
1719
+ createRenderEffect(() => className(_el$52, styles().matchID));
1720
+ return _el$52;
1721
+ }
1722
+ }), null);
1723
+ createRenderEffect((_p$) => {
1724
+ var _v$34 = `Open match details for ${match.id}`, _v$35 = clsx(styles().matchRow(match === activeMatch())), _v$36 = clsx(styles().matchIndicator(getStatusColor(match)));
1725
+ _v$34 !== _p$.e && setAttribute(_el$50, "aria-label", _p$.e = _v$34);
1726
+ _v$35 !== _p$.t && className(_el$50, _p$.t = _v$35);
1727
+ _v$36 !== _p$.a && className(_el$51, _p$.a = _v$36);
1728
+ return _p$;
1729
+ }, {
1730
+ e: void 0,
1731
+ t: void 0,
1732
+ a: void 0
1733
+ });
1734
+ return _el$50;
1735
+ })();
1736
+ }));
1737
+ createRenderEffect((_p$) => {
1738
+ var _v$31 = styles().cachedMatchesContainer, _v$32 = styles().detailsHeader, _v$33 = styles().detailsHeaderInfo;
1739
+ _v$31 !== _p$.e && className(_el$45, _p$.e = _v$31);
1740
+ _v$32 !== _p$.t && className(_el$46, _p$.t = _v$32);
1741
+ _v$33 !== _p$.a && className(_el$48, _p$.a = _v$33);
1742
+ return _p$;
1743
+ }, {
1744
+ e: void 0,
1745
+ t: void 0,
1746
+ a: void 0
1747
+ });
1748
+ return _el$45;
1749
+ })() : null;
1750
+ })(), null);
1751
+ insert(_el$11, (() => {
1752
+ var _c$6 = memo(() => !!(activeMatch() && activeMatch()?.status));
1753
+ return () => _c$6() ? (() => {
1754
+ var _el$53 = _tmpl$12(), _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling, _el$56 = _el$55.firstChild, _el$57 = _el$56.firstChild, _el$58 = _el$57.firstChild, _el$59 = _el$57.nextSibling, _el$61 = _el$59.firstChild.nextSibling, _el$62 = _el$61.firstChild, _el$63 = _el$59.nextSibling, _el$65 = _el$63.firstChild.nextSibling, _el$66 = _el$63.nextSibling, _el$68 = _el$66.firstChild.nextSibling, _el$69 = _el$55.nextSibling, _el$70 = _el$69.nextSibling;
1755
+ insert(_el$58, (() => {
1756
+ var _c$8 = memo(() => !!(activeMatch()?.status === "success" && activeMatch()?.isFetching));
1757
+ return () => _c$8() ? "fetching" : activeMatch()?.status;
1758
+ })());
1759
+ insert(_el$62, () => activeMatch()?.id);
1760
+ insert(_el$65, (() => {
1761
+ var _c$9 = memo(() => !!routerState().pendingMatches?.find((d) => d.id === activeMatch()?.id));
1762
+ return () => _c$9() ? "Pending" : routerState().matches.find((d) => d.id === activeMatch()?.id) ? "Active" : "Cached";
1763
+ })());
1764
+ insert(_el$68, (() => {
1765
+ var _c$0 = memo(() => !!activeMatch()?.updatedAt);
1766
+ return () => _c$0() ? new Date(activeMatch()?.updatedAt).toLocaleTimeString() : "N/A";
1767
+ })());
1768
+ insert(_el$53, (() => {
1769
+ var _c$1 = memo(() => !!activeMatchLoaderData());
1770
+ return () => _c$1() ? [(() => {
1771
+ var _el$71 = _tmpl$13();
1772
+ createRenderEffect(() => className(_el$71, styles().detailsHeader));
1773
+ return _el$71;
1774
+ })(), (() => {
1775
+ var _el$72 = _tmpl$6();
1776
+ insert(_el$72, createComponent(Explorer, {
1777
+ label: "loaderData",
1778
+ value: activeMatchLoaderData,
1779
+ defaultExpanded: {}
1780
+ }));
1781
+ createRenderEffect(() => className(_el$72, styles().detailsContent));
1782
+ return _el$72;
1783
+ })()] : null;
1784
+ })(), _el$69);
1785
+ insert(_el$70, createComponent(Explorer, {
1786
+ label: "Match",
1787
+ value: activeMatchValue,
1788
+ defaultExpanded: {}
1789
+ }));
1790
+ createRenderEffect((_p$) => {
1791
+ var _v$37 = styles().thirdContainer, _v$38 = styles().detailsHeader, _v$39 = styles().matchDetails, _v$40 = styles().matchStatus(activeMatch()?.status, activeMatch()?.isFetching), _v$41 = styles().matchDetailsInfoLabel, _v$42 = styles().matchDetailsInfo, _v$43 = styles().matchDetailsInfoLabel, _v$44 = styles().matchDetailsInfo, _v$45 = styles().matchDetailsInfoLabel, _v$46 = styles().matchDetailsInfo, _v$47 = styles().detailsHeader, _v$48 = styles().detailsContent;
1792
+ _v$37 !== _p$.e && className(_el$53, _p$.e = _v$37);
1793
+ _v$38 !== _p$.t && className(_el$54, _p$.t = _v$38);
1794
+ _v$39 !== _p$.a && className(_el$56, _p$.a = _v$39);
1795
+ _v$40 !== _p$.o && className(_el$57, _p$.o = _v$40);
1796
+ _v$41 !== _p$.i && className(_el$59, _p$.i = _v$41);
1797
+ _v$42 !== _p$.n && className(_el$61, _p$.n = _v$42);
1798
+ _v$43 !== _p$.s && className(_el$63, _p$.s = _v$43);
1799
+ _v$44 !== _p$.h && className(_el$65, _p$.h = _v$44);
1800
+ _v$45 !== _p$.r && className(_el$66, _p$.r = _v$45);
1801
+ _v$46 !== _p$.d && className(_el$68, _p$.d = _v$46);
1802
+ _v$47 !== _p$.l && className(_el$69, _p$.l = _v$47);
1803
+ _v$48 !== _p$.u && className(_el$70, _p$.u = _v$48);
1804
+ return _p$;
1805
+ }, {
1806
+ e: void 0,
1807
+ t: void 0,
1808
+ a: void 0,
1809
+ o: void 0,
1810
+ i: void 0,
1811
+ n: void 0,
1812
+ s: void 0,
1813
+ h: void 0,
1814
+ r: void 0,
1815
+ d: void 0,
1816
+ l: void 0,
1817
+ u: void 0
1818
+ });
1819
+ return _el$53;
1820
+ })() : null;
1821
+ })(), null);
1822
+ insert(_el$11, (() => {
1823
+ var _c$7 = memo(() => !!hasSearch());
1824
+ return () => _c$7() ? (() => {
1825
+ var _el$73 = _tmpl$14(), _el$74 = _el$73.firstChild;
1826
+ _el$74.firstChild;
1827
+ var _el$76 = _el$74.nextSibling;
1828
+ insert(_el$74, typeof navigator !== "undefined" ? (() => {
1829
+ var _el$77 = _tmpl$15();
1830
+ insert(_el$77, createComponent(CopyButton, { getValue: () => {
1831
+ const search = routerState().location.search;
1832
+ return JSON.stringify(search);
1833
+ } }));
1834
+ return _el$77;
1835
+ })() : null, null);
1836
+ insert(_el$76, createComponent(Explorer, {
1837
+ value: locationSearchValue,
1838
+ get defaultExpanded() {
1839
+ return Object.keys(routerState().location.search).reduce((obj, next) => {
1840
+ obj[next] = {};
1841
+ return obj;
1842
+ }, {});
1843
+ }
1844
+ }));
1845
+ createRenderEffect((_p$) => {
1846
+ var _v$49 = styles().fourthContainer, _v$50 = styles().detailsHeader, _v$51 = styles().detailsContent;
1847
+ _v$49 !== _p$.e && className(_el$73, _p$.e = _v$49);
1848
+ _v$50 !== _p$.t && className(_el$74, _p$.t = _v$50);
1849
+ _v$51 !== _p$.a && className(_el$76, _p$.a = _v$51);
1850
+ return _p$;
1851
+ }, {
1852
+ e: void 0,
1853
+ t: void 0,
1854
+ a: void 0
1855
+ });
1856
+ return _el$73;
1857
+ })() : null;
1858
+ })(), null);
1859
+ createRenderEffect((_p$) => {
1860
+ var _v$6 = styles().panelCloseBtn, _v$7 = styles().panelCloseBtnIcon, _v$8 = styles().firstContainer, _v$9 = styles().row, _v$0 = styles().routerExplorerContainer, _v$1 = styles().routerExplorer, _v$10 = styles().secondContainer, _v$11 = styles().matchesContainer, _v$12 = styles().detailsHeader, _v$13 = styles().detailsContent, _v$14 = styles().detailsHeader, _v$15 = styles().routeMatchesToggle, _v$16 = currentTab() === "routes", _v$17 = clsx(styles().routeMatchesToggleBtn(currentTab() === "routes", true)), _v$18 = currentTab() === "matches", _v$19 = clsx(styles().routeMatchesToggleBtn(currentTab() === "matches", true)), _v$20 = currentTab() === "history", _v$21 = clsx(styles().routeMatchesToggleBtn(currentTab() === "history", false)), _v$22 = styles().detailsHeaderInfo, _v$23 = clsx(styles().routesContainer);
1861
+ _v$6 !== _p$.e && className(_el$12, _p$.e = _v$6);
1862
+ _v$7 !== _p$.t && setAttribute(_el$13, "class", _p$.t = _v$7);
1863
+ _v$8 !== _p$.a && className(_el$14, _p$.a = _v$8);
1864
+ _v$9 !== _p$.o && className(_el$15, _p$.o = _v$9);
1865
+ _v$0 !== _p$.i && className(_el$16, _p$.i = _v$0);
1866
+ _v$1 !== _p$.n && className(_el$17, _p$.n = _v$1);
1867
+ _v$10 !== _p$.s && className(_el$18, _p$.s = _v$10);
1868
+ _v$11 !== _p$.h && className(_el$19, _p$.h = _v$11);
1869
+ _v$12 !== _p$.r && className(_el$20, _p$.r = _v$12);
1870
+ _v$13 !== _p$.d && className(_el$22, _p$.d = _v$13);
1871
+ _v$14 !== _p$.l && className(_el$24, _p$.l = _v$14);
1872
+ _v$15 !== _p$.u && className(_el$25, _p$.u = _v$15);
1873
+ _v$16 !== _p$.c && (_el$26.disabled = _p$.c = _v$16);
1874
+ _v$17 !== _p$.w && className(_el$26, _p$.w = _v$17);
1875
+ _v$18 !== _p$.m && (_el$27.disabled = _p$.m = _v$18);
1876
+ _v$19 !== _p$.f && className(_el$27, _p$.f = _v$19);
1877
+ _v$20 !== _p$.y && (_el$28.disabled = _p$.y = _v$20);
1878
+ _v$21 !== _p$.g && className(_el$28, _p$.g = _v$21);
1879
+ _v$22 !== _p$.p && className(_el$29, _p$.p = _v$22);
1880
+ _v$23 !== _p$.b && className(_el$30, _p$.b = _v$23);
1881
+ return _p$;
1882
+ }, {
1883
+ e: void 0,
1884
+ t: void 0,
1885
+ a: void 0,
1886
+ o: void 0,
1887
+ i: void 0,
1888
+ n: void 0,
1889
+ s: void 0,
1890
+ h: void 0,
1891
+ r: void 0,
1892
+ d: void 0,
1893
+ l: void 0,
1894
+ u: void 0,
1895
+ c: void 0,
1896
+ w: void 0,
1897
+ m: void 0,
1898
+ f: void 0,
1899
+ y: void 0,
1900
+ g: void 0,
1901
+ p: void 0,
1902
+ b: void 0
1903
+ });
1904
+ return _el$11;
1905
+ })();
1906
+ };
1907
+ function CopyButton({ getValue }) {
1908
+ const [copied, setCopied] = createSignal(false);
1909
+ let timeoutId = null;
1910
+ const handleCopy = async () => {
1911
+ if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) {
1912
+ console.warn("TanStack Router Devtools: Clipboard API unavailable");
1913
+ return;
1914
+ }
1915
+ try {
1916
+ const value = getValue();
1917
+ await navigator.clipboard.writeText(value);
1918
+ setCopied(true);
1919
+ if (timeoutId) clearTimeout(timeoutId);
1920
+ timeoutId = setTimeout(() => setCopied(false), 2500);
1921
+ } catch (e) {
1922
+ console.error("TanStack Router Devtools: Failed to copy", e);
1923
+ }
1924
+ };
1925
+ onCleanup(() => {
1926
+ if (timeoutId) clearTimeout(timeoutId);
1927
+ });
1928
+ return (() => {
1929
+ var _el$78 = _tmpl$16();
1930
+ _el$78.$$click = handleCopy;
1931
+ insert(_el$78, () => copied() ? "✅" : "📋");
1932
+ createRenderEffect(() => setAttribute(_el$78, "title", copied() ? "Copied!" : "Copy"));
1933
+ return _el$78;
1934
+ })();
1935
+ }
1936
+ delegateEvents(["click", "mousedown"]);
1937
+ //#endregion
1938
+ export { BaseTanStackRouterDevtoolsPanel, BaseTanStackRouterDevtoolsPanel as default, useLocalStorage as n, useStyles$1 as r, useIsMounted as t };
1939
+
1940
+ //# sourceMappingURL=BaseTanStackRouterDevtoolsPanel-B43j38ty.js.map