diff --git a/.changeset/silent-beds-create.md b/.changeset/silent-beds-create.md new file mode 100644 index 00000000..b583e2b7 --- /dev/null +++ b/.changeset/silent-beds-create.md @@ -0,0 +1,5 @@ +--- +'@tanstack/devtools-ui': patch +--- + +Improvements to the json tree component, now supports expansion length config diff --git a/.changeset/tricky-cloths-joke.md b/.changeset/tricky-cloths-joke.md new file mode 100644 index 00000000..0ec6cdd8 --- /dev/null +++ b/.changeset/tricky-cloths-joke.md @@ -0,0 +1,6 @@ +--- +'@tanstack/devtools': patch +'@tanstack/devtools-vite': patch +--- + +improve open-source by using location origin diff --git a/packages/devtools-ui/src/components/tree.tsx b/packages/devtools-ui/src/components/tree.tsx index b8a4e0d6..546d8842 100644 --- a/packages/devtools-ui/src/components/tree.tsx +++ b/packages/devtools-ui/src/components/tree.tsx @@ -3,97 +3,19 @@ import clsx from 'clsx' import { css, useStyles } from '../styles/use-styles' import { CopiedCopier, Copier, ErrorCopier } from './icons' -export function JsonTree(props: { value: any; copyable?: boolean }) { - return -} -type CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy' - -const CopyButton = (props: { value: unknown }) => { - const styles = useStyles() - const [copyState, setCopyState] = createSignal('NoCopy') - - return ( - - ) -} - -const Expander = (props: { expanded: boolean }) => { - const styles = useStyles() +export function JsonTree(props: { + value: any + copyable?: boolean + defaultExpansionDepth?: number +}) { return ( - - - - - + ) } @@ -103,8 +25,18 @@ function JsonValue(props: { isRoot?: boolean isLastKey?: boolean copyable?: boolean + defaultExpansionDepth: number + depth: number }) { - const { value, keyName, isRoot = false, isLastKey, copyable } = props + const { + value, + keyName, + isRoot = false, + isLastKey, + copyable, + defaultExpansionDepth, + depth, + } = props const styles = useStyles() return ( @@ -137,12 +69,24 @@ function JsonValue(props: { } if (Array.isArray(value)) { return ( - + ) } if (typeof value === 'object') { return ( - + ) } return @@ -161,16 +105,36 @@ const ArrayValue = ({ value, keyName, copyable, + defaultExpansionDepth, + depth, }: { value: Array copyable?: boolean keyName?: string + defaultExpansionDepth: number + depth: number }) => { const styles = useStyles() - const [expanded, setExpanded] = createSignal(true) + const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth) + + if (value.length === 0) { + return ( + + {keyName && ( + + "{keyName}":{' '} + + )} + [] + + ) + } return ( - + setExpanded(!expanded())} + expanded={expanded()} + /> {keyName && ( { @@ -195,6 +159,8 @@ const ArrayValue = ({ copyable={copyable} value={item} isLastKey={isLastKey} + defaultExpansionDepth={defaultExpansionDepth} + depth={depth + 1} /> ) }} @@ -222,19 +188,40 @@ const ObjectValue = ({ value, keyName, copyable, + defaultExpansionDepth, + depth, }: { value: Record keyName?: string copyable?: boolean + defaultExpansionDepth: number + depth: number }) => { const styles = useStyles() - const [expanded, setExpanded] = createSignal(true) + const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth) const keys = Object.keys(value) const lastKeyName = keys[keys.length - 1] + if (keys.length === 0) { + return ( + + {keyName && ( + + "{keyName}":{' '} + + )} + {'{}'} + + ) + } return ( - {keyName && } + {keyName && ( + setExpanded(!expanded())} + expanded={expanded()} + /> + )} {keyName && ( { @@ -259,6 +246,8 @@ const ObjectValue = ({ keyName={k} isLastKey={lastKeyName === k} copyable={copyable} + defaultExpansionDepth={defaultExpansionDepth} + depth={depth + 1} /> )} @@ -281,3 +270,95 @@ const ObjectValue = ({ ) } + +type CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy' + +const CopyButton = (props: { value: unknown }) => { + const styles = useStyles() + const [copyState, setCopyState] = createSignal('NoCopy') + + return ( + + ) +} + +const Expander = (props: { expanded: boolean; onClick: () => void }) => { + const styles = useStyles() + return ( + + + + + + ) +} diff --git a/packages/devtools-ui/src/styles/use-styles.ts b/packages/devtools-ui/src/styles/use-styles.ts index 9155a379..ef309351 100644 --- a/packages/devtools-ui/src/styles/use-styles.ts +++ b/packages/devtools-ui/src/styles/use-styles.ts @@ -393,6 +393,7 @@ const stylesFactory = (theme: Theme = 'dark') => { `, expander: css` position: absolute; + cursor: pointer; left: -16px; top: 3px; & path {