@tanstack/router-devtools 1.7.0 → 1.8.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 (70) hide show
  1. package/dist/cjs/Explorer.cjs +246 -0
  2. package/dist/cjs/Explorer.cjs.map +1 -0
  3. package/dist/cjs/devtools.cjs +1150 -0
  4. package/dist/cjs/devtools.cjs.map +1 -0
  5. package/dist/cjs/index.cjs +6 -0
  6. package/dist/cjs/index.cjs.map +1 -0
  7. package/dist/cjs/styledComponents.cjs +93 -0
  8. package/dist/cjs/styledComponents.cjs.map +1 -0
  9. package/dist/cjs/theme.cjs +28 -0
  10. package/dist/cjs/theme.cjs.map +1 -0
  11. package/dist/cjs/useLocalStorage.cjs +45 -0
  12. package/dist/cjs/useLocalStorage.cjs.map +1 -0
  13. package/dist/cjs/useMediaQuery.cjs +27 -0
  14. package/dist/cjs/useMediaQuery.cjs.map +1 -0
  15. package/dist/cjs/utils.cjs +110 -0
  16. package/dist/cjs/utils.cjs.map +1 -0
  17. package/dist/esm/Explorer.d.ts +53 -0
  18. package/dist/esm/Explorer.js +229 -0
  19. package/dist/esm/Explorer.js.map +1 -0
  20. package/dist/esm/devtools.d.ts +65 -0
  21. package/dist/esm/devtools.js +1150 -0
  22. package/{build/cjs → dist/esm}/devtools.js.map +1 -1
  23. package/dist/esm/index.d.ts +1 -0
  24. package/dist/esm/index.js +6 -0
  25. package/{build/cjs → dist/esm}/index.js.map +1 -1
  26. package/dist/esm/styledComponents.d.ts +7 -0
  27. package/dist/esm/styledComponents.js +93 -0
  28. package/{build/cjs → dist/esm}/styledComponents.js.map +1 -1
  29. package/dist/esm/theme.d.ts +34 -0
  30. package/dist/esm/theme.js +28 -0
  31. package/dist/esm/theme.js.map +1 -0
  32. package/dist/esm/useLocalStorage.d.ts +1 -0
  33. package/dist/esm/useLocalStorage.js +46 -0
  34. package/dist/esm/useLocalStorage.js.map +1 -0
  35. package/dist/esm/useMediaQuery.d.ts +1 -0
  36. package/dist/esm/useMediaQuery.js +28 -0
  37. package/{build/cjs → dist/esm}/useMediaQuery.js.map +1 -1
  38. package/dist/esm/utils.d.ts +23 -0
  39. package/dist/esm/utils.js +110 -0
  40. package/{build/cjs → dist/esm}/utils.js.map +1 -1
  41. package/package.json +40 -21
  42. package/build/cjs/Explorer.js +0 -218
  43. package/build/cjs/Explorer.js.map +0 -1
  44. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -29
  45. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  46. package/build/cjs/devtools.js +0 -828
  47. package/build/cjs/index.js +0 -19
  48. package/build/cjs/styledComponents.js +0 -76
  49. package/build/cjs/theme.js +0 -45
  50. package/build/cjs/theme.js.map +0 -1
  51. package/build/cjs/useLocalStorage.js +0 -54
  52. package/build/cjs/useLocalStorage.js.map +0 -1
  53. package/build/cjs/useMediaQuery.js +0 -54
  54. package/build/cjs/utils.js +0 -131
  55. package/build/esm/index.js +0 -1265
  56. package/build/esm/index.js.map +0 -1
  57. package/build/stats-html.html +0 -4838
  58. package/build/stats-react.json +0 -706
  59. package/build/umd/index.development.js +0 -1598
  60. package/build/umd/index.development.js.map +0 -1
  61. package/build/umd/index.production.js +0 -22
  62. package/build/umd/index.production.js.map +0 -1
  63. /package/{build/types/Explorer.d.ts → dist/cjs/Explorer.d.cts} +0 -0
  64. /package/{build/types/devtools.d.ts → dist/cjs/devtools.d.cts} +0 -0
  65. /package/{build/types/index.d.ts → dist/cjs/index.d.cts} +0 -0
  66. /package/{build/types/styledComponents.d.ts → dist/cjs/styledComponents.d.cts} +0 -0
  67. /package/{build/types/theme.d.ts → dist/cjs/theme.d.cts} +0 -0
  68. /package/{build/types/useLocalStorage.d.ts → dist/cjs/useLocalStorage.d.cts} +0 -0
  69. /package/{build/types/useMediaQuery.d.ts → dist/cjs/useMediaQuery.d.cts} +0 -0
  70. /package/{build/types/utils.d.ts → dist/cjs/utils.d.cts} +0 -0
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const utils = require("./utils.cjs");
6
+ function _interopNamespaceDefault(e) {
7
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
+ if (e) {
9
+ for (const k in e) {
10
+ if (k !== "default") {
11
+ const d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: () => e[k]
15
+ });
16
+ }
17
+ }
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
22
+ const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
23
+ const Entry = utils.styled("div", {
24
+ fontFamily: "Menlo, monospace",
25
+ fontSize: ".7rem",
26
+ lineHeight: "1.7",
27
+ outline: "none",
28
+ wordBreak: "break-word"
29
+ });
30
+ const Label = utils.styled("span", {
31
+ color: "white"
32
+ });
33
+ const LabelButton = utils.styled("button", {
34
+ cursor: "pointer",
35
+ color: "white"
36
+ });
37
+ const ExpandButton = utils.styled("button", {
38
+ cursor: "pointer",
39
+ color: "inherit",
40
+ font: "inherit",
41
+ outline: "inherit",
42
+ background: "transparent",
43
+ border: "none",
44
+ padding: 0
45
+ });
46
+ const Value = utils.styled("span", (_props, theme) => ({
47
+ color: theme.danger
48
+ }));
49
+ const SubEntries = utils.styled("div", {
50
+ marginLeft: ".1em",
51
+ paddingLeft: "1em",
52
+ borderLeft: "2px solid rgba(0,0,0,.15)"
53
+ });
54
+ const Info = utils.styled("span", {
55
+ color: "grey",
56
+ fontSize: ".7em"
57
+ });
58
+ const Expander = ({ expanded, style = {} }) => /* @__PURE__ */ jsxRuntime.jsx(
59
+ "span",
60
+ {
61
+ style: {
62
+ display: "inline-block",
63
+ transition: "all .1s ease",
64
+ transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ""}`,
65
+ ...style
66
+ },
67
+ children: "▶"
68
+ }
69
+ );
70
+ function chunkArray(array, size) {
71
+ if (size < 1)
72
+ return [];
73
+ let i = 0;
74
+ const result = [];
75
+ while (i < array.length) {
76
+ result.push(array.slice(i, i + size));
77
+ i = i + size;
78
+ }
79
+ return result;
80
+ }
81
+ const DefaultRenderer = ({
82
+ handleEntry,
83
+ label,
84
+ value,
85
+ subEntries = [],
86
+ subEntryPages = [],
87
+ type,
88
+ expanded = false,
89
+ toggleExpanded,
90
+ pageSize,
91
+ renderer
92
+ }) => {
93
+ const [expandedPages, setExpandedPages] = React__namespace.useState([]);
94
+ const [valueSnapshot, setValueSnapshot] = React__namespace.useState(void 0);
95
+ const refreshValueSnapshot = () => {
96
+ setValueSnapshot(value());
97
+ };
98
+ return /* @__PURE__ */ jsxRuntime.jsx(Entry, { children: subEntryPages.length ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
99
+ /* @__PURE__ */ jsxRuntime.jsxs(ExpandButton, { onClick: () => toggleExpanded(), children: [
100
+ /* @__PURE__ */ jsxRuntime.jsx(Expander, { expanded }),
101
+ " ",
102
+ label,
103
+ " ",
104
+ /* @__PURE__ */ jsxRuntime.jsxs(Info, { children: [
105
+ String(type).toLowerCase() === "iterable" ? "(Iterable) " : "",
106
+ subEntries.length,
107
+ " ",
108
+ subEntries.length > 1 ? `items` : `item`
109
+ ] })
110
+ ] }),
111
+ expanded ? subEntryPages.length === 1 ? /* @__PURE__ */ jsxRuntime.jsx(SubEntries, { children: subEntries.map((entry, index) => handleEntry(entry)) }) : /* @__PURE__ */ jsxRuntime.jsx(SubEntries, { children: subEntryPages.map((entries, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(Entry, { children: [
112
+ /* @__PURE__ */ jsxRuntime.jsxs(
113
+ LabelButton,
114
+ {
115
+ onClick: () => setExpandedPages(
116
+ (old) => old.includes(index) ? old.filter((d) => d !== index) : [...old, index]
117
+ ),
118
+ children: [
119
+ /* @__PURE__ */ jsxRuntime.jsx(Expander, { expanded }),
120
+ " [",
121
+ index * pageSize,
122
+ " ...",
123
+ " ",
124
+ index * pageSize + pageSize - 1,
125
+ "]"
126
+ ]
127
+ }
128
+ ),
129
+ expandedPages.includes(index) ? /* @__PURE__ */ jsxRuntime.jsx(SubEntries, { children: entries.map((entry) => handleEntry(entry)) }) : null
130
+ ] }) }, index)) }) : null
131
+ ] }) : type === "function" ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(
132
+ Explorer,
133
+ {
134
+ renderer,
135
+ label: /* @__PURE__ */ jsxRuntime.jsxs(
136
+ "button",
137
+ {
138
+ onClick: refreshValueSnapshot,
139
+ style: {
140
+ appearance: "none",
141
+ border: "0",
142
+ background: "transparent"
143
+ },
144
+ children: [
145
+ /* @__PURE__ */ jsxRuntime.jsx(Label, { children: label }),
146
+ " 🔄",
147
+ " "
148
+ ]
149
+ }
150
+ ),
151
+ value: valueSnapshot,
152
+ defaultExpanded: {}
153
+ }
154
+ ) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
155
+ /* @__PURE__ */ jsxRuntime.jsxs(Label, { children: [
156
+ label,
157
+ ":"
158
+ ] }),
159
+ " ",
160
+ /* @__PURE__ */ jsxRuntime.jsx(Value, { children: utils.displayValue(value) })
161
+ ] }) });
162
+ };
163
+ function isIterable(x) {
164
+ return Symbol.iterator in x;
165
+ }
166
+ function Explorer({
167
+ value,
168
+ defaultExpanded,
169
+ renderer = DefaultRenderer,
170
+ pageSize = 100,
171
+ filterSubEntries,
172
+ ...rest
173
+ }) {
174
+ const [expanded, setExpanded] = React__namespace.useState(Boolean(defaultExpanded));
175
+ const toggleExpanded = React__namespace.useCallback(() => setExpanded((old) => !old), []);
176
+ let type = typeof value;
177
+ let subEntries = [];
178
+ const makeProperty = (sub) => {
179
+ const subDefaultExpanded = defaultExpanded === true ? { [sub.label]: true } : defaultExpanded == null ? void 0 : defaultExpanded[sub.label];
180
+ return {
181
+ ...sub,
182
+ defaultExpanded: subDefaultExpanded
183
+ };
184
+ };
185
+ if (Array.isArray(value)) {
186
+ type = "array";
187
+ subEntries = value.map(
188
+ (d, i) => makeProperty({
189
+ label: i.toString(),
190
+ value: d
191
+ })
192
+ );
193
+ } else if (value !== null && typeof value === "object" && isIterable(value) && typeof value[Symbol.iterator] === "function") {
194
+ type = "Iterable";
195
+ subEntries = Array.from(
196
+ value,
197
+ (val, i) => makeProperty({
198
+ label: i.toString(),
199
+ value: val
200
+ })
201
+ );
202
+ } else if (typeof value === "object" && value !== null) {
203
+ type = "object";
204
+ subEntries = Object.entries(value).map(
205
+ ([key, val]) => makeProperty({
206
+ label: key,
207
+ value: val
208
+ })
209
+ );
210
+ }
211
+ subEntries = filterSubEntries ? filterSubEntries(subEntries) : subEntries;
212
+ const subEntryPages = chunkArray(subEntries, pageSize);
213
+ return renderer({
214
+ handleEntry: (entry) => /* @__PURE__ */ jsxRuntime.jsx(
215
+ Explorer,
216
+ {
217
+ value,
218
+ renderer,
219
+ filterSubEntries,
220
+ ...rest,
221
+ ...entry
222
+ },
223
+ entry.label
224
+ ),
225
+ type,
226
+ subEntries,
227
+ subEntryPages,
228
+ value,
229
+ expanded,
230
+ toggleExpanded,
231
+ pageSize,
232
+ ...rest
233
+ });
234
+ }
235
+ exports.DefaultRenderer = DefaultRenderer;
236
+ exports.Entry = Entry;
237
+ exports.ExpandButton = ExpandButton;
238
+ exports.Expander = Expander;
239
+ exports.Info = Info;
240
+ exports.Label = Label;
241
+ exports.LabelButton = LabelButton;
242
+ exports.SubEntries = SubEntries;
243
+ exports.Value = Value;
244
+ exports.chunkArray = chunkArray;
245
+ exports.default = Explorer;
246
+ //# sourceMappingURL=Explorer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Explorer.cjs","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '.7rem',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n handleEntry: HandleEntryFn\n label?: React.ReactNode\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n renderer?: Renderer\n filterSubEntries?: (subEntries: Property[]) => Property[]\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n handleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n renderer,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n const [valueSnapshot, setValueSnapshot] = React.useState(undefined)\n\n const refreshValueSnapshot = () => {\n setValueSnapshot((value as () => any)())\n }\n\n return (\n <Entry>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>\n {subEntries.map((entry, index) => handleEntry(entry))}\n </SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>\n {entries.map((entry) => handleEntry(entry))}\n </SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : type === 'function' ? (\n <>\n <Explorer\n renderer={renderer}\n label={\n <button\n onClick={refreshValueSnapshot}\n style={{\n appearance: 'none',\n border: '0',\n background: 'transparent',\n }}\n >\n <Label>{label}</Label> 🔄{' '}\n </button>\n }\n value={valueSnapshot}\n defaultExpanded={{}}\n />\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype HandleEntryFn = (entry: Entry) => JSX.Element\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n filterSubEntries,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n subEntries = filterSubEntries ? filterSubEntries(subEntries) : subEntries\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n handleEntry: (entry) => (\n <Explorer\n key={entry.label}\n value={value}\n renderer={renderer}\n filterSubEntries={filterSubEntries}\n {...rest}\n {...entry}\n />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["styled","jsx","React","jsxs","Fragment","displayValue"],"mappings":"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"}