@tanstack/router-devtools 1.16.5 → 1.17.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 (49) hide show
  1. package/dist/cjs/Explorer.cjs +146 -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 +901 -894
  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 +147 -93
  17. package/dist/esm/Explorer.js.map +1 -1
  18. package/dist/esm/devtools.js +901 -894
  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 +4 -2
  30. package/src/Explorer.tsx +148 -93
  31. package/src/devtools.tsx +956 -851
  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
@@ -0,0 +1,298 @@
1
+ export declare const tokens: {
2
+ readonly colors: {
3
+ readonly inherit: "inherit";
4
+ readonly current: "currentColor";
5
+ readonly transparent: "transparent";
6
+ readonly black: "#000000";
7
+ readonly white: "#ffffff";
8
+ readonly neutral: {
9
+ readonly 50: "#f9fafb";
10
+ readonly 100: "#f2f4f7";
11
+ readonly 200: "#eaecf0";
12
+ readonly 300: "#d0d5dd";
13
+ readonly 400: "#98a2b3";
14
+ readonly 500: "#667085";
15
+ readonly 600: "#475467";
16
+ readonly 700: "#344054";
17
+ readonly 800: "#1d2939";
18
+ readonly 900: "#101828";
19
+ };
20
+ readonly darkGray: {
21
+ readonly 50: "#525c7a";
22
+ readonly 100: "#49536e";
23
+ readonly 200: "#414962";
24
+ readonly 300: "#394056";
25
+ readonly 400: "#313749";
26
+ readonly 500: "#292e3d";
27
+ readonly 600: "#212530";
28
+ readonly 700: "#191c24";
29
+ readonly 800: "#111318";
30
+ readonly 900: "#0b0d10";
31
+ };
32
+ readonly gray: {
33
+ readonly 50: "#f9fafb";
34
+ readonly 100: "#f2f4f7";
35
+ readonly 200: "#eaecf0";
36
+ readonly 300: "#d0d5dd";
37
+ readonly 400: "#98a2b3";
38
+ readonly 500: "#667085";
39
+ readonly 600: "#475467";
40
+ readonly 700: "#344054";
41
+ readonly 800: "#1d2939";
42
+ readonly 900: "#101828";
43
+ };
44
+ readonly blue: {
45
+ readonly 25: "#F5FAFF";
46
+ readonly 50: "#EFF8FF";
47
+ readonly 100: "#D1E9FF";
48
+ readonly 200: "#B2DDFF";
49
+ readonly 300: "#84CAFF";
50
+ readonly 400: "#53B1FD";
51
+ readonly 500: "#2E90FA";
52
+ readonly 600: "#1570EF";
53
+ readonly 700: "#175CD3";
54
+ readonly 800: "#1849A9";
55
+ readonly 900: "#194185";
56
+ };
57
+ readonly green: {
58
+ readonly 25: "#F6FEF9";
59
+ readonly 50: "#ECFDF3";
60
+ readonly 100: "#D1FADF";
61
+ readonly 200: "#A6F4C5";
62
+ readonly 300: "#6CE9A6";
63
+ readonly 400: "#32D583";
64
+ readonly 500: "#12B76A";
65
+ readonly 600: "#039855";
66
+ readonly 700: "#027A48";
67
+ readonly 800: "#05603A";
68
+ readonly 900: "#054F31";
69
+ };
70
+ readonly red: {
71
+ readonly 50: "#fef2f2";
72
+ readonly 100: "#fee2e2";
73
+ readonly 200: "#fecaca";
74
+ readonly 300: "#fca5a5";
75
+ readonly 400: "#f87171";
76
+ readonly 500: "#ef4444";
77
+ readonly 600: "#dc2626";
78
+ readonly 700: "#b91c1c";
79
+ readonly 800: "#991b1b";
80
+ readonly 900: "#7f1d1d";
81
+ readonly 950: "#450a0a";
82
+ };
83
+ readonly yellow: {
84
+ readonly 25: "#FFFCF5";
85
+ readonly 50: "#FFFAEB";
86
+ readonly 100: "#FEF0C7";
87
+ readonly 200: "#FEDF89";
88
+ readonly 300: "#FEC84B";
89
+ readonly 400: "#FDB022";
90
+ readonly 500: "#F79009";
91
+ readonly 600: "#DC6803";
92
+ readonly 700: "#B54708";
93
+ readonly 800: "#93370D";
94
+ readonly 900: "#7A2E0E";
95
+ };
96
+ readonly purple: {
97
+ readonly 25: "#FAFAFF";
98
+ readonly 50: "#F4F3FF";
99
+ readonly 100: "#EBE9FE";
100
+ readonly 200: "#D9D6FE";
101
+ readonly 300: "#BDB4FE";
102
+ readonly 400: "#9B8AFB";
103
+ readonly 500: "#7A5AF8";
104
+ readonly 600: "#6938EF";
105
+ readonly 700: "#5925DC";
106
+ readonly 800: "#4A1FB8";
107
+ readonly 900: "#3E1C96";
108
+ };
109
+ readonly teal: {
110
+ readonly 25: "#F6FEFC";
111
+ readonly 50: "#F0FDF9";
112
+ readonly 100: "#CCFBEF";
113
+ readonly 200: "#99F6E0";
114
+ readonly 300: "#5FE9D0";
115
+ readonly 400: "#2ED3B7";
116
+ readonly 500: "#15B79E";
117
+ readonly 600: "#0E9384";
118
+ readonly 700: "#107569";
119
+ readonly 800: "#125D56";
120
+ readonly 900: "#134E48";
121
+ };
122
+ readonly pink: {
123
+ readonly 25: "#fdf2f8";
124
+ readonly 50: "#fce7f3";
125
+ readonly 100: "#fbcfe8";
126
+ readonly 200: "#f9a8d4";
127
+ readonly 300: "#f472b6";
128
+ readonly 400: "#ec4899";
129
+ readonly 500: "#db2777";
130
+ readonly 600: "#be185d";
131
+ readonly 700: "#9d174d";
132
+ readonly 800: "#831843";
133
+ readonly 900: "#500724";
134
+ };
135
+ readonly cyan: {
136
+ readonly 25: "#ecfeff";
137
+ readonly 50: "#cffafe";
138
+ readonly 100: "#a5f3fc";
139
+ readonly 200: "#67e8f9";
140
+ readonly 300: "#22d3ee";
141
+ readonly 400: "#06b6d4";
142
+ readonly 500: "#0891b2";
143
+ readonly 600: "#0e7490";
144
+ readonly 700: "#155e75";
145
+ readonly 800: "#164e63";
146
+ readonly 900: "#083344";
147
+ };
148
+ };
149
+ readonly alpha: {
150
+ readonly 100: "ff";
151
+ readonly 90: "e5";
152
+ readonly 80: "cc";
153
+ readonly 70: "b3";
154
+ readonly 60: "99";
155
+ readonly 50: "80";
156
+ readonly 40: "66";
157
+ readonly 30: "4d";
158
+ readonly 20: "33";
159
+ readonly 10: "1a";
160
+ readonly 0: "00";
161
+ };
162
+ readonly font: {
163
+ readonly size: {
164
+ readonly '2xs': "calc(var(--tsrd-font-size) * 0.625)";
165
+ readonly xs: "calc(var(--tsrd-font-size) * 0.75)";
166
+ readonly sm: "calc(var(--tsrd-font-size) * 0.875)";
167
+ readonly md: "var(--tsrd-font-size)";
168
+ readonly lg: "calc(var(--tsrd-font-size) * 1.125)";
169
+ readonly xl: "calc(var(--tsrd-font-size) * 1.25)";
170
+ readonly '2xl': "calc(var(--tsrd-font-size) * 1.5)";
171
+ readonly '3xl': "calc(var(--tsrd-font-size) * 1.875)";
172
+ readonly '4xl': "calc(var(--tsrd-font-size) * 2.25)";
173
+ readonly '5xl': "calc(var(--tsrd-font-size) * 3)";
174
+ readonly '6xl': "calc(var(--tsrd-font-size) * 3.75)";
175
+ readonly '7xl': "calc(var(--tsrd-font-size) * 4.5)";
176
+ readonly '8xl': "calc(var(--tsrd-font-size) * 6)";
177
+ readonly '9xl': "calc(var(--tsrd-font-size) * 8)";
178
+ };
179
+ readonly lineHeight: {
180
+ readonly '3xs': "calc(var(--tsrd-font-size) * 0.75)";
181
+ readonly '2xs': "calc(var(--tsrd-font-size) * 0.875)";
182
+ readonly xs: "calc(var(--tsrd-font-size) * 1)";
183
+ readonly sm: "calc(var(--tsrd-font-size) * 1.25)";
184
+ readonly md: "calc(var(--tsrd-font-size) * 1.5)";
185
+ readonly lg: "calc(var(--tsrd-font-size) * 1.75)";
186
+ readonly xl: "calc(var(--tsrd-font-size) * 2)";
187
+ readonly '2xl': "calc(var(--tsrd-font-size) * 2.25)";
188
+ readonly '3xl': "calc(var(--tsrd-font-size) * 2.5)";
189
+ readonly '4xl': "calc(var(--tsrd-font-size) * 2.75)";
190
+ readonly '5xl': "calc(var(--tsrd-font-size) * 3)";
191
+ readonly '6xl': "calc(var(--tsrd-font-size) * 3.25)";
192
+ readonly '7xl': "calc(var(--tsrd-font-size) * 3.5)";
193
+ readonly '8xl': "calc(var(--tsrd-font-size) * 3.75)";
194
+ readonly '9xl': "calc(var(--tsrd-font-size) * 4)";
195
+ };
196
+ readonly weight: {
197
+ readonly thin: "100";
198
+ readonly extralight: "200";
199
+ readonly light: "300";
200
+ readonly normal: "400";
201
+ readonly medium: "500";
202
+ readonly semibold: "600";
203
+ readonly bold: "700";
204
+ readonly extrabold: "800";
205
+ readonly black: "900";
206
+ };
207
+ readonly fontFamily: {
208
+ readonly sans: "ui-sans-serif, Inter, system-ui, sans-serif, sans-serif";
209
+ readonly mono: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace";
210
+ };
211
+ };
212
+ readonly breakpoints: {
213
+ readonly xs: "320px";
214
+ readonly sm: "640px";
215
+ readonly md: "768px";
216
+ readonly lg: "1024px";
217
+ readonly xl: "1280px";
218
+ readonly '2xl': "1536px";
219
+ };
220
+ readonly border: {
221
+ readonly radius: {
222
+ readonly none: "0px";
223
+ readonly xs: "calc(var(--tsrd-font-size) * 0.125)";
224
+ readonly sm: "calc(var(--tsrd-font-size) * 0.25)";
225
+ readonly md: "calc(var(--tsrd-font-size) * 0.375)";
226
+ readonly lg: "calc(var(--tsrd-font-size) * 0.5)";
227
+ readonly xl: "calc(var(--tsrd-font-size) * 0.75)";
228
+ readonly '2xl': "calc(var(--tsrd-font-size) * 1)";
229
+ readonly '3xl': "calc(var(--tsrd-font-size) * 1.5)";
230
+ readonly full: "9999px";
231
+ };
232
+ };
233
+ readonly size: {
234
+ readonly 0: "0px";
235
+ readonly 0.25: "calc(var(--tsrd-font-size) * 0.0625)";
236
+ readonly 0.5: "calc(var(--tsrd-font-size) * 0.125)";
237
+ readonly 1: "calc(var(--tsrd-font-size) * 0.25)";
238
+ readonly 1.5: "calc(var(--tsrd-font-size) * 0.375)";
239
+ readonly 2: "calc(var(--tsrd-font-size) * 0.5)";
240
+ readonly 2.5: "calc(var(--tsrd-font-size) * 0.625)";
241
+ readonly 3: "calc(var(--tsrd-font-size) * 0.75)";
242
+ readonly 3.5: "calc(var(--tsrd-font-size) * 0.875)";
243
+ readonly 4: "calc(var(--tsrd-font-size) * 1)";
244
+ readonly 4.5: "calc(var(--tsrd-font-size) * 1.125)";
245
+ readonly 5: "calc(var(--tsrd-font-size) * 1.25)";
246
+ readonly 5.5: "calc(var(--tsrd-font-size) * 1.375)";
247
+ readonly 6: "calc(var(--tsrd-font-size) * 1.5)";
248
+ readonly 6.5: "calc(var(--tsrd-font-size) * 1.625)";
249
+ readonly 7: "calc(var(--tsrd-font-size) * 1.75)";
250
+ readonly 8: "calc(var(--tsrd-font-size) * 2)";
251
+ readonly 9: "calc(var(--tsrd-font-size) * 2.25)";
252
+ readonly 10: "calc(var(--tsrd-font-size) * 2.5)";
253
+ readonly 11: "calc(var(--tsrd-font-size) * 2.75)";
254
+ readonly 12: "calc(var(--tsrd-font-size) * 3)";
255
+ readonly 14: "calc(var(--tsrd-font-size) * 3.5)";
256
+ readonly 16: "calc(var(--tsrd-font-size) * 4)";
257
+ readonly 20: "calc(var(--tsrd-font-size) * 5)";
258
+ readonly 24: "calc(var(--tsrd-font-size) * 6)";
259
+ readonly 28: "calc(var(--tsrd-font-size) * 7)";
260
+ readonly 32: "calc(var(--tsrd-font-size) * 8)";
261
+ readonly 36: "calc(var(--tsrd-font-size) * 9)";
262
+ readonly 40: "calc(var(--tsrd-font-size) * 10)";
263
+ readonly 44: "calc(var(--tsrd-font-size) * 11)";
264
+ readonly 48: "calc(var(--tsrd-font-size) * 12)";
265
+ readonly 52: "calc(var(--tsrd-font-size) * 13)";
266
+ readonly 56: "calc(var(--tsrd-font-size) * 14)";
267
+ readonly 60: "calc(var(--tsrd-font-size) * 15)";
268
+ readonly 64: "calc(var(--tsrd-font-size) * 16)";
269
+ readonly 72: "calc(var(--tsrd-font-size) * 18)";
270
+ readonly 80: "calc(var(--tsrd-font-size) * 20)";
271
+ readonly 96: "calc(var(--tsrd-font-size) * 24)";
272
+ };
273
+ readonly shadow: {
274
+ readonly xs: (_?: string) => "0 1px 2px 0 rgb(0 0 0 / 0.05)";
275
+ readonly sm: (color?: string) => `0 1px 3px 0 ${string}, 0 1px 2px -1px ${string}`;
276
+ readonly md: (color?: string) => `0 4px 6px -1px ${string}, 0 2px 4px -2px ${string}`;
277
+ readonly lg: (color?: string) => `0 10px 15px -3px ${string}, 0 4px 6px -4px ${string}`;
278
+ readonly xl: (color?: string) => `0 20px 25px -5px ${string}, 0 8px 10px -6px ${string}`;
279
+ readonly '2xl': (color?: string) => `0 25px 50px -12px ${string}`;
280
+ readonly inner: (color?: string) => `inset 0 2px 4px 0 ${string}`;
281
+ readonly none: () => "none";
282
+ };
283
+ readonly zIndices: {
284
+ readonly hide: -1;
285
+ readonly auto: "auto";
286
+ readonly base: 0;
287
+ readonly docked: 10;
288
+ readonly dropdown: 1000;
289
+ readonly sticky: 1100;
290
+ readonly banner: 1200;
291
+ readonly overlay: 1300;
292
+ readonly modal: 1400;
293
+ readonly popover: 1500;
294
+ readonly skipLink: 1600;
295
+ readonly toast: 1700;
296
+ readonly tooltip: 1800;
297
+ };
298
+ };
@@ -1,42 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const React = require("react");
4
- const theme = require("./theme.cjs");
5
- const useMediaQuery = require("./useMediaQuery.cjs");
6
4
  const isServer = typeof window === "undefined";
7
- function getStatusColor(match, theme2) {
8
- return match.status === "pending" || match.isFetching ? theme2.active : match.status === "error" ? theme2.danger : match.status === "success" ? theme2.success : theme2.gray;
5
+ function getStatusColor(match) {
6
+ return match.status === "success" && match.isFetching ? "blue" : match.status === "pending" ? "yellow" : match.status === "error" ? "red" : match.status === "success" ? "green" : "gray";
9
7
  }
10
- function getRouteStatusColor(matches, route, theme2) {
8
+ function getRouteStatusColor(matches, route) {
11
9
  const found = matches.find((d) => d.routeId === route.id);
12
10
  if (!found)
13
- return theme2.gray;
14
- return getStatusColor(found, theme2);
15
- }
16
- function styled(type, newStyles, queries = {}) {
17
- return React.forwardRef(
18
- ({ style, ...rest }, ref) => {
19
- const theme$1 = theme.useTheme();
20
- const mediaStyles = Object.entries(queries).reduce(
21
- (current, [key, value]) => {
22
- return useMediaQuery(key) ? {
23
- ...current,
24
- ...typeof value === "function" ? value(rest, theme$1) : value
25
- } : current;
26
- },
27
- {}
28
- );
29
- return React.createElement(type, {
30
- ...rest,
31
- style: {
32
- ...typeof newStyles === "function" ? newStyles(rest, theme$1) : newStyles,
33
- ...style,
34
- ...mediaStyles
35
- },
36
- ref
37
- });
38
- }
39
- );
11
+ return "gray";
12
+ return getStatusColor(found);
40
13
  }
41
14
  function useIsMounted() {
42
15
  const mountedRef = React.useRef(false);
@@ -104,7 +77,6 @@ exports.getRouteStatusColor = getRouteStatusColor;
104
77
  exports.getStatusColor = getStatusColor;
105
78
  exports.isServer = isServer;
106
79
  exports.multiSortBy = multiSortBy;
107
- exports.styled = styled;
108
80
  exports.useIsMounted = useIsMounted;
109
81
  exports.useSafeState = useSafeState;
110
82
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../../src/utils.ts"],"sourcesContent":["import React from 'react'\nimport { AnyRootRoute, AnyRoute, AnyRouteMatch } from '@tanstack/react-router'\n\nimport { Theme, useTheme } from './theme'\nimport useMediaQuery from './useMediaQuery'\n\nexport const isServer = typeof window === 'undefined'\n\ntype StyledComponent<T> = T extends 'button'\n ? React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n : T extends 'input'\n ? React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >\n : T extends 'select'\n ? React.DetailedHTMLProps<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n HTMLSelectElement\n >\n : T extends keyof HTMLElementTagNameMap\n ? React.HTMLAttributes<HTMLElementTagNameMap[T]>\n : never\n\nexport function getStatusColor(match: AnyRouteMatch, theme: Theme) {\n return match.status === 'pending' || match.isFetching\n ? theme.active\n : match.status === 'error'\n ? theme.danger\n : match.status === 'success'\n ? theme.success\n : theme.gray\n}\n\nexport function getRouteStatusColor(\n matches: AnyRouteMatch[],\n route: AnyRoute | AnyRootRoute,\n theme: Theme,\n) {\n const found = matches.find((d) => d.routeId === route.id)\n if (!found) return theme.gray\n return getStatusColor(found, theme)\n}\n\ntype Styles =\n | React.CSSProperties\n | ((props: Record<string, any>, theme: Theme) => React.CSSProperties)\n\nexport function styled<T extends keyof HTMLElementTagNameMap>(\n type: T,\n newStyles: Styles,\n queries: Record<string, Styles> = {},\n) {\n return React.forwardRef<HTMLElementTagNameMap[T], StyledComponent<T>>(\n ({ style, ...rest }, ref) => {\n const theme = useTheme()\n\n const mediaStyles = Object.entries(queries).reduce(\n (current, [key, value]) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useMediaQuery(key)\n ? {\n ...current,\n ...(typeof value === 'function' ? value(rest, theme) : value),\n }\n : current\n },\n {},\n )\n\n return React.createElement(type, {\n ...rest,\n style: {\n ...(typeof newStyles === 'function'\n ? newStyles(rest, theme)\n : newStyles),\n ...style,\n ...mediaStyles,\n },\n ref,\n })\n },\n )\n}\n\nexport function useIsMounted() {\n const mountedRef = React.useRef(false)\n const isMounted = React.useCallback(() => mountedRef.current, [])\n\n React[isServer ? 'useEffect' : 'useLayoutEffect'](() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n }\n }, [])\n\n return isMounted\n}\n\n/**\n * Displays a string regardless the type of the data\n * @param {unknown} value Value to be stringified\n */\nexport const displayValue = (value: unknown) => {\n const name = Object.getOwnPropertyNames(Object(value))\n const newValue = typeof value === 'bigint' ? `${value.toString()}n` : value\n try {\n return JSON.stringify(newValue, name)\n } catch (e) {\n return `unable to stringify`\n }\n}\n\n/**\n * This hook is a safe useState version which schedules state updates in microtasks\n * to prevent updating a component state while React is rendering different components\n * or when the component is not mounted anymore.\n */\nexport function useSafeState<T>(initialState: T): [T, (value: T) => void] {\n const isMounted = useIsMounted()\n const [state, setState] = React.useState(initialState)\n\n const safeSetState = React.useCallback(\n (value: T) => {\n scheduleMicrotask(() => {\n if (isMounted()) {\n setState(value)\n }\n })\n },\n [isMounted],\n )\n\n return [state, safeSetState]\n}\n\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\nfunction scheduleMicrotask(callback: () => void) {\n Promise.resolve()\n .then(callback)\n .catch((error) =>\n setTimeout(() => {\n throw error\n }),\n )\n}\n\nexport function multiSortBy<T>(\n arr: T[],\n accessors: ((item: T) => any)[] = [(d) => d],\n): T[] {\n return arr\n .map((d, i) => [d, i] as const)\n .sort(([a, ai], [b, bi]) => {\n for (const accessor of accessors) {\n const ao = accessor(a)\n const bo = accessor(b)\n\n if (typeof ao === 'undefined') {\n if (typeof bo === 'undefined') {\n continue\n }\n return 1\n }\n\n if (ao === bo) {\n continue\n }\n\n return ao > bo ? 1 : -1\n }\n\n return ai - bi\n })\n .map(([d]) => d)\n}\n"],"names":["theme","useTheme"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","sources":["../../src/utils.ts"],"sourcesContent":["import React from 'react'\nimport { AnyRootRoute, AnyRoute, AnyRouteMatch } from '@tanstack/react-router'\n\nimport { Theme, useTheme } from './theme'\nimport useMediaQuery from './useMediaQuery'\n\nexport const isServer = typeof window === 'undefined'\n\ntype StyledComponent<T> = T extends 'button'\n ? React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n : T extends 'input'\n ? React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >\n : T extends 'select'\n ? React.DetailedHTMLProps<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n HTMLSelectElement\n >\n : T extends keyof HTMLElementTagNameMap\n ? React.HTMLAttributes<HTMLElementTagNameMap[T]>\n : never\n\nexport function getStatusColor(match: AnyRouteMatch) {\n return match.status === 'success' && match.isFetching\n ? 'blue'\n : match.status === 'pending'\n ? 'yellow'\n : match.status === 'error'\n ? 'red'\n : match.status === 'success'\n ? 'green'\n : 'gray'\n}\n\nexport function getRouteStatusColor(\n matches: AnyRouteMatch[],\n route: AnyRoute | AnyRootRoute,\n) {\n const found = matches.find((d) => d.routeId === route.id)\n if (!found) return 'gray'\n return getStatusColor(found)\n}\n\ntype Styles =\n | React.CSSProperties\n | ((props: Record<string, any>, theme: Theme) => React.CSSProperties)\n\nexport function styled<T extends keyof HTMLElementTagNameMap>(\n type: T,\n newStyles: Styles,\n queries: Record<string, Styles> = {},\n) {\n return React.forwardRef<HTMLElementTagNameMap[T], StyledComponent<T>>(\n ({ style, ...rest }, ref) => {\n const theme = useTheme()\n\n const mediaStyles = Object.entries(queries).reduce(\n (current, [key, value]) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useMediaQuery(key)\n ? {\n ...current,\n ...(typeof value === 'function' ? value(rest, theme) : value),\n }\n : current\n },\n {},\n )\n\n return React.createElement(type, {\n ...rest,\n style: {\n ...(typeof newStyles === 'function'\n ? newStyles(rest, theme)\n : newStyles),\n ...style,\n ...mediaStyles,\n },\n ref,\n })\n },\n )\n}\n\nexport function useIsMounted() {\n const mountedRef = React.useRef(false)\n const isMounted = React.useCallback(() => mountedRef.current, [])\n\n React[isServer ? 'useEffect' : 'useLayoutEffect'](() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n }\n }, [])\n\n return isMounted\n}\n\n/**\n * Displays a string regardless the type of the data\n * @param {unknown} value Value to be stringified\n */\nexport const displayValue = (value: unknown) => {\n const name = Object.getOwnPropertyNames(Object(value))\n const newValue = typeof value === 'bigint' ? `${value.toString()}n` : value\n try {\n return JSON.stringify(newValue, name)\n } catch (e) {\n return `unable to stringify`\n }\n}\n\n/**\n * This hook is a safe useState version which schedules state updates in microtasks\n * to prevent updating a component state while React is rendering different components\n * or when the component is not mounted anymore.\n */\nexport function useSafeState<T>(initialState: T): [T, (value: T) => void] {\n const isMounted = useIsMounted()\n const [state, setState] = React.useState(initialState)\n\n const safeSetState = React.useCallback(\n (value: T) => {\n scheduleMicrotask(() => {\n if (isMounted()) {\n setState(value)\n }\n })\n },\n [isMounted],\n )\n\n return [state, safeSetState]\n}\n\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\nfunction scheduleMicrotask(callback: () => void) {\n Promise.resolve()\n .then(callback)\n .catch((error) =>\n setTimeout(() => {\n throw error\n }),\n )\n}\n\nexport function multiSortBy<T>(\n arr: T[],\n accessors: ((item: T) => any)[] = [(d) => d],\n): T[] {\n return arr\n .map((d, i) => [d, i] as const)\n .sort(([a, ai], [b, bi]) => {\n for (const accessor of accessors) {\n const ao = accessor(a)\n const bo = accessor(b)\n\n if (typeof ao === 'undefined') {\n if (typeof bo === 'undefined') {\n continue\n }\n return 1\n }\n\n if (ao === bo) {\n continue\n }\n\n return ao > bo ? 1 : -1\n }\n\n return ai - bi\n })\n .map(([d]) => d)\n}\n"],"names":[],"mappings":";;;AAMa,MAAA,WAAW,OAAO,WAAW;AAqBnC,SAAS,eAAe,OAAsB;AACnD,SAAO,MAAM,WAAW,aAAa,MAAM,aACvC,SACA,MAAM,WAAW,YACf,WACA,MAAM,WAAW,UACf,QACA,MAAM,WAAW,YACf,UACA;AACZ;AAEgB,SAAA,oBACd,SACA,OACA;AACM,QAAA,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY,MAAM,EAAE;AACxD,MAAI,CAAC;AAAc,WAAA;AACnB,SAAO,eAAe,KAAK;AAC7B;AA2CO,SAAS,eAAe;AACvB,QAAA,aAAa,MAAM,OAAO,KAAK;AACrC,QAAM,YAAY,MAAM,YAAY,MAAM,WAAW,SAAS,CAAA,CAAE;AAEhE,QAAM,WAAW,cAAc,iBAAiB,EAAE,MAAM;AACtD,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,iBAAW,UAAU;AAAA,IAAA;AAAA,EAEzB,GAAG,CAAE,CAAA;AAEE,SAAA;AACT;AAMa,MAAA,eAAe,CAAC,UAAmB;AAC9C,QAAM,OAAO,OAAO,oBAAoB,OAAO,KAAK,CAAC;AAC/C,QAAA,WAAW,OAAO,UAAU,WAAW,GAAG,MAAM,SAAU,CAAA,MAAM;AAClE,MAAA;AACK,WAAA,KAAK,UAAU,UAAU,IAAI;AAAA,WAC7B,GAAG;AACH,WAAA;AAAA,EACT;AACF;AAOO,SAAS,aAAgB,cAA0C;AACxE,QAAM,YAAY;AAClB,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,YAAY;AAErD,QAAM,eAAe,MAAM;AAAA,IACzB,CAAC,UAAa;AACZ,wBAAkB,MAAM;AACtB,YAAI,aAAa;AACf,mBAAS,KAAK;AAAA,QAChB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,CAAC,SAAS;AAAA,EAAA;AAGL,SAAA,CAAC,OAAO,YAAY;AAC7B;AAMA,SAAS,kBAAkB,UAAsB;AAC/C,UAAQ,QAAQ,EACb,KAAK,QAAQ,EACb;AAAA,IAAM,CAAC,UACN,WAAW,MAAM;AACT,YAAA;AAAA,IAAA,CACP;AAAA,EAAA;AAEP;AAEO,SAAS,YACd,KACA,YAAkC,CAAC,CAAC,MAAM,CAAC,GACtC;AACL,SAAO,IACJ,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAU,EAC7B,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM;AAC1B,eAAW,YAAY,WAAW;AAC1B,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,SAAS,CAAC;AAEjB,UAAA,OAAO,OAAO,aAAa;AACzB,YAAA,OAAO,OAAO,aAAa;AAC7B;AAAA,QACF;AACO,eAAA;AAAA,MACT;AAEA,UAAI,OAAO,IAAI;AACb;AAAA,MACF;AAEO,aAAA,KAAK,KAAK,IAAI;AAAA,IACvB;AAEA,WAAO,KAAK;AAAA,EACb,CAAA,EACA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACnB;;;;;;;;"}
@@ -3,8 +3,8 @@ import { AnyRootRoute, AnyRoute, AnyRouteMatch } from '@tanstack/react-router';
3
3
  import { Theme } from './theme.cjs';
4
4
  export declare const isServer: boolean;
5
5
  type StyledComponent<T> = T extends 'button' ? React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> : T extends 'input' ? React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> : T extends 'select' ? React.DetailedHTMLProps<React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement> : T extends keyof HTMLElementTagNameMap ? React.HTMLAttributes<HTMLElementTagNameMap[T]> : never;
6
- export declare function getStatusColor(match: AnyRouteMatch, theme: Theme): "#444" | "#80cb00" | "#ff0085" | "#0099ff";
7
- export declare function getRouteStatusColor(matches: AnyRouteMatch[], route: AnyRoute | AnyRootRoute, theme: Theme): "#444" | "#80cb00" | "#ff0085" | "#0099ff";
6
+ export declare function getStatusColor(match: AnyRouteMatch): "blue" | "yellow" | "red" | "green" | "gray";
7
+ export declare function getRouteStatusColor(matches: AnyRouteMatch[], route: AnyRoute | AnyRootRoute): "blue" | "yellow" | "red" | "green" | "gray";
8
8
  type Styles = React.CSSProperties | ((props: Record<string, any>, theme: Theme) => React.CSSProperties);
9
9
  export declare function styled<T extends keyof HTMLElementTagNameMap>(type: T, newStyles: Styles, queries?: Record<string, Styles>): React.ForwardRefExoticComponent<React.PropsWithoutRef<StyledComponent<T>> & React.RefAttributes<HTMLElementTagNameMap[T]>>;
10
10
  export declare function useIsMounted(): () => boolean;
@@ -1,11 +1,4 @@
1
1
  import * as React from 'react';
2
- export declare const Entry: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
3
- export declare const Label: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
4
- export declare const LabelButton: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
5
- export declare const ExpandButton: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
- export declare const Value: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
7
- export declare const SubEntries: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
8
- export declare const Info: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
9
2
  type ExpanderProps = {
10
3
  expanded: boolean;
11
4
  style?: React.CSSProperties;