// // Copyright 2023 DXOS.org // import React, { type FC, type HTMLAttributes, useState } from 'react'; import { mx } from '@dxos/ui-theme'; // TODO(burdon): Copied form devtools. export const JsonTree: FC<{ data?: object }> = ({ data }) => { return (
); }; export const Node: FC<{ data?: any; root?: boolean }> = ({ data, root }) => { if (typeof data !== 'object' || data === undefined || data === null) { return ; } if (Array.isArray(data)) { return (
{data.map((value, index) => ( ))}
); } return (
{Object.entries(data).map(([key, value]) => ( ))}
); }; export const KeyValue: FC<{ label: string; data?: any; className?: string }> = ({ label, data, className }) => { const [open, setOpen] = useState(true); if (data === undefined) { return null; } return (
setOpen((open) => !open)} > {label} {open && }
); }; const Scalar: FC<{ value: any }> = ({ value }) => { return ( {(value === undefined && 'undefined') || (value === null && 'null') || (typeof value === 'string' && value) || JSON.stringify(value)} ); }; const Box: FC> = ({ children, className, ...props }) => { return (
{children}
); };