@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
@@ -0,0 +1,139 @@
1
+ import { createSignal, lazy } from 'solid-js'
2
+ import { render } from 'solid-js/web'
3
+ import type { AnyRouter } from '@tanstack/router-core'
4
+ import type { Signal } from 'solid-js'
5
+
6
+ interface DevtoolsOptions {
7
+ /**
8
+ * Set this true if you want the dev tools to default to being open
9
+ */
10
+ initialIsOpen?: boolean
11
+ /**
12
+ * Use this to add props to the panel. For example, you can add class, style (merge and override default style), etc.
13
+ */
14
+ panelProps?: any & {
15
+ ref?: any
16
+ }
17
+ /**
18
+ * Use this to add props to the close button. For example, you can add class, style (merge and override default style), onClick (extend default handler), etc.
19
+ */
20
+ closeButtonProps?: any & {
21
+ ref?: any
22
+ }
23
+ /**
24
+ * Use this to add props to the toggle button. For example, you can add class, style (merge and override default style), onClick (extend default handler), etc.
25
+ */
26
+ toggleButtonProps?: any & {
27
+ ref?: any
28
+ }
29
+ /**
30
+ * The position of the TanStack Router logo to open and close the devtools panel.
31
+ * Defaults to 'bottom-left'.
32
+ */
33
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
34
+ /**
35
+ * Use this to render the devtools inside a different type of container element for a11y purposes.
36
+ * Any string which corresponds to a valid intrinsic JSX element is allowed.
37
+ * Defaults to 'footer'.
38
+ */
39
+ containerElement?: string | any
40
+ /**
41
+ * A boolean variable indicating if the "lite" version of the library is being used
42
+ */
43
+ router: AnyRouter
44
+ routerState: any
45
+ /**
46
+ * Use this to attach the devtool's styles to specific element in the DOM.
47
+ */
48
+ shadowDOMTarget?: ShadowRoot
49
+ }
50
+
51
+ class TanStackRouterDevtoolsCore {
52
+ #router: Signal<AnyRouter>
53
+ #routerState: Signal<any>
54
+ #position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
55
+ #initialIsOpen: boolean
56
+ #shadowDOMTarget?: ShadowRoot
57
+ #isMounted = false
58
+ #Component: any
59
+ #dispose?: () => void
60
+
61
+ constructor(config: DevtoolsOptions) {
62
+ const { router, routerState, position, initialIsOpen, shadowDOMTarget } =
63
+ config
64
+
65
+ this.#router = createSignal(router)
66
+ this.#routerState = createSignal(routerState)
67
+ this.#position = position ?? 'bottom-left'
68
+ this.#initialIsOpen = initialIsOpen ?? false
69
+ this.#shadowDOMTarget = shadowDOMTarget
70
+ }
71
+
72
+ mount<T extends HTMLElement>(el: T) {
73
+ if (this.#isMounted) {
74
+ throw new Error('Devtools is already mounted')
75
+ }
76
+
77
+ const dispose = render(() => {
78
+ const [router] = this.#router
79
+ const [routerState] = this.#routerState
80
+ const position = this.#position
81
+ const initialIsOpen = this.#initialIsOpen
82
+ const shadowDOMTarget = this.#shadowDOMTarget
83
+
84
+ let Devtools
85
+
86
+ if (this.#Component) {
87
+ Devtools = this.#Component
88
+ } else {
89
+ Devtools = lazy(() => import('./FloatingTanStackRouterDevtools'))
90
+ this.#Component = Devtools
91
+ }
92
+
93
+ return (
94
+ <Devtools
95
+ position={position}
96
+ initialIsOpen={initialIsOpen}
97
+ shadowDOMTarget={shadowDOMTarget}
98
+ router={router}
99
+ routerState={routerState}
100
+ />
101
+ )
102
+ }, el)
103
+
104
+ this.#isMounted = true
105
+ this.#dispose = dispose
106
+ }
107
+
108
+ unmount() {
109
+ if (!this.#isMounted) {
110
+ throw new Error('Devtools is not mounted')
111
+ }
112
+ this.#dispose?.()
113
+ this.#isMounted = false
114
+ }
115
+
116
+ setRouter(router: AnyRouter) {
117
+ this.#router[1](router)
118
+ }
119
+
120
+ setRouterState(routerState: any) {
121
+ this.#routerState[1](routerState)
122
+ }
123
+
124
+ setOptions(options: Partial<DevtoolsOptions>) {
125
+ if (options.position !== undefined) {
126
+ this.#position = options.position
127
+ }
128
+
129
+ if (options.initialIsOpen !== undefined) {
130
+ this.#initialIsOpen = options.initialIsOpen
131
+ }
132
+
133
+ if (options.shadowDOMTarget !== undefined) {
134
+ this.#shadowDOMTarget = options.shadowDOMTarget
135
+ }
136
+ }
137
+ }
138
+
139
+ export { TanStackRouterDevtoolsCore }
@@ -0,0 +1,120 @@
1
+ import { render } from 'solid-js/web'
2
+ import { createSignal } from 'solid-js'
3
+ import { BaseTanStackRouterDevtoolsPanel } from './BaseTanStackRouterDevtoolsPanel'
4
+ import { DevtoolsOnCloseContext, ShadowDomTargetContext } from './context'
5
+ import type { JSX } from 'solid-js'
6
+ import type { AnyRouter } from '@tanstack/router-core'
7
+
8
+ interface TanStackRouterDevtoolsPanelCoreOptions {
9
+ /**
10
+ * The standard React style object used to style a component with inline styles
11
+ */
12
+ style?: JSX.CSSProperties
13
+ /**
14
+ * The standard React class property used to style a component with classes
15
+ */
16
+ className?: string
17
+ /**
18
+ * A boolean variable indicating whether the panel is open or closed
19
+ */
20
+ isOpen?: boolean
21
+ /**
22
+ * A function that toggles the open and close state of the panel
23
+ */
24
+ setIsOpen?: (isOpen: boolean) => void
25
+ /**
26
+ * Handles the opening and closing the devtools panel
27
+ */
28
+ handleDragStart?: (e: any) => void
29
+ /**
30
+ * A boolean variable indicating if the "lite" version of the library is being used
31
+ */
32
+ router: AnyRouter
33
+
34
+ routerState: any
35
+ /**
36
+ * Use this to attach the devtool's styles to specific element in the DOM.
37
+ */
38
+ shadowDOMTarget?: ShadowRoot
39
+ }
40
+
41
+ class TanStackRouterDevtoolsPanelCore {
42
+ #router: any
43
+ #routerState: any
44
+ #shadowDOMTarget?: ShadowRoot
45
+ #isMounted = false
46
+ #setIsOpen?: (isOpen: boolean) => void
47
+ #dispose?: () => void
48
+
49
+ constructor(config: TanStackRouterDevtoolsPanelCoreOptions) {
50
+ const { router, routerState, shadowDOMTarget, setIsOpen } = config
51
+
52
+ this.#router = createSignal(router)
53
+ this.#routerState = createSignal(routerState)
54
+ this.#shadowDOMTarget = shadowDOMTarget
55
+ this.#setIsOpen = setIsOpen
56
+ }
57
+
58
+ mount<T extends HTMLElement>(el: T) {
59
+ if (this.#isMounted) {
60
+ throw new Error('Devtools is already mounted')
61
+ }
62
+
63
+ const dispose = render(() => {
64
+ const [router] = this.#router
65
+ const [routerState] = this.#routerState
66
+ const shadowDOMTarget = this.#shadowDOMTarget
67
+ const setIsOpen = this.#setIsOpen
68
+
69
+ return (
70
+ <ShadowDomTargetContext.Provider value={shadowDOMTarget}>
71
+ <DevtoolsOnCloseContext.Provider
72
+ value={{
73
+ onCloseClick: () => {},
74
+ }}
75
+ >
76
+ <BaseTanStackRouterDevtoolsPanel
77
+ router={router}
78
+ routerState={routerState}
79
+ shadowDOMTarget={shadowDOMTarget}
80
+ setIsOpen={setIsOpen}
81
+ />
82
+ </DevtoolsOnCloseContext.Provider>
83
+ </ShadowDomTargetContext.Provider>
84
+ )
85
+ }, el)
86
+
87
+ this.#isMounted = true
88
+ this.#dispose = dispose
89
+ }
90
+
91
+ unmount() {
92
+ if (!this.#isMounted) {
93
+ throw new Error('Devtools is not mounted')
94
+ }
95
+ this.#dispose?.()
96
+ this.#isMounted = false
97
+ }
98
+
99
+ setRouter(router: AnyRouter) {
100
+ this.#router[1](router)
101
+ }
102
+
103
+ setRouterState(routerState: any) {
104
+ this.#routerState[1](routerState)
105
+ }
106
+
107
+ setOptions(options: Partial<TanStackRouterDevtoolsPanelCoreOptions>) {
108
+ if (options.shadowDOMTarget !== undefined) {
109
+ this.#shadowDOMTarget = options.shadowDOMTarget
110
+ }
111
+ if (options.router !== undefined) {
112
+ this.setRouter(options.router)
113
+ }
114
+ if (options.routerState !== undefined) {
115
+ this.setRouterState(options.routerState)
116
+ }
117
+ }
118
+ }
119
+
120
+ export { TanStackRouterDevtoolsPanelCore }
package/src/context.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { createContext, useContext } from 'solid-js'
2
+
3
+ export const ShadowDomTargetContext = createContext<ShadowRoot | undefined>(
4
+ undefined,
5
+ )
6
+
7
+ export const DevtoolsOnCloseContext = createContext<
8
+ | {
9
+ onCloseClick: (
10
+ e: MouseEvent & { currentTarget: HTMLButtonElement; target: Element },
11
+ ) => void
12
+ }
13
+ | undefined
14
+ >(undefined)
15
+
16
+ export const useDevtoolsOnClose = () => {
17
+ const context = useContext(DevtoolsOnCloseContext)
18
+ if (!context) {
19
+ throw new Error(
20
+ 'useDevtoolsOnClose must be used within a TanStackRouterDevtools component',
21
+ )
22
+ }
23
+ return context
24
+ }
package/src/index.tsx ADDED
@@ -0,0 +1,2 @@
1
+ export { TanStackRouterDevtoolsCore } from './TanStackRouterDevtoolsCore'
2
+ export { TanStackRouterDevtoolsPanelCore } from './TanStackRouterDevtoolsPanelCore'