@tanstack/router-devtools-core 1.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/AgeTicker.cjs +47 -0
  4. package/dist/cjs/AgeTicker.cjs.map +1 -0
  5. package/dist/cjs/AgeTicker.d.cts +6 -0
  6. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +505 -0
  7. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
  8. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +34 -0
  9. package/dist/cjs/Explorer.cjs +307 -0
  10. package/dist/cjs/Explorer.cjs.map +1 -0
  11. package/dist/cjs/Explorer.d.cts +43 -0
  12. package/dist/cjs/FloatingTanStackRouterDevtools.cjs +195 -0
  13. package/dist/cjs/FloatingTanStackRouterDevtools.cjs.map +1 -0
  14. package/dist/cjs/FloatingTanStackRouterDevtools.d.cts +48 -0
  15. package/dist/cjs/TanStackRouterDevtoolsCore.cjs +99 -0
  16. package/dist/cjs/TanStackRouterDevtoolsCore.cjs.map +1 -0
  17. package/dist/cjs/TanStackRouterDevtoolsCore.d.cts +55 -0
  18. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs +99 -0
  19. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs.map +1 -0
  20. package/dist/cjs/TanStackRouterDevtoolsPanelCore.d.cts +43 -0
  21. package/dist/cjs/context.cjs +20 -0
  22. package/dist/cjs/context.cjs.map +1 -0
  23. package/dist/cjs/context.d.cts +13 -0
  24. package/dist/cjs/index.cjs +7 -0
  25. package/dist/cjs/index.cjs.map +1 -0
  26. package/dist/cjs/index.d.cts +2 -0
  27. package/dist/cjs/logo.cjs +92 -0
  28. package/dist/cjs/logo.cjs.map +1 -0
  29. package/dist/cjs/logo.d.cts +1 -0
  30. package/dist/cjs/theme.d.cts +34 -0
  31. package/dist/cjs/tokens.cjs +201 -0
  32. package/dist/cjs/tokens.cjs.map +1 -0
  33. package/dist/cjs/tokens.d.cts +298 -0
  34. package/dist/cjs/useLocalStorage.cjs +42 -0
  35. package/dist/cjs/useLocalStorage.cjs.map +1 -0
  36. package/dist/cjs/useLocalStorage.d.cts +2 -0
  37. package/dist/cjs/useMediaQuery.d.cts +2 -0
  38. package/dist/cjs/useStyles.cjs +582 -0
  39. package/dist/cjs/useStyles.cjs.map +1 -0
  40. package/dist/cjs/useStyles.d.cts +53 -0
  41. package/dist/cjs/utils.cjs +63 -0
  42. package/dist/cjs/utils.cjs.map +1 -0
  43. package/dist/cjs/utils.d.cts +25 -0
  44. package/dist/esm/AgeTicker.d.ts +6 -0
  45. package/dist/esm/AgeTicker.js +47 -0
  46. package/dist/esm/AgeTicker.js.map +1 -0
  47. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +34 -0
  48. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +505 -0
  49. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
  50. package/dist/esm/Explorer.d.ts +43 -0
  51. package/dist/esm/Explorer.js +290 -0
  52. package/dist/esm/Explorer.js.map +1 -0
  53. package/dist/esm/FloatingTanStackRouterDevtools.d.ts +48 -0
  54. package/dist/esm/FloatingTanStackRouterDevtools.js +195 -0
  55. package/dist/esm/FloatingTanStackRouterDevtools.js.map +1 -0
  56. package/dist/esm/TanStackRouterDevtoolsCore.d.ts +55 -0
  57. package/dist/esm/TanStackRouterDevtoolsCore.js +99 -0
  58. package/dist/esm/TanStackRouterDevtoolsCore.js.map +1 -0
  59. package/dist/esm/TanStackRouterDevtoolsPanelCore.d.ts +43 -0
  60. package/dist/esm/TanStackRouterDevtoolsPanelCore.js +99 -0
  61. package/dist/esm/TanStackRouterDevtoolsPanelCore.js.map +1 -0
  62. package/dist/esm/context.d.ts +13 -0
  63. package/dist/esm/context.js +20 -0
  64. package/dist/esm/context.js.map +1 -0
  65. package/dist/esm/index.d.ts +2 -0
  66. package/dist/esm/index.js +7 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/logo.d.ts +1 -0
  69. package/dist/esm/logo.js +92 -0
  70. package/dist/esm/logo.js.map +1 -0
  71. package/dist/esm/theme.d.ts +34 -0
  72. package/dist/esm/tokens.d.ts +298 -0
  73. package/dist/esm/tokens.js +201 -0
  74. package/dist/esm/tokens.js.map +1 -0
  75. package/dist/esm/useLocalStorage.d.ts +2 -0
  76. package/dist/esm/useLocalStorage.js +43 -0
  77. package/dist/esm/useLocalStorage.js.map +1 -0
  78. package/dist/esm/useMediaQuery.d.ts +2 -0
  79. package/dist/esm/useStyles.d.ts +53 -0
  80. package/dist/esm/useStyles.js +565 -0
  81. package/dist/esm/useStyles.js.map +1 -0
  82. package/dist/esm/utils.d.ts +25 -0
  83. package/dist/esm/utils.js +63 -0
  84. package/dist/esm/utils.js.map +1 -0
  85. package/package.json +71 -0
  86. package/src/AgeTicker.tsx +59 -0
  87. package/src/BaseTanStackRouterDevtoolsPanel.tsx +559 -0
  88. package/src/Explorer.tsx +339 -0
  89. package/src/FloatingTanStackRouterDevtools.tsx +280 -0
  90. package/src/TanStackRouterDevtoolsCore.tsx +139 -0
  91. package/src/TanStackRouterDevtoolsPanelCore.tsx +120 -0
  92. package/src/context.ts +24 -0
  93. package/src/index.tsx +2 -0
  94. package/src/logo.tsx +817 -0
  95. package/src/theme.tsx +36 -0
  96. package/src/tokens.ts +305 -0
  97. package/src/useLocalStorage.ts +52 -0
  98. package/src/useMediaQuery.ts +44 -0
  99. package/src/useStyles.tsx +589 -0
  100. package/src/utils.tsx +185 -0
package/src/utils.tsx ADDED
@@ -0,0 +1,185 @@
1
+ import { Dynamic } from 'solid-js/web'
2
+ import { createEffect, createRenderEffect, createSignal } from 'solid-js'
3
+ import { useTheme } from './theme'
4
+ import useMediaQuery from './useMediaQuery'
5
+ import type { AnyRoute, AnyRouteMatch } from '@tanstack/router-core'
6
+
7
+ import type { Theme } from './theme'
8
+ import type { JSX } from 'solid-js'
9
+
10
+ export const isServer = typeof window === 'undefined'
11
+
12
+ type StyledComponent<T> = T extends 'button'
13
+ ? JSX.ButtonHTMLAttributes<HTMLButtonElement>
14
+ : T extends 'input'
15
+ ? JSX.InputHTMLAttributes<HTMLInputElement>
16
+ : T extends 'select'
17
+ ? JSX.SelectHTMLAttributes<HTMLSelectElement>
18
+ : T extends keyof HTMLElementTagNameMap
19
+ ? JSX.HTMLAttributes<HTMLElementTagNameMap[T]>
20
+ : never
21
+
22
+ export function getStatusColor(match: AnyRouteMatch) {
23
+ const colorMap = {
24
+ pending: 'yellow',
25
+ success: 'green',
26
+ error: 'red',
27
+ notFound: 'purple',
28
+ redirected: 'gray',
29
+ } as const
30
+
31
+ return match.isFetching && match.status === 'success'
32
+ ? match.isFetching === 'beforeLoad'
33
+ ? 'purple'
34
+ : 'blue'
35
+ : colorMap[match.status]
36
+ }
37
+
38
+ export function getRouteStatusColor(
39
+ matches: Array<AnyRouteMatch>,
40
+ route: AnyRoute,
41
+ ) {
42
+ const found = matches.find((d) => d.routeId === route.id)
43
+ if (!found) return 'gray'
44
+ return getStatusColor(found)
45
+ }
46
+
47
+ type Styles =
48
+ | JSX.CSSProperties
49
+ | ((props: Record<string, any>, theme: Theme) => JSX.CSSProperties)
50
+
51
+ export function styled<T extends keyof HTMLElementTagNameMap>(
52
+ type: T,
53
+ newStyles: Styles,
54
+ queries: Record<string, Styles> = {},
55
+ ) {
56
+ return ({
57
+ ref,
58
+ style,
59
+ ...rest
60
+ }: StyledComponent<T> & {
61
+ ref?: HTMLElementTagNameMap[T] | undefined
62
+ }) => {
63
+ const theme = useTheme()
64
+
65
+ const mediaStyles = Object.entries(queries).reduce(
66
+ (current, [key, value]) => {
67
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
68
+ return useMediaQuery(key)
69
+ ? {
70
+ ...current,
71
+ ...(typeof value === 'function' ? value(rest, theme) : value),
72
+ }
73
+ : current
74
+ },
75
+ {},
76
+ )
77
+
78
+ const baseStyles =
79
+ typeof newStyles === 'function' ? newStyles(rest, theme) : newStyles
80
+
81
+ // Handle style being either a string or an object
82
+ const combinedStyles =
83
+ typeof style === 'string'
84
+ ? { ...baseStyles, ...mediaStyles, cssText: style }
85
+ : { ...baseStyles, ...style, ...mediaStyles }
86
+
87
+ return (
88
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
89
+ // @ts-ignore
90
+ <Dynamic component={type} {...rest} style={combinedStyles} ref={ref} />
91
+ )
92
+ }
93
+ }
94
+
95
+ export function useIsMounted() {
96
+ const [isMounted, setIsMounted] = createSignal(false)
97
+
98
+ const effect = isServer ? createEffect : createRenderEffect
99
+
100
+ effect(() => {
101
+ setIsMounted(true)
102
+ })
103
+
104
+ return isMounted
105
+ }
106
+
107
+ /**
108
+ * Displays a string regardless the type of the data
109
+ * @param {unknown} value Value to be stringified
110
+ */
111
+ export const displayValue = (value: unknown) => {
112
+ const name = Object.getOwnPropertyNames(Object(value))
113
+ const newValue = typeof value === 'bigint' ? `${value.toString()}n` : value
114
+ try {
115
+ return JSON.stringify(newValue, name)
116
+ } catch (e) {
117
+ return `unable to stringify`
118
+ }
119
+ }
120
+
121
+ /**
122
+ * This hook is a safe useState version which schedules state updates in microtasks
123
+ * to prevent updating a component state while React is rendering different components
124
+ * or when the component is not mounted anymore.
125
+ */
126
+ export function useSafeState<T>(initialState: T): [T, (value: T) => void] {
127
+ const isMounted = useIsMounted()
128
+ const [state, setState] = createSignal(initialState)
129
+
130
+ const safeSetState = (value: T) => {
131
+ scheduleMicrotask(() => {
132
+ if (isMounted()) {
133
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
134
+ // @ts-ignore
135
+ setState(value)
136
+ }
137
+ })
138
+ }
139
+
140
+ return [state(), safeSetState]
141
+ }
142
+
143
+ /**
144
+ * Schedules a microtask.
145
+ * This can be useful to schedule state updates after rendering.
146
+ */
147
+ function scheduleMicrotask(callback: () => void) {
148
+ Promise.resolve()
149
+ .then(callback)
150
+ .catch((error) =>
151
+ setTimeout(() => {
152
+ throw error
153
+ }),
154
+ )
155
+ }
156
+
157
+ export function multiSortBy<T>(
158
+ arr: Array<T>,
159
+ accessors: Array<(item: T) => any> = [(d) => d],
160
+ ): Array<T> {
161
+ return arr
162
+ .map((d, i) => [d, i] as const)
163
+ .sort(([a, ai], [b, bi]) => {
164
+ for (const accessor of accessors) {
165
+ const ao = accessor(a)
166
+ const bo = accessor(b)
167
+
168
+ if (typeof ao === 'undefined') {
169
+ if (typeof bo === 'undefined') {
170
+ continue
171
+ }
172
+ return 1
173
+ }
174
+
175
+ if (ao === bo) {
176
+ continue
177
+ }
178
+
179
+ return ao > bo ? 1 : -1
180
+ }
181
+
182
+ return ai - bi
183
+ })
184
+ .map(([d]) => d)
185
+ }