//
// 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}
);
};