@tanstack/router-devtools 0.0.1-beta.119 → 0.0.1-beta.120
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.
- package/build/cjs/Explorer.js +4 -1
- package/build/cjs/Explorer.js.map +1 -1
- package/build/cjs/devtools.js +33 -16
- package/build/cjs/devtools.js.map +1 -1
- package/build/cjs/utils.js +3 -3
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +41 -21
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +132 -126
- package/build/types/Explorer.d.ts +7 -1
- package/build/umd/index.development.js +93 -30
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +3 -3
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/Explorer.tsx +5 -0
- package/src/devtools.tsx +36 -19
- package/src/utils.ts +8 -13
package/build/cjs/Explorer.js
CHANGED
|
@@ -150,6 +150,7 @@ function Explorer({
|
|
|
150
150
|
defaultExpanded,
|
|
151
151
|
renderer = DefaultRenderer,
|
|
152
152
|
pageSize = 100,
|
|
153
|
+
filterSubEntries,
|
|
153
154
|
...rest
|
|
154
155
|
}) {
|
|
155
156
|
const [expanded, setExpanded] = React__namespace.useState(Boolean(defaultExpanded));
|
|
@@ -184,12 +185,14 @@ function Explorer({
|
|
|
184
185
|
value: val
|
|
185
186
|
}));
|
|
186
187
|
}
|
|
188
|
+
subEntries = filterSubEntries ? filterSubEntries(subEntries) : subEntries;
|
|
187
189
|
const subEntryPages = chunkArray(subEntries, pageSize);
|
|
188
190
|
return renderer({
|
|
189
191
|
handleEntry: entry => /*#__PURE__*/React__namespace.createElement(Explorer, _rollupPluginBabelHelpers["extends"]({
|
|
190
192
|
key: entry.label,
|
|
191
193
|
value: value,
|
|
192
|
-
renderer: renderer
|
|
194
|
+
renderer: renderer,
|
|
195
|
+
filterSubEntries: filterSubEntries
|
|
193
196
|
}, rest, entry)),
|
|
194
197
|
type,
|
|
195
198
|
subEntries,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Explorer.js","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}\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 ...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 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 {...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":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","React","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","renderer","expandedPages","setExpandedPages","useState","valueSnapshot","setValueSnapshot","undefined","refreshValueSnapshot","String","toLowerCase","map","entry","index","entries","old","includes","filter","d","appearance","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key","_extends"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAIaA,KAAK,GAAGC,YAAM,CAAC,KAAK,EAAE;AACjCC,EAAAA,UAAU,EAAE,kBAAkB;AAC9BC,EAAAA,QAAQ,EAAE,OAAO;AACjBC,EAAAA,UAAU,EAAE,KAAK;AACjBC,EAAAA,OAAO,EAAE,MAAM;AACfC,EAAAA,SAAS,EAAE,YAAA;AACb,CAAC,EAAC;MAEWC,KAAK,GAAGN,YAAM,CAAC,MAAM,EAAE;AAClCO,EAAAA,KAAK,EAAE,OAAA;AACT,CAAC,EAAC;MAEWC,WAAW,GAAGR,YAAM,CAAC,QAAQ,EAAE;AAC1CS,EAAAA,MAAM,EAAE,SAAS;AACjBF,EAAAA,KAAK,EAAE,OAAA;AACT,CAAC,EAAC;MAEWG,YAAY,GAAGV,YAAM,CAAC,QAAQ,EAAE;AAC3CS,EAAAA,MAAM,EAAE,SAAS;AACjBF,EAAAA,KAAK,EAAE,SAAS;AAChBI,EAAAA,IAAI,EAAE,SAAS;AACfP,EAAAA,OAAO,EAAE,SAAS;AAClBQ,EAAAA,UAAU,EAAE,aAAa;AACzBC,EAAAA,MAAM,EAAE,MAAM;AACdC,EAAAA,OAAO,EAAE,CAAA;AACX,CAAC,EAAC;AAEK,MAAMC,KAAK,GAAGf,YAAM,CAAC,MAAM,EAAE,CAACgB,MAAM,EAAEC,KAAK,MAAM;EACtDV,KAAK,EAAEU,KAAK,CAACC,MAAAA;AACf,CAAC,CAAC,EAAC;MAEUC,UAAU,GAAGnB,YAAM,CAAC,KAAK,EAAE;AACtCoB,EAAAA,UAAU,EAAE,MAAM;AAClBC,EAAAA,WAAW,EAAE,KAAK;AAClBC,EAAAA,UAAU,EAAE,2BAAA;AACd,CAAC,EAAC;MAEWC,IAAI,GAAGvB,YAAM,CAAC,MAAM,EAAE;AACjCO,EAAAA,KAAK,EAAE,MAAM;AACbL,EAAAA,QAAQ,EAAE,MAAA;AACZ,CAAC,EAAC;AAOK,MAAMsB,QAAQ,GAAG,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,KAAK,GAAG,EAAC;AAAiB,CAAC,kBAC9DC,gBAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AACE,EAAA,KAAK,EAAE;AACLC,IAAAA,OAAO,EAAE,cAAc;AACvBC,IAAAA,UAAU,EAAE,cAAc;AAC1BC,IAAAA,SAAS,EAAG,CAAA,OAAA,EAASL,QAAQ,GAAG,EAAE,GAAG,CAAE,CAAA,KAAA,EAAOC,KAAK,CAACI,SAAS,IAAI,EAAG,CAAC,CAAA;IACrE,GAAGJ,KAAAA;AACL,GAAA;AAAE,CAIL,EAAA,QAAA,EAAA;AAmBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,UAAU,CAAIC,KAAU,EAAEC,IAAY,EAAS;AAC7D,EAAA,IAAIA,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAA;EACvB,IAAIC,CAAC,GAAG,CAAC,CAAA;EACT,MAAMC,MAAa,GAAG,EAAE,CAAA;AACxB,EAAA,OAAOD,CAAC,GAAGF,KAAK,CAACI,MAAM,EAAE;AACvBD,IAAAA,MAAM,CAACE,IAAI,CAACL,KAAK,CAACM,KAAK,CAACJ,CAAC,EAAEA,CAAC,GAAGD,IAAI,CAAC,CAAC,CAAA;IACrCC,CAAC,GAAGA,CAAC,GAAGD,IAAI,CAAA;AACd,GAAA;AACA,EAAA,OAAOE,MAAM,CAAA;AACf,CAAA;AAIO,MAAMI,eAAyB,GAAG,CAAC;EACxCC,WAAW;EACXC,KAAK;EACLC,KAAK;AACLC,EAAAA,UAAU,GAAG,EAAE;AACfC,EAAAA,aAAa,GAAG,EAAE;EAClBC,IAAI;AACJpB,EAAAA,QAAQ,GAAG,KAAK;EAChBqB,cAAc;EACdC,QAAQ;AACRC,EAAAA,QAAAA;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGvB,gBAAK,CAACwB,QAAQ,CAAW,EAAE,CAAC,CAAA;EACtE,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG1B,gBAAK,CAACwB,QAAQ,CAACG,SAAS,CAAC,CAAA;EAEnE,MAAMC,oBAAoB,GAAG,MAAM;IACjCF,gBAAgB,CAAEX,KAAK,EAAgB,CAAC,CAAA;GACzC,CAAA;EAED,oBACEf,gBAAA,CAAA,aAAA,CAAC,KAAK,EACHiB,IAAAA,EAAAA,aAAa,CAACR,MAAM,gBACnBT,gBACE,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,YAAY,EAAA;IAAC,OAAO,EAAE,MAAMmB,cAAc,EAAA;AAAG,GAAA,eAC5CnB,+BAAC,QAAQ,EAAA;AAAC,IAAA,QAAQ,EAAEF,QAAAA;AAAS,GAAA,CAAG,OAAEgB,KAAK,EAAE,GAAG,eAC5Cd,+BAAC,IAAI,EAAA,IAAA,EACF6B,MAAM,CAACX,IAAI,CAAC,CAACY,WAAW,EAAE,KAAK,UAAU,GAAG,aAAa,GAAG,EAAE,EAC9Dd,UAAU,CAACP,MAAM,OAAGO,UAAU,CAACP,MAAM,GAAG,CAAC,GAAI,CAAA,KAAA,CAAM,GAAI,CAAA,IAAA,CAAK,CACxD,CACM,EACdX,QAAQ,GACPmB,aAAa,CAACR,MAAM,KAAK,CAAC,gBACxBT,gBAAC,CAAA,aAAA,CAAA,UAAU,EACRgB,IAAAA,EAAAA,UAAU,CAACe,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKpB,WAAW,CAACmB,KAAK,CAAC,CAAC,CAC1C,gBAEbhC,+BAAC,UAAU,EAAA,IAAA,EACRiB,aAAa,CAACc,GAAG,CAAC,CAACG,OAAO,EAAED,KAAK,kBAChCjC,gBAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAK,IAAA,GAAG,EAAEiC,KAAAA;AAAM,GAAA,eACdjC,gBAAC,CAAA,aAAA,CAAA,KAAK,EACJ,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,WAAW,EAAA;AACV,IAAA,OAAO,EAAE,MACPuB,gBAAgB,CAAEY,GAAG,IACnBA,GAAG,CAACC,QAAQ,CAACH,KAAK,CAAC,GACfE,GAAG,CAACE,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKL,KAAK,CAAC,GAC9B,CAAC,GAAGE,GAAG,EAAEF,KAAK,CAAC,CAAA;AAEtB,GAAA,eAEDjC,+BAAC,QAAQ,EAAA;AAAC,IAAA,QAAQ,EAAEF,QAAAA;GAAY,CAAA,EAAA,IAAA,EAAGmC,KAAK,GAAGb,QAAQ,EAAA,MAAA,EAAM,GAAG,EAC3Da,KAAK,GAAGb,QAAQ,GAAGA,QAAQ,GAAG,CAAC,EAAA,GAAA,CACpB,EACbE,aAAa,CAACc,QAAQ,CAACH,KAAK,CAAC,gBAC5BjC,gBAAC,CAAA,aAAA,CAAA,UAAU,EACRkC,IAAAA,EAAAA,OAAO,CAACH,GAAG,CAAEC,KAAK,IAAKnB,WAAW,CAACmB,KAAK,CAAC,CAAC,CAChC,GACX,IAAI,CACF,CAEX,CAAC,CAEL,GACC,IAAI,CACP,GACDd,IAAI,KAAK,UAAU,gBACrBlB,gBACE,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,QAAQ,EAAA;AACP,IAAA,QAAQ,EAAEqB,QAAS;AACnB,IAAA,KAAK,eACHrB,gBAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AACE,MAAA,OAAO,EAAE4B,oBAAqB;AAC9B,MAAA,KAAK,EAAE;AACLW,QAAAA,UAAU,EAAE,MAAM;AAClBrD,QAAAA,MAAM,EAAE,GAAG;AACXD,QAAAA,UAAU,EAAE,aAAA;AACd,OAAA;AAAE,KAAA,eAEFe,+BAAC,KAAK,EAAA,IAAA,EAAEc,KAAK,CAAS,EAAA,eAAA,EAAI,GAAG,CAEhC;AACD,IAAA,KAAK,EAAEW,aAAc;AACrB,IAAA,eAAe,EAAE,EAAC;AAAE,GAAA,CACpB,CACD,gBAEHzB,gBAAA,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eACEA,+BAAC,KAAK,EAAA,IAAA,EAAEc,KAAK,EAAU,GAAA,CAAA,EAAA,GAAA,eAACd,gBAAC,CAAA,aAAA,CAAA,KAAK,QAAEwC,kBAAY,CAACzB,KAAK,CAAC,CAAS,CAE/D,CACK,CAAA;AAEZ,EAAC;AAeD,SAAS0B,UAAU,CAACC,CAAM,EAA0B;AAClD,EAAA,OAAOC,MAAM,CAACC,QAAQ,IAAIF,CAAC,CAAA;AAC7B,CAAA;AAEe,SAASG,QAAQ,CAAC;EAC/B9B,KAAK;EACL+B,eAAe;AACfzB,EAAAA,QAAQ,GAAGT,eAAe;AAC1BQ,EAAAA,QAAQ,GAAG,GAAG;EACd,GAAG2B,IAAAA;AACU,CAAC,EAAE;AAChB,EAAA,MAAM,CAACjD,QAAQ,EAAEkD,WAAW,CAAC,GAAGhD,gBAAK,CAACwB,QAAQ,CAACyB,OAAO,CAACH,eAAe,CAAC,CAAC,CAAA;AACxE,EAAA,MAAM3B,cAAc,GAAGnB,gBAAK,CAACkD,WAAW,CAAC,MAAMF,WAAW,CAAEb,GAAG,IAAK,CAACA,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;EAE9E,IAAIjB,IAAY,GAAG,OAAOH,KAAK,CAAA;EAC/B,IAAIC,UAAsB,GAAG,EAAE,CAAA;EAE/B,MAAMmC,YAAY,GAAIC,GAAsC,IAAe;AACzE,IAAA,MAAMC,kBAAkB,GACtBP,eAAe,KAAK,IAAI,GACpB;MAAE,CAACM,GAAG,CAACtC,KAAK,GAAG,IAAA;AAAK,KAAC,GACrBgC,eAAe,GAAGM,GAAG,CAACtC,KAAK,CAAC,CAAA;IAClC,OAAO;AACL,MAAA,GAAGsC,GAAG;AACNN,MAAAA,eAAe,EAAEO,kBAAAA;KAClB,CAAA;GACF,CAAA;AAED,EAAA,IAAIC,KAAK,CAACC,OAAO,CAACxC,KAAK,CAAC,EAAE;AACxBG,IAAAA,IAAI,GAAG,OAAO,CAAA;IACdF,UAAU,GAAGD,KAAK,CAACgB,GAAG,CAAC,CAACO,CAAC,EAAE/B,CAAC,KAC1B4C,YAAY,CAAC;AACXrC,MAAAA,KAAK,EAAEP,CAAC,CAACiD,QAAQ,EAAE;AACnBzC,MAAAA,KAAK,EAAEuB,CAAAA;AACT,KAAC,CAAC,CACH,CAAA;GACF,MAAM,IACLvB,KAAK,KAAK,IAAI,IACd,OAAOA,KAAK,KAAK,QAAQ,IACzB0B,UAAU,CAAC1B,KAAK,CAAC,IACjB,OAAOA,KAAK,CAAC4B,MAAM,CAACC,QAAQ,CAAC,KAAK,UAAU,EAC5C;AACA1B,IAAAA,IAAI,GAAG,UAAU,CAAA;AACjBF,IAAAA,UAAU,GAAGsC,KAAK,CAACG,IAAI,CAAC1C,KAAK,EAAE,CAAC2C,GAAG,EAAEnD,CAAC,KACpC4C,YAAY,CAAC;AACXrC,MAAAA,KAAK,EAAEP,CAAC,CAACiD,QAAQ,EAAE;AACnBzC,MAAAA,KAAK,EAAE2C,GAAAA;AACT,KAAC,CAAC,CACH,CAAA;GACF,MAAM,IAAI,OAAO3C,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;AACtDG,IAAAA,IAAI,GAAG,QAAQ,CAAA;AACfF,IAAAA,UAAU,GAAG2C,MAAM,CAACzB,OAAO,CAACnB,KAAK,CAAC,CAACgB,GAAG,CAAC,CAAC,CAAC6B,GAAG,EAAEF,GAAG,CAAC,KAChDP,YAAY,CAAC;AACXrC,MAAAA,KAAK,EAAE8C,GAAG;AACV7C,MAAAA,KAAK,EAAE2C,GAAAA;AACT,KAAC,CAAC,CACH,CAAA;AACH,GAAA;AAEA,EAAA,MAAMzC,aAAa,GAAGb,UAAU,CAACY,UAAU,EAAEI,QAAQ,CAAC,CAAA;AAEtD,EAAA,OAAOC,QAAQ,CAAC;AACdR,IAAAA,WAAW,EAAGmB,KAAK,iBACjBhC,gBAAA,CAAA,aAAA,CAAC,QAAQ,EAAA6D,oCAAA,CAAA;MACP,GAAG,EAAE7B,KAAK,CAAClB,KAAM;AACjB,MAAA,KAAK,EAAEC,KAAM;AACb,MAAA,QAAQ,EAAEM,QAAAA;KACN0B,EAAAA,IAAI,EACJf,KAAK,CAEZ,CAAA;IACDd,IAAI;IACJF,UAAU;IACVC,aAAa;IACbF,KAAK;IACLjB,QAAQ;IACRqB,cAAc;IACdC,QAAQ;IACR,GAAG2B,IAAAA;AACL,GAAC,CAAC,CAAA;AACJ;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Explorer.js","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":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","React","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","renderer","expandedPages","setExpandedPages","useState","valueSnapshot","setValueSnapshot","undefined","refreshValueSnapshot","String","toLowerCase","map","entry","index","entries","old","includes","filter","d","appearance","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","filterSubEntries","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key","_extends"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAIaA,KAAK,GAAGC,YAAM,CAAC,KAAK,EAAE;AACjCC,EAAAA,UAAU,EAAE,kBAAkB;AAC9BC,EAAAA,QAAQ,EAAE,OAAO;AACjBC,EAAAA,UAAU,EAAE,KAAK;AACjBC,EAAAA,OAAO,EAAE,MAAM;AACfC,EAAAA,SAAS,EAAE,YAAA;AACb,CAAC,EAAC;MAEWC,KAAK,GAAGN,YAAM,CAAC,MAAM,EAAE;AAClCO,EAAAA,KAAK,EAAE,OAAA;AACT,CAAC,EAAC;MAEWC,WAAW,GAAGR,YAAM,CAAC,QAAQ,EAAE;AAC1CS,EAAAA,MAAM,EAAE,SAAS;AACjBF,EAAAA,KAAK,EAAE,OAAA;AACT,CAAC,EAAC;MAEWG,YAAY,GAAGV,YAAM,CAAC,QAAQ,EAAE;AAC3CS,EAAAA,MAAM,EAAE,SAAS;AACjBF,EAAAA,KAAK,EAAE,SAAS;AAChBI,EAAAA,IAAI,EAAE,SAAS;AACfP,EAAAA,OAAO,EAAE,SAAS;AAClBQ,EAAAA,UAAU,EAAE,aAAa;AACzBC,EAAAA,MAAM,EAAE,MAAM;AACdC,EAAAA,OAAO,EAAE,CAAA;AACX,CAAC,EAAC;AAEK,MAAMC,KAAK,GAAGf,YAAM,CAAC,MAAM,EAAE,CAACgB,MAAM,EAAEC,KAAK,MAAM;EACtDV,KAAK,EAAEU,KAAK,CAACC,MAAAA;AACf,CAAC,CAAC,EAAC;MAEUC,UAAU,GAAGnB,YAAM,CAAC,KAAK,EAAE;AACtCoB,EAAAA,UAAU,EAAE,MAAM;AAClBC,EAAAA,WAAW,EAAE,KAAK;AAClBC,EAAAA,UAAU,EAAE,2BAAA;AACd,CAAC,EAAC;MAEWC,IAAI,GAAGvB,YAAM,CAAC,MAAM,EAAE;AACjCO,EAAAA,KAAK,EAAE,MAAM;AACbL,EAAAA,QAAQ,EAAE,MAAA;AACZ,CAAC,EAAC;AAOK,MAAMsB,QAAQ,GAAG,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,KAAK,GAAG,EAAC;AAAiB,CAAC,kBAC9DC,gBAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AACE,EAAA,KAAK,EAAE;AACLC,IAAAA,OAAO,EAAE,cAAc;AACvBC,IAAAA,UAAU,EAAE,cAAc;AAC1BC,IAAAA,SAAS,EAAG,CAAA,OAAA,EAASL,QAAQ,GAAG,EAAE,GAAG,CAAE,CAAA,KAAA,EAAOC,KAAK,CAACI,SAAS,IAAI,EAAG,CAAC,CAAA;IACrE,GAAGJ,KAAAA;AACL,GAAA;AAAE,CAIL,EAAA,QAAA,EAAA;AAoBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,UAAU,CAAIC,KAAU,EAAEC,IAAY,EAAS;AAC7D,EAAA,IAAIA,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAA;EACvB,IAAIC,CAAC,GAAG,CAAC,CAAA;EACT,MAAMC,MAAa,GAAG,EAAE,CAAA;AACxB,EAAA,OAAOD,CAAC,GAAGF,KAAK,CAACI,MAAM,EAAE;AACvBD,IAAAA,MAAM,CAACE,IAAI,CAACL,KAAK,CAACM,KAAK,CAACJ,CAAC,EAAEA,CAAC,GAAGD,IAAI,CAAC,CAAC,CAAA;IACrCC,CAAC,GAAGA,CAAC,GAAGD,IAAI,CAAA;AACd,GAAA;AACA,EAAA,OAAOE,MAAM,CAAA;AACf,CAAA;AAIO,MAAMI,eAAyB,GAAG,CAAC;EACxCC,WAAW;EACXC,KAAK;EACLC,KAAK;AACLC,EAAAA,UAAU,GAAG,EAAE;AACfC,EAAAA,aAAa,GAAG,EAAE;EAClBC,IAAI;AACJpB,EAAAA,QAAQ,GAAG,KAAK;EAChBqB,cAAc;EACdC,QAAQ;AACRC,EAAAA,QAAAA;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGvB,gBAAK,CAACwB,QAAQ,CAAW,EAAE,CAAC,CAAA;EACtE,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG1B,gBAAK,CAACwB,QAAQ,CAACG,SAAS,CAAC,CAAA;EAEnE,MAAMC,oBAAoB,GAAG,MAAM;IACjCF,gBAAgB,CAAEX,KAAK,EAAgB,CAAC,CAAA;GACzC,CAAA;EAED,oBACEf,gBAAA,CAAA,aAAA,CAAC,KAAK,EACHiB,IAAAA,EAAAA,aAAa,CAACR,MAAM,gBACnBT,gBACE,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,YAAY,EAAA;IAAC,OAAO,EAAE,MAAMmB,cAAc,EAAA;AAAG,GAAA,eAC5CnB,+BAAC,QAAQ,EAAA;AAAC,IAAA,QAAQ,EAAEF,QAAAA;AAAS,GAAA,CAAG,OAAEgB,KAAK,EAAE,GAAG,eAC5Cd,+BAAC,IAAI,EAAA,IAAA,EACF6B,MAAM,CAACX,IAAI,CAAC,CAACY,WAAW,EAAE,KAAK,UAAU,GAAG,aAAa,GAAG,EAAE,EAC9Dd,UAAU,CAACP,MAAM,OAAGO,UAAU,CAACP,MAAM,GAAG,CAAC,GAAI,CAAA,KAAA,CAAM,GAAI,CAAA,IAAA,CAAK,CACxD,CACM,EACdX,QAAQ,GACPmB,aAAa,CAACR,MAAM,KAAK,CAAC,gBACxBT,gBAAC,CAAA,aAAA,CAAA,UAAU,EACRgB,IAAAA,EAAAA,UAAU,CAACe,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKpB,WAAW,CAACmB,KAAK,CAAC,CAAC,CAC1C,gBAEbhC,+BAAC,UAAU,EAAA,IAAA,EACRiB,aAAa,CAACc,GAAG,CAAC,CAACG,OAAO,EAAED,KAAK,kBAChCjC,gBAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAK,IAAA,GAAG,EAAEiC,KAAAA;AAAM,GAAA,eACdjC,gBAAC,CAAA,aAAA,CAAA,KAAK,EACJ,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,WAAW,EAAA;AACV,IAAA,OAAO,EAAE,MACPuB,gBAAgB,CAAEY,GAAG,IACnBA,GAAG,CAACC,QAAQ,CAACH,KAAK,CAAC,GACfE,GAAG,CAACE,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKL,KAAK,CAAC,GAC9B,CAAC,GAAGE,GAAG,EAAEF,KAAK,CAAC,CAAA;AAEtB,GAAA,eAEDjC,+BAAC,QAAQ,EAAA;AAAC,IAAA,QAAQ,EAAEF,QAAAA;GAAY,CAAA,EAAA,IAAA,EAAGmC,KAAK,GAAGb,QAAQ,EAAA,MAAA,EAAM,GAAG,EAC3Da,KAAK,GAAGb,QAAQ,GAAGA,QAAQ,GAAG,CAAC,EAAA,GAAA,CACpB,EACbE,aAAa,CAACc,QAAQ,CAACH,KAAK,CAAC,gBAC5BjC,gBAAC,CAAA,aAAA,CAAA,UAAU,EACRkC,IAAAA,EAAAA,OAAO,CAACH,GAAG,CAAEC,KAAK,IAAKnB,WAAW,CAACmB,KAAK,CAAC,CAAC,CAChC,GACX,IAAI,CACF,CAEX,CAAC,CAEL,GACC,IAAI,CACP,GACDd,IAAI,KAAK,UAAU,gBACrBlB,gBACE,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,QAAQ,EAAA;AACP,IAAA,QAAQ,EAAEqB,QAAS;AACnB,IAAA,KAAK,eACHrB,gBAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AACE,MAAA,OAAO,EAAE4B,oBAAqB;AAC9B,MAAA,KAAK,EAAE;AACLW,QAAAA,UAAU,EAAE,MAAM;AAClBrD,QAAAA,MAAM,EAAE,GAAG;AACXD,QAAAA,UAAU,EAAE,aAAA;AACd,OAAA;AAAE,KAAA,eAEFe,+BAAC,KAAK,EAAA,IAAA,EAAEc,KAAK,CAAS,EAAA,eAAA,EAAI,GAAG,CAEhC;AACD,IAAA,KAAK,EAAEW,aAAc;AACrB,IAAA,eAAe,EAAE,EAAC;AAAE,GAAA,CACpB,CACD,gBAEHzB,gBAAA,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eACEA,+BAAC,KAAK,EAAA,IAAA,EAAEc,KAAK,EAAU,GAAA,CAAA,EAAA,GAAA,eAACd,gBAAC,CAAA,aAAA,CAAA,KAAK,QAAEwC,kBAAY,CAACzB,KAAK,CAAC,CAAS,CAE/D,CACK,CAAA;AAEZ,EAAC;AAeD,SAAS0B,UAAU,CAACC,CAAM,EAA0B;AAClD,EAAA,OAAOC,MAAM,CAACC,QAAQ,IAAIF,CAAC,CAAA;AAC7B,CAAA;AAEe,SAASG,QAAQ,CAAC;EAC/B9B,KAAK;EACL+B,eAAe;AACfzB,EAAAA,QAAQ,GAAGT,eAAe;AAC1BQ,EAAAA,QAAQ,GAAG,GAAG;EACd2B,gBAAgB;EAChB,GAAGC,IAAAA;AACU,CAAC,EAAE;AAChB,EAAA,MAAM,CAAClD,QAAQ,EAAEmD,WAAW,CAAC,GAAGjD,gBAAK,CAACwB,QAAQ,CAAC0B,OAAO,CAACJ,eAAe,CAAC,CAAC,CAAA;AACxE,EAAA,MAAM3B,cAAc,GAAGnB,gBAAK,CAACmD,WAAW,CAAC,MAAMF,WAAW,CAAEd,GAAG,IAAK,CAACA,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;EAE9E,IAAIjB,IAAY,GAAG,OAAOH,KAAK,CAAA;EAC/B,IAAIC,UAAsB,GAAG,EAAE,CAAA;EAE/B,MAAMoC,YAAY,GAAIC,GAAsC,IAAe;AACzE,IAAA,MAAMC,kBAAkB,GACtBR,eAAe,KAAK,IAAI,GACpB;MAAE,CAACO,GAAG,CAACvC,KAAK,GAAG,IAAA;AAAK,KAAC,GACrBgC,eAAe,GAAGO,GAAG,CAACvC,KAAK,CAAC,CAAA;IAClC,OAAO;AACL,MAAA,GAAGuC,GAAG;AACNP,MAAAA,eAAe,EAAEQ,kBAAAA;KAClB,CAAA;GACF,CAAA;AAED,EAAA,IAAIC,KAAK,CAACC,OAAO,CAACzC,KAAK,CAAC,EAAE;AACxBG,IAAAA,IAAI,GAAG,OAAO,CAAA;IACdF,UAAU,GAAGD,KAAK,CAACgB,GAAG,CAAC,CAACO,CAAC,EAAE/B,CAAC,KAC1B6C,YAAY,CAAC;AACXtC,MAAAA,KAAK,EAAEP,CAAC,CAACkD,QAAQ,EAAE;AACnB1C,MAAAA,KAAK,EAAEuB,CAAAA;AACT,KAAC,CAAC,CACH,CAAA;GACF,MAAM,IACLvB,KAAK,KAAK,IAAI,IACd,OAAOA,KAAK,KAAK,QAAQ,IACzB0B,UAAU,CAAC1B,KAAK,CAAC,IACjB,OAAOA,KAAK,CAAC4B,MAAM,CAACC,QAAQ,CAAC,KAAK,UAAU,EAC5C;AACA1B,IAAAA,IAAI,GAAG,UAAU,CAAA;AACjBF,IAAAA,UAAU,GAAGuC,KAAK,CAACG,IAAI,CAAC3C,KAAK,EAAE,CAAC4C,GAAG,EAAEpD,CAAC,KACpC6C,YAAY,CAAC;AACXtC,MAAAA,KAAK,EAAEP,CAAC,CAACkD,QAAQ,EAAE;AACnB1C,MAAAA,KAAK,EAAE4C,GAAAA;AACT,KAAC,CAAC,CACH,CAAA;GACF,MAAM,IAAI,OAAO5C,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;AACtDG,IAAAA,IAAI,GAAG,QAAQ,CAAA;AACfF,IAAAA,UAAU,GAAG4C,MAAM,CAAC1B,OAAO,CAACnB,KAAK,CAAC,CAACgB,GAAG,CAAC,CAAC,CAAC8B,GAAG,EAAEF,GAAG,CAAC,KAChDP,YAAY,CAAC;AACXtC,MAAAA,KAAK,EAAE+C,GAAG;AACV9C,MAAAA,KAAK,EAAE4C,GAAAA;AACT,KAAC,CAAC,CACH,CAAA;AACH,GAAA;EAEA3C,UAAU,GAAG+B,gBAAgB,GAAGA,gBAAgB,CAAC/B,UAAU,CAAC,GAAGA,UAAU,CAAA;AAEzE,EAAA,MAAMC,aAAa,GAAGb,UAAU,CAACY,UAAU,EAAEI,QAAQ,CAAC,CAAA;AAEtD,EAAA,OAAOC,QAAQ,CAAC;AACdR,IAAAA,WAAW,EAAGmB,KAAK,iBACjBhC,gBAAA,CAAA,aAAA,CAAC,QAAQ,EAAA8D,oCAAA,CAAA;MACP,GAAG,EAAE9B,KAAK,CAAClB,KAAM;AACjB,MAAA,KAAK,EAAEC,KAAM;AACb,MAAA,QAAQ,EAAEM,QAAS;AACnB,MAAA,gBAAgB,EAAE0B,gBAAAA;KACdC,EAAAA,IAAI,EACJhB,KAAK,CAEZ,CAAA;IACDd,IAAI;IACJF,UAAU;IACVC,aAAa;IACbF,KAAK;IACLjB,QAAQ;IACRqB,cAAc;IACdC,QAAQ;IACR,GAAG4B,IAAAA;AACL,GAAC,CAAC,CAAA;AACJ;;;;;;;;;;;;;;"}
|
package/build/cjs/devtools.js
CHANGED
|
@@ -275,7 +275,7 @@ function RouteComp({
|
|
|
275
275
|
activeRouteId,
|
|
276
276
|
setActiveRouteId
|
|
277
277
|
}) {
|
|
278
|
-
const isActive = matches.find(d => d.
|
|
278
|
+
const isActive = matches.find(d => d.routeId === route.id);
|
|
279
279
|
return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
280
280
|
role: "button",
|
|
281
281
|
"aria-label": `Open match details for ${route.id}`,
|
|
@@ -333,14 +333,15 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
333
333
|
...panelProps
|
|
334
334
|
} = props;
|
|
335
335
|
const routerContextValue = React__default["default"].useContext(router.routerContext);
|
|
336
|
-
const router$1 = userRouter ?? routerContextValue
|
|
336
|
+
const router$1 = userRouter ?? routerContextValue;
|
|
337
|
+
const routerState = router.useRouterState();
|
|
337
338
|
router.invariant(router$1, 'No router was found for the TanStack Router Devtools. Please place the devtools in the <RouterProvider> component tree or pass the router instance to the devtools manually.');
|
|
338
339
|
router.useStore(router$1.__store);
|
|
339
340
|
const [showMatches, setShowMatches] = useLocalStorage["default"]('tanstackRouterDevtoolsShowMatches', true);
|
|
340
341
|
const [activeRouteId, setActiveRouteId] = useLocalStorage["default"]('tanstackRouterDevtoolsActiveRouteId', '');
|
|
341
|
-
const allMatches = React__default["default"].useMemo(() => [...Object.values(
|
|
342
|
-
const activeMatch = allMatches?.find(d => d.
|
|
343
|
-
const hasSearch = Object.keys(
|
|
342
|
+
const allMatches = React__default["default"].useMemo(() => [...Object.values(routerState.matches)], [routerState.matches]);
|
|
343
|
+
const activeMatch = allMatches?.find(d => d.routeId === activeRouteId);
|
|
344
|
+
const hasSearch = Object.keys(routerState.location.search || {}).length;
|
|
344
345
|
return /*#__PURE__*/React__default["default"].createElement(theme.ThemeProvider, {
|
|
345
346
|
theme: theme.defaultTheme
|
|
346
347
|
}, /*#__PURE__*/React__default["default"].createElement(styledComponents.Panel, _rollupPluginBabelHelpers["extends"]({
|
|
@@ -446,7 +447,13 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
446
447
|
}, /*#__PURE__*/React__default["default"].createElement(Explorer["default"], {
|
|
447
448
|
label: "Router",
|
|
448
449
|
value: router$1,
|
|
449
|
-
defaultExpanded: {
|
|
450
|
+
defaultExpanded: {
|
|
451
|
+
state: {},
|
|
452
|
+
context: {}
|
|
453
|
+
},
|
|
454
|
+
filterSubEntries: subEntries => {
|
|
455
|
+
return subEntries.filter(d => typeof d.value !== 'function');
|
|
456
|
+
}
|
|
450
457
|
})))), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
451
458
|
style: {
|
|
452
459
|
flex: '1 1 500px',
|
|
@@ -475,7 +482,12 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
475
482
|
},
|
|
476
483
|
disabled: !showMatches,
|
|
477
484
|
style: {
|
|
478
|
-
|
|
485
|
+
appearance: 'none',
|
|
486
|
+
opacity: showMatches ? 0.5 : 1,
|
|
487
|
+
border: 0,
|
|
488
|
+
background: 'transparent',
|
|
489
|
+
color: 'inherit',
|
|
490
|
+
cursor: 'pointer'
|
|
479
491
|
}
|
|
480
492
|
}, "Routes"), "/", /*#__PURE__*/React__default["default"].createElement("button", {
|
|
481
493
|
type: "button",
|
|
@@ -484,7 +496,12 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
484
496
|
},
|
|
485
497
|
disabled: showMatches,
|
|
486
498
|
style: {
|
|
487
|
-
|
|
499
|
+
appearance: 'none',
|
|
500
|
+
opacity: !showMatches ? 0.5 : 1,
|
|
501
|
+
border: 0,
|
|
502
|
+
background: 'transparent',
|
|
503
|
+
color: 'inherit',
|
|
504
|
+
cursor: 'pointer'
|
|
488
505
|
}
|
|
489
506
|
}, "Matches")), !showMatches ? /*#__PURE__*/React__default["default"].createElement(RouteComp, {
|
|
490
507
|
route: router$1.routeTree,
|
|
@@ -492,12 +509,12 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
492
509
|
matches: allMatches,
|
|
493
510
|
activeRouteId: activeRouteId,
|
|
494
511
|
setActiveRouteId: setActiveRouteId
|
|
495
|
-
}) : /*#__PURE__*/React__default["default"].createElement("div", null,
|
|
512
|
+
}) : /*#__PURE__*/React__default["default"].createElement("div", null, routerState.matches.map((match, i) => {
|
|
496
513
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
497
|
-
key: match.
|
|
514
|
+
key: match.routeId || i,
|
|
498
515
|
role: "button",
|
|
499
|
-
"aria-label": `Open match details for ${match.
|
|
500
|
-
onClick: () => setActiveRouteId(activeRouteId === match.
|
|
516
|
+
"aria-label": `Open match details for ${match.routeId}`,
|
|
517
|
+
onClick: () => setActiveRouteId(activeRouteId === match.routeId ? '' : match.routeId),
|
|
501
518
|
style: {
|
|
502
519
|
display: 'flex',
|
|
503
520
|
borderBottom: `solid 1px ${theme.defaultTheme.grayAlt}`,
|
|
@@ -544,11 +561,11 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
544
561
|
style: {
|
|
545
562
|
opacity: '.5'
|
|
546
563
|
}
|
|
547
|
-
}, "Status"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.
|
|
564
|
+
}, "Status"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.status)), /*#__PURE__*/React__default["default"].createElement("tr", null, /*#__PURE__*/React__default["default"].createElement("td", {
|
|
548
565
|
style: {
|
|
549
566
|
opacity: '.5'
|
|
550
567
|
}
|
|
551
|
-
}, "Last Updated"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.
|
|
568
|
+
}, "Last Updated"), /*#__PURE__*/React__default["default"].createElement("td", null, activeMatch.updatedAt ? new Date(activeMatch.updatedAt).toLocaleTimeString() : 'N/A'))))), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
552
569
|
style: {
|
|
553
570
|
background: theme.defaultTheme.backgroundAlt,
|
|
554
571
|
padding: '.5em',
|
|
@@ -589,8 +606,8 @@ const TanStackRouterDevtoolsPanel = /*#__PURE__*/React__default["default"].forwa
|
|
|
589
606
|
padding: '.5em'
|
|
590
607
|
}
|
|
591
608
|
}, /*#__PURE__*/React__default["default"].createElement(Explorer["default"], {
|
|
592
|
-
value:
|
|
593
|
-
defaultExpanded: Object.keys(
|
|
609
|
+
value: routerState.location.search || {},
|
|
610
|
+
defaultExpanded: Object.keys(routerState.location.search || {}).reduce((obj, next) => {
|
|
594
611
|
obj[next] = {};
|
|
595
612
|
return obj;
|
|
596
613
|
}, {})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","sources":["../../src/devtools.tsx"],"sourcesContent":["import React from 'react'\nimport {\n last,\n routerContext,\n invariant,\n AnyRouter,\n useStore,\n Route,\n AnyRoute,\n AnyRootRoute,\n RouteMatch,\n trimPath,\n} from '@tanstack/router'\n\nimport useLocalStorage from './useLocalStorage'\nimport {\n getRouteStatusColor,\n getStatusColor,\n multiSortBy,\n useIsMounted,\n useSafeState,\n} from './utils'\nimport { Panel, Button, Code, ActivePanel } from './styledComponents'\nimport { ThemeProvider, defaultTheme as theme } from './theme'\n// import { getQueryStatusLabel, getQueryStatusColor } from './utils'\nimport Explorer from './Explorer'\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\ninterface DevtoolsOptions {\n /**\n * Set this true if you want the dev tools to default to being open\n */\n initialIsOpen?: boolean\n /**\n * Use this to add props to the panel. For example, you can add className, style (merge and override default style), etc.\n */\n panelProps?: React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >\n /**\n * Use this to add props to the close button. For example, you can add className, style (merge and override default style), onClick (extend default handler), etc.\n */\n closeButtonProps?: React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n /**\n * Use this to add props to the toggle button. For example, you can add className, style (merge and override default style), onClick (extend default handler), etc.\n */\n toggleButtonProps?: React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n /**\n * The position of the TanStack Router logo to open and close the devtools panel.\n * Defaults to 'bottom-left'.\n */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n /**\n * Use this to render the devtools inside a different type of container element for a11y purposes.\n * Any string which corresponds to a valid intrinsic JSX element is allowed.\n * Defaults to 'footer'.\n */\n containerElement?: string | any\n /**\n * A boolean variable indicating if the \"lite\" version of the library is being used\n */\n router?: AnyRouter\n}\n\ninterface DevtoolsPanelOptions {\n /**\n * The standard React style object used to style a component with inline styles\n */\n style?: React.CSSProperties\n /**\n * The standard React className property used to style a component with classes\n */\n className?: string\n /**\n * A boolean variable indicating whether the panel is open or closed\n */\n isOpen?: boolean\n /**\n * A function that toggles the open and close state of the panel\n */\n setIsOpen: (isOpen: boolean) => void\n /**\n * Handles the opening and closing the devtools panel\n */\n handleDragStart: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void\n /**\n * A boolean variable indicating if the \"lite\" version of the library is being used\n */\n router?: AnyRouter\n}\n\nconst isServer = typeof window === 'undefined'\n\nfunction Logo(props: React.HTMLProps<HTMLDivElement>) {\n return (\n <div\n {...props}\n style={{\n ...(props.style ?? {}),\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n fontSize: '0.8rem',\n fontWeight: 'bolder',\n lineHeight: '1',\n }}\n >\n <div\n style={{\n letterSpacing: '-0.05rem',\n }}\n >\n TANSTACK\n </div>\n <div\n style={{\n backgroundImage:\n 'linear-gradient(to right, var(--tw-gradient-stops))',\n // @ts-ignore\n '--tw-gradient-from': '#84cc16',\n '--tw-gradient-stops':\n 'var(--tw-gradient-from), var(--tw-gradient-to)',\n '--tw-gradient-to': '#10b981',\n WebkitBackgroundClip: 'text',\n color: 'transparent',\n letterSpacing: '0.1rem',\n marginRight: '-0.2rem',\n }}\n >\n ROUTER\n </div>\n </div>\n )\n}\n\nexport function TanStackRouterDevtools({\n initialIsOpen,\n panelProps = {},\n closeButtonProps = {},\n toggleButtonProps = {},\n position = 'bottom-left',\n containerElement: Container = 'footer',\n router,\n}: DevtoolsOptions): React.ReactElement | null {\n const rootRef = React.useRef<HTMLDivElement>(null)\n const panelRef = React.useRef<HTMLDivElement>(null)\n const [isOpen, setIsOpen] = useLocalStorage(\n 'tanstackRouterDevtoolsOpen',\n initialIsOpen,\n )\n const [devtoolsHeight, setDevtoolsHeight] = useLocalStorage<number | null>(\n 'tanstackRouterDevtoolsHeight',\n null,\n )\n const [isResolvedOpen, setIsResolvedOpen] = useSafeState(false)\n const [isResizing, setIsResizing] = useSafeState(false)\n const isMounted = useIsMounted()\n\n const handleDragStart = (\n panelElement: HTMLDivElement | null,\n startEvent: React.MouseEvent<HTMLDivElement, MouseEvent>,\n ) => {\n if (startEvent.button !== 0) return // Only allow left click for drag\n\n setIsResizing(true)\n\n const dragInfo = {\n originalHeight: panelElement?.getBoundingClientRect().height ?? 0,\n pageY: startEvent.pageY,\n }\n\n const run = (moveEvent: MouseEvent) => {\n const delta = dragInfo.pageY - moveEvent.pageY\n const newHeight = dragInfo?.originalHeight + delta\n\n setDevtoolsHeight(newHeight)\n\n if (newHeight < 70) {\n setIsOpen(false)\n } else {\n setIsOpen(true)\n }\n }\n\n const unsub = () => {\n setIsResizing(false)\n document.removeEventListener('mousemove', run)\n document.removeEventListener('mouseUp', unsub)\n }\n\n document.addEventListener('mousemove', run)\n document.addEventListener('mouseup', unsub)\n }\n\n React.useEffect(() => {\n setIsResolvedOpen(isOpen ?? false)\n }, [isOpen, isResolvedOpen, setIsResolvedOpen])\n\n // Toggle panel visibility before/after transition (depending on direction).\n // Prevents focusing in a closed panel.\n React.useEffect(() => {\n const ref = panelRef.current\n\n if (ref) {\n const handlePanelTransitionStart = () => {\n if (ref && isResolvedOpen) {\n ref.style.visibility = 'visible'\n }\n }\n\n const handlePanelTransitionEnd = () => {\n if (ref && !isResolvedOpen) {\n ref.style.visibility = 'hidden'\n }\n }\n\n ref.addEventListener('transitionstart', handlePanelTransitionStart)\n ref.addEventListener('transitionend', handlePanelTransitionEnd)\n\n return () => {\n ref.removeEventListener('transitionstart', handlePanelTransitionStart)\n ref.removeEventListener('transitionend', handlePanelTransitionEnd)\n }\n }\n\n return\n }, [isResolvedOpen])\n\n React[isServer ? 'useEffect' : 'useLayoutEffect'](() => {\n if (isResolvedOpen) {\n const previousValue = rootRef.current?.parentElement?.style.paddingBottom\n\n const run = () => {\n const containerHeight = panelRef.current?.getBoundingClientRect().height\n if (rootRef.current?.parentElement) {\n rootRef.current.parentElement.style.paddingBottom = `${containerHeight}px`\n }\n }\n\n run()\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', run)\n\n return () => {\n window.removeEventListener('resize', run)\n if (\n rootRef.current?.parentElement &&\n typeof previousValue === 'string'\n ) {\n rootRef.current.parentElement.style.paddingBottom = previousValue\n }\n }\n }\n }\n return\n }, [isResolvedOpen])\n\n const { style: panelStyle = {}, ...otherPanelProps } = panelProps\n\n const {\n style: closeButtonStyle = {},\n onClick: onCloseClick,\n ...otherCloseButtonProps\n } = closeButtonProps\n\n const {\n style: toggleButtonStyle = {},\n onClick: onToggleClick,\n ...otherToggleButtonProps\n } = toggleButtonProps\n\n // Do not render on the server\n if (!isMounted()) return null\n\n return (\n <Container ref={rootRef} className=\"TanStackRouterDevtools\">\n <ThemeProvider theme={theme}>\n <TanStackRouterDevtoolsPanel\n ref={panelRef as any}\n {...otherPanelProps}\n router={router}\n style={{\n position: 'fixed',\n bottom: '0',\n right: '0',\n zIndex: 99999,\n width: '100%',\n height: devtoolsHeight ?? 500,\n maxHeight: '90%',\n boxShadow: '0 0 20px rgba(0,0,0,.3)',\n borderTop: `1px solid ${theme.gray}`,\n transformOrigin: 'top',\n // visibility will be toggled after transitions, but set initial state here\n visibility: isOpen ? 'visible' : 'hidden',\n ...panelStyle,\n ...(isResizing\n ? {\n transition: `none`,\n }\n : { transition: `all .2s ease` }),\n ...(isResolvedOpen\n ? {\n opacity: 1,\n pointerEvents: 'all',\n transform: `translateY(0) scale(1)`,\n }\n : {\n opacity: 0,\n pointerEvents: 'none',\n transform: `translateY(15px) scale(1.02)`,\n }),\n }}\n isOpen={isResolvedOpen}\n setIsOpen={setIsOpen}\n handleDragStart={(e) => handleDragStart(panelRef.current, e)}\n />\n {isResolvedOpen ? (\n <Button\n type=\"button\"\n aria-label=\"Close TanStack Router Devtools\"\n {...(otherCloseButtonProps as any)}\n onClick={(e) => {\n setIsOpen(false)\n onCloseClick && onCloseClick(e)\n }}\n style={{\n position: 'fixed',\n zIndex: 99999,\n margin: '.5em',\n bottom: 0,\n ...(position === 'top-right'\n ? {\n right: '0',\n }\n : position === 'top-left'\n ? {\n left: '0',\n }\n : position === 'bottom-right'\n ? {\n right: '0',\n }\n : {\n left: '0',\n }),\n ...closeButtonStyle,\n }}\n >\n Close\n </Button>\n ) : null}\n </ThemeProvider>\n {!isResolvedOpen ? (\n <button\n type=\"button\"\n {...otherToggleButtonProps}\n aria-label=\"Open TanStack Router Devtools\"\n onClick={(e) => {\n setIsOpen(true)\n onToggleClick && onToggleClick(e)\n }}\n style={{\n appearance: 'none',\n background: 'none',\n border: 0,\n padding: 0,\n position: 'fixed',\n zIndex: 99999,\n display: 'inline-flex',\n fontSize: '1.5em',\n margin: '.5em',\n cursor: 'pointer',\n width: 'fit-content',\n ...(position === 'top-right'\n ? {\n top: '0',\n right: '0',\n }\n : position === 'top-left'\n ? {\n top: '0',\n left: '0',\n }\n : position === 'bottom-right'\n ? {\n bottom: '0',\n right: '0',\n }\n : {\n bottom: '0',\n left: '0',\n }),\n ...toggleButtonStyle,\n }}\n >\n <Logo aria-hidden />\n </button>\n ) : null}\n </Container>\n )\n}\n\nfunction RouteComp({\n route,\n isRoot,\n matches,\n activeRouteId,\n setActiveRouteId,\n}: {\n route: AnyRootRoute | AnyRoute\n isRoot?: boolean\n matches: RouteMatch[]\n activeRouteId: string | undefined\n setActiveRouteId: (id: string) => void\n}) {\n const isActive = matches.find((d) => d.route === route)\n return (\n <div>\n <div\n role=\"button\"\n aria-label={`Open match details for ${route.id}`}\n onClick={() => {\n if (isActive)\n setActiveRouteId(activeRouteId === route.id ? '' : route.id)\n }}\n style={{\n display: 'flex',\n borderBottom: `solid 1px ${theme.grayAlt}`,\n cursor: isActive ? 'pointer' : 'default',\n alignItems: 'center',\n background:\n route.id === activeRouteId ? 'rgba(255,255,255,.1)' : undefined,\n }}\n >\n {isRoot ? null : (\n <div\n style={{\n flex: '0 0 auto',\n width: '.7rem',\n height: '.7rem',\n margin: '.5rem .75rem',\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight: 'bold',\n borderRadius: '100%',\n transition: 'all .2s ease-out',\n background: getRouteStatusColor(matches, route, theme),\n opacity: isActive ? 1 : 0.3,\n }}\n />\n )}\n <Code\n style={{\n padding: '.25rem 0',\n paddingLeft: isRoot ? '.5rem' : 0,\n opacity: isActive ? 1 : 0.7,\n }}\n >{`${route.path || trimPath(route.id)}`}</Code>\n </div>\n {(route.children as Route[])?.length ? (\n <div\n style={{\n marginLeft: isRoot ? 0 : '1rem',\n borderLeft: isRoot ? '' : `solid 1px ${theme.grayAlt}`,\n }}\n >\n {[...(route.children as Route[])]\n .sort((a, b) => {\n return a.rank - b.rank\n })\n .map((r) => (\n <RouteComp\n key={r.id}\n route={r}\n matches={matches}\n activeRouteId={activeRouteId}\n setActiveRouteId={setActiveRouteId}\n />\n ))}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport const TanStackRouterDevtoolsPanel = React.forwardRef<\n HTMLDivElement,\n DevtoolsPanelOptions\n>(function TanStackRouterDevtoolsPanel(props, ref): React.ReactElement {\n const {\n isOpen = true,\n setIsOpen,\n handleDragStart,\n router: userRouter,\n ...panelProps\n } = props\n\n const routerContextValue = React.useContext(routerContext)\n const router = userRouter ?? routerContextValue?.router\n\n invariant(\n router,\n 'No router was found for the TanStack Router Devtools. Please place the devtools in the <RouterProvider> component tree or pass the router instance to the devtools manually.',\n )\n\n useStore(router.__store)\n\n const [showMatches, setShowMatches] = useLocalStorage(\n 'tanstackRouterDevtoolsShowMatches',\n true,\n )\n\n const [activeRouteId, setActiveRouteId] = useLocalStorage(\n 'tanstackRouterDevtoolsActiveRouteId',\n '',\n )\n\n const allMatches: RouteMatch[] = React.useMemo(\n () => [...Object.values(router.state.matches)],\n [router.state.matches],\n )\n\n const activeMatch = allMatches?.find((d) => d.route.id === activeRouteId)\n\n const hasSearch = Object.keys(\n last(router.state.matches)?.state.search || {},\n ).length\n\n return (\n <ThemeProvider theme={theme}>\n <Panel ref={ref} className=\"TanStackRouterDevtoolsPanel\" {...panelProps}>\n <style\n dangerouslySetInnerHTML={{\n __html: `\n\n .TanStackRouterDevtoolsPanel * {\n scrollbar-color: ${theme.backgroundAlt} ${theme.gray};\n }\n\n .TanStackRouterDevtoolsPanel *::-webkit-scrollbar, .TanStackRouterDevtoolsPanel scrollbar {\n width: 1em;\n height: 1em;\n }\n\n .TanStackRouterDevtoolsPanel *::-webkit-scrollbar-track, .TanStackRouterDevtoolsPanel scrollbar-track {\n background: ${theme.backgroundAlt};\n }\n\n .TanStackRouterDevtoolsPanel *::-webkit-scrollbar-thumb, .TanStackRouterDevtoolsPanel scrollbar-thumb {\n background: ${theme.gray};\n border-radius: .5em;\n border: 3px solid ${theme.backgroundAlt};\n }\n\n .TanStackRouterDevtoolsPanel table {\n width: 100%;\n }\n\n .TanStackRouterDevtoolsPanel table tr {\n border-bottom: 2px dotted rgba(255, 255, 255, .2);\n }\n\n .TanStackRouterDevtoolsPanel table tr:last-child {\n border-bottom: none\n }\n\n .TanStackRouterDevtoolsPanel table td {\n padding: .25rem .5rem;\n border-right: 2px dotted rgba(255, 255, 255, .05);\n }\n\n .TanStackRouterDevtoolsPanel table td:last-child {\n border-right: none\n }\n\n `,\n }}\n />\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '4px',\n marginBottom: '-4px',\n cursor: 'row-resize',\n zIndex: 100000,\n }}\n onMouseDown={handleDragStart}\n ></div>\n <div\n style={{\n flex: '1 1 500px',\n minHeight: '40%',\n maxHeight: '100%',\n overflow: 'auto',\n borderRight: `1px solid ${theme.grayAlt}`,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'start',\n gap: '1rem',\n padding: '1rem',\n alignItems: 'center',\n background: theme.backgroundAlt,\n }}\n >\n <Logo aria-hidden />\n <div\n style={{\n fontSize: 'clamp(.8rem, 2vw, 1.3rem)',\n fontWeight: 'bold',\n }}\n >\n <span\n style={{\n fontWeight: 100,\n }}\n >\n Devtools\n </span>\n </div>\n </div>\n <div\n style={{\n overflowY: 'auto',\n flex: '1',\n }}\n >\n <div\n style={{\n padding: '.5em',\n }}\n >\n <Explorer label=\"Router\" value={router} defaultExpanded={{}} />\n </div>\n </div>\n </div>\n <div\n style={{\n flex: '1 1 500px',\n minHeight: '40%',\n maxHeight: '100%',\n overflow: 'auto',\n borderRight: `1px solid ${theme.grayAlt}`,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n padding: '.5em',\n background: theme.backgroundAlt,\n position: 'sticky',\n top: 0,\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: '.5rem',\n }}\n >\n <button\n type=\"button\"\n onClick={() => {\n setShowMatches(false)\n }}\n disabled={!showMatches}\n style={{\n opacity: showMatches ? 0.5 : 1,\n }}\n >\n Routes\n </button>\n /\n <button\n type=\"button\"\n onClick={() => {\n setShowMatches(true)\n }}\n disabled={showMatches}\n style={{\n opacity: !showMatches ? 0.5 : 1,\n }}\n >\n Matches\n </button>\n </div>\n {!showMatches ? (\n <RouteComp\n route={router.routeTree}\n isRoot\n matches={allMatches}\n activeRouteId={activeRouteId}\n setActiveRouteId={setActiveRouteId}\n />\n ) : (\n <div>\n {router.state.matches.map((match, i) => {\n return (\n <div\n key={match.route.id || i}\n role=\"button\"\n aria-label={`Open match details for ${match.route.id}`}\n onClick={() =>\n setActiveRouteId(\n activeRouteId === match.route.id ? '' : match.route.id,\n )\n }\n style={{\n display: 'flex',\n borderBottom: `solid 1px ${theme.grayAlt}`,\n cursor: 'pointer',\n alignItems: 'center',\n background:\n match === activeMatch\n ? 'rgba(255,255,255,.1)'\n : undefined,\n }}\n >\n <div\n style={{\n flex: '0 0 auto',\n width: '1.3rem',\n height: '1.3rem',\n marginLeft: '.25rem',\n background: getStatusColor(match, theme),\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n transition: 'all .2s ease-out',\n }}\n />\n\n <Code\n style={{\n padding: '.5em',\n }}\n >\n {`${match.id}`}\n </Code>\n </div>\n )\n })}\n </div>\n )}\n </div>\n {activeMatch ? (\n <ActivePanel>\n <div\n style={{\n padding: '.5em',\n background: theme.backgroundAlt,\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Match Details\n </div>\n <div>\n <table>\n <tbody>\n <tr>\n <td style={{ opacity: '.5' }}>ID</td>\n <td>\n <Code\n style={{\n lineHeight: '1.8em',\n }}\n >\n {JSON.stringify(activeMatch.id, null, 2)}\n </Code>\n </td>\n </tr>\n <tr>\n <td style={{ opacity: '.5' }}>Status</td>\n <td>{activeMatch.state.status}</td>\n </tr>\n {/* <tr>\n <td style={{ opacity: '.5' }}>Invalid</td>\n <td>{activeMatch.getIsInvalid().toString()}</td>\n </tr> */}\n <tr>\n <td style={{ opacity: '.5' }}>Last Updated</td>\n <td>\n {activeMatch.state.updatedAt\n ? new Date(\n activeMatch.state.updatedAt as number,\n ).toLocaleTimeString()\n : 'N/A'}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n {/* <div\n style={{\n background: theme.backgroundAlt,\n padding: '.5em',\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Actions\n </div>\n <div\n style={{\n padding: '0.5em',\n }}\n >\n <Button\n type=\"button\"\n onClick={() => activeMatch.__store.setState(d => ({...d, status: 'pending'}))}\n style={{\n background: theme.gray,\n }}\n >\n Reload\n </Button>\n </div> */}\n <div\n style={{\n background: theme.backgroundAlt,\n padding: '.5em',\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Explorer\n </div>\n <div\n style={{\n padding: '.5em',\n }}\n >\n <Explorer\n label=\"Match\"\n value={activeMatch}\n defaultExpanded={{}}\n />\n </div>\n </ActivePanel>\n ) : null}\n {hasSearch ? (\n <div\n style={{\n flex: '1 1 500px',\n minHeight: '40%',\n maxHeight: '100%',\n overflow: 'auto',\n borderRight: `1px solid ${theme.grayAlt}`,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n padding: '.5em',\n background: theme.backgroundAlt,\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Search Params\n </div>\n <div\n style={{\n padding: '.5em',\n }}\n >\n <Explorer\n value={last(router.state.matches)?.state.search || {}}\n defaultExpanded={Object.keys(\n (last(router.state.matches)?.state.search as {}) || {},\n ).reduce((obj: any, next) => {\n obj[next] = {}\n return obj\n }, {})}\n />\n </div>\n </div>\n ) : null}\n </Panel>\n </ThemeProvider>\n )\n})\n"],"names":["isServer","window","Logo","props","React","style","display","alignItems","flexDirection","fontSize","fontWeight","lineHeight","letterSpacing","backgroundImage","WebkitBackgroundClip","color","marginRight","TanStackRouterDevtools","initialIsOpen","panelProps","closeButtonProps","toggleButtonProps","position","containerElement","Container","router","rootRef","useRef","panelRef","isOpen","setIsOpen","useLocalStorage","devtoolsHeight","setDevtoolsHeight","isResolvedOpen","setIsResolvedOpen","useSafeState","isResizing","setIsResizing","isMounted","useIsMounted","handleDragStart","panelElement","startEvent","button","dragInfo","originalHeight","getBoundingClientRect","height","pageY","run","moveEvent","delta","newHeight","unsub","document","removeEventListener","addEventListener","useEffect","ref","current","handlePanelTransitionStart","visibility","handlePanelTransitionEnd","previousValue","parentElement","paddingBottom","containerHeight","panelStyle","otherPanelProps","closeButtonStyle","onClick","onCloseClick","otherCloseButtonProps","toggleButtonStyle","onToggleClick","otherToggleButtonProps","ThemeProvider","theme","_extends","bottom","right","zIndex","width","maxHeight","boxShadow","borderTop","gray","transformOrigin","transition","opacity","pointerEvents","transform","e","Button","margin","left","appearance","background","border","padding","cursor","top","RouteComp","route","isRoot","matches","activeRouteId","setActiveRouteId","isActive","find","d","id","borderBottom","grayAlt","undefined","flex","justifyContent","borderRadius","getRouteStatusColor","Code","paddingLeft","path","trimPath","children","length","marginLeft","borderLeft","sort","a","b","rank","map","r","TanStackRouterDevtoolsPanel","forwardRef","userRouter","routerContextValue","useContext","routerContext","invariant","useStore","__store","showMatches","setShowMatches","allMatches","useMemo","Object","values","state","activeMatch","hasSearch","keys","last","search","Panel","__html","backgroundAlt","marginBottom","minHeight","overflow","borderRight","gap","overflowY","Explorer","routeTree","match","i","getStatusColor","ActivePanel","JSON","stringify","status","updatedAt","Date","toLocaleTimeString","reduce","obj","next"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devtools.js","sources":["../../src/devtools.tsx"],"sourcesContent":["import React from 'react'\nimport {\n last,\n routerContext,\n invariant,\n AnyRouter,\n useStore,\n Route,\n AnyRoute,\n AnyRootRoute,\n RouteMatch,\n trimPath,\n useRouterState,\n} from '@tanstack/router'\n\nimport useLocalStorage from './useLocalStorage'\nimport {\n getRouteStatusColor,\n getStatusColor,\n useIsMounted,\n useSafeState,\n} from './utils'\nimport { Panel, Button, Code, ActivePanel } from './styledComponents'\nimport { ThemeProvider, defaultTheme as theme } from './theme'\n// import { getQueryStatusLabel, getQueryStatusColor } from './utils'\nimport Explorer from './Explorer'\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\ninterface DevtoolsOptions {\n /**\n * Set this true if you want the dev tools to default to being open\n */\n initialIsOpen?: boolean\n /**\n * Use this to add props to the panel. For example, you can add className, style (merge and override default style), etc.\n */\n panelProps?: React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >\n /**\n * Use this to add props to the close button. For example, you can add className, style (merge and override default style), onClick (extend default handler), etc.\n */\n closeButtonProps?: React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n /**\n * Use this to add props to the toggle button. For example, you can add className, style (merge and override default style), onClick (extend default handler), etc.\n */\n toggleButtonProps?: React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n /**\n * The position of the TanStack Router logo to open and close the devtools panel.\n * Defaults to 'bottom-left'.\n */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n /**\n * Use this to render the devtools inside a different type of container element for a11y purposes.\n * Any string which corresponds to a valid intrinsic JSX element is allowed.\n * Defaults to 'footer'.\n */\n containerElement?: string | any\n /**\n * A boolean variable indicating if the \"lite\" version of the library is being used\n */\n router?: AnyRouter\n}\n\ninterface DevtoolsPanelOptions {\n /**\n * The standard React style object used to style a component with inline styles\n */\n style?: React.CSSProperties\n /**\n * The standard React className property used to style a component with classes\n */\n className?: string\n /**\n * A boolean variable indicating whether the panel is open or closed\n */\n isOpen?: boolean\n /**\n * A function that toggles the open and close state of the panel\n */\n setIsOpen: (isOpen: boolean) => void\n /**\n * Handles the opening and closing the devtools panel\n */\n handleDragStart: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void\n /**\n * A boolean variable indicating if the \"lite\" version of the library is being used\n */\n router?: AnyRouter\n}\n\nconst isServer = typeof window === 'undefined'\n\nfunction Logo(props: React.HTMLProps<HTMLDivElement>) {\n return (\n <div\n {...props}\n style={{\n ...(props.style ?? {}),\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n fontSize: '0.8rem',\n fontWeight: 'bolder',\n lineHeight: '1',\n }}\n >\n <div\n style={{\n letterSpacing: '-0.05rem',\n }}\n >\n TANSTACK\n </div>\n <div\n style={{\n backgroundImage:\n 'linear-gradient(to right, var(--tw-gradient-stops))',\n // @ts-ignore\n '--tw-gradient-from': '#84cc16',\n '--tw-gradient-stops':\n 'var(--tw-gradient-from), var(--tw-gradient-to)',\n '--tw-gradient-to': '#10b981',\n WebkitBackgroundClip: 'text',\n color: 'transparent',\n letterSpacing: '0.1rem',\n marginRight: '-0.2rem',\n }}\n >\n ROUTER\n </div>\n </div>\n )\n}\n\nexport function TanStackRouterDevtools({\n initialIsOpen,\n panelProps = {},\n closeButtonProps = {},\n toggleButtonProps = {},\n position = 'bottom-left',\n containerElement: Container = 'footer',\n router,\n}: DevtoolsOptions): React.ReactElement | null {\n const rootRef = React.useRef<HTMLDivElement>(null)\n const panelRef = React.useRef<HTMLDivElement>(null)\n const [isOpen, setIsOpen] = useLocalStorage(\n 'tanstackRouterDevtoolsOpen',\n initialIsOpen,\n )\n const [devtoolsHeight, setDevtoolsHeight] = useLocalStorage<number | null>(\n 'tanstackRouterDevtoolsHeight',\n null,\n )\n const [isResolvedOpen, setIsResolvedOpen] = useSafeState(false)\n const [isResizing, setIsResizing] = useSafeState(false)\n const isMounted = useIsMounted()\n\n const handleDragStart = (\n panelElement: HTMLDivElement | null,\n startEvent: React.MouseEvent<HTMLDivElement, MouseEvent>,\n ) => {\n if (startEvent.button !== 0) return // Only allow left click for drag\n\n setIsResizing(true)\n\n const dragInfo = {\n originalHeight: panelElement?.getBoundingClientRect().height ?? 0,\n pageY: startEvent.pageY,\n }\n\n const run = (moveEvent: MouseEvent) => {\n const delta = dragInfo.pageY - moveEvent.pageY\n const newHeight = dragInfo?.originalHeight + delta\n\n setDevtoolsHeight(newHeight)\n\n if (newHeight < 70) {\n setIsOpen(false)\n } else {\n setIsOpen(true)\n }\n }\n\n const unsub = () => {\n setIsResizing(false)\n document.removeEventListener('mousemove', run)\n document.removeEventListener('mouseUp', unsub)\n }\n\n document.addEventListener('mousemove', run)\n document.addEventListener('mouseup', unsub)\n }\n\n React.useEffect(() => {\n setIsResolvedOpen(isOpen ?? false)\n }, [isOpen, isResolvedOpen, setIsResolvedOpen])\n\n // Toggle panel visibility before/after transition (depending on direction).\n // Prevents focusing in a closed panel.\n React.useEffect(() => {\n const ref = panelRef.current\n\n if (ref) {\n const handlePanelTransitionStart = () => {\n if (ref && isResolvedOpen) {\n ref.style.visibility = 'visible'\n }\n }\n\n const handlePanelTransitionEnd = () => {\n if (ref && !isResolvedOpen) {\n ref.style.visibility = 'hidden'\n }\n }\n\n ref.addEventListener('transitionstart', handlePanelTransitionStart)\n ref.addEventListener('transitionend', handlePanelTransitionEnd)\n\n return () => {\n ref.removeEventListener('transitionstart', handlePanelTransitionStart)\n ref.removeEventListener('transitionend', handlePanelTransitionEnd)\n }\n }\n\n return\n }, [isResolvedOpen])\n\n React[isServer ? 'useEffect' : 'useLayoutEffect'](() => {\n if (isResolvedOpen) {\n const previousValue = rootRef.current?.parentElement?.style.paddingBottom\n\n const run = () => {\n const containerHeight = panelRef.current?.getBoundingClientRect().height\n if (rootRef.current?.parentElement) {\n rootRef.current.parentElement.style.paddingBottom = `${containerHeight}px`\n }\n }\n\n run()\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', run)\n\n return () => {\n window.removeEventListener('resize', run)\n if (\n rootRef.current?.parentElement &&\n typeof previousValue === 'string'\n ) {\n rootRef.current.parentElement.style.paddingBottom = previousValue\n }\n }\n }\n }\n return\n }, [isResolvedOpen])\n\n const { style: panelStyle = {}, ...otherPanelProps } = panelProps\n\n const {\n style: closeButtonStyle = {},\n onClick: onCloseClick,\n ...otherCloseButtonProps\n } = closeButtonProps\n\n const {\n style: toggleButtonStyle = {},\n onClick: onToggleClick,\n ...otherToggleButtonProps\n } = toggleButtonProps\n\n // Do not render on the server\n if (!isMounted()) return null\n\n return (\n <Container ref={rootRef} className=\"TanStackRouterDevtools\">\n <ThemeProvider theme={theme}>\n <TanStackRouterDevtoolsPanel\n ref={panelRef as any}\n {...otherPanelProps}\n router={router}\n style={{\n position: 'fixed',\n bottom: '0',\n right: '0',\n zIndex: 99999,\n width: '100%',\n height: devtoolsHeight ?? 500,\n maxHeight: '90%',\n boxShadow: '0 0 20px rgba(0,0,0,.3)',\n borderTop: `1px solid ${theme.gray}`,\n transformOrigin: 'top',\n // visibility will be toggled after transitions, but set initial state here\n visibility: isOpen ? 'visible' : 'hidden',\n ...panelStyle,\n ...(isResizing\n ? {\n transition: `none`,\n }\n : { transition: `all .2s ease` }),\n ...(isResolvedOpen\n ? {\n opacity: 1,\n pointerEvents: 'all',\n transform: `translateY(0) scale(1)`,\n }\n : {\n opacity: 0,\n pointerEvents: 'none',\n transform: `translateY(15px) scale(1.02)`,\n }),\n }}\n isOpen={isResolvedOpen}\n setIsOpen={setIsOpen}\n handleDragStart={(e) => handleDragStart(panelRef.current, e)}\n />\n {isResolvedOpen ? (\n <Button\n type=\"button\"\n aria-label=\"Close TanStack Router Devtools\"\n {...(otherCloseButtonProps as any)}\n onClick={(e) => {\n setIsOpen(false)\n onCloseClick && onCloseClick(e)\n }}\n style={{\n position: 'fixed',\n zIndex: 99999,\n margin: '.5em',\n bottom: 0,\n ...(position === 'top-right'\n ? {\n right: '0',\n }\n : position === 'top-left'\n ? {\n left: '0',\n }\n : position === 'bottom-right'\n ? {\n right: '0',\n }\n : {\n left: '0',\n }),\n ...closeButtonStyle,\n }}\n >\n Close\n </Button>\n ) : null}\n </ThemeProvider>\n {!isResolvedOpen ? (\n <button\n type=\"button\"\n {...otherToggleButtonProps}\n aria-label=\"Open TanStack Router Devtools\"\n onClick={(e) => {\n setIsOpen(true)\n onToggleClick && onToggleClick(e)\n }}\n style={{\n appearance: 'none',\n background: 'none',\n border: 0,\n padding: 0,\n position: 'fixed',\n zIndex: 99999,\n display: 'inline-flex',\n fontSize: '1.5em',\n margin: '.5em',\n cursor: 'pointer',\n width: 'fit-content',\n ...(position === 'top-right'\n ? {\n top: '0',\n right: '0',\n }\n : position === 'top-left'\n ? {\n top: '0',\n left: '0',\n }\n : position === 'bottom-right'\n ? {\n bottom: '0',\n right: '0',\n }\n : {\n bottom: '0',\n left: '0',\n }),\n ...toggleButtonStyle,\n }}\n >\n <Logo aria-hidden />\n </button>\n ) : null}\n </Container>\n )\n}\n\nfunction RouteComp({\n route,\n isRoot,\n matches,\n activeRouteId,\n setActiveRouteId,\n}: {\n route: AnyRootRoute | AnyRoute\n isRoot?: boolean\n matches: RouteMatch[]\n activeRouteId: string | undefined\n setActiveRouteId: (id: string) => void\n}) {\n const isActive = matches.find((d) => d.routeId === route.id)\n\n return (\n <div>\n <div\n role=\"button\"\n aria-label={`Open match details for ${route.id}`}\n onClick={() => {\n if (isActive)\n setActiveRouteId(activeRouteId === route.id ? '' : route.id)\n }}\n style={{\n display: 'flex',\n borderBottom: `solid 1px ${theme.grayAlt}`,\n cursor: isActive ? 'pointer' : 'default',\n alignItems: 'center',\n background:\n route.id === activeRouteId ? 'rgba(255,255,255,.1)' : undefined,\n }}\n >\n {isRoot ? null : (\n <div\n style={{\n flex: '0 0 auto',\n width: '.7rem',\n height: '.7rem',\n margin: '.5rem .75rem',\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight: 'bold',\n borderRadius: '100%',\n transition: 'all .2s ease-out',\n background: getRouteStatusColor(matches, route, theme),\n opacity: isActive ? 1 : 0.3,\n }}\n />\n )}\n <Code\n style={{\n padding: '.25rem 0',\n paddingLeft: isRoot ? '.5rem' : 0,\n opacity: isActive ? 1 : 0.7,\n }}\n >{`${route.path || trimPath(route.id)}`}</Code>\n </div>\n {(route.children as Route[])?.length ? (\n <div\n style={{\n marginLeft: isRoot ? 0 : '1rem',\n borderLeft: isRoot ? '' : `solid 1px ${theme.grayAlt}`,\n }}\n >\n {[...(route.children as Route[])]\n .sort((a, b) => {\n return a.rank - b.rank\n })\n .map((r) => (\n <RouteComp\n key={r.id}\n route={r}\n matches={matches}\n activeRouteId={activeRouteId}\n setActiveRouteId={setActiveRouteId}\n />\n ))}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport const TanStackRouterDevtoolsPanel = React.forwardRef<\n HTMLDivElement,\n DevtoolsPanelOptions\n>(function TanStackRouterDevtoolsPanel(props, ref): React.ReactElement {\n const {\n isOpen = true,\n setIsOpen,\n handleDragStart,\n router: userRouter,\n ...panelProps\n } = props\n\n const routerContextValue = React.useContext(routerContext)\n const router = userRouter ?? routerContextValue\n const routerState = useRouterState()\n\n invariant(\n router,\n 'No router was found for the TanStack Router Devtools. Please place the devtools in the <RouterProvider> component tree or pass the router instance to the devtools manually.',\n )\n\n useStore(router.__store)\n\n const [showMatches, setShowMatches] = useLocalStorage(\n 'tanstackRouterDevtoolsShowMatches',\n true,\n )\n\n const [activeRouteId, setActiveRouteId] = useLocalStorage(\n 'tanstackRouterDevtoolsActiveRouteId',\n '',\n )\n\n const allMatches: RouteMatch[] = React.useMemo(\n () => [...Object.values(routerState.matches)],\n [routerState.matches],\n )\n\n const activeMatch = allMatches?.find((d) => d.routeId === activeRouteId)\n\n const hasSearch = Object.keys(routerState.location.search || {}).length\n\n return (\n <ThemeProvider theme={theme}>\n <Panel ref={ref} className=\"TanStackRouterDevtoolsPanel\" {...panelProps}>\n <style\n dangerouslySetInnerHTML={{\n __html: `\n\n .TanStackRouterDevtoolsPanel * {\n scrollbar-color: ${theme.backgroundAlt} ${theme.gray};\n }\n\n .TanStackRouterDevtoolsPanel *::-webkit-scrollbar, .TanStackRouterDevtoolsPanel scrollbar {\n width: 1em;\n height: 1em;\n }\n\n .TanStackRouterDevtoolsPanel *::-webkit-scrollbar-track, .TanStackRouterDevtoolsPanel scrollbar-track {\n background: ${theme.backgroundAlt};\n }\n\n .TanStackRouterDevtoolsPanel *::-webkit-scrollbar-thumb, .TanStackRouterDevtoolsPanel scrollbar-thumb {\n background: ${theme.gray};\n border-radius: .5em;\n border: 3px solid ${theme.backgroundAlt};\n }\n\n .TanStackRouterDevtoolsPanel table {\n width: 100%;\n }\n\n .TanStackRouterDevtoolsPanel table tr {\n border-bottom: 2px dotted rgba(255, 255, 255, .2);\n }\n\n .TanStackRouterDevtoolsPanel table tr:last-child {\n border-bottom: none\n }\n\n .TanStackRouterDevtoolsPanel table td {\n padding: .25rem .5rem;\n border-right: 2px dotted rgba(255, 255, 255, .05);\n }\n\n .TanStackRouterDevtoolsPanel table td:last-child {\n border-right: none\n }\n\n `,\n }}\n />\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '4px',\n marginBottom: '-4px',\n cursor: 'row-resize',\n zIndex: 100000,\n }}\n onMouseDown={handleDragStart}\n ></div>\n <div\n style={{\n flex: '1 1 500px',\n minHeight: '40%',\n maxHeight: '100%',\n overflow: 'auto',\n borderRight: `1px solid ${theme.grayAlt}`,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'start',\n gap: '1rem',\n padding: '1rem',\n alignItems: 'center',\n background: theme.backgroundAlt,\n }}\n >\n <Logo aria-hidden />\n <div\n style={{\n fontSize: 'clamp(.8rem, 2vw, 1.3rem)',\n fontWeight: 'bold',\n }}\n >\n <span\n style={{\n fontWeight: 100,\n }}\n >\n Devtools\n </span>\n </div>\n </div>\n <div\n style={{\n overflowY: 'auto',\n flex: '1',\n }}\n >\n <div\n style={{\n padding: '.5em',\n }}\n >\n <Explorer\n label=\"Router\"\n value={router}\n defaultExpanded={{ state: {} as any, context: {} as any }}\n filterSubEntries={(subEntries) => {\n return subEntries.filter((d) => typeof d.value !== 'function')\n }}\n />\n </div>\n </div>\n </div>\n <div\n style={{\n flex: '1 1 500px',\n minHeight: '40%',\n maxHeight: '100%',\n overflow: 'auto',\n borderRight: `1px solid ${theme.grayAlt}`,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n padding: '.5em',\n background: theme.backgroundAlt,\n position: 'sticky',\n top: 0,\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: '.5rem',\n }}\n >\n <button\n type=\"button\"\n onClick={() => {\n setShowMatches(false)\n }}\n disabled={!showMatches}\n style={{\n appearance: 'none',\n opacity: showMatches ? 0.5 : 1,\n border: 0,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n }}\n >\n Routes\n </button>\n /\n <button\n type=\"button\"\n onClick={() => {\n setShowMatches(true)\n }}\n disabled={showMatches}\n style={{\n appearance: 'none',\n opacity: !showMatches ? 0.5 : 1,\n border: 0,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n }}\n >\n Matches\n </button>\n </div>\n {!showMatches ? (\n <RouteComp\n route={router.routeTree}\n isRoot\n matches={allMatches}\n activeRouteId={activeRouteId}\n setActiveRouteId={setActiveRouteId}\n />\n ) : (\n <div>\n {routerState.matches.map((match, i) => {\n return (\n <div\n key={match.routeId || i}\n role=\"button\"\n aria-label={`Open match details for ${match.routeId}`}\n onClick={() =>\n setActiveRouteId(\n activeRouteId === match.routeId ? '' : match.routeId,\n )\n }\n style={{\n display: 'flex',\n borderBottom: `solid 1px ${theme.grayAlt}`,\n cursor: 'pointer',\n alignItems: 'center',\n background:\n match === activeMatch\n ? 'rgba(255,255,255,.1)'\n : undefined,\n }}\n >\n <div\n style={{\n flex: '0 0 auto',\n width: '1.3rem',\n height: '1.3rem',\n marginLeft: '.25rem',\n background: getStatusColor(match, theme),\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n transition: 'all .2s ease-out',\n }}\n />\n\n <Code\n style={{\n padding: '.5em',\n }}\n >\n {`${match.id}`}\n </Code>\n </div>\n )\n })}\n </div>\n )}\n </div>\n {activeMatch ? (\n <ActivePanel>\n <div\n style={{\n padding: '.5em',\n background: theme.backgroundAlt,\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Match Details\n </div>\n <div>\n <table>\n <tbody>\n <tr>\n <td style={{ opacity: '.5' }}>ID</td>\n <td>\n <Code\n style={{\n lineHeight: '1.8em',\n }}\n >\n {JSON.stringify(activeMatch.id, null, 2)}\n </Code>\n </td>\n </tr>\n <tr>\n <td style={{ opacity: '.5' }}>Status</td>\n <td>{activeMatch.status}</td>\n </tr>\n {/* <tr>\n <td style={{ opacity: '.5' }}>Invalid</td>\n <td>{activeMatch.getIsInvalid().toString()}</td>\n </tr> */}\n <tr>\n <td style={{ opacity: '.5' }}>Last Updated</td>\n <td>\n {activeMatch.updatedAt\n ? new Date(\n activeMatch.updatedAt as number,\n ).toLocaleTimeString()\n : 'N/A'}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n {/* <div\n style={{\n background: theme.backgroundAlt,\n padding: '.5em',\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Actions\n </div>\n <div\n style={{\n padding: '0.5em',\n }}\n >\n <Button\n type=\"button\"\n onClick={() => activeMatch.__store.setState(d => ({...d, status: 'pending'}))}\n style={{\n background: theme.gray,\n }}\n >\n Reload\n </Button>\n </div> */}\n <div\n style={{\n background: theme.backgroundAlt,\n padding: '.5em',\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Explorer\n </div>\n <div\n style={{\n padding: '.5em',\n }}\n >\n <Explorer\n label=\"Match\"\n value={activeMatch}\n defaultExpanded={{}}\n />\n </div>\n </ActivePanel>\n ) : null}\n {hasSearch ? (\n <div\n style={{\n flex: '1 1 500px',\n minHeight: '40%',\n maxHeight: '100%',\n overflow: 'auto',\n borderRight: `1px solid ${theme.grayAlt}`,\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n padding: '.5em',\n background: theme.backgroundAlt,\n position: 'sticky',\n top: 0,\n bottom: 0,\n zIndex: 1,\n }}\n >\n Search Params\n </div>\n <div\n style={{\n padding: '.5em',\n }}\n >\n <Explorer\n value={routerState.location.search || {}}\n defaultExpanded={Object.keys(\n (routerState.location.search as {}) || {},\n ).reduce((obj: any, next) => {\n obj[next] = {}\n return obj\n }, {})}\n />\n </div>\n </div>\n ) : null}\n </Panel>\n </ThemeProvider>\n )\n})\n"],"names":["isServer","window","Logo","props","React","style","display","alignItems","flexDirection","fontSize","fontWeight","lineHeight","letterSpacing","backgroundImage","WebkitBackgroundClip","color","marginRight","TanStackRouterDevtools","initialIsOpen","panelProps","closeButtonProps","toggleButtonProps","position","containerElement","Container","router","rootRef","useRef","panelRef","isOpen","setIsOpen","useLocalStorage","devtoolsHeight","setDevtoolsHeight","isResolvedOpen","setIsResolvedOpen","useSafeState","isResizing","setIsResizing","isMounted","useIsMounted","handleDragStart","panelElement","startEvent","button","dragInfo","originalHeight","getBoundingClientRect","height","pageY","run","moveEvent","delta","newHeight","unsub","document","removeEventListener","addEventListener","useEffect","ref","current","handlePanelTransitionStart","visibility","handlePanelTransitionEnd","previousValue","parentElement","paddingBottom","containerHeight","panelStyle","otherPanelProps","closeButtonStyle","onClick","onCloseClick","otherCloseButtonProps","toggleButtonStyle","onToggleClick","otherToggleButtonProps","ThemeProvider","theme","_extends","bottom","right","zIndex","width","maxHeight","boxShadow","borderTop","gray","transformOrigin","transition","opacity","pointerEvents","transform","e","Button","margin","left","appearance","background","border","padding","cursor","top","RouteComp","route","isRoot","matches","activeRouteId","setActiveRouteId","isActive","find","d","routeId","id","borderBottom","grayAlt","undefined","flex","justifyContent","borderRadius","getRouteStatusColor","Code","paddingLeft","path","trimPath","children","length","marginLeft","borderLeft","sort","a","b","rank","map","r","TanStackRouterDevtoolsPanel","forwardRef","userRouter","routerContextValue","useContext","routerContext","routerState","useRouterState","invariant","useStore","__store","showMatches","setShowMatches","allMatches","useMemo","Object","values","activeMatch","hasSearch","keys","location","search","Panel","__html","backgroundAlt","marginBottom","minHeight","overflow","borderRight","gap","overflowY","Explorer","state","context","subEntries","filter","value","routeTree","match","i","getStatusColor","ActivePanel","JSON","stringify","status","updatedAt","Date","toLocaleTimeString","reduce","obj","next"],"mappings":"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"}
|
package/build/cjs/utils.js
CHANGED
|
@@ -22,11 +22,11 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
22
22
|
|
|
23
23
|
const isServer = typeof window === 'undefined';
|
|
24
24
|
function getStatusColor(match, theme) {
|
|
25
|
-
return match.
|
|
25
|
+
return match.status === 'pending' ? theme.active : match.status === 'error' ? theme.danger : match.status === 'success' ? theme.success : theme.gray;
|
|
26
26
|
}
|
|
27
27
|
function getRouteStatusColor(matches, route, theme) {
|
|
28
|
-
const found = matches.find(d => d.
|
|
29
|
-
return found ? found.
|
|
28
|
+
const found = matches.find(d => d.routeId === route.id);
|
|
29
|
+
return found ? found.status === 'pending' ? theme.active : found.status === 'error' ? theme.danger : found.status === 'success' ? theme.success : theme.gray : theme.gray;
|
|
30
30
|
}
|
|
31
31
|
function styled(type, newStyles, queries = {}) {
|
|
32
32
|
return /*#__PURE__*/React__default["default"].forwardRef(({
|
package/build/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import React from 'react'\nimport {
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import React from 'react'\nimport { AnyRootRoute, AnyRoute, AnyRouteMatch } from '@tanstack/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'\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\n return found\n ? found.status === 'pending'\n ? theme.active\n : found.status === 'error'\n ? theme.danger\n : found.status === 'success'\n ? theme.success\n : theme.gray\n : theme.gray\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\n return JSON.stringify(newValue, name)\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":["isServer","window","getStatusColor","match","theme","status","active","danger","success","gray","getRouteStatusColor","matches","route","found","find","d","routeId","id","styled","type","newStyles","queries","React","forwardRef","style","rest","ref","useTheme","mediaStyles","Object","entries","reduce","current","key","value","useMediaQuery","createElement","useIsMounted","mountedRef","useRef","isMounted","useCallback","displayValue","name","getOwnPropertyNames","newValue","toString","JSON","stringify","useSafeState","initialState","state","setState","useState","safeSetState","scheduleMicrotask","callback","Promise","resolve","then","catch","error","setTimeout"],"mappings":"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"}
|