@xyo-network/react-payload-raw-info 2.69.5
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/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/browser/components/Button/RawInfoButton.d.cts +15 -0
- package/dist/browser/components/Button/RawInfoButton.d.cts.map +1 -0
- package/dist/browser/components/Button/RawInfoButton.d.mts +15 -0
- package/dist/browser/components/Button/RawInfoButton.d.mts.map +1 -0
- package/dist/browser/components/Button/RawInfoButton.d.ts +15 -0
- package/dist/browser/components/Button/RawInfoButton.d.ts.map +1 -0
- package/dist/browser/components/Button/index.d.cts +2 -0
- package/dist/browser/components/Button/index.d.cts.map +1 -0
- package/dist/browser/components/Button/index.d.mts +2 -0
- package/dist/browser/components/Button/index.d.mts.map +1 -0
- package/dist/browser/components/Button/index.d.ts +2 -0
- package/dist/browser/components/Button/index.d.ts.map +1 -0
- package/dist/browser/components/Dialog/RawInfoDialog.d.cts +10 -0
- package/dist/browser/components/Dialog/RawInfoDialog.d.cts.map +1 -0
- package/dist/browser/components/Dialog/RawInfoDialog.d.mts +10 -0
- package/dist/browser/components/Dialog/RawInfoDialog.d.mts.map +1 -0
- package/dist/browser/components/Dialog/RawInfoDialog.d.ts +10 -0
- package/dist/browser/components/Dialog/RawInfoDialog.d.ts.map +1 -0
- package/dist/browser/components/Dialog/index.d.cts +2 -0
- package/dist/browser/components/Dialog/index.d.cts.map +1 -0
- package/dist/browser/components/Dialog/index.d.mts +2 -0
- package/dist/browser/components/Dialog/index.d.mts.map +1 -0
- package/dist/browser/components/Dialog/index.d.ts +2 -0
- package/dist/browser/components/Dialog/index.d.ts.map +1 -0
- package/dist/browser/components/PayloadCollapse.d.cts +10 -0
- package/dist/browser/components/PayloadCollapse.d.cts.map +1 -0
- package/dist/browser/components/PayloadCollapse.d.mts +10 -0
- package/dist/browser/components/PayloadCollapse.d.mts.map +1 -0
- package/dist/browser/components/PayloadCollapse.d.ts +10 -0
- package/dist/browser/components/PayloadCollapse.d.ts.map +1 -0
- package/dist/browser/components/RawInfoIcon.d.cts +15 -0
- package/dist/browser/components/RawInfoIcon.d.cts.map +1 -0
- package/dist/browser/components/RawInfoIcon.d.mts +15 -0
- package/dist/browser/components/RawInfoIcon.d.mts.map +1 -0
- package/dist/browser/components/RawInfoIcon.d.ts +15 -0
- package/dist/browser/components/RawInfoIcon.d.ts.map +1 -0
- package/dist/browser/components/img/index.d.cts +2 -0
- package/dist/browser/components/img/index.d.cts.map +1 -0
- package/dist/browser/components/img/index.d.mts +2 -0
- package/dist/browser/components/img/index.d.mts.map +1 -0
- package/dist/browser/components/img/index.d.ts +2 -0
- package/dist/browser/components/img/index.d.ts.map +1 -0
- package/dist/browser/components/index.d.cts +6 -0
- package/dist/browser/components/index.d.cts.map +1 -0
- package/dist/browser/components/index.d.mts +6 -0
- package/dist/browser/components/index.d.mts.map +1 -0
- package/dist/browser/components/index.d.ts +6 -0
- package/dist/browser/components/index.d.ts.map +1 -0
- package/dist/browser/components/shared/JsonViewEx.d.cts +4 -0
- package/dist/browser/components/shared/JsonViewEx.d.cts.map +1 -0
- package/dist/browser/components/shared/JsonViewEx.d.mts +4 -0
- package/dist/browser/components/shared/JsonViewEx.d.mts.map +1 -0
- package/dist/browser/components/shared/JsonViewEx.d.ts +4 -0
- package/dist/browser/components/shared/JsonViewEx.d.ts.map +1 -0
- package/dist/browser/components/shared/index.d.cts +2 -0
- package/dist/browser/components/shared/index.d.cts.map +1 -0
- package/dist/browser/components/shared/index.d.mts +2 -0
- package/dist/browser/components/shared/index.d.mts.map +1 -0
- package/dist/browser/components/shared/index.d.ts +2 -0
- package/dist/browser/components/shared/index.d.ts.map +1 -0
- package/dist/browser/components/styled/StyledChipLabel.d.cts +5 -0
- package/dist/browser/components/styled/StyledChipLabel.d.cts.map +1 -0
- package/dist/browser/components/styled/StyledChipLabel.d.mts +5 -0
- package/dist/browser/components/styled/StyledChipLabel.d.mts.map +1 -0
- package/dist/browser/components/styled/StyledChipLabel.d.ts +5 -0
- package/dist/browser/components/styled/StyledChipLabel.d.ts.map +1 -0
- package/dist/browser/components/styled/index.d.cts +2 -0
- package/dist/browser/components/styled/index.d.cts.map +1 -0
- package/dist/browser/components/styled/index.d.mts +2 -0
- package/dist/browser/components/styled/index.d.mts.map +1 -0
- package/dist/browser/components/styled/index.d.ts +2 -0
- package/dist/browser/components/styled/index.d.ts.map +1 -0
- package/dist/browser/index.cjs +233 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +2 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts +2 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +200 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/xyo-color-logo-LHR2SMEM.svg +1 -0
- package/dist/node/components/Button/RawInfoButton.d.cts +15 -0
- package/dist/node/components/Button/RawInfoButton.d.cts.map +1 -0
- package/dist/node/components/Button/RawInfoButton.d.mts +15 -0
- package/dist/node/components/Button/RawInfoButton.d.mts.map +1 -0
- package/dist/node/components/Button/RawInfoButton.d.ts +15 -0
- package/dist/node/components/Button/RawInfoButton.d.ts.map +1 -0
- package/dist/node/components/Button/index.d.cts +2 -0
- package/dist/node/components/Button/index.d.cts.map +1 -0
- package/dist/node/components/Button/index.d.mts +2 -0
- package/dist/node/components/Button/index.d.mts.map +1 -0
- package/dist/node/components/Button/index.d.ts +2 -0
- package/dist/node/components/Button/index.d.ts.map +1 -0
- package/dist/node/components/Dialog/RawInfoDialog.d.cts +10 -0
- package/dist/node/components/Dialog/RawInfoDialog.d.cts.map +1 -0
- package/dist/node/components/Dialog/RawInfoDialog.d.mts +10 -0
- package/dist/node/components/Dialog/RawInfoDialog.d.mts.map +1 -0
- package/dist/node/components/Dialog/RawInfoDialog.d.ts +10 -0
- package/dist/node/components/Dialog/RawInfoDialog.d.ts.map +1 -0
- package/dist/node/components/Dialog/index.d.cts +2 -0
- package/dist/node/components/Dialog/index.d.cts.map +1 -0
- package/dist/node/components/Dialog/index.d.mts +2 -0
- package/dist/node/components/Dialog/index.d.mts.map +1 -0
- package/dist/node/components/Dialog/index.d.ts +2 -0
- package/dist/node/components/Dialog/index.d.ts.map +1 -0
- package/dist/node/components/PayloadCollapse.d.cts +10 -0
- package/dist/node/components/PayloadCollapse.d.cts.map +1 -0
- package/dist/node/components/PayloadCollapse.d.mts +10 -0
- package/dist/node/components/PayloadCollapse.d.mts.map +1 -0
- package/dist/node/components/PayloadCollapse.d.ts +10 -0
- package/dist/node/components/PayloadCollapse.d.ts.map +1 -0
- package/dist/node/components/RawInfoIcon.d.cts +15 -0
- package/dist/node/components/RawInfoIcon.d.cts.map +1 -0
- package/dist/node/components/RawInfoIcon.d.mts +15 -0
- package/dist/node/components/RawInfoIcon.d.mts.map +1 -0
- package/dist/node/components/RawInfoIcon.d.ts +15 -0
- package/dist/node/components/RawInfoIcon.d.ts.map +1 -0
- package/dist/node/components/img/index.d.cts +2 -0
- package/dist/node/components/img/index.d.cts.map +1 -0
- package/dist/node/components/img/index.d.mts +2 -0
- package/dist/node/components/img/index.d.mts.map +1 -0
- package/dist/node/components/img/index.d.ts +2 -0
- package/dist/node/components/img/index.d.ts.map +1 -0
- package/dist/node/components/index.d.cts +6 -0
- package/dist/node/components/index.d.cts.map +1 -0
- package/dist/node/components/index.d.mts +6 -0
- package/dist/node/components/index.d.mts.map +1 -0
- package/dist/node/components/index.d.ts +6 -0
- package/dist/node/components/index.d.ts.map +1 -0
- package/dist/node/components/shared/JsonViewEx.d.cts +4 -0
- package/dist/node/components/shared/JsonViewEx.d.cts.map +1 -0
- package/dist/node/components/shared/JsonViewEx.d.mts +4 -0
- package/dist/node/components/shared/JsonViewEx.d.mts.map +1 -0
- package/dist/node/components/shared/JsonViewEx.d.ts +4 -0
- package/dist/node/components/shared/JsonViewEx.d.ts.map +1 -0
- package/dist/node/components/shared/index.d.cts +2 -0
- package/dist/node/components/shared/index.d.cts.map +1 -0
- package/dist/node/components/shared/index.d.mts +2 -0
- package/dist/node/components/shared/index.d.mts.map +1 -0
- package/dist/node/components/shared/index.d.ts +2 -0
- package/dist/node/components/shared/index.d.ts.map +1 -0
- package/dist/node/components/styled/StyledChipLabel.d.cts +5 -0
- package/dist/node/components/styled/StyledChipLabel.d.cts.map +1 -0
- package/dist/node/components/styled/StyledChipLabel.d.mts +5 -0
- package/dist/node/components/styled/StyledChipLabel.d.mts.map +1 -0
- package/dist/node/components/styled/StyledChipLabel.d.ts +5 -0
- package/dist/node/components/styled/StyledChipLabel.d.ts.map +1 -0
- package/dist/node/components/styled/index.d.cts +2 -0
- package/dist/node/components/styled/index.d.cts.map +1 -0
- package/dist/node/components/styled/index.d.mts +2 -0
- package/dist/node/components/styled/index.d.mts.map +1 -0
- package/dist/node/components/styled/index.d.ts +2 -0
- package/dist/node/components/styled/index.d.ts.map +1 -0
- package/dist/node/index.cjs +241 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +2 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +2 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +200 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/xyo-color-logo-LHR2SMEM.svg +1 -0
- package/package.json +88 -0
- package/src/components/Button/RawInfoButton.stories.tsx +27 -0
- package/src/components/Button/RawInfoButton.tsx +71 -0
- package/src/components/Button/index.ts +1 -0
- package/src/components/Dialog/RawInfoDialog.stories.tsx +28 -0
- package/src/components/Dialog/RawInfoDialog.tsx +35 -0
- package/src/components/Dialog/index.ts +1 -0
- package/src/components/PayloadCollapse.tsx +46 -0
- package/src/components/RawInfoIcon.stories.tsx +27 -0
- package/src/components/RawInfoIcon.tsx +59 -0
- package/src/components/img/index.ts +1 -0
- package/src/components/img/xyo-color-logo.svg +1 -0
- package/src/components/index.ts +5 -0
- package/src/components/shared/JsonViewEx.tsx +38 -0
- package/src/components/shared/index.ts +1 -0
- package/src/components/styled/StyledChipLabel.tsx +10 -0
- package/src/components/styled/index.ts +1 -0
- package/src/index.ts +1 -0
- package/src/types/images.d.ts +5 -0
- package/typedoc.json +5 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ButtonEx, ButtonExProps } from '@xylabs/react-button'
|
|
2
|
+
import { Payload, WithSchema } from '@xyo-network/payload-model'
|
|
3
|
+
import { MouseEventHandler, ReactNode, useState } from 'react'
|
|
4
|
+
|
|
5
|
+
import { RawInfoDialog } from '../Dialog'
|
|
6
|
+
import { xyoColorLogo } from '../img'
|
|
7
|
+
|
|
8
|
+
type IconSize = 'small' | 'medium' | 'large'
|
|
9
|
+
|
|
10
|
+
const presetIconSizeValue = (size?: IconSize) => {
|
|
11
|
+
switch (size) {
|
|
12
|
+
case 'small': {
|
|
13
|
+
return 16
|
|
14
|
+
}
|
|
15
|
+
case 'medium': {
|
|
16
|
+
return 32
|
|
17
|
+
}
|
|
18
|
+
case 'large': {
|
|
19
|
+
return 48
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface RawInfoButtonProps extends ButtonExProps {
|
|
25
|
+
dialogContent?: ReactNode
|
|
26
|
+
iconOnly?: boolean
|
|
27
|
+
iconSize?: number
|
|
28
|
+
onCloseCallback?: () => void
|
|
29
|
+
payload?: Payload<WithSchema> | null
|
|
30
|
+
presetIconSize?: IconSize
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const RawInfoButton: React.FC<RawInfoButtonProps> = ({
|
|
34
|
+
dialogContent,
|
|
35
|
+
iconOnly,
|
|
36
|
+
iconSize = 24,
|
|
37
|
+
onCloseCallback,
|
|
38
|
+
children,
|
|
39
|
+
payload,
|
|
40
|
+
presetIconSize,
|
|
41
|
+
...props
|
|
42
|
+
}) => {
|
|
43
|
+
const [open, setOpen] = useState(false)
|
|
44
|
+
const size = presetIconSizeValue(presetIconSize)
|
|
45
|
+
|
|
46
|
+
const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {
|
|
47
|
+
event.stopPropagation()
|
|
48
|
+
setOpen(true)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const onCloseCallBackWrapped = () => {
|
|
52
|
+
setOpen(false)
|
|
53
|
+
onCloseCallback?.()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<span>
|
|
58
|
+
<ButtonEx
|
|
59
|
+
variant="outlined"
|
|
60
|
+
size="small"
|
|
61
|
+
startIcon={<img src={xyoColorLogo} height={size ?? iconSize} width={size ?? iconSize} />}
|
|
62
|
+
onClick={handleClick}
|
|
63
|
+
disabled={iconOnly ? false : !payload}
|
|
64
|
+
{...props}
|
|
65
|
+
>
|
|
66
|
+
{children ?? <span>Data</span>}
|
|
67
|
+
</ButtonEx>
|
|
68
|
+
{iconOnly ? null : <RawInfoDialog payload={payload} onCloseCallback={onCloseCallBackWrapped} dialogContent={dialogContent} open={open} />}
|
|
69
|
+
</span>
|
|
70
|
+
)
|
|
71
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './RawInfoButton'
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
2
|
+
import { FlexCol } from "@xylabs/react-flexbox";
|
|
3
|
+
import { Payload } from "@xyo-network/payload-model";
|
|
4
|
+
import { RawInfoDialog } from "./RawInfoDialog";
|
|
5
|
+
|
|
6
|
+
type TestPayload = Payload<{ id: string, type: string, schema: string }, 'network.xyo.test'>
|
|
7
|
+
const TestPayload: TestPayload = {
|
|
8
|
+
id: '123',
|
|
9
|
+
type: 'test',
|
|
10
|
+
schema: 'network.xyo.test',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
title: 'payload/RawInfoDialog',
|
|
15
|
+
component: RawInfoDialog,
|
|
16
|
+
} as Meta
|
|
17
|
+
|
|
18
|
+
const Template: StoryFn<typeof RawInfoDialog> = (args) => <FlexCol><RawInfoDialog {...args} /></FlexCol>
|
|
19
|
+
|
|
20
|
+
const Default = Template.bind({})
|
|
21
|
+
const WithPayload = Template.bind({})
|
|
22
|
+
WithPayload.args = {
|
|
23
|
+
dialogContent: 'This is a test',
|
|
24
|
+
open: true,
|
|
25
|
+
payload: TestPayload
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { Default, WithPayload };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Button, Dialog, DialogActions, DialogContent, DialogProps, DialogTitle } from '@mui/material'
|
|
2
|
+
import { Payload } from '@xyo-network/payload-model'
|
|
3
|
+
import { MouseEventHandler, ReactNode } from 'react'
|
|
4
|
+
|
|
5
|
+
import { RawInfoPayloadCollapse } from '../PayloadCollapse'
|
|
6
|
+
|
|
7
|
+
export interface RawInfoDialogProps extends DialogProps {
|
|
8
|
+
dialogContent?: ReactNode
|
|
9
|
+
onCloseCallback?: () => void
|
|
10
|
+
payload?: Payload | null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const RawInfoDialog: React.FC<RawInfoDialogProps> = ({ dialogContent, onCloseCallback, payload, ...props }) => {
|
|
14
|
+
const onDialogClick: MouseEventHandler<HTMLSpanElement> = (event) => {
|
|
15
|
+
event.stopPropagation()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
// Wrapping in a span so we can catch click events and prevent them from propagating outside the component
|
|
20
|
+
<span onClick={onDialogClick}>
|
|
21
|
+
<Dialog fullWidth maxWidth="lg" onClose={() => onCloseCallback?.()} {...props}>
|
|
22
|
+
<DialogTitle>Raw Data</DialogTitle>
|
|
23
|
+
<DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
|
24
|
+
{dialogContent}
|
|
25
|
+
<RawInfoPayloadCollapse payload={payload} />
|
|
26
|
+
</DialogContent>
|
|
27
|
+
<DialogActions>
|
|
28
|
+
<Button variant="contained" onClick={() => onCloseCallback?.()}>
|
|
29
|
+
Close
|
|
30
|
+
</Button>
|
|
31
|
+
</DialogActions>
|
|
32
|
+
</Dialog>
|
|
33
|
+
</span>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './RawInfoDialog'
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Button, Chip, Collapse, CollapseProps, Typography } from '@mui/material'
|
|
2
|
+
import { FlexCol, FlexRow } from '@xylabs/react-flexbox'
|
|
3
|
+
import { usePromise } from '@xylabs/react-promise'
|
|
4
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
5
|
+
import { Payload } from '@xyo-network/payload-model'
|
|
6
|
+
import { useDataState } from '@xyo-network/react-shared'
|
|
7
|
+
|
|
8
|
+
import { JsonViewEx } from './shared'
|
|
9
|
+
import { StyledChipLabel } from './styled'
|
|
10
|
+
|
|
11
|
+
export interface RawInfoPayloadCollapse extends CollapseProps {
|
|
12
|
+
defaultExpandedJson?: boolean
|
|
13
|
+
payload?: Payload | null
|
|
14
|
+
updateExpandedJson?: (expanded: boolean) => void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const RawInfoPayloadCollapse: React.FC<RawInfoPayloadCollapse> = ({ defaultExpandedJson, payload, updateExpandedJson, ...props }) => {
|
|
18
|
+
const [expandedJson, setExpandedJson] = useDataState(defaultExpandedJson)
|
|
19
|
+
const [hash] = usePromise(async () => (payload ? await PayloadBuilder.dataHash(payload) : undefined), [payload])
|
|
20
|
+
|
|
21
|
+
const handleExpansion = () => {
|
|
22
|
+
updateExpandedJson?.(!expandedJson)
|
|
23
|
+
setExpandedJson(!expandedJson)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<>
|
|
28
|
+
{payload ?
|
|
29
|
+
<FlexRow>
|
|
30
|
+
<Button onClick={handleExpansion} size="small" variant="outlined">
|
|
31
|
+
Show Raw JSON
|
|
32
|
+
</Button>
|
|
33
|
+
</FlexRow>
|
|
34
|
+
: null}
|
|
35
|
+
<Collapse in={expandedJson} {...props}>
|
|
36
|
+
{payload ?
|
|
37
|
+
<FlexCol alignItems="stretch" gap={1.5}>
|
|
38
|
+
<Typography sx={{ lineHeight: 1 }}>Payload Hash:</Typography>
|
|
39
|
+
<Chip label={<StyledChipLabel>{hash}</StyledChipLabel>} sx={{ alignSelf: 'start' }} />
|
|
40
|
+
<JsonViewEx src={payload} />
|
|
41
|
+
</FlexCol>
|
|
42
|
+
: null}
|
|
43
|
+
</Collapse>
|
|
44
|
+
</>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
2
|
+
import { FlexCol } from "@xylabs/react-flexbox";
|
|
3
|
+
import { Payload } from "@xyo-network/payload-model";
|
|
4
|
+
import { RawInfoIcon } from "./RawInfoIcon";
|
|
5
|
+
|
|
6
|
+
type TestPayload = Payload<{ id: string, type: string, schema: string }, 'network.xyo.test'>
|
|
7
|
+
const TestPayload: TestPayload = {
|
|
8
|
+
id: '123',
|
|
9
|
+
type: 'test',
|
|
10
|
+
schema: 'network.xyo.test',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
title: 'payload/RawInfoIcon',
|
|
15
|
+
component: RawInfoIcon,
|
|
16
|
+
} as Meta
|
|
17
|
+
|
|
18
|
+
const Template: StoryFn<typeof RawInfoIcon> = (args) => <FlexCol><RawInfoIcon {...args} /></FlexCol>
|
|
19
|
+
|
|
20
|
+
const Default = Template.bind({})
|
|
21
|
+
const WithPayload = Template.bind({})
|
|
22
|
+
WithPayload.args = {
|
|
23
|
+
dialogContent: 'This is a test',
|
|
24
|
+
payload: TestPayload
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { Default, WithPayload };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { IconButton, IconButtonProps } from '@mui/material'
|
|
2
|
+
import { Payload } from '@xyo-network/payload-model'
|
|
3
|
+
import { forwardRef, MouseEventHandler, ReactNode, useState } from 'react'
|
|
4
|
+
|
|
5
|
+
import { RawInfoDialog } from './Dialog'
|
|
6
|
+
import { xyoColorLogo } from './img'
|
|
7
|
+
|
|
8
|
+
type IconSize = 'small' | 'medium' | 'large'
|
|
9
|
+
|
|
10
|
+
const presetIconSizeValue = (size?: IconSize) => {
|
|
11
|
+
switch (size) {
|
|
12
|
+
case 'small': {
|
|
13
|
+
return 16
|
|
14
|
+
}
|
|
15
|
+
case 'medium': {
|
|
16
|
+
return 32
|
|
17
|
+
}
|
|
18
|
+
case 'large': {
|
|
19
|
+
return 48
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface RawInfoIconProps extends IconButtonProps {
|
|
25
|
+
dialogContent?: ReactNode
|
|
26
|
+
iconOnly?: boolean
|
|
27
|
+
iconSize?: number
|
|
28
|
+
onCloseCallback?: () => void
|
|
29
|
+
payload?: Payload
|
|
30
|
+
presetIconSize?: IconSize
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const RawInfoIcon = forwardRef<HTMLButtonElement, RawInfoIconProps>(
|
|
34
|
+
({ dialogContent, iconOnly, iconSize = 32, onCloseCallback, payload, presetIconSize, ...props }, ref) => {
|
|
35
|
+
const [open, setOpen] = useState(false)
|
|
36
|
+
const size = presetIconSizeValue(presetIconSize)
|
|
37
|
+
|
|
38
|
+
const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {
|
|
39
|
+
event.stopPropagation()
|
|
40
|
+
setOpen(true)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const onCloseCallBackWrapped = () => {
|
|
44
|
+
setOpen(false)
|
|
45
|
+
onCloseCallback?.()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<>
|
|
50
|
+
<IconButton onClick={handleClick} ref={ref} {...props}>
|
|
51
|
+
<img src={xyoColorLogo} height={size ?? iconSize} width={size ?? iconSize} />
|
|
52
|
+
</IconButton>
|
|
53
|
+
{iconOnly ? null : <RawInfoDialog payload={payload} onCloseCallback={onCloseCallBackWrapped} dialogContent={dialogContent} open={open} />}
|
|
54
|
+
</>
|
|
55
|
+
)
|
|
56
|
+
},
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
RawInfoIcon.displayName = 'RawInfoIcon'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as xyoColorLogo } from './xyo-color-logo.svg'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 238"><defs><style>.cls-1{fill:#8d8fc6;}.cls-2{fill:#579fd6;}.cls-3{fill:#f27046;}.cls-4{fill:#eb407a;}</style></defs><path class="cls-1" d="M74.5,28.33,21.29,120.5,74.5,212.67H180.94l1.76-3,51.46-89.13L180.94,28.33ZM84.65,40.54h78.83L111.65,56.93a15.85,15.85,0,0,1,2,5l59.66-18.81L185.22,101a20.12,20.12,0,0,1,5.36-.78l-10-47.91,37.87,65.53h-7.62a24.21,24.21,0,0,1,.15,2.68,23.29,23.29,0,0,1-.15,2.68h7.62l-39.1,67.75,10.92-50.13A20.57,20.57,0,0,1,185,140l-12.88,59-58.37-19.53a17.61,17.61,0,0,1-1.7,5l47.5,15.92H84.65l4-6.85A20.17,20.17,0,0,1,83.93,191L80,197.78,42.67,133.13l37,32.66a20.52,20.52,0,0,1,3.6-4L36.69,120.66,85,77.79a17.45,17.45,0,0,1-3.19-4.32l-39.46,35L80,43.22l5.56,9.69A17.51,17.51,0,0,1,90.12,50Zm28.24,31.17a16.15,16.15,0,0,1-2.68,4.64l62,35.81a19.74,19.74,0,0,1,2.83-4.54Zm-20,10.51v75.33a18,18,0,0,1,2.47-.16,17.18,17.18,0,0,1,2.89.21v-75a11.21,11.21,0,0,1-1.29,0,17.57,17.57,0,0,1-4.07-.47Zm79.34,46.63-62.08,35.81a18.45,18.45,0,0,1,2.68,4.68l62.23-36a19.68,19.68,0,0,1-2.83-4.53Z"/><path class="cls-2" d="M97,48.58a17.06,17.06,0,1,0,17,17,17.08,17.08,0,0,0-17-17Zm0,5.36a11.7,11.7,0,1,1-11.7,11.69A11.65,11.65,0,0,1,97,53.94Z"/><path class="cls-3" d="M95.37,157.39a18.73,18.73,0,1,0,18.7,18.7,18.74,18.74,0,0,0-18.7-18.7Zm0,5.31A13.4,13.4,0,1,1,82,176.09a13.37,13.37,0,0,1,13.4-13.39Z"/><path class="cls-4" d="M190.73,100.2A20.3,20.3,0,1,0,211,120.5a20.34,20.34,0,0,0-20.3-20.3Zm0,5.36a14.94,14.94,0,1,1-14.94,14.94,14.88,14.88,0,0,1,14.94-14.94Z"/></svg>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { CircularProgress, useTheme } from '@mui/material'
|
|
2
|
+
import { useColorSchemeEx } from '@xylabs/react-invertible-theme'
|
|
3
|
+
import { lazy, Suspense } from 'react'
|
|
4
|
+
import { OnCopyProps, ReactJsonViewProps } from 'react-json-view'
|
|
5
|
+
|
|
6
|
+
const JsonView = lazy(() => import(/* webpackChunkName: "jsonView" */ 'react-json-view'))
|
|
7
|
+
|
|
8
|
+
export const JsonViewEx: React.FC<ReactJsonViewProps> = (props) => {
|
|
9
|
+
const theme = useTheme()
|
|
10
|
+
const { darkMode } = useColorSchemeEx()
|
|
11
|
+
|
|
12
|
+
const onCopy = async (event: OnCopyProps) => {
|
|
13
|
+
if (event.src) {
|
|
14
|
+
try {
|
|
15
|
+
const copyContent = typeof event.src === 'string' ? event.src : JSON.stringify(event.src, null, 2)
|
|
16
|
+
await navigator.clipboard.writeText(copyContent)
|
|
17
|
+
} catch (e) {
|
|
18
|
+
console.error('Error Copying to clipboard', e, event.src)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Suspense fallback={<CircularProgress />}>
|
|
25
|
+
<JsonView
|
|
26
|
+
enableClipboard={onCopy}
|
|
27
|
+
theme={darkMode ? 'tomorrow' : 'summerfruit:inverted'}
|
|
28
|
+
collapseStringsAfterLength={50}
|
|
29
|
+
style={{
|
|
30
|
+
background: darkMode ? theme.palette.background.paper : theme.palette.grey[200],
|
|
31
|
+
borderRadius: theme.shape.borderRadius,
|
|
32
|
+
padding: theme.spacing(2),
|
|
33
|
+
}}
|
|
34
|
+
{...props}
|
|
35
|
+
/>
|
|
36
|
+
</Suspense>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './JsonViewEx'
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { styled, Typography } from '@mui/material'
|
|
2
|
+
|
|
3
|
+
export const StyledChipLabel = styled(Typography, { name: 'StyledChipLabel' })(({ theme }) => ({
|
|
4
|
+
display: 'block',
|
|
5
|
+
lineHeight: 1,
|
|
6
|
+
overflow: 'hidden',
|
|
7
|
+
paddingRight: theme.spacing(0.95),
|
|
8
|
+
textOverflow: 'ellipsis',
|
|
9
|
+
whiteSpace: 'nowrap',
|
|
10
|
+
}))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './StyledChipLabel'
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './components'
|