@xyo-network/react-payload-details 2.32.0-rc.11

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.
Files changed (96) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +70 -0
  3. package/dist/cjs/components/Details/DataDetails.d.ts +11 -0
  4. package/dist/cjs/components/Details/DataDetails.d.ts.map +1 -0
  5. package/dist/cjs/components/Details/DataDetails.js +43 -0
  6. package/dist/cjs/components/Details/DataDetails.js.map +1 -0
  7. package/dist/cjs/components/Details/Details.d.ts +15 -0
  8. package/dist/cjs/components/Details/Details.d.ts.map +1 -0
  9. package/dist/cjs/components/Details/Details.js +15 -0
  10. package/dist/cjs/components/Details/Details.js.map +1 -0
  11. package/dist/cjs/components/Details/HashSourceDetails.d.ts +9 -0
  12. package/dist/cjs/components/Details/HashSourceDetails.d.ts.map +1 -0
  13. package/dist/cjs/components/Details/HashSourceDetails.js +19 -0
  14. package/dist/cjs/components/Details/HashSourceDetails.js.map +1 -0
  15. package/dist/cjs/components/Details/JsonDetails.d.ts +10 -0
  16. package/dist/cjs/components/Details/JsonDetails.d.ts.map +1 -0
  17. package/dist/cjs/components/Details/JsonDetails.js +24 -0
  18. package/dist/cjs/components/Details/JsonDetails.js.map +1 -0
  19. package/dist/cjs/components/Details/ValidationDetails/ValidationDetails.d.ts +4 -0
  20. package/dist/cjs/components/Details/ValidationDetails/ValidationDetails.d.ts.map +1 -0
  21. package/dist/cjs/components/Details/ValidationDetails/ValidationDetails.js +26 -0
  22. package/dist/cjs/components/Details/ValidationDetails/ValidationDetails.js.map +1 -0
  23. package/dist/cjs/components/Details/ValidationDetails/ValidationDetailsProps.d.ts +8 -0
  24. package/dist/cjs/components/Details/ValidationDetails/ValidationDetailsProps.d.ts.map +1 -0
  25. package/dist/cjs/components/Details/ValidationDetails/ValidationDetailsProps.js +3 -0
  26. package/dist/cjs/components/Details/ValidationDetails/ValidationDetailsProps.js.map +1 -0
  27. package/dist/cjs/components/Details/ValidationDetails/index.d.ts +3 -0
  28. package/dist/cjs/components/Details/ValidationDetails/index.d.ts.map +1 -0
  29. package/dist/cjs/components/Details/ValidationDetails/index.js +6 -0
  30. package/dist/cjs/components/Details/ValidationDetails/index.js.map +1 -0
  31. package/dist/cjs/components/Details/index.d.ts +5 -0
  32. package/dist/cjs/components/Details/index.d.ts.map +1 -0
  33. package/dist/cjs/components/Details/index.js +8 -0
  34. package/dist/cjs/components/Details/index.js.map +1 -0
  35. package/dist/cjs/components/index.d.ts +2 -0
  36. package/dist/cjs/components/index.d.ts.map +1 -0
  37. package/dist/cjs/components/index.js +5 -0
  38. package/dist/cjs/components/index.js.map +1 -0
  39. package/dist/cjs/index.d.ts +2 -0
  40. package/dist/cjs/index.d.ts.map +1 -0
  41. package/dist/cjs/index.js +5 -0
  42. package/dist/cjs/index.js.map +1 -0
  43. package/dist/docs.json +944 -0
  44. package/dist/esm/components/Details/DataDetails.d.ts +11 -0
  45. package/dist/esm/components/Details/DataDetails.d.ts.map +1 -0
  46. package/dist/esm/components/Details/DataDetails.js +35 -0
  47. package/dist/esm/components/Details/DataDetails.js.map +1 -0
  48. package/dist/esm/components/Details/Details.d.ts +15 -0
  49. package/dist/esm/components/Details/Details.d.ts.map +1 -0
  50. package/dist/esm/components/Details/Details.js +9 -0
  51. package/dist/esm/components/Details/Details.js.map +1 -0
  52. package/dist/esm/components/Details/HashSourceDetails.d.ts +9 -0
  53. package/dist/esm/components/Details/HashSourceDetails.d.ts.map +1 -0
  54. package/dist/esm/components/Details/HashSourceDetails.js +12 -0
  55. package/dist/esm/components/Details/HashSourceDetails.js.map +1 -0
  56. package/dist/esm/components/Details/JsonDetails.d.ts +10 -0
  57. package/dist/esm/components/Details/JsonDetails.d.ts.map +1 -0
  58. package/dist/esm/components/Details/JsonDetails.js +17 -0
  59. package/dist/esm/components/Details/JsonDetails.js.map +1 -0
  60. package/dist/esm/components/Details/ValidationDetails/ValidationDetails.d.ts +4 -0
  61. package/dist/esm/components/Details/ValidationDetails/ValidationDetails.d.ts.map +1 -0
  62. package/dist/esm/components/Details/ValidationDetails/ValidationDetails.js +19 -0
  63. package/dist/esm/components/Details/ValidationDetails/ValidationDetails.js.map +1 -0
  64. package/dist/esm/components/Details/ValidationDetails/ValidationDetailsProps.d.ts +8 -0
  65. package/dist/esm/components/Details/ValidationDetails/ValidationDetailsProps.d.ts.map +1 -0
  66. package/dist/esm/components/Details/ValidationDetails/ValidationDetailsProps.js +2 -0
  67. package/dist/esm/components/Details/ValidationDetails/ValidationDetailsProps.js.map +1 -0
  68. package/dist/esm/components/Details/ValidationDetails/index.d.ts +3 -0
  69. package/dist/esm/components/Details/ValidationDetails/index.d.ts.map +1 -0
  70. package/dist/esm/components/Details/ValidationDetails/index.js +3 -0
  71. package/dist/esm/components/Details/ValidationDetails/index.js.map +1 -0
  72. package/dist/esm/components/Details/index.d.ts +5 -0
  73. package/dist/esm/components/Details/index.d.ts.map +1 -0
  74. package/dist/esm/components/Details/index.js +5 -0
  75. package/dist/esm/components/Details/index.js.map +1 -0
  76. package/dist/esm/components/index.d.ts +2 -0
  77. package/dist/esm/components/index.d.ts.map +1 -0
  78. package/dist/esm/components/index.js +2 -0
  79. package/dist/esm/components/index.js.map +1 -0
  80. package/dist/esm/index.d.ts +2 -0
  81. package/dist/esm/index.d.ts.map +1 -0
  82. package/dist/esm/index.js +2 -0
  83. package/dist/esm/index.js.map +1 -0
  84. package/package.json +80 -0
  85. package/src/components/Details/DataDetails.tsx +74 -0
  86. package/src/components/Details/Details.stories.tsx +62 -0
  87. package/src/components/Details/Details.tsx +24 -0
  88. package/src/components/Details/HashSourceDetails.tsx +43 -0
  89. package/src/components/Details/JsonDetails.tsx +43 -0
  90. package/src/components/Details/ValidationDetails/ValidationDetails.stories.tsx +55 -0
  91. package/src/components/Details/ValidationDetails/ValidationDetails.tsx +42 -0
  92. package/src/components/Details/ValidationDetails/ValidationDetailsProps.ts +8 -0
  93. package/src/components/Details/ValidationDetails/index.ts +2 -0
  94. package/src/components/Details/index.ts +4 -0
  95. package/src/components/index.ts +1 -0
  96. package/src/index.ts +1 -0
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ import { PropertyProps } from '@xyo-network/react-property';
4
+ import { SizeProp } from '@xyo-network/react-shared';
5
+ export declare type PayloadDataDetailsProps = PropertyProps & {
6
+ payload?: XyoPayload;
7
+ size?: SizeProp;
8
+ badge?: boolean;
9
+ };
10
+ export declare const PayloadDataDetails: React.FC<PayloadDataDetailsProps>;
11
+ //# sourceMappingURL=DataDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/Details/DataDetails.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAA4B,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAKpD,oBAAY,uBAAuB,GAAG,aAAa,GAAG;IACpD,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAwDhE,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import ContentCopyIcon from '@mui/icons-material/ContentCopy';
3
+ import VisibilityIcon from '@mui/icons-material/Visibility';
4
+ import { Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material';
5
+ import { ButtonEx } from '@xylabs/react-button';
6
+ import { XyoPayloadWrapper } from '@xyo-network/payload';
7
+ import { Property } from '@xyo-network/react-property';
8
+ import { useState } from 'react';
9
+ import { PayloadHashSourceDetails } from './HashSourceDetails';
10
+ export const PayloadDataDetails = ({ size, badge, payload, ...props }) => {
11
+ const wrapper = payload ? new XyoPayloadWrapper(payload) : undefined;
12
+ const [viewSourceOpen, setViewSourceOpen] = useState(false);
13
+ const hash = wrapper?.hash;
14
+ let elevation = 2;
15
+ if (props.paper) {
16
+ elevation += props.elevation ?? 0;
17
+ }
18
+ const actions = [
19
+ {
20
+ icon: _jsx(VisibilityIcon, {}),
21
+ name: 'View',
22
+ onClick: () => setViewSourceOpen(true),
23
+ },
24
+ {
25
+ icon: _jsx(ContentCopyIcon, {}),
26
+ name: 'Copy',
27
+ onClick: async () => await navigator.clipboard.writeText(wrapper?.hash ?? ''),
28
+ },
29
+ ];
30
+ const onCopy = async () => {
31
+ await navigator.clipboard.writeText(wrapper?.stringified ?? '');
32
+ };
33
+ return (_jsxs(_Fragment, { children: [_jsx(Property, { titleProps: { elevation }, badge: badge, size: size, actions: actions, title: "Payload Hash", value: hash ?? '<Unknown>', tip: "This is the payload hash", ...props }), _jsxs(Dialog, { open: viewSourceOpen, onClose: () => setViewSourceOpen(false), children: [_jsx(DialogTitle, { children: "Hash Source" }), _jsx(DialogContent, { children: _jsx(PayloadHashSourceDetails, { noTitle: true, payload: payload }) }), _jsxs(DialogActions, { children: [_jsx(ButtonEx, { color: "secondary", onClick: onCopy, children: "Copy" }), _jsx(ButtonEx, { color: "secondary", onClick: () => setViewSourceOpen(false), children: "Close" })] })] })] }));
34
+ };
35
+ //# sourceMappingURL=DataDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataDetails.js","sourceRoot":"","sources":["../../../../src/components/Details/DataDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,iCAAiC,CAAA;AAC7D,OAAO,cAAc,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAiC,MAAM,6BAA6B,CAAA;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAQ9D,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC1G,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAA;IAE1B,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,KAAK,CAAC,KAAK,EAAE;QACf,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;KAClC;IAED,MAAM,OAAO,GAAqB;QAChC;YACE,IAAI,EAAE,KAAC,cAAc,KAAG;YACxB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACvC;QACD;YACE,IAAI,EAAE,KAAC,eAAe,KAAG;YACzB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;SAC9E;KACF,CAAA;IAED,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC,CAAA;IACjE,CAAC,CAAA;IAED,OAAO,CACL,8BACE,KAAC,QAAQ,IACP,UAAU,EAAE,EAAE,SAAS,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,IAAI,IAAI,WAAW,EAC1B,GAAG,EAAC,0BAA0B,KAC1B,KAAK,GACT,EACF,MAAC,MAAM,IAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,aACnE,KAAC,WAAW,8BAA0B,EACtC,KAAC,aAAa,cACZ,KAAC,wBAAwB,IAAC,OAAO,QAAC,OAAO,EAAE,OAAO,GAAI,GACxC,EAChB,MAAC,aAAa,eACZ,KAAC,QAAQ,IAAC,KAAK,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,qBAEhC,EACX,KAAC,QAAQ,IAAC,KAAK,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,sBAExD,IACG,IACT,IACR,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ import { FlexBoxProps } from '@xylabs/react-flexbox';
3
+ import { XyoPayload } from '@xyo-network/payload';
4
+ export declare type WithPaper<T> = T & {
5
+ paper: true;
6
+ };
7
+ export declare type WithoutPaper<T> = T & {
8
+ paper?: false;
9
+ };
10
+ export declare type PayloadDetailsProps = FlexBoxProps & {
11
+ payload?: XyoPayload;
12
+ paper?: boolean;
13
+ };
14
+ export declare const PayloadDetails: React.FC<PayloadDetailsProps>;
15
+ //# sourceMappingURL=Details.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Details.d.ts","sourceRoot":"","sources":["../../../../src/components/Details/Details.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjD,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAA;AAC9C,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AAEnD,oBAAY,mBAAmB,GAAG,YAAY,GAAG;IAC/C,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAQxD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FlexCol } from '@xylabs/react-flexbox';
3
+ import { PayloadDataDetails } from './DataDetails';
4
+ import { PayloadJsonDetails } from './JsonDetails';
5
+ import { PayloadValidationDetails } from './ValidationDetails';
6
+ export const PayloadDetails = ({ paper, payload, ...props }) => {
7
+ return (_jsxs(FlexCol, { gap: 1, justifyContent: "flex-start", alignItems: "stretch", marginTop: 2, marginBottom: 8, ...props, children: [_jsx(PayloadDataDetails, { paper: paper, size: "large", badge: true, payload: payload }), _jsx(PayloadValidationDetails, { paper: paper, value: payload }), _jsx(PayloadJsonDetails, { paper: paper, payload: payload })] }));
8
+ };
9
+ //# sourceMappingURL=Details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Details.js","sourceRoot":"","sources":["../../../../src/components/Details/Details.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAgB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAU9D,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC5F,OAAO,CACL,MAAC,OAAO,IAAC,GAAG,EAAE,CAAC,EAAE,cAAc,EAAC,YAAY,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,KAAM,KAAK,aACxG,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,QAAC,OAAO,EAAE,OAAO,GAAI,EACzE,KAAC,wBAAwB,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAI,EAC1D,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAI,IAC9C,CACX,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { FlexBoxProps } from '@xylabs/react-flexbox';
3
+ import { XyoPayload } from '@xyo-network/payload';
4
+ export interface PayloadHashSourceDetailsProps extends FlexBoxProps {
5
+ noTitle?: boolean;
6
+ payload?: XyoPayload;
7
+ }
8
+ export declare const PayloadHashSourceDetails: React.FC<PayloadHashSourceDetailsProps>;
9
+ //# sourceMappingURL=HashSourceDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HashSourceDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/Details/HashSourceDetails.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAiC,MAAM,uBAAuB,CAAA;AAEnF,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AAEpE,MAAM,WAAW,6BAA8B,SAAQ,YAAY;IACjE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CA+B5E,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import ContentCopyIcon from '@mui/icons-material/ContentCopy';
3
+ import { IconButton, Typography, useTheme } from '@mui/material';
4
+ import { FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox';
5
+ import { QuickTipButton } from '@xylabs/react-quick-tip-button';
6
+ import { XyoPayloadWrapper } from '@xyo-network/payload';
7
+ export const PayloadHashSourceDetails = ({ noTitle = false, payload, ...props }) => {
8
+ const theme = useTheme();
9
+ const payloadWrapper = payload ? new XyoPayloadWrapper(payload) : null;
10
+ return (_jsxs(FlexCol, { alignItems: "stretch", ...props, children: [noTitle ? null : (_jsxs(FlexRow, { margin: 1, justifyContent: "flex-start", children: [_jsx(Typography, { children: "Hash Source" }), _jsx(QuickTipButton, { title: "Hash Source", children: "The actual string used to generate the hash (SHA256)" })] })), _jsxs(FlexRow, { children: [_jsx(FlexGrowRow, { background: true, border: 1, borderColor: theme.palette.divider, justifyContent: "start", children: _jsx(Typography, { padding: 2, fontFamily: "monospace", variant: "body1", sx: { overflowWrap: 'break-word', wordBreak: 'break-all' }, children: payloadWrapper?.stringified ?? '' }) }), _jsx(IconButton, { children: _jsx(ContentCopyIcon, {}) })] }), noTitle ? (_jsx(FlexRow, { margin: 1, justifyContent: "flex-start", children: _jsx(Typography, { variant: "body2", children: "The actual string used to generate the hash (SHA256). This can be used to validate the hash manually." }) })) : null] }));
11
+ };
12
+ //# sourceMappingURL=HashSourceDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HashSourceDetails.js","sourceRoot":"","sources":["../../../../src/components/Details/HashSourceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAgB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAOpE,MAAM,CAAC,MAAM,wBAAwB,GAA4C,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC1H,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtE,OAAO,CACL,MAAC,OAAO,IAAC,UAAU,EAAC,SAAS,KAAK,KAAK,aACpC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAChB,MAAC,OAAO,IAAC,MAAM,EAAE,CAAC,EAAE,cAAc,EAAC,YAAY,aAC7C,KAAC,UAAU,8BAAyB,EACpC,KAAC,cAAc,IAAC,KAAK,EAAC,aAAa,qEAAsE,IACjG,CACX,EACD,MAAC,OAAO,eACN,KAAC,WAAW,IAAC,UAAU,QAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAC,OAAO,YAC3F,KAAC,UAAU,IAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAC,WAAW,EAAC,OAAO,EAAC,OAAO,EAAC,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YACtH,cAAc,EAAE,WAAW,IAAI,EAAE,GACvB,GACD,EACd,KAAC,UAAU,cACT,KAAC,eAAe,KAAG,GACR,IACL,EACT,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,OAAO,IAAC,MAAM,EAAE,CAAC,EAAE,cAAc,EAAC,YAAY,YAC7C,KAAC,UAAU,IAAC,OAAO,EAAC,OAAO,sHAEd,GACL,CACX,CAAC,CAAC,CAAC,IAAI,IACA,CACX,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ import { PropertyGroupProps } from '@xyo-network/react-property';
4
+ import { ReactJsonViewProps } from 'react-json-view';
5
+ export declare type PayloadJsonDetailsProps = PropertyGroupProps & {
6
+ payload?: XyoPayload;
7
+ jsonViewProps?: ReactJsonViewProps;
8
+ };
9
+ export declare const PayloadJsonDetails: React.FC<PayloadJsonDetailsProps>;
10
+ //# sourceMappingURL=JsonDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/Details/JsonDetails.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAiB,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAIpD,oBAAY,uBAAuB,GAAG,kBAAkB,GAAG;IACzD,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4BhE,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Paper, useMediaQuery, useTheme } from '@mui/material';
3
+ import { FlexGrowRow } from '@xylabs/react-flexbox';
4
+ import { PropertyGroup } from '@xyo-network/react-property';
5
+ import { lazy, Suspense } from 'react';
6
+ const JsonView = lazy(() => import(/* webpackChunkName: "jsonView" */ 'react-json-view'));
7
+ export const PayloadJsonDetails = ({ jsonViewProps, payload = {}, ...props }) => {
8
+ const { breakpoints, palette } = useTheme();
9
+ const belowSm = useMediaQuery(breakpoints.down('sm'));
10
+ let elevation = 2;
11
+ if (props.paper) {
12
+ elevation += props.elevation ?? 0;
13
+ }
14
+ const jsonTheme = palette.mode === 'dark' ? 'shapeshifter' : undefined;
15
+ return (_jsx(PropertyGroup, { titleProps: { elevation }, title: "JSON", tip: "The raw JSON of the payload", ...props, children: _jsx(Paper, { square: true, variant: "elevation", style: { overflow: 'hidden', padding: '16px', width: '100%' }, children: _jsx(Suspense, { fallback: _jsx(FlexGrowRow, {}), children: _jsx(JsonView, { groupArraysAfterLength: 20, style: { backgroundColor: undefined, overflow: 'hidden' }, src: payload, enableClipboard: true, theme: jsonTheme, collapseStringsAfterLength: belowSm ? 24 : 32, ...jsonViewProps }) }) }) }));
16
+ };
17
+ //# sourceMappingURL=JsonDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonDetails.js","sourceRoot":"","sources":["../../../../src/components/Details/JsonDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAsB,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAOzF,MAAM,CAAC,MAAM,kBAAkB,GAAsC,CAAC,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IACjH,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAErD,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,KAAK,CAAC,KAAK,EAAE;QACf,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;KAClC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;IAEtE,OAAO,CACL,KAAC,aAAa,IAAC,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAC,MAAM,EAAC,GAAG,EAAC,6BAA6B,KAAK,KAAK,YAChG,KAAC,KAAK,IAAC,MAAM,QAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAC7F,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,WAAW,KAAG,YACjC,KAAC,QAAQ,IACP,sBAAsB,EAAE,EAAE,EAC1B,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACzD,GAAG,EAAE,OAAO,EACZ,eAAe,QACf,KAAK,EAAE,SAAS,EAChB,0BAA0B,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KACzC,aAAa,GACjB,GACO,GACL,GACM,CACjB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { PayloadValidationDetailsProps } from './ValidationDetailsProps';
3
+ export declare const PayloadValidationDetails: React.FC<PayloadValidationDetailsProps>;
4
+ //# sourceMappingURL=ValidationDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationDetails.d.ts","sourceRoot":"","sources":["../../../../../src/components/Details/ValidationDetails/ValidationDetails.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAA;AAExE,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAiC5E,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Typography } from '@mui/material';
3
+ import { FlexCol } from '@xylabs/react-flexbox';
4
+ import { XyoPayloadValidator } from '@xyo-network/payload';
5
+ import { Property, PropertyGroup } from '@xyo-network/react-property';
6
+ import { SchemaProperty } from '@xyo-network/react-schema';
7
+ export const PayloadValidationDetails = ({ viewSchemaUrl, skipBody = false, value, ...props }) => {
8
+ const validator = value ? new XyoPayloadValidator(value) : undefined;
9
+ const bodyErrors = skipBody ? [] : validator?.body.validate() ?? [];
10
+ const errors = [...bodyErrors];
11
+ let elevation = 2;
12
+ if (props.paper) {
13
+ elevation += props.elevation ?? 0;
14
+ }
15
+ return (_jsxs(PropertyGroup, { titleProps: { elevation }, title: "Validation", tip: "The results from validating the payload", ...props, children: [_jsx(Property, { titleProps: { elevation }, flexGrow: 1, title: "Valid", value: errors.length === 0 ? 'True' : 'False', tip: errors.length > 0 ? (_jsx(FlexCol, { children: errors.map((error, index) => {
16
+ return _jsx(Typography, { children: error.toString() }, index);
17
+ }) })) : (_jsx(Typography, { children: "No Errors" })) }), value?.schema && _jsx(SchemaProperty, { flexGrow: 1, titleProps: { elevation }, value: value.schema, viewSchemaUrl: viewSchemaUrl })] }));
18
+ };
19
+ //# sourceMappingURL=ValidationDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationDetails.js","sourceRoot":"","sources":["../../../../../src/components/Details/ValidationDetails/ValidationDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAI1D,MAAM,CAAC,MAAM,wBAAwB,GAA4C,CAAC,EAAE,aAAa,EAAE,QAAQ,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IACxI,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpE,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;IACnE,MAAM,MAAM,GAAY,CAAC,GAAG,UAAU,CAAC,CAAA;IAEvC,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,KAAK,CAAC,KAAK,EAAE;QACf,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;KAClC;IAED,OAAO,CACL,MAAC,aAAa,IAAC,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAC,YAAY,EAAC,GAAG,EAAC,yCAAyC,KAAK,KAAK,aAClH,KAAC,QAAQ,IACP,UAAU,EAAE,EAAE,SAAS,EAAE,EACzB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC7C,GAAG,EACD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAClB,KAAC,OAAO,cACL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC3B,OAAO,KAAC,UAAU,cAAc,KAAK,CAAC,QAAQ,EAAE,IAAxB,KAAK,CAAiC,CAAA;oBAChE,CAAC,CAAC,GACM,CACX,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,4BAAuB,CACnC,GAEH,EACD,KAAK,EAAE,MAAM,IAAI,KAAC,cAAc,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,GAAI,IACjH,CACjB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { XyoPayloadWithPartialMeta } from '@xyo-network/payload';
2
+ import { PropertyGroupProps } from '@xyo-network/react-property';
3
+ export declare type PayloadValidationDetailsProps = PropertyGroupProps & {
4
+ skipBody?: boolean;
5
+ value?: XyoPayloadWithPartialMeta;
6
+ viewSchemaUrl?: string;
7
+ };
8
+ //# sourceMappingURL=ValidationDetailsProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationDetailsProps.d.ts","sourceRoot":"","sources":["../../../../../src/components/Details/ValidationDetails/ValidationDetailsProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,oBAAY,6BAA6B,GAAG,kBAAkB,GAAG;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ValidationDetailsProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationDetailsProps.js","sourceRoot":"","sources":["../../../../../src/components/Details/ValidationDetails/ValidationDetailsProps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './ValidationDetails';
2
+ export * from './ValidationDetailsProps';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Details/ValidationDetails/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './ValidationDetails';
2
+ export * from './ValidationDetailsProps';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/Details/ValidationDetails/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './DataDetails';
2
+ export * from './Details';
3
+ export * from './JsonDetails';
4
+ export * from './ValidationDetails';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Details/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './DataDetails';
2
+ export * from './Details';
3
+ export * from './JsonDetails';
4
+ export * from './ValidationDetails';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Details/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './Details';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './Details';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './components';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './components';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@xyo-network/react-payload-details",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
+ },
12
+ "dependencies": {
13
+ "@xylabs/react-button": "^2.14.16",
14
+ "@xylabs/react-flexbox": "^2.14.16",
15
+ "@xylabs/react-quick-tip-button": "^2.14.16",
16
+ "@xyo-network/react-property": "^2.32.0-rc.11",
17
+ "@xyo-network/react-schema": "^2.32.0-rc.11",
18
+ "@xyo-network/react-shared": "^2.32.0-rc.11",
19
+ "react-json-view": "^1.21.3",
20
+ "tslib": "^2.4.0"
21
+ },
22
+ "peerDependencies": {
23
+ "@mui/icons-material": "^5.10.3",
24
+ "@mui/material": "^5.10.3",
25
+ "@mui/styles": "^5.10.3",
26
+ "@xyo-network/api": "^2.30.0-rc.3",
27
+ "@xyo-network/payload": "^2.30.0-rc.3",
28
+ "@xyo-network/property": "^2.30.0-rc.3",
29
+ "@xyo-network/schema-payload-plugin": "^2.30.0-rc.3",
30
+ "@xyo-network/utils": "^2.30.0-rc.3",
31
+ "react": "^18.2.0",
32
+ "react-dom": "^18.2.0",
33
+ "react-router-dom": "^6.3.0"
34
+ },
35
+ "description": "Common React library for all XYO projects that use React",
36
+ "browser": "dist/esm/index.js",
37
+ "docs": "dist/docs.json",
38
+ "exports": {
39
+ ".": {
40
+ "node": {
41
+ "import": "./dist/esm/index.js",
42
+ "require": "./dist/cjs/index.js"
43
+ },
44
+ "browser": {
45
+ "import": "./dist/esm/index.js",
46
+ "require": "./dist/cjs/index.js"
47
+ },
48
+ "default": "./dist/esm/index.js"
49
+ },
50
+ "./dist/docs.json": {
51
+ "default": "./dist/docs.json"
52
+ },
53
+ "./package.json": "./package.json"
54
+ },
55
+ "main": "dist/cjs/index.js",
56
+ "module": "dist/esm/index.js",
57
+ "homepage": "https://xyo.network",
58
+ "keywords": [
59
+ "xyo",
60
+ "utility",
61
+ "typescript",
62
+ "react"
63
+ ],
64
+ "license": "LGPL-3.0",
65
+ "publishConfig": {
66
+ "access": "public"
67
+ },
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js.git"
71
+ },
72
+ "scripts": {
73
+ "lint-pkg": "npmPkgJsonLint .",
74
+ "license": "yarn license-checker --exclude \"MIT, ISC, Apache-2.0, BSD, BSD-2-Clause, CC-BY-4.0, Unlicense, CC-BY-3.0, CC0-1.0\""
75
+ },
76
+ "sideEffects": false,
77
+ "types": "dist/esm/index.d.ts",
78
+ "version": "2.32.0-rc.11",
79
+ "stableVersion": "2.31.2"
80
+ }
@@ -0,0 +1,74 @@
1
+ import ContentCopyIcon from '@mui/icons-material/ContentCopy'
2
+ import VisibilityIcon from '@mui/icons-material/Visibility'
3
+ import { Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material'
4
+ import { ButtonEx } from '@xylabs/react-button'
5
+ import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
6
+ import { Property, PropertyAction, PropertyProps } from '@xyo-network/react-property'
7
+ import { SizeProp } from '@xyo-network/react-shared'
8
+ import { useState } from 'react'
9
+
10
+ import { PayloadHashSourceDetails } from './HashSourceDetails'
11
+
12
+ export type PayloadDataDetailsProps = PropertyProps & {
13
+ payload?: XyoPayload
14
+ size?: SizeProp
15
+ badge?: boolean
16
+ }
17
+
18
+ export const PayloadDataDetails: React.FC<PayloadDataDetailsProps> = ({ size, badge, payload, ...props }) => {
19
+ const wrapper = payload ? new XyoPayloadWrapper(payload) : undefined
20
+
21
+ const [viewSourceOpen, setViewSourceOpen] = useState(false)
22
+ const hash = wrapper?.hash
23
+
24
+ let elevation = 2
25
+ if (props.paper) {
26
+ elevation += props.elevation ?? 0
27
+ }
28
+
29
+ const actions: PropertyAction[] = [
30
+ {
31
+ icon: <VisibilityIcon />,
32
+ name: 'View',
33
+ onClick: () => setViewSourceOpen(true),
34
+ },
35
+ {
36
+ icon: <ContentCopyIcon />,
37
+ name: 'Copy',
38
+ onClick: async () => await navigator.clipboard.writeText(wrapper?.hash ?? ''),
39
+ },
40
+ ]
41
+
42
+ const onCopy = async () => {
43
+ await navigator.clipboard.writeText(wrapper?.stringified ?? '')
44
+ }
45
+
46
+ return (
47
+ <>
48
+ <Property
49
+ titleProps={{ elevation }}
50
+ badge={badge}
51
+ size={size}
52
+ actions={actions}
53
+ title="Payload Hash"
54
+ value={hash ?? '<Unknown>'}
55
+ tip="This is the payload hash"
56
+ {...props}
57
+ />
58
+ <Dialog open={viewSourceOpen} onClose={() => setViewSourceOpen(false)}>
59
+ <DialogTitle>Hash Source</DialogTitle>
60
+ <DialogContent>
61
+ <PayloadHashSourceDetails noTitle payload={payload} />
62
+ </DialogContent>
63
+ <DialogActions>
64
+ <ButtonEx color="secondary" onClick={onCopy}>
65
+ Copy
66
+ </ButtonEx>
67
+ <ButtonEx color="secondary" onClick={() => setViewSourceOpen(false)}>
68
+ Close
69
+ </ButtonEx>
70
+ </DialogActions>
71
+ </Dialog>
72
+ </>
73
+ )
74
+ }
@@ -0,0 +1,62 @@
1
+ import { ComponentMeta, ComponentStory } from '@storybook/react'
2
+ import { samplePayload, samplePayloadFromBuilder, useAppThemeDecorator } from '@xyo-network/react-storybook'
3
+ import { BrowserRouter, Route, Routes } from 'react-router-dom'
4
+
5
+ import { PayloadDetails } from './Details'
6
+
7
+ const StorybookEntry = {
8
+ argTypes: {},
9
+ component: PayloadDetails,
10
+ parameters: {
11
+ docs: {
12
+ page: null,
13
+ },
14
+ },
15
+ title: 'payload/Details',
16
+ } as ComponentMeta<typeof PayloadDetails>
17
+
18
+ const Template: ComponentStory<typeof PayloadDetails> = (args) => (
19
+ <BrowserRouter>
20
+ <Routes>
21
+ <Route path="temp" element={<h1>Successfully navigated to archivePath</h1>} />
22
+ <Route path="*" element={<PayloadDetails {...args}></PayloadDetails>}></Route>
23
+ </Routes>
24
+ </BrowserRouter>
25
+ )
26
+
27
+ const Default = Template.bind({})
28
+ Default.args = {}
29
+ Default.decorators = [useAppThemeDecorator]
30
+
31
+ const WithSample = Template.bind({})
32
+ WithSample.args = { payload: samplePayload }
33
+ WithSample.decorators = [useAppThemeDecorator]
34
+
35
+ const WithBuilderSample = Template.bind({})
36
+ WithBuilderSample.args = { payload: samplePayloadFromBuilder }
37
+ WithBuilderSample.decorators = [useAppThemeDecorator]
38
+
39
+ const WithArchiveLink = Template.bind({})
40
+ WithArchiveLink.args = { payload: samplePayloadFromBuilder }
41
+ WithArchiveLink.decorators = [useAppThemeDecorator]
42
+
43
+ const DefaultPaper = Template.bind({})
44
+ DefaultPaper.args = { paper: true }
45
+ DefaultPaper.decorators = [useAppThemeDecorator]
46
+
47
+ const WithSamplePaper = Template.bind({})
48
+ WithSamplePaper.args = { paper: true, payload: samplePayload }
49
+ WithSamplePaper.decorators = [useAppThemeDecorator]
50
+
51
+ const WithBuilderSamplePaper = Template.bind({})
52
+ WithBuilderSamplePaper.args = { paper: true, payload: samplePayloadFromBuilder }
53
+ WithBuilderSamplePaper.decorators = [useAppThemeDecorator]
54
+
55
+ const WithArchiveLinkPaper = Template.bind({})
56
+ WithArchiveLinkPaper.args = { paper: true, payload: samplePayloadFromBuilder }
57
+ WithArchiveLinkPaper.decorators = [useAppThemeDecorator]
58
+
59
+ export { Default, DefaultPaper, WithArchiveLink, WithArchiveLinkPaper, WithBuilderSample, WithBuilderSamplePaper, WithSample, WithSamplePaper }
60
+
61
+ // eslint-disable-next-line import/no-default-export
62
+ export default StorybookEntry
@@ -0,0 +1,24 @@
1
+ import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
2
+ import { XyoPayload } from '@xyo-network/payload'
3
+
4
+ import { PayloadDataDetails } from './DataDetails'
5
+ import { PayloadJsonDetails } from './JsonDetails'
6
+ import { PayloadValidationDetails } from './ValidationDetails'
7
+
8
+ export type WithPaper<T> = T & { paper: true }
9
+ export type WithoutPaper<T> = T & { paper?: false }
10
+
11
+ export type PayloadDetailsProps = FlexBoxProps & {
12
+ payload?: XyoPayload
13
+ paper?: boolean
14
+ }
15
+
16
+ export const PayloadDetails: React.FC<PayloadDetailsProps> = ({ paper, payload, ...props }) => {
17
+ return (
18
+ <FlexCol gap={1} justifyContent="flex-start" alignItems="stretch" marginTop={2} marginBottom={8} {...props}>
19
+ <PayloadDataDetails paper={paper} size="large" badge payload={payload} />
20
+ <PayloadValidationDetails paper={paper} value={payload} />
21
+ <PayloadJsonDetails paper={paper} payload={payload} />
22
+ </FlexCol>
23
+ )
24
+ }
@@ -0,0 +1,43 @@
1
+ import ContentCopyIcon from '@mui/icons-material/ContentCopy'
2
+ import { IconButton, Typography, useTheme } from '@mui/material'
3
+ import { FlexBoxProps, FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'
4
+ import { QuickTipButton } from '@xylabs/react-quick-tip-button'
5
+ import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
6
+
7
+ export interface PayloadHashSourceDetailsProps extends FlexBoxProps {
8
+ noTitle?: boolean
9
+ payload?: XyoPayload
10
+ }
11
+
12
+ export const PayloadHashSourceDetails: React.FC<PayloadHashSourceDetailsProps> = ({ noTitle = false, payload, ...props }) => {
13
+ const theme = useTheme()
14
+ const payloadWrapper = payload ? new XyoPayloadWrapper(payload) : null
15
+
16
+ return (
17
+ <FlexCol alignItems="stretch" {...props}>
18
+ {noTitle ? null : (
19
+ <FlexRow margin={1} justifyContent="flex-start">
20
+ <Typography>Hash Source</Typography>
21
+ <QuickTipButton title="Hash Source">The actual string used to generate the hash (SHA256)</QuickTipButton>
22
+ </FlexRow>
23
+ )}
24
+ <FlexRow>
25
+ <FlexGrowRow background border={1} borderColor={theme.palette.divider} justifyContent="start">
26
+ <Typography padding={2} fontFamily="monospace" variant="body1" sx={{ overflowWrap: 'break-word', wordBreak: 'break-all' }}>
27
+ {payloadWrapper?.stringified ?? ''}
28
+ </Typography>
29
+ </FlexGrowRow>
30
+ <IconButton>
31
+ <ContentCopyIcon />
32
+ </IconButton>
33
+ </FlexRow>
34
+ {noTitle ? (
35
+ <FlexRow margin={1} justifyContent="flex-start">
36
+ <Typography variant="body2">
37
+ The actual string used to generate the hash (SHA256). This can be used to validate the hash manually.
38
+ </Typography>
39
+ </FlexRow>
40
+ ) : null}
41
+ </FlexCol>
42
+ )
43
+ }