@tanstack/router-devtools 1.16.6 → 1.17.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 (49) hide show
  1. package/dist/cjs/Explorer.cjs +152 -92
  2. package/dist/cjs/Explorer.cjs.map +1 -1
  3. package/dist/cjs/Explorer.d.cts +0 -7
  4. package/dist/cjs/devtools.cjs +924 -905
  5. package/dist/cjs/devtools.cjs.map +1 -1
  6. package/dist/cjs/logo.cjs +1012 -0
  7. package/dist/cjs/logo.cjs.map +1 -0
  8. package/dist/cjs/logo.d.cts +2 -0
  9. package/dist/cjs/tokens.cjs +302 -0
  10. package/dist/cjs/tokens.cjs.map +1 -0
  11. package/dist/cjs/tokens.d.cts +298 -0
  12. package/dist/cjs/utils.cjs +5 -33
  13. package/dist/cjs/utils.cjs.map +1 -1
  14. package/dist/cjs/utils.d.cts +2 -2
  15. package/dist/esm/Explorer.d.ts +0 -7
  16. package/dist/esm/Explorer.js +153 -93
  17. package/dist/esm/Explorer.js.map +1 -1
  18. package/dist/esm/devtools.js +924 -905
  19. package/dist/esm/devtools.js.map +1 -1
  20. package/dist/esm/logo.d.ts +2 -0
  21. package/dist/esm/logo.js +1012 -0
  22. package/dist/esm/logo.js.map +1 -0
  23. package/dist/esm/tokens.d.ts +298 -0
  24. package/dist/esm/tokens.js +302 -0
  25. package/dist/esm/tokens.js.map +1 -0
  26. package/dist/esm/utils.d.ts +2 -2
  27. package/dist/esm/utils.js +5 -33
  28. package/dist/esm/utils.js.map +1 -1
  29. package/package.json +5 -2
  30. package/src/Explorer.tsx +155 -93
  31. package/src/devtools.tsx +974 -860
  32. package/src/logo.tsx +817 -0
  33. package/src/tokens.ts +305 -0
  34. package/src/utils.ts +12 -11
  35. package/dist/cjs/styledComponents.cjs +0 -93
  36. package/dist/cjs/styledComponents.cjs.map +0 -1
  37. package/dist/cjs/styledComponents.d.cts +0 -7
  38. package/dist/cjs/theme.cjs +0 -28
  39. package/dist/cjs/theme.cjs.map +0 -1
  40. package/dist/cjs/useMediaQuery.cjs +0 -27
  41. package/dist/cjs/useMediaQuery.cjs.map +0 -1
  42. package/dist/esm/styledComponents.d.ts +0 -7
  43. package/dist/esm/styledComponents.js +0 -93
  44. package/dist/esm/styledComponents.js.map +0 -1
  45. package/dist/esm/theme.js +0 -28
  46. package/dist/esm/theme.js.map +0 -1
  47. package/dist/esm/useMediaQuery.js +0 -28
  48. package/dist/esm/useMediaQuery.js.map +0 -1
  49. package/src/styledComponents.ts +0 -106
package/src/Explorer.tsx CHANGED
@@ -1,48 +1,8 @@
1
1
  import * as React from 'react'
2
-
2
+ import { clsx as cx } from 'clsx'
3
+ import { tokens } from './tokens'
3
4
  import { displayValue, styled } from './utils'
4
-
5
- export const Entry = styled('div', {
6
- fontFamily: 'Menlo, monospace',
7
- fontSize: '.7rem',
8
- lineHeight: '1.7',
9
- outline: 'none',
10
- wordBreak: 'break-word',
11
- })
12
-
13
- export const Label = styled('span', {
14
- color: 'white',
15
- })
16
-
17
- export const LabelButton = styled('button', {
18
- cursor: 'pointer',
19
- color: 'white',
20
- })
21
-
22
- export const ExpandButton = styled('button', {
23
- cursor: 'pointer',
24
- color: 'inherit',
25
- font: 'inherit',
26
- outline: 'inherit',
27
- background: 'transparent',
28
- border: 'none',
29
- padding: 0,
30
- })
31
-
32
- export const Value = styled('span', (_props, theme) => ({
33
- color: theme.danger,
34
- }))
35
-
36
- export const SubEntries = styled('div', {
37
- marginLeft: '.1em',
38
- paddingLeft: '1em',
39
- borderLeft: '2px solid rgba(0,0,0,.15)',
40
- })
41
-
42
- export const Info = styled('span', {
43
- color: 'grey',
44
- fontSize: '.7em',
45
- })
5
+ import { css } from 'goober'
46
6
 
47
7
  type ExpanderProps = {
48
8
  expanded: boolean
@@ -50,15 +10,23 @@ type ExpanderProps = {
50
10
  }
51
11
 
52
12
  export const Expander = ({ expanded, style = {} }: ExpanderProps) => (
53
- <span
54
- style={{
55
- display: 'inline-block',
56
- transition: 'all .1s ease',
57
- transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,
58
- ...style,
59
- }}
60
- >
61
-
13
+ <span className={getStyles().expander}>
14
+ <svg
15
+ xmlns="http://www.w3.org/2000/svg"
16
+ width="12"
17
+ height="12"
18
+ fill="none"
19
+ viewBox="0 0 24 24"
20
+ className={cx(getStyles().expanderIcon(expanded))}
21
+ >
22
+ <path
23
+ stroke="currentColor"
24
+ strokeLinecap="round"
25
+ strokeLinejoin="round"
26
+ strokeWidth="2"
27
+ d="M9 18l6-6-6-6"
28
+ ></path>
29
+ </svg>
62
30
  </span>
63
31
  )
64
32
 
@@ -122,47 +90,55 @@ export const DefaultRenderer: Renderer = ({
122
90
  }
123
91
 
124
92
  return (
125
- <Entry>
93
+ <div className={getStyles().entry}>
126
94
  {subEntryPages.length ? (
127
95
  <>
128
- <ExpandButton onClick={() => toggleExpanded()}>
129
- <Expander expanded={expanded} /> {label}{' '}
130
- <Info>
96
+ <button
97
+ className={getStyles().expandButton}
98
+ onClick={() => toggleExpanded()}
99
+ >
100
+ <Expander expanded={expanded} />
101
+ {label}
102
+ <span className={getStyles().info}>
131
103
  {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}
132
104
  {subEntries.length} {subEntries.length > 1 ? `items` : `item`}
133
- </Info>
134
- </ExpandButton>
105
+ </span>
106
+ </button>
135
107
  {expanded ? (
136
108
  subEntryPages.length === 1 ? (
137
- <SubEntries>
109
+ <div className={getStyles().subEntries}>
138
110
  {subEntries.map((entry, index) => handleEntry(entry))}
139
- </SubEntries>
111
+ </div>
140
112
  ) : (
141
- <SubEntries>
142
- {subEntryPages.map((entries, index) => (
143
- <div key={index}>
144
- <Entry>
145
- <LabelButton
146
- onClick={() =>
147
- setExpandedPages((old) =>
148
- old.includes(index)
149
- ? old.filter((d) => d !== index)
150
- : [...old, index],
151
- )
152
- }
153
- >
154
- <Expander expanded={expanded} /> [{index * pageSize} ...{' '}
155
- {index * pageSize + pageSize - 1}]
156
- </LabelButton>
157
- {expandedPages.includes(index) ? (
158
- <SubEntries>
159
- {entries.map((entry) => handleEntry(entry))}
160
- </SubEntries>
161
- ) : null}
162
- </Entry>
163
- </div>
164
- ))}
165
- </SubEntries>
113
+ <div className={getStyles().subEntries}>
114
+ {subEntryPages.map((entries, index) => {
115
+ return (
116
+ <div key={index}>
117
+ <div className={getStyles().entry}>
118
+ <button
119
+ className={cx(getStyles().labelButton, 'labelButton')}
120
+ onClick={() =>
121
+ setExpandedPages((old) =>
122
+ old.includes(index)
123
+ ? old.filter((d) => d !== index)
124
+ : [...old, index],
125
+ )
126
+ }
127
+ >
128
+ <Expander expanded={expandedPages.includes(index)} />{' '}
129
+ [{index * pageSize} ...{' '}
130
+ {index * pageSize + pageSize - 1}]
131
+ </button>
132
+ {expandedPages.includes(index) ? (
133
+ <div className={getStyles().subEntries}>
134
+ {entries.map((entry) => handleEntry(entry))}
135
+ </div>
136
+ ) : null}
137
+ </div>
138
+ </div>
139
+ )
140
+ })}
141
+ </div>
166
142
  )
167
143
  ) : null}
168
144
  </>
@@ -173,13 +149,9 @@ export const DefaultRenderer: Renderer = ({
173
149
  label={
174
150
  <button
175
151
  onClick={refreshValueSnapshot}
176
- style={{
177
- appearance: 'none',
178
- border: '0',
179
- background: 'transparent',
180
- }}
152
+ className={getStyles().refreshValueBtn}
181
153
  >
182
- <Label>{label}</Label> 🔄{' '}
154
+ <span>{label}</span> 🔄{' '}
183
155
  </button>
184
156
  }
185
157
  value={valueSnapshot}
@@ -188,10 +160,11 @@ export const DefaultRenderer: Renderer = ({
188
160
  </>
189
161
  ) : (
190
162
  <>
191
- <Label>{label}:</Label> <Value>{displayValue(value)}</Value>
163
+ <span>{label}:</span>{' '}
164
+ <span className={getStyles().value}>{displayValue(value)}</span>
192
165
  </>
193
166
  )}
194
- </Entry>
167
+ </div>
195
168
  )
196
169
  }
197
170
 
@@ -293,3 +266,92 @@ export default function Explorer({
293
266
  ...rest,
294
267
  })
295
268
  }
269
+
270
+ const stylesFactory = () => {
271
+ const { colors, font, size, alpha, shadow, border } = tokens
272
+ const { fontFamily, lineHeight, size: fontSize } = font
273
+
274
+ return {
275
+ entry: css`
276
+ font-family: ${fontFamily.mono};
277
+ font-size: ${fontSize.xs};
278
+ line-height: ${lineHeight.sm};
279
+ outline: none;
280
+ word-break: break-word;
281
+ `,
282
+ labelButton: css`
283
+ cursor: pointer;
284
+ color: inherit;
285
+ font: inherit;
286
+ outline: inherit;
287
+ background: transparent;
288
+ border: none;
289
+ padding: 0;
290
+ `,
291
+ expander: css`
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ width: ${size[3]};
296
+ height: ${size[3]};
297
+ padding-left: 3px;
298
+ box-sizing: content-box;
299
+ `,
300
+ expanderIcon: (expanded: boolean) => {
301
+ if (expanded) {
302
+ return css`
303
+ transform: rotate(90deg);
304
+ transition: transform 0.1s ease;
305
+ `
306
+ }
307
+ return css`
308
+ transform: rotate(0deg);
309
+ transition: transform 0.1s ease;
310
+ `
311
+ },
312
+ expandButton: css`
313
+ display: flex;
314
+ gap: ${size[1]};
315
+ align-items: center;
316
+ cursor: pointer;
317
+ color: inherit;
318
+ font: inherit;
319
+ outline: inherit;
320
+ background: transparent;
321
+ border: none;
322
+ padding: 0;
323
+ `,
324
+ value: css`
325
+ color: ${colors.purple[400]};
326
+ `,
327
+ subEntries: css`
328
+ margin-left: ${size[2]};
329
+ padding-left: ${size[2]};
330
+ border-left: 2px solid ${colors.darkGray[400]};
331
+ `,
332
+ info: css`
333
+ color: ${colors.gray[500]};
334
+ font-size: ${fontSize['2xs']};
335
+ padding-left: ${size[1]};
336
+ `,
337
+ refreshValueBtn: css`
338
+ appearance: none;
339
+ border: 0;
340
+ cursor: pointer;
341
+ background: transparent;
342
+ color: inherit;
343
+ padding: 0;
344
+ font-family: ${fontFamily.mono};
345
+ font-size: ${fontSize.xs};
346
+ `,
347
+ }
348
+ }
349
+
350
+ let _styles: ReturnType<typeof stylesFactory> | null = null
351
+
352
+ function getStyles() {
353
+ if (_styles) return _styles
354
+ _styles = stylesFactory()
355
+
356
+ return _styles
357
+ }