@tanstack/router-devtools-core 1.20.3-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) 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 +602 -0
  7. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
  8. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +35 -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 +204 -0
  13. package/dist/cjs/FloatingTanStackRouterDevtools.cjs.map +1 -0
  14. package/dist/cjs/FloatingTanStackRouterDevtools.d.cts +48 -0
  15. package/dist/cjs/NavigateButton.cjs +30 -0
  16. package/dist/cjs/NavigateButton.cjs.map +1 -0
  17. package/dist/cjs/NavigateButton.d.cts +7 -0
  18. package/dist/cjs/TanStackRouterDevtoolsCore.cjs +107 -0
  19. package/dist/cjs/TanStackRouterDevtoolsCore.cjs.map +1 -0
  20. package/dist/cjs/TanStackRouterDevtoolsCore.d.cts +55 -0
  21. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs +107 -0
  22. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs.map +1 -0
  23. package/dist/cjs/TanStackRouterDevtoolsPanelCore.d.cts +43 -0
  24. package/dist/cjs/context.cjs +20 -0
  25. package/dist/cjs/context.cjs.map +1 -0
  26. package/dist/cjs/context.d.cts +13 -0
  27. package/dist/cjs/index.cjs +7 -0
  28. package/dist/cjs/index.cjs.map +1 -0
  29. package/dist/cjs/index.d.cts +2 -0
  30. package/dist/cjs/logo.cjs +92 -0
  31. package/dist/cjs/logo.cjs.map +1 -0
  32. package/dist/cjs/logo.d.cts +1 -0
  33. package/dist/cjs/theme.d.cts +34 -0
  34. package/dist/cjs/tokens.cjs +201 -0
  35. package/dist/cjs/tokens.cjs.map +1 -0
  36. package/dist/cjs/tokens.d.cts +298 -0
  37. package/dist/cjs/useLocalStorage.cjs +42 -0
  38. package/dist/cjs/useLocalStorage.cjs.map +1 -0
  39. package/dist/cjs/useLocalStorage.d.cts +2 -0
  40. package/dist/cjs/useMediaQuery.d.cts +2 -0
  41. package/dist/cjs/useStyles.cjs +607 -0
  42. package/dist/cjs/useStyles.cjs.map +1 -0
  43. package/dist/cjs/useStyles.d.cts +55 -0
  44. package/dist/cjs/utils.cjs +63 -0
  45. package/dist/cjs/utils.cjs.map +1 -0
  46. package/dist/cjs/utils.d.cts +25 -0
  47. package/dist/esm/AgeTicker.d.ts +6 -0
  48. package/dist/esm/AgeTicker.js +47 -0
  49. package/dist/esm/AgeTicker.js.map +1 -0
  50. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +35 -0
  51. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +602 -0
  52. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
  53. package/dist/esm/Explorer.d.ts +43 -0
  54. package/dist/esm/Explorer.js +290 -0
  55. package/dist/esm/Explorer.js.map +1 -0
  56. package/dist/esm/FloatingTanStackRouterDevtools.d.ts +48 -0
  57. package/dist/esm/FloatingTanStackRouterDevtools.js +204 -0
  58. package/dist/esm/FloatingTanStackRouterDevtools.js.map +1 -0
  59. package/dist/esm/NavigateButton.d.ts +7 -0
  60. package/dist/esm/NavigateButton.js +30 -0
  61. package/dist/esm/NavigateButton.js.map +1 -0
  62. package/dist/esm/TanStackRouterDevtoolsCore.d.ts +55 -0
  63. package/dist/esm/TanStackRouterDevtoolsCore.js +107 -0
  64. package/dist/esm/TanStackRouterDevtoolsCore.js.map +1 -0
  65. package/dist/esm/TanStackRouterDevtoolsPanelCore.d.ts +43 -0
  66. package/dist/esm/TanStackRouterDevtoolsPanelCore.js +107 -0
  67. package/dist/esm/TanStackRouterDevtoolsPanelCore.js.map +1 -0
  68. package/dist/esm/context.d.ts +13 -0
  69. package/dist/esm/context.js +20 -0
  70. package/dist/esm/context.js.map +1 -0
  71. package/dist/esm/index.d.ts +2 -0
  72. package/dist/esm/index.js +7 -0
  73. package/dist/esm/index.js.map +1 -0
  74. package/dist/esm/logo.d.ts +1 -0
  75. package/dist/esm/logo.js +92 -0
  76. package/dist/esm/logo.js.map +1 -0
  77. package/dist/esm/theme.d.ts +34 -0
  78. package/dist/esm/tokens.d.ts +298 -0
  79. package/dist/esm/tokens.js +201 -0
  80. package/dist/esm/tokens.js.map +1 -0
  81. package/dist/esm/useLocalStorage.d.ts +2 -0
  82. package/dist/esm/useLocalStorage.js +43 -0
  83. package/dist/esm/useLocalStorage.js.map +1 -0
  84. package/dist/esm/useMediaQuery.d.ts +2 -0
  85. package/dist/esm/useStyles.d.ts +55 -0
  86. package/dist/esm/useStyles.js +590 -0
  87. package/dist/esm/useStyles.js.map +1 -0
  88. package/dist/esm/utils.d.ts +25 -0
  89. package/dist/esm/utils.js +63 -0
  90. package/dist/esm/utils.js.map +1 -0
  91. package/package.json +71 -0
  92. package/src/AgeTicker.tsx +59 -0
  93. package/src/BaseTanStackRouterDevtoolsPanel.tsx +632 -0
  94. package/src/Explorer.tsx +339 -0
  95. package/src/FloatingTanStackRouterDevtools.tsx +290 -0
  96. package/src/NavigateButton.tsx +25 -0
  97. package/src/TanStackRouterDevtoolsCore.tsx +152 -0
  98. package/src/TanStackRouterDevtoolsPanelCore.tsx +131 -0
  99. package/src/context.ts +24 -0
  100. package/src/index.tsx +2 -0
  101. package/src/logo.tsx +817 -0
  102. package/src/theme.tsx +36 -0
  103. package/src/tokens.ts +305 -0
  104. package/src/useLocalStorage.ts +52 -0
  105. package/src/useMediaQuery.ts +44 -0
  106. package/src/useStyles.tsx +614 -0
  107. package/src/utils.tsx +185 -0
@@ -0,0 +1,152 @@
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
+
58
+ #panelProps: any
59
+ #closeButtonProps: any
60
+ #toggleButtonProps: any
61
+
62
+ #isMounted = false
63
+ #Component: any
64
+ #dispose?: () => void
65
+
66
+ constructor(config: DevtoolsOptions) {
67
+ this.#router = createSignal(config.router)
68
+ this.#routerState = createSignal(config.routerState)
69
+ this.#position = config.position ?? 'bottom-left'
70
+ this.#initialIsOpen = config.initialIsOpen ?? false
71
+ this.#shadowDOMTarget = config.shadowDOMTarget
72
+
73
+ this.#panelProps = config.panelProps
74
+ this.#closeButtonProps = config.closeButtonProps
75
+ this.#toggleButtonProps = config.toggleButtonProps
76
+ }
77
+
78
+ mount<T extends HTMLElement>(el: T) {
79
+ if (this.#isMounted) {
80
+ throw new Error('Devtools is already mounted')
81
+ }
82
+
83
+ const dispose = render(() => {
84
+ const [router] = this.#router
85
+ const [routerState] = this.#routerState
86
+ const position = this.#position
87
+ const initialIsOpen = this.#initialIsOpen
88
+ const shadowDOMTarget = this.#shadowDOMTarget
89
+
90
+ const panelProps = this.#panelProps
91
+ const closeButtonProps = this.#closeButtonProps
92
+ const toggleButtonProps = this.#toggleButtonProps
93
+
94
+ let Devtools
95
+
96
+ if (this.#Component) {
97
+ Devtools = this.#Component
98
+ } else {
99
+ Devtools = lazy(() => import('./FloatingTanStackRouterDevtools'))
100
+ this.#Component = Devtools
101
+ }
102
+
103
+ return (
104
+ <Devtools
105
+ position={position}
106
+ initialIsOpen={initialIsOpen}
107
+ shadowDOMTarget={shadowDOMTarget}
108
+ router={router}
109
+ routerState={routerState}
110
+ panelProps={panelProps}
111
+ closeButtonProps={closeButtonProps}
112
+ toggleButtonProps={toggleButtonProps}
113
+ />
114
+ )
115
+ }, el)
116
+
117
+ this.#isMounted = true
118
+ this.#dispose = dispose
119
+ }
120
+
121
+ unmount() {
122
+ if (!this.#isMounted) {
123
+ throw new Error('Devtools is not mounted')
124
+ }
125
+ this.#dispose?.()
126
+ this.#isMounted = false
127
+ }
128
+
129
+ setRouter(router: AnyRouter) {
130
+ this.#router[1](router)
131
+ }
132
+
133
+ setRouterState(routerState: any) {
134
+ this.#routerState[1](routerState)
135
+ }
136
+
137
+ setOptions(options: Partial<DevtoolsOptions>) {
138
+ if (options.position !== undefined) {
139
+ this.#position = options.position
140
+ }
141
+
142
+ if (options.initialIsOpen !== undefined) {
143
+ this.#initialIsOpen = options.initialIsOpen
144
+ }
145
+
146
+ if (options.shadowDOMTarget !== undefined) {
147
+ this.#shadowDOMTarget = options.shadowDOMTarget
148
+ }
149
+ }
150
+ }
151
+
152
+ export { TanStackRouterDevtoolsCore }
@@ -0,0 +1,131 @@
1
+ import { render } from 'solid-js/web'
2
+ import { createSignal, lazy } from 'solid-js'
3
+ import { DevtoolsOnCloseContext, ShadowDomTargetContext } from './context'
4
+ import type { JSX } from 'solid-js'
5
+ import type { AnyRouter } from '@tanstack/router-core'
6
+
7
+ interface TanStackRouterDevtoolsPanelCoreOptions {
8
+ /**
9
+ * The standard React style object used to style a component with inline styles
10
+ */
11
+ style?: JSX.CSSProperties
12
+ /**
13
+ * The standard React class property used to style a component with classes
14
+ */
15
+ className?: string
16
+ /**
17
+ * A boolean variable indicating whether the panel is open or closed
18
+ */
19
+ isOpen?: boolean
20
+ /**
21
+ * A function that toggles the open and close state of the panel
22
+ */
23
+ setIsOpen?: (isOpen: boolean) => void
24
+ /**
25
+ * Handles the opening and closing the devtools panel
26
+ */
27
+ handleDragStart?: (e: any) => void
28
+ /**
29
+ * A boolean variable indicating if the "lite" version of the library is being used
30
+ */
31
+ router: AnyRouter
32
+
33
+ routerState: any
34
+ /**
35
+ * Use this to attach the devtool's styles to specific element in the DOM.
36
+ */
37
+ shadowDOMTarget?: ShadowRoot
38
+ }
39
+
40
+ class TanStackRouterDevtoolsPanelCore {
41
+ #router: any
42
+ #routerState: any
43
+ #shadowDOMTarget?: ShadowRoot
44
+ #isMounted = false
45
+ #setIsOpen?: (isOpen: boolean) => void
46
+ #dispose?: () => void
47
+ #Component: any
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
+ let BaseTanStackRouterDevtoolsPanel
70
+
71
+ if (this.#Component) {
72
+ BaseTanStackRouterDevtoolsPanel = this.#Component
73
+ } else {
74
+ BaseTanStackRouterDevtoolsPanel = lazy(
75
+ () => import('./BaseTanStackRouterDevtoolsPanel'),
76
+ )
77
+ this.#Component = BaseTanStackRouterDevtoolsPanel
78
+ }
79
+
80
+ return (
81
+ <ShadowDomTargetContext.Provider value={shadowDOMTarget}>
82
+ <DevtoolsOnCloseContext.Provider
83
+ value={{
84
+ onCloseClick: () => {},
85
+ }}
86
+ >
87
+ <BaseTanStackRouterDevtoolsPanel
88
+ router={router}
89
+ routerState={routerState}
90
+ shadowDOMTarget={shadowDOMTarget}
91
+ setIsOpen={setIsOpen}
92
+ />
93
+ </DevtoolsOnCloseContext.Provider>
94
+ </ShadowDomTargetContext.Provider>
95
+ )
96
+ }, el)
97
+
98
+ this.#isMounted = true
99
+ this.#dispose = dispose
100
+ }
101
+
102
+ unmount() {
103
+ if (!this.#isMounted) {
104
+ throw new Error('Devtools is not mounted')
105
+ }
106
+ this.#dispose?.()
107
+ this.#isMounted = false
108
+ }
109
+
110
+ setRouter(router: AnyRouter) {
111
+ this.#router[1](router)
112
+ }
113
+
114
+ setRouterState(routerState: any) {
115
+ this.#routerState[1](routerState)
116
+ }
117
+
118
+ setOptions(options: Partial<TanStackRouterDevtoolsPanelCoreOptions>) {
119
+ if (options.shadowDOMTarget !== undefined) {
120
+ this.#shadowDOMTarget = options.shadowDOMTarget
121
+ }
122
+ if (options.router !== undefined) {
123
+ this.setRouter(options.router)
124
+ }
125
+ if (options.routerState !== undefined) {
126
+ this.setRouterState(options.routerState)
127
+ }
128
+ }
129
+ }
130
+
131
+ 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'