mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import type {ReactNode} from 'react';
|
|
import {Fragment} from 'react';
|
|
import styled from '@emotion/styled';
|
|
|
|
import JSXProperty from 'sentry/components/stories/jsxProperty';
|
|
import {space} from 'sentry/styles/space';
|
|
|
|
interface Props {
|
|
name: string;
|
|
children?: ReactNode;
|
|
props?: Record<string, unknown>;
|
|
}
|
|
|
|
export default function JSXNode({name, props = {}, children}: Props) {
|
|
if (children) {
|
|
return (
|
|
<Code data-node>
|
|
{`<${name}`}
|
|
{Object.entries(props).map(([propName, value]) => (
|
|
<Fragment key={propName}>
|
|
{' '}
|
|
<JSXProperty name={propName} value={value} />
|
|
</Fragment>
|
|
))}
|
|
{`>`}
|
|
<br />
|
|
{children}
|
|
<br />
|
|
{`</${name}>`}
|
|
</Code>
|
|
);
|
|
}
|
|
return (
|
|
<Code data-node>
|
|
{`<${name} `}
|
|
{Object.entries(props).map(([propName, value]) => (
|
|
<Fragment key={propName}>
|
|
<JSXProperty name={propName} value={value} />{' '}
|
|
</Fragment>
|
|
))}
|
|
{`/>`}
|
|
</Code>
|
|
);
|
|
}
|
|
|
|
const Code = styled('code')`
|
|
font-size: ${p => p.theme.fontSizeMedium};
|
|
padding-inline: 0;
|
|
& > [data-property] {
|
|
font-size: ${p => p.theme.fontSizeMedium};
|
|
padding-inline: 0;
|
|
}
|
|
& > [data-node] {
|
|
padding-left: ${space(2)};
|
|
}
|
|
`;
|