@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
package/src/theme.tsx ADDED
@@ -0,0 +1,36 @@
1
+ import { createContext, useContext } from 'solid-js'
2
+ import type { JSX } from 'solid-js'
3
+
4
+ export const defaultTheme = {
5
+ background: '#222222',
6
+ backgroundAlt: '#292929',
7
+ foreground: 'white',
8
+ gray: '#444',
9
+ grayAlt: '#444',
10
+ inputBackgroundColor: '#fff',
11
+ inputTextColor: '#000',
12
+ success: '#80cb00',
13
+ danger: '#ff0085',
14
+ active: '#0099ff',
15
+ warning: '#ffb200',
16
+ } as const
17
+
18
+ export type Theme = typeof defaultTheme
19
+ interface ProviderProps {
20
+ theme: Theme
21
+ children?: JSX.Element
22
+ }
23
+
24
+ const ThemeContext = createContext(defaultTheme)
25
+
26
+ export function ThemeProvider({ children, theme, ...rest }: ProviderProps) {
27
+ return (
28
+ <ThemeContext.Provider value={theme} {...rest}>
29
+ {children}
30
+ </ThemeContext.Provider>
31
+ )
32
+ }
33
+
34
+ export function useTheme() {
35
+ return useContext(ThemeContext)
36
+ }
package/src/tokens.ts ADDED
@@ -0,0 +1,305 @@
1
+ export const tokens = {
2
+ colors: {
3
+ inherit: 'inherit',
4
+ current: 'currentColor',
5
+ transparent: 'transparent',
6
+ black: '#000000',
7
+ white: '#ffffff',
8
+ neutral: {
9
+ 50: '#f9fafb',
10
+ 100: '#f2f4f7',
11
+ 200: '#eaecf0',
12
+ 300: '#d0d5dd',
13
+ 400: '#98a2b3',
14
+ 500: '#667085',
15
+ 600: '#475467',
16
+ 700: '#344054',
17
+ 800: '#1d2939',
18
+ 900: '#101828',
19
+ },
20
+ darkGray: {
21
+ 50: '#525c7a',
22
+ 100: '#49536e',
23
+ 200: '#414962',
24
+ 300: '#394056',
25
+ 400: '#313749',
26
+ 500: '#292e3d',
27
+ 600: '#212530',
28
+ 700: '#191c24',
29
+ 800: '#111318',
30
+ 900: '#0b0d10',
31
+ },
32
+ gray: {
33
+ 50: '#f9fafb',
34
+ 100: '#f2f4f7',
35
+ 200: '#eaecf0',
36
+ 300: '#d0d5dd',
37
+ 400: '#98a2b3',
38
+ 500: '#667085',
39
+ 600: '#475467',
40
+ 700: '#344054',
41
+ 800: '#1d2939',
42
+ 900: '#101828',
43
+ },
44
+ blue: {
45
+ 25: '#F5FAFF',
46
+ 50: '#EFF8FF',
47
+ 100: '#D1E9FF',
48
+ 200: '#B2DDFF',
49
+ 300: '#84CAFF',
50
+ 400: '#53B1FD',
51
+ 500: '#2E90FA',
52
+ 600: '#1570EF',
53
+ 700: '#175CD3',
54
+ 800: '#1849A9',
55
+ 900: '#194185',
56
+ },
57
+ green: {
58
+ 25: '#F6FEF9',
59
+ 50: '#ECFDF3',
60
+ 100: '#D1FADF',
61
+ 200: '#A6F4C5',
62
+ 300: '#6CE9A6',
63
+ 400: '#32D583',
64
+ 500: '#12B76A',
65
+ 600: '#039855',
66
+ 700: '#027A48',
67
+ 800: '#05603A',
68
+ 900: '#054F31',
69
+ },
70
+ red: {
71
+ 50: '#fef2f2',
72
+ 100: '#fee2e2',
73
+ 200: '#fecaca',
74
+ 300: '#fca5a5',
75
+ 400: '#f87171',
76
+ 500: '#ef4444',
77
+ 600: '#dc2626',
78
+ 700: '#b91c1c',
79
+ 800: '#991b1b',
80
+ 900: '#7f1d1d',
81
+ 950: '#450a0a',
82
+ },
83
+ yellow: {
84
+ 25: '#FFFCF5',
85
+ 50: '#FFFAEB',
86
+ 100: '#FEF0C7',
87
+ 200: '#FEDF89',
88
+ 300: '#FEC84B',
89
+ 400: '#FDB022',
90
+ 500: '#F79009',
91
+ 600: '#DC6803',
92
+ 700: '#B54708',
93
+ 800: '#93370D',
94
+ 900: '#7A2E0E',
95
+ },
96
+ purple: {
97
+ 25: '#FAFAFF',
98
+ 50: '#F4F3FF',
99
+ 100: '#EBE9FE',
100
+ 200: '#D9D6FE',
101
+ 300: '#BDB4FE',
102
+ 400: '#9B8AFB',
103
+ 500: '#7A5AF8',
104
+ 600: '#6938EF',
105
+ 700: '#5925DC',
106
+ 800: '#4A1FB8',
107
+ 900: '#3E1C96',
108
+ },
109
+ teal: {
110
+ 25: '#F6FEFC',
111
+ 50: '#F0FDF9',
112
+ 100: '#CCFBEF',
113
+ 200: '#99F6E0',
114
+ 300: '#5FE9D0',
115
+ 400: '#2ED3B7',
116
+ 500: '#15B79E',
117
+ 600: '#0E9384',
118
+ 700: '#107569',
119
+ 800: '#125D56',
120
+ 900: '#134E48',
121
+ },
122
+ pink: {
123
+ 25: '#fdf2f8',
124
+ 50: '#fce7f3',
125
+ 100: '#fbcfe8',
126
+ 200: '#f9a8d4',
127
+ 300: '#f472b6',
128
+ 400: '#ec4899',
129
+ 500: '#db2777',
130
+ 600: '#be185d',
131
+ 700: '#9d174d',
132
+ 800: '#831843',
133
+ 900: '#500724',
134
+ },
135
+ cyan: {
136
+ 25: '#ecfeff',
137
+ 50: '#cffafe',
138
+ 100: '#a5f3fc',
139
+ 200: '#67e8f9',
140
+ 300: '#22d3ee',
141
+ 400: '#06b6d4',
142
+ 500: '#0891b2',
143
+ 600: '#0e7490',
144
+ 700: '#155e75',
145
+ 800: '#164e63',
146
+ 900: '#083344',
147
+ },
148
+ },
149
+ alpha: {
150
+ 100: 'ff',
151
+ 90: 'e5',
152
+ 80: 'cc',
153
+ 70: 'b3',
154
+ 60: '99',
155
+ 50: '80',
156
+ 40: '66',
157
+ 30: '4d',
158
+ 20: '33',
159
+ 10: '1a',
160
+ 0: '00',
161
+ },
162
+ font: {
163
+ size: {
164
+ '2xs': 'calc(var(--tsrd-font-size) * 0.625)',
165
+ xs: 'calc(var(--tsrd-font-size) * 0.75)',
166
+ sm: 'calc(var(--tsrd-font-size) * 0.875)',
167
+ md: 'var(--tsrd-font-size)',
168
+ lg: 'calc(var(--tsrd-font-size) * 1.125)',
169
+ xl: 'calc(var(--tsrd-font-size) * 1.25)',
170
+ '2xl': 'calc(var(--tsrd-font-size) * 1.5)',
171
+ '3xl': 'calc(var(--tsrd-font-size) * 1.875)',
172
+ '4xl': 'calc(var(--tsrd-font-size) * 2.25)',
173
+ '5xl': 'calc(var(--tsrd-font-size) * 3)',
174
+ '6xl': 'calc(var(--tsrd-font-size) * 3.75)',
175
+ '7xl': 'calc(var(--tsrd-font-size) * 4.5)',
176
+ '8xl': 'calc(var(--tsrd-font-size) * 6)',
177
+ '9xl': 'calc(var(--tsrd-font-size) * 8)',
178
+ },
179
+ lineHeight: {
180
+ '3xs': 'calc(var(--tsrd-font-size) * 0.75)',
181
+ '2xs': 'calc(var(--tsrd-font-size) * 0.875)',
182
+ xs: 'calc(var(--tsrd-font-size) * 1)',
183
+ sm: 'calc(var(--tsrd-font-size) * 1.25)',
184
+ md: 'calc(var(--tsrd-font-size) * 1.5)',
185
+ lg: 'calc(var(--tsrd-font-size) * 1.75)',
186
+ xl: 'calc(var(--tsrd-font-size) * 2)',
187
+ '2xl': 'calc(var(--tsrd-font-size) * 2.25)',
188
+ '3xl': 'calc(var(--tsrd-font-size) * 2.5)',
189
+ '4xl': 'calc(var(--tsrd-font-size) * 2.75)',
190
+ '5xl': 'calc(var(--tsrd-font-size) * 3)',
191
+ '6xl': 'calc(var(--tsrd-font-size) * 3.25)',
192
+ '7xl': 'calc(var(--tsrd-font-size) * 3.5)',
193
+ '8xl': 'calc(var(--tsrd-font-size) * 3.75)',
194
+ '9xl': 'calc(var(--tsrd-font-size) * 4)',
195
+ },
196
+ weight: {
197
+ thin: '100',
198
+ extralight: '200',
199
+ light: '300',
200
+ normal: '400',
201
+ medium: '500',
202
+ semibold: '600',
203
+ bold: '700',
204
+ extrabold: '800',
205
+ black: '900',
206
+ },
207
+ fontFamily: {
208
+ sans: 'ui-sans-serif, Inter, system-ui, sans-serif, sans-serif',
209
+ mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`,
210
+ },
211
+ },
212
+ breakpoints: {
213
+ xs: '320px',
214
+ sm: '640px',
215
+ md: '768px',
216
+ lg: '1024px',
217
+ xl: '1280px',
218
+ '2xl': '1536px',
219
+ },
220
+ border: {
221
+ radius: {
222
+ none: '0px',
223
+ xs: 'calc(var(--tsrd-font-size) * 0.125)',
224
+ sm: 'calc(var(--tsrd-font-size) * 0.25)',
225
+ md: 'calc(var(--tsrd-font-size) * 0.375)',
226
+ lg: 'calc(var(--tsrd-font-size) * 0.5)',
227
+ xl: 'calc(var(--tsrd-font-size) * 0.75)',
228
+ '2xl': 'calc(var(--tsrd-font-size) * 1)',
229
+ '3xl': 'calc(var(--tsrd-font-size) * 1.5)',
230
+ full: '9999px',
231
+ },
232
+ },
233
+ size: {
234
+ 0: '0px',
235
+ 0.25: 'calc(var(--tsrd-font-size) * 0.0625)',
236
+ 0.5: 'calc(var(--tsrd-font-size) * 0.125)',
237
+ 1: 'calc(var(--tsrd-font-size) * 0.25)',
238
+ 1.5: 'calc(var(--tsrd-font-size) * 0.375)',
239
+ 2: 'calc(var(--tsrd-font-size) * 0.5)',
240
+ 2.5: 'calc(var(--tsrd-font-size) * 0.625)',
241
+ 3: 'calc(var(--tsrd-font-size) * 0.75)',
242
+ 3.5: 'calc(var(--tsrd-font-size) * 0.875)',
243
+ 4: 'calc(var(--tsrd-font-size) * 1)',
244
+ 4.5: 'calc(var(--tsrd-font-size) * 1.125)',
245
+ 5: 'calc(var(--tsrd-font-size) * 1.25)',
246
+ 5.5: 'calc(var(--tsrd-font-size) * 1.375)',
247
+ 6: 'calc(var(--tsrd-font-size) * 1.5)',
248
+ 6.5: 'calc(var(--tsrd-font-size) * 1.625)',
249
+ 7: 'calc(var(--tsrd-font-size) * 1.75)',
250
+ 8: 'calc(var(--tsrd-font-size) * 2)',
251
+ 9: 'calc(var(--tsrd-font-size) * 2.25)',
252
+ 10: 'calc(var(--tsrd-font-size) * 2.5)',
253
+ 11: 'calc(var(--tsrd-font-size) * 2.75)',
254
+ 12: 'calc(var(--tsrd-font-size) * 3)',
255
+ 14: 'calc(var(--tsrd-font-size) * 3.5)',
256
+ 16: 'calc(var(--tsrd-font-size) * 4)',
257
+ 20: 'calc(var(--tsrd-font-size) * 5)',
258
+ 24: 'calc(var(--tsrd-font-size) * 6)',
259
+ 28: 'calc(var(--tsrd-font-size) * 7)',
260
+ 32: 'calc(var(--tsrd-font-size) * 8)',
261
+ 36: 'calc(var(--tsrd-font-size) * 9)',
262
+ 40: 'calc(var(--tsrd-font-size) * 10)',
263
+ 44: 'calc(var(--tsrd-font-size) * 11)',
264
+ 48: 'calc(var(--tsrd-font-size) * 12)',
265
+ 52: 'calc(var(--tsrd-font-size) * 13)',
266
+ 56: 'calc(var(--tsrd-font-size) * 14)',
267
+ 60: 'calc(var(--tsrd-font-size) * 15)',
268
+ 64: 'calc(var(--tsrd-font-size) * 16)',
269
+ 72: 'calc(var(--tsrd-font-size) * 18)',
270
+ 80: 'calc(var(--tsrd-font-size) * 20)',
271
+ 96: 'calc(var(--tsrd-font-size) * 24)',
272
+ },
273
+ shadow: {
274
+ xs: (_: string = 'rgb(0 0 0 / 0.1)') =>
275
+ `0 1px 2px 0 rgb(0 0 0 / 0.05)` as const,
276
+ sm: (color: string = 'rgb(0 0 0 / 0.1)') =>
277
+ `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}` as const,
278
+ md: (color: string = 'rgb(0 0 0 / 0.1)') =>
279
+ `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}` as const,
280
+ lg: (color: string = 'rgb(0 0 0 / 0.1)') =>
281
+ `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}` as const,
282
+ xl: (color: string = 'rgb(0 0 0 / 0.1)') =>
283
+ `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}` as const,
284
+ '2xl': (color: string = 'rgb(0 0 0 / 0.25)') =>
285
+ `0 25px 50px -12px ${color}` as const,
286
+ inner: (color: string = 'rgb(0 0 0 / 0.05)') =>
287
+ `inset 0 2px 4px 0 ${color}` as const,
288
+ none: () => `none` as const,
289
+ },
290
+ zIndices: {
291
+ hide: -1,
292
+ auto: 'auto',
293
+ base: 0,
294
+ docked: 10,
295
+ dropdown: 1000,
296
+ sticky: 1100,
297
+ banner: 1200,
298
+ overlay: 1300,
299
+ modal: 1400,
300
+ popover: 1500,
301
+ skipLink: 1600,
302
+ toast: 1700,
303
+ tooltip: 1800,
304
+ },
305
+ } as const
@@ -0,0 +1,52 @@
1
+ import { createEffect, createSignal } from 'solid-js'
2
+ import type { Accessor } from 'solid-js'
3
+
4
+ const getItem = (key: string): unknown => {
5
+ try {
6
+ const itemValue = localStorage.getItem(key)
7
+ if (typeof itemValue === 'string') {
8
+ return JSON.parse(itemValue)
9
+ }
10
+ return undefined
11
+ } catch {
12
+ return undefined
13
+ }
14
+ }
15
+
16
+ export default function useLocalStorage<T>(
17
+ key: string,
18
+ defaultValue: T | undefined,
19
+ ): [Accessor<T | undefined>, (newVal: T | ((prevVal: T) => T)) => void] {
20
+ const [value, setValue] = createSignal<T>()
21
+
22
+ createEffect(() => {
23
+ const initialValue = getItem(key) as T | undefined
24
+
25
+ if (typeof initialValue === 'undefined' || initialValue === null) {
26
+ setValue(
27
+ typeof defaultValue === 'function' ? defaultValue() : defaultValue,
28
+ )
29
+ } else {
30
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
31
+ // @ts-ignore
32
+ setValue(initialValue)
33
+ }
34
+ })
35
+
36
+ const setter = (updater: any) => {
37
+ setValue((old) => {
38
+ let newVal = updater
39
+
40
+ if (typeof updater == 'function') {
41
+ newVal = updater(old)
42
+ }
43
+ try {
44
+ localStorage.setItem(key, JSON.stringify(newVal))
45
+ } catch {}
46
+
47
+ return newVal
48
+ })
49
+ }
50
+
51
+ return [value, setter]
52
+ }
@@ -0,0 +1,44 @@
1
+ import { createEffect, createSignal } from 'solid-js'
2
+ import type { Accessor } from 'solid-js'
3
+
4
+ export default function useMediaQuery(
5
+ query: string,
6
+ ): Accessor<boolean | undefined> {
7
+ // Keep track of the preference in state, start with the current match
8
+ const [isMatch, setIsMatch] = createSignal(() => {
9
+ if (typeof window !== 'undefined') {
10
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
11
+ return window.matchMedia && window.matchMedia(query).matches
12
+ }
13
+ return
14
+ })
15
+
16
+ // Watch for changes
17
+ createEffect(() => {
18
+ if (typeof window !== 'undefined') {
19
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
20
+ if (!window.matchMedia) {
21
+ return
22
+ }
23
+
24
+ // Create a matcher
25
+ const matcher = window.matchMedia(query)
26
+
27
+ // Create our handler
28
+ const onChange = ({ matches }: { matches: boolean }) =>
29
+ setIsMatch(() => () => matches)
30
+
31
+ // Listen for changes
32
+ matcher.addListener(onChange)
33
+
34
+ return () => {
35
+ // Stop listening for changes
36
+ matcher.removeListener(onChange)
37
+ }
38
+ }
39
+
40
+ return
41
+ })
42
+
43
+ return isMatch()
44
+ }