@xyo-network/react-chain-boundwitness 1.3.24 → 1.3.25

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 (34) hide show
  1. package/dist/browser/index.mjs +18 -16
  2. package/dist/browser/index.mjs.map +1 -1
  3. package/dist/types/components/block/BlockBoundWitnessDetails.d.ts.map +1 -0
  4. package/dist/types/components/block/index.d.ts +2 -0
  5. package/dist/types/components/block/index.d.ts.map +1 -0
  6. package/dist/types/components/index.d.ts +1 -1
  7. package/dist/types/components/index.d.ts.map +1 -1
  8. package/dist/types/components/transactions/TransactionDetails.d.ts +8 -0
  9. package/dist/types/components/transactions/TransactionDetails.d.ts.map +1 -0
  10. package/dist/types/components/transactions/card/Card.d.ts +8 -0
  11. package/dist/types/components/transactions/card/Card.d.ts.map +1 -0
  12. package/dist/types/components/transactions/card/DetailsStack.d.ts +9 -0
  13. package/dist/types/components/transactions/card/DetailsStack.d.ts.map +1 -0
  14. package/dist/types/components/transactions/card/index.d.ts +2 -0
  15. package/dist/types/components/transactions/card/index.d.ts.map +1 -0
  16. package/dist/types/lib/formatPayloadsForTable.d.ts +7 -0
  17. package/dist/types/lib/formatPayloadsForTable.d.ts.map +1 -0
  18. package/dist/types/lib/index.d.ts +2 -0
  19. package/dist/types/lib/index.d.ts.map +1 -0
  20. package/package.json +10 -6
  21. package/src/components/BwPayloadTable.tsx +7 -7
  22. package/src/components/{BlockBoundWitnessDetails.tsx → block/BlockBoundWitnessDetails.tsx} +14 -26
  23. package/src/components/block/index.ts +1 -0
  24. package/src/components/index.ts +1 -1
  25. package/src/components/transactions/TransactionDetails.stories.tsx +22 -0
  26. package/src/components/transactions/TransactionDetails.tsx +69 -0
  27. package/src/components/transactions/card/Card.tsx +121 -0
  28. package/src/components/transactions/card/DetailsStack.tsx +35 -0
  29. package/src/components/transactions/card/index.ts +1 -0
  30. package/src/lib/formatPayloadsForTable.ts +12 -0
  31. package/src/lib/index.ts +1 -0
  32. package/dist/types/components/BlockBoundWitnessDetails.d.ts.map +0 -1
  33. /package/dist/types/components/{BlockBoundWitnessDetails.d.ts → block/BlockBoundWitnessDetails.d.ts} +0 -0
  34. /package/src/components/{BlockBoundWitnessDetails.stories.tsx → block/BlockBoundWitnessDetails.stories.tsx} +0 -0
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // src/components/BlockBoundWitnessDetails.tsx
4
+ // src/components/block/BlockBoundWitnessDetails.tsx
5
5
  import { Divider } from "@mui/material";
6
6
  import { filterAs } from "@xylabs/array";
7
7
  import { ErrorRender } from "@xylabs/react-error";
@@ -18,6 +18,20 @@ import { FaSignature } from "react-icons/fa";
18
18
  import { GrTransaction } from "react-icons/gr";
19
19
  import { VscSymbolMethod as VscSymbolMethod2, VscSymbolNamespace } from "react-icons/vsc";
20
20
 
21
+ // src/lib/formatPayloadsForTable.ts
22
+ var formatPayloadsForTable = /* @__PURE__ */ __name((pairs) => {
23
+ let hashes = [];
24
+ let schemas = [];
25
+ for (const [bw, hash] of pairs ?? []) {
26
+ hashes.push(hash);
27
+ schemas.push(bw?.schema ?? "");
28
+ }
29
+ return {
30
+ hashes,
31
+ schemas
32
+ };
33
+ }, "formatPayloadsForTable");
34
+
21
35
  // src/components/BwPayloadTable.tsx
22
36
  import { FlexCol } from "@xylabs/react-flexbox";
23
37
  import { BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper } from "@xyo-network/react-boundwitness-plugin";
@@ -40,25 +54,13 @@ var BWPayloadTableFlexbox = /* @__PURE__ */ __name(({ IconComponent, eventNoun,
40
54
  })));
41
55
  }, "BWPayloadTableFlexbox");
42
56
 
43
- // src/components/BlockBoundWitnessDetails.tsx
44
- var formatBwsForTable = /* @__PURE__ */ __name((pairs) => {
45
- let hashes = [];
46
- let schemas = [];
47
- for (const [bw, hash] of pairs ?? []) {
48
- hashes.push(hash);
49
- schemas.push(bw?.schema ?? "");
50
- }
51
- return {
52
- hashes,
53
- schemas
54
- };
55
- }, "formatBwsForTable");
57
+ // src/components/block/BlockBoundWitnessDetails.tsx
56
58
  var BlockBoundWitnessDetails = /* @__PURE__ */ __name(({ block, paper, children, ...props }) => {
57
59
  const boundWitness = block?.[0];
58
60
  const payloads = block?.[1];
59
61
  const hash = usePayloadHash(boundWitness);
60
62
  const [transactions, txFromBlockError] = useTxsFromBlock(block);
61
- const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatBwsForTable(transactions ?? []), [
63
+ const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatPayloadsForTable(transactions ?? []), [
62
64
  transactions
63
65
  ]);
64
66
  const [nonTxBoundWitnesses, bwsFromBlockError] = usePromise(async () => {
@@ -67,7 +69,7 @@ var BlockBoundWitnessDetails = /* @__PURE__ */ __name(({ block, paper, children,
67
69
  }, [
68
70
  payloads
69
71
  ]);
70
- const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatBwsForTable(nonTxBoundWitnesses ?? []), [
72
+ const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatPayloadsForTable(nonTxBoundWitnesses ?? []), [
71
73
  nonTxBoundWitnesses
72
74
  ]);
73
75
  const hasNonTxBoundWitnesses = (nonTxBoundWitnesses?.length ?? 0) > 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/BlockBoundWitnessDetails.tsx","../../src/components/BwPayloadTable.tsx"],"sourcesContent":["import { Divider } from '@mui/material'\nimport { filterAs } from '@xylabs/array'\nimport type { Hash } from '@xylabs/hex'\nimport { ErrorRender } from '@xylabs/react-error'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BoundWitnessPayloadsTable,\n BoundWitnessSignatureTable,\n BWActions,\n HashHeadingPaper,\n HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport { useTxsFromBlock } from '@xyo-network/react-chain-blockchain'\nimport { useEvent } from '@xyo-network/react-event'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport { isTransactionBoundWitness, type SignedHydratedBlock } from '@xyo-network/xl1-protocol'\nimport React, { useMemo } from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { GrTransaction } from 'react-icons/gr'\nimport { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'\n\nimport type { TransactionBoundWitnessEvents } from '../types/index.ts'\nimport { BWPayloadTableFlexbox } from './BwPayloadTable.tsx'\n\nconst formatBwsForTable = (pairs: [BoundWitness, Hash][]) => {\n let hashes: Hash[] = []\n let schemas: string[] = []\n for (const [bw, hash] of pairs ?? []) {\n hashes.push(hash)\n schemas.push(bw?.schema ?? '')\n }\n return { hashes, schemas }\n}\n\nexport interface BoundWitnessDetailsProps extends FlexBoxProps {\n block?: SignedHydratedBlock\n}\n\nexport const BlockBoundWitnessDetails = ({\n block, paper, children, ...props\n}: BoundWitnessDetailsProps) => {\n const boundWitness = block?.[0]\n const payloads = block?.[1]\n\n const hash = usePayloadHash(boundWitness)\n\n const [transactions, txFromBlockError] = useTxsFromBlock(block)\n\n const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatBwsForTable(transactions ?? []), [transactions])\n\n const [nonTxBoundWitnesses, bwsFromBlockError] = usePromise(async () => {\n const bws = filterAs(payloads ?? [], payload =>\n (!isTransactionBoundWitness(payload) && isBoundWitness(payload)) ? payload : undefined)\n return await PayloadBuilder.hashPairs(bws)\n }, [payloads])\n\n const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatBwsForTable(nonTxBoundWitnesses ?? []), [nonTxBoundWitnesses])\n const hasNonTxBoundWitnesses = (nonTxBoundWitnesses?.length ?? 0) > 0\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={4} {...props}>\n <ErrorRender error={txFromBlockError ?? bwsFromBlockError} scope=\"BlockBoundWitnessDetails.tsx\" />\n <HashHeadingPaper\n hash={hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <Divider flexItem />\n {(transactions?.length ?? 0) > 0 && (\n <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<GrTransaction />}\n eventNoun=\"transaction\"\n hashes={txHashes}\n headingTitle=\"Transactions\"\n schemas={txSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<VscSymbolNamespace />} heading=\"Payloads\" />\n <BoundWitnessPayloadsTable boundwitness={boundWitness} />\n </FlexCol>\n {hasNonTxBoundWitnesses\n ? (\n <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<VscSymbolMethod />}\n eventNoun=\"boundwitness\"\n hashes={nonTxBwHashes}\n headingTitle=\"Bound Witnesses\"\n schemas={nonTxBwSchemas}\n sx={{ mb: 1 }}\n />\n )\n : null}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport {\n BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { EventNoun, ExtendEventNoun } from '@xyo-network/react-event'\nimport { TableEx } from '@xyo-network/react-table'\nimport React from 'react'\nimport { VscSymbolMethod } from 'react-icons/vsc'\n\nexport interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = EventNoun> extends FlexBoxProps {\n IconComponent?: React.ReactNode\n eventNoun?: TNoun\n hashes?: Hash[]\n headingTitle?: string\n schemas?: string[]\n}\n\nexport const BWPayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({\n IconComponent,\n eventNoun,\n hashes,\n schemas,\n headingTitle,\n ...props\n}: BWPayloadTableFlexboxProps<TNoun>) => {\n const resolvedIconComponent = IconComponent ?? <VscSymbolMethod />\n return (\n <FlexCol alignItems=\"stretch\" rowGap={1} {...props}>\n <HeadingPaper IconComponent={resolvedIconComponent} heading={headingTitle} />\n <TableEx>\n <BoundWitnessPayloadTableHead />\n <BoundWitnessPayloadTableBody<TNoun> payloadHashes={hashes} payloadSchemas={schemas} eventNoun={eventNoun} />\n </TableEx>\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["Divider","filterAs","ErrorRender","FlexCol","usePromise","isBoundWitness","PayloadBuilder","BoundWitnessPayloadsTable","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","useTxsFromBlock","usePayloadHash","isTransactionBoundWitness","React","useMemo","FaSignature","GrTransaction","VscSymbolMethod","VscSymbolNamespace","FlexCol","BoundWitnessPayloadTableBody","BoundWitnessPayloadTableHead","HeadingPaper","TableEx","React","VscSymbolMethod","BWPayloadTableFlexbox","IconComponent","eventNoun","hashes","schemas","headingTitle","props","resolvedIconComponent","VscSymbolMethod","FlexCol","alignItems","rowGap","HeadingPaper","heading","TableEx","BoundWitnessPayloadTableHead","BoundWitnessPayloadTableBody","payloadHashes","payloadSchemas","formatBwsForTable","pairs","hashes","schemas","bw","hash","push","schema","BlockBoundWitnessDetails","block","paper","children","props","boundWitness","payloads","usePayloadHash","transactions","txFromBlockError","useTxsFromBlock","txHashes","txSchemas","useMemo","nonTxBoundWitnesses","bwsFromBlockError","usePromise","bws","filterAs","payload","isTransactionBoundWitness","isBoundWitness","undefined","PayloadBuilder","hashPairs","nonTxBwHashes","nonTxBwSchemas","hasNonTxBoundWitnesses","length","React","FlexCol","alignItems","rowGap","ErrorRender","error","scope","HashHeadingPaper","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","Divider","flexItem","BWPayloadTableFlexbox","IconComponent","GrTransaction","eventNoun","headingTitle","mb","HeadingPaper","VscSymbolNamespace","heading","BoundWitnessPayloadsTable","VscSymbolMethod","FaSignature","BoundWitnessSignatureTable"]}
1
+ {"version":3,"sources":["../../src/components/block/BlockBoundWitnessDetails.tsx","../../src/lib/formatPayloadsForTable.ts","../../src/components/BwPayloadTable.tsx"],"sourcesContent":["import { Divider } from '@mui/material'\nimport { filterAs } from '@xylabs/array'\nimport { ErrorRender } from '@xylabs/react-error'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BoundWitnessPayloadsTable,\n BoundWitnessSignatureTable,\n BWActions,\n HashHeadingPaper,\n HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport { useTxsFromBlock } from '@xyo-network/react-chain-blockchain'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport { isTransactionBoundWitness, type SignedHydratedBlock } from '@xyo-network/xl1-protocol'\nimport React, { useMemo } from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { GrTransaction } from 'react-icons/gr'\nimport { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { formatPayloadsForTable } from '../../lib/index.ts'\nimport type { TransactionBoundWitnessEvents } from '../../types/index.ts'\nimport { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'\n\nexport interface BoundWitnessDetailsProps extends FlexBoxProps {\n block?: SignedHydratedBlock\n}\n\nexport const BlockBoundWitnessDetails = ({\n block, paper, children, ...props\n}: BoundWitnessDetailsProps) => {\n const boundWitness = block?.[0]\n const payloads = block?.[1]\n\n const hash = usePayloadHash(boundWitness)\n\n const [transactions, txFromBlockError] = useTxsFromBlock(block)\n\n const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatPayloadsForTable(transactions ?? []), [transactions])\n\n const [nonTxBoundWitnesses, bwsFromBlockError] = usePromise(async () => {\n const bws = filterAs(payloads ?? [], payload =>\n (!isTransactionBoundWitness(payload) && isBoundWitness(payload)) ? payload : undefined)\n return await PayloadBuilder.hashPairs(bws)\n }, [payloads])\n\n const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatPayloadsForTable(nonTxBoundWitnesses ?? []), [nonTxBoundWitnesses])\n const hasNonTxBoundWitnesses = (nonTxBoundWitnesses?.length ?? 0) > 0\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={4} {...props}>\n <ErrorRender error={txFromBlockError ?? bwsFromBlockError} scope=\"BlockBoundWitnessDetails.tsx\" />\n <HashHeadingPaper\n hash={hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <Divider flexItem />\n {(transactions?.length ?? 0) > 0 && (\n <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<GrTransaction />}\n eventNoun=\"transaction\"\n hashes={txHashes}\n headingTitle=\"Transactions\"\n schemas={txSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<VscSymbolNamespace />} heading=\"Payloads\" />\n <BoundWitnessPayloadsTable boundwitness={boundWitness} />\n </FlexCol>\n {hasNonTxBoundWitnesses\n ? (\n <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<VscSymbolMethod />}\n eventNoun=\"boundwitness\"\n hashes={nonTxBwHashes}\n headingTitle=\"Bound Witnesses\"\n schemas={nonTxBwSchemas}\n sx={{ mb: 1 }}\n />\n )\n : null}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const formatPayloadsForTable = (pairs: [Payload, Hash][]) => {\n let hashes: Hash[] = []\n let schemas: string[] = []\n for (const [bw, hash] of pairs ?? []) {\n hashes.push(hash)\n schemas.push(bw?.schema ?? '')\n }\n return { hashes, schemas }\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport {\n BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { EventNoun, ExtendEventNoun } from '@xyo-network/react-event'\nimport { TableEx } from '@xyo-network/react-table'\nimport React from 'react'\nimport { VscSymbolMethod } from 'react-icons/vsc'\n\nexport interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = EventNoun> extends FlexBoxProps {\n IconComponent?: React.ReactNode\n eventNoun?: TNoun\n hashes?: Hash[]\n headingTitle?: string\n schemas?: string[]\n}\n\nexport const BWPayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({\n IconComponent,\n eventNoun,\n hashes,\n schemas,\n headingTitle,\n ...props\n}: BWPayloadTableFlexboxProps<TNoun>) => {\n const resolvedIconComponent = IconComponent ?? <VscSymbolMethod />\n return (\n <FlexCol alignItems=\"stretch\" rowGap={1} {...props}>\n <HeadingPaper IconComponent={resolvedIconComponent} heading={headingTitle} />\n <TableEx>\n <BoundWitnessPayloadTableHead />\n <BoundWitnessPayloadTableBody<TNoun> payloadHashes={hashes} payloadSchemas={schemas} eventNoun={eventNoun} />\n </TableEx>\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["Divider","filterAs","ErrorRender","FlexCol","usePromise","isBoundWitness","PayloadBuilder","BoundWitnessPayloadsTable","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","useTxsFromBlock","usePayloadHash","isTransactionBoundWitness","React","useMemo","FaSignature","GrTransaction","VscSymbolMethod","VscSymbolNamespace","formatPayloadsForTable","pairs","hashes","schemas","bw","hash","push","schema","FlexCol","BoundWitnessPayloadTableBody","BoundWitnessPayloadTableHead","HeadingPaper","TableEx","React","VscSymbolMethod","BWPayloadTableFlexbox","IconComponent","eventNoun","hashes","schemas","headingTitle","props","resolvedIconComponent","VscSymbolMethod","FlexCol","alignItems","rowGap","HeadingPaper","heading","TableEx","BoundWitnessPayloadTableHead","BoundWitnessPayloadTableBody","payloadHashes","payloadSchemas","BlockBoundWitnessDetails","block","paper","children","props","boundWitness","payloads","hash","usePayloadHash","transactions","txFromBlockError","useTxsFromBlock","hashes","txHashes","schemas","txSchemas","useMemo","formatPayloadsForTable","nonTxBoundWitnesses","bwsFromBlockError","usePromise","bws","filterAs","payload","isTransactionBoundWitness","isBoundWitness","undefined","PayloadBuilder","hashPairs","nonTxBwHashes","nonTxBwSchemas","hasNonTxBoundWitnesses","length","React","FlexCol","alignItems","rowGap","ErrorRender","error","scope","HashHeadingPaper","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","Divider","flexItem","BWPayloadTableFlexbox","IconComponent","GrTransaction","eventNoun","headingTitle","mb","HeadingPaper","VscSymbolNamespace","heading","BoundWitnessPayloadsTable","VscSymbolMethod","FaSignature","BoundWitnessSignatureTable"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockBoundWitnessDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/block/BlockBoundWitnessDetails.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAczD,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAU/F,MAAM,WAAW,wBAAyB,SAAQ,YAAY;IAC5D,KAAK,CAAC,EAAE,mBAAmB,CAAA;CAC5B;AAED,eAAO,MAAM,wBAAwB,GAAI,sCAEtC,wBAAwB,4CA6D1B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './BlockBoundWitnessDetails.tsx';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/block/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA"}
@@ -1,3 +1,3 @@
1
- export * from './BlockBoundWitnessDetails.tsx';
1
+ export * from './block/index.ts';
2
2
  export * from './BwPayloadTable.tsx';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { type FlexBoxProps } from '@xylabs/react-flexbox';
2
+ import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol';
3
+ import React from 'react';
4
+ export interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {
5
+ transaction?: SignedHydratedTransaction;
6
+ }
7
+ export declare const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps>;
8
+ //# sourceMappingURL=TransactionDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/TransactionDetails.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAQlE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,MAAM,WAAW,mCAAoC,SAAQ,YAAY;IACvE,WAAW,CAAC,EAAE,yBAAyB,CAAA;CACxC;AAED,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC,mCAAmC,CA6CxF,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { CardProps } from '@mui/material';
2
+ import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk';
3
+ import React from 'react';
4
+ export interface TransactionBoundWitnessCardProps extends CardProps {
5
+ wrapper?: SignedHydratedTransactionInstance;
6
+ }
7
+ export declare const TransactionBoundWitnessCard: React.FC<TransactionBoundWitnessCardProps>;
8
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/components/transactions/card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AACtF,OAAO,KAAsB,MAAM,OAAO,CAAA;AAO1C,MAAM,WAAW,gCAAiC,SAAQ,SAAS;IACjE,OAAO,CAAC,EAAE,iCAAiC,CAAA;CAC5C;AAED,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAsGlF,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { StackProps } from '@mui/material';
2
+ import type { ComponentType, SVGAttributes } from 'react';
3
+ import React from 'react';
4
+ export interface DetailsStackProps extends StackProps {
5
+ IconComponent?: ComponentType<SVGAttributes<SVGElement>>;
6
+ heading?: string;
7
+ }
8
+ export declare const DetailsStack: React.FC<DetailsStackProps>;
9
+ //# sourceMappingURL=DetailsStack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailsStack.d.ts","sourceRoot":"","sources":["../../../../../src/components/transactions/card/DetailsStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI/C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,aAAa,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAcpD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './Card.tsx';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/transactions/card/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { Hash } from '@xylabs/hex';
2
+ import type { Payload } from '@xyo-network/payload-model';
3
+ export declare const formatPayloadsForTable: (pairs: [Payload, Hash][]) => {
4
+ hashes: Lowercase<string>[];
5
+ schemas: string[];
6
+ };
7
+ //# sourceMappingURL=formatPayloadsForTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPayloadsForTable.d.ts","sourceRoot":"","sources":["../../../src/lib/formatPayloadsForTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,eAAO,MAAM,sBAAsB,GAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;;CAQ9D,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './formatPayloadsForTable.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/react-chain-boundwitness",
4
- "version": "1.3.24",
4
+ "version": "1.3.25",
5
5
  "description": "XYO Layer One React SDK BoundWitness",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -35,17 +35,21 @@
35
35
  "types": "dist/types/index.d.ts",
36
36
  "dependencies": {
37
37
  "@xylabs/array": "^4.9.18",
38
+ "@xylabs/hex": "^4.9.18",
38
39
  "@xylabs/react-error": "^6.3.1",
39
40
  "@xylabs/react-flexbox": "^6.3.1",
40
41
  "@xylabs/react-promise": "^6.3.1",
41
- "@xyo-network/boundwitness-model": "^3.15.8",
42
- "@xyo-network/payload-builder": "^3.15.8",
42
+ "@xylabs/typeof": "^4.9.18",
43
+ "@xyo-network/boundwitness-model": "^3.15.10",
44
+ "@xyo-network/chain-utils": "^1.3.25",
45
+ "@xyo-network/chain-wrappers": "^1.3.25",
46
+ "@xyo-network/payload-builder": "^3.15.10",
43
47
  "@xyo-network/react-boundwitness-plugin": "^5.3.3",
44
- "@xyo-network/react-chain-blockchain": "^1.3.24",
48
+ "@xyo-network/react-chain-blockchain": "^1.3.25",
45
49
  "@xyo-network/react-event": "^5.3.3",
46
50
  "@xyo-network/react-shared": "^5.3.3",
47
51
  "@xyo-network/react-table": "^5.3.3",
48
- "@xyo-network/xl1-protocol": "^1.3.15",
52
+ "@xyo-network/xl1-protocol": "^1.3.17",
49
53
  "react-icons": "^5.5.0"
50
54
  },
51
55
  "devDependencies": {
@@ -55,7 +59,7 @@
55
59
  "@mui/material": "^7.1.0",
56
60
  "@xylabs/ts-scripts-yarn3": "^6.5.6",
57
61
  "@xylabs/tsconfig-react": "^6.5.6",
58
- "@xyo-network/react-chain-shared": "^1.3.24",
62
+ "@xyo-network/react-chain-shared": "^1.3.25",
59
63
  "knip": "^5.56.0",
60
64
  "react": "^19.1.0",
61
65
  "react-dom": "^19.1.0",
@@ -2,7 +2,7 @@ import type { Hash } from '@xylabs/hex'
2
2
  import type { FlexBoxProps } from '@xylabs/react-flexbox'
3
3
  import { FlexCol } from '@xylabs/react-flexbox'
4
4
  import {
5
- BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,
5
+ BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,
6
6
  } from '@xyo-network/react-boundwitness-plugin'
7
7
  import type { EventNoun, ExtendEventNoun } from '@xyo-network/react-event'
8
8
  import { TableEx } from '@xyo-network/react-table'
@@ -18,12 +18,12 @@ export interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = Even
18
18
  }
19
19
 
20
20
  export const BWPayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({
21
- IconComponent,
22
- eventNoun,
23
- hashes,
24
- schemas,
25
- headingTitle,
26
- ...props
21
+ IconComponent,
22
+ eventNoun,
23
+ hashes,
24
+ schemas,
25
+ headingTitle,
26
+ ...props
27
27
  }: BWPayloadTableFlexboxProps<TNoun>) => {
28
28
  const resolvedIconComponent = IconComponent ?? <VscSymbolMethod />
29
29
  return (
@@ -1,11 +1,9 @@
1
1
  import { Divider } from '@mui/material'
2
2
  import { filterAs } from '@xylabs/array'
3
- import type { Hash } from '@xylabs/hex'
4
3
  import { ErrorRender } from '@xylabs/react-error'
5
4
  import type { FlexBoxProps } from '@xylabs/react-flexbox'
6
5
  import { FlexCol } from '@xylabs/react-flexbox'
7
6
  import { usePromise } from '@xylabs/react-promise'
8
- import type { BoundWitness } from '@xyo-network/boundwitness-model'
9
7
  import { isBoundWitness } from '@xyo-network/boundwitness-model'
10
8
  import { PayloadBuilder } from '@xyo-network/payload-builder'
11
9
  import {
@@ -16,7 +14,6 @@ import {
16
14
  HeadingPaper,
17
15
  } from '@xyo-network/react-boundwitness-plugin'
18
16
  import { useTxsFromBlock } from '@xyo-network/react-chain-blockchain'
19
- import { useEvent } from '@xyo-network/react-event'
20
17
  import { usePayloadHash } from '@xyo-network/react-shared'
21
18
  import { isTransactionBoundWitness, type SignedHydratedBlock } from '@xyo-network/xl1-protocol'
22
19
  import React, { useMemo } from 'react'
@@ -24,18 +21,9 @@ import { FaSignature } from 'react-icons/fa'
24
21
  import { GrTransaction } from 'react-icons/gr'
25
22
  import { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'
26
23
 
27
- import type { TransactionBoundWitnessEvents } from '../types/index.ts'
28
- import { BWPayloadTableFlexbox } from './BwPayloadTable.tsx'
29
-
30
- const formatBwsForTable = (pairs: [BoundWitness, Hash][]) => {
31
- let hashes: Hash[] = []
32
- let schemas: string[] = []
33
- for (const [bw, hash] of pairs ?? []) {
34
- hashes.push(hash)
35
- schemas.push(bw?.schema ?? '')
36
- }
37
- return { hashes, schemas }
38
- }
24
+ import { formatPayloadsForTable } from '../../lib/index.ts'
25
+ import type { TransactionBoundWitnessEvents } from '../../types/index.ts'
26
+ import { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'
39
27
 
40
28
  export interface BoundWitnessDetailsProps extends FlexBoxProps {
41
29
  block?: SignedHydratedBlock
@@ -51,15 +39,15 @@ export const BlockBoundWitnessDetails = ({
51
39
 
52
40
  const [transactions, txFromBlockError] = useTxsFromBlock(block)
53
41
 
54
- const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatBwsForTable(transactions ?? []), [transactions])
42
+ const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatPayloadsForTable(transactions ?? []), [transactions])
55
43
 
56
44
  const [nonTxBoundWitnesses, bwsFromBlockError] = usePromise(async () => {
57
45
  const bws = filterAs(payloads ?? [], payload =>
58
46
  (!isTransactionBoundWitness(payload) && isBoundWitness(payload)) ? payload : undefined)
59
47
  return await PayloadBuilder.hashPairs(bws)
60
- }, [payloads])
48
+ }, [payloads])
61
49
 
62
- const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatBwsForTable(nonTxBoundWitnesses ?? []), [nonTxBoundWitnesses])
50
+ const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatPayloadsForTable(nonTxBoundWitnesses ?? []), [nonTxBoundWitnesses])
63
51
  const hasNonTxBoundWitnesses = (nonTxBoundWitnesses?.length ?? 0) > 0
64
52
 
65
53
  return (
@@ -88,14 +76,14 @@ export const BlockBoundWitnessDetails = ({
88
76
  </FlexCol>
89
77
  {hasNonTxBoundWitnesses
90
78
  ? (
91
- <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>
92
- IconComponent={<VscSymbolMethod />}
93
- eventNoun="boundwitness"
94
- hashes={nonTxBwHashes}
95
- headingTitle="Bound Witnesses"
96
- schemas={nonTxBwSchemas}
97
- sx={{ mb: 1 }}
98
- />
79
+ <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>
80
+ IconComponent={<VscSymbolMethod />}
81
+ eventNoun="boundwitness"
82
+ hashes={nonTxBwHashes}
83
+ headingTitle="Bound Witnesses"
84
+ schemas={nonTxBwSchemas}
85
+ sx={{ mb: 1 }}
86
+ />
99
87
  )
100
88
  : null}
101
89
  <FlexCol alignItems="stretch" rowGap={1} mb={1}>
@@ -0,0 +1 @@
1
+ export * from './BlockBoundWitnessDetails.tsx'
@@ -1,2 +1,2 @@
1
- export * from './BlockBoundWitnessDetails.tsx'
1
+ export * from './block/index.ts'
2
2
  export * from './BwPayloadTable.tsx'
@@ -0,0 +1,22 @@
1
+ import type { Meta, StoryFn } from '@storybook/react'
2
+ import { buildRandomTransaction } from '@xyo-network/chain-protocol'
3
+ import React from 'react'
4
+
5
+ import { TransactionBoundWitnessDetails } from './TransactionDetails.tsx'
6
+
7
+ export default {
8
+ title: 'BoundWitness/Transaction/Details/Flexbox',
9
+ component: TransactionBoundWitnessDetails,
10
+ } as Meta
11
+
12
+ const tx = await buildRandomTransaction('0x123')
13
+
14
+ const Template: StoryFn<typeof TransactionBoundWitnessDetails> = args => <TransactionBoundWitnessDetails {...args} />
15
+
16
+ const Default = Template.bind({})
17
+ Default.args = {}
18
+
19
+ const WithData = Template.bind({})
20
+ WithData.args = { transaction: tx }
21
+
22
+ export { Default, WithData }
@@ -0,0 +1,69 @@
1
+ import { Divider } from '@mui/material'
2
+ import { ErrorRender } from '@xylabs/react-error'
3
+ import { type FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
4
+ import { usePromise } from '@xylabs/react-promise'
5
+ import { isDefined } from '@xylabs/typeof'
6
+ import { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'
7
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
8
+ import {
9
+ BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,
10
+ } from '@xyo-network/react-boundwitness-plugin'
11
+ import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
12
+ import React from 'react'
13
+ import { FaSignature } from 'react-icons/fa'
14
+ import { VscSymbolMethod } from 'react-icons/vsc'
15
+
16
+ import { formatPayloadsForTable } from '../../lib/index.ts'
17
+ import { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'
18
+ import { TransactionBoundWitnessCard } from './card/index.ts'
19
+
20
+ export interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {
21
+ transaction?: SignedHydratedTransaction
22
+ }
23
+
24
+ export const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps> = ({ transaction, ...props }) => {
25
+ const [wrapper, wrapperError] = usePromise(async () => {
26
+ if (transaction) {
27
+ return await SignedHydratedTransactionWrapper.parse(transaction)
28
+ }
29
+ }, [transaction])
30
+
31
+ const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {
32
+ if (isDefined(wrapper)) {
33
+ const elevatedPayloads = wrapper.elevatedPayloads
34
+ const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)
35
+ return formatPayloadsForTable(pairs)
36
+ } else {
37
+ return { hashes: [], schemas: [] }
38
+ }
39
+ }, [wrapper])
40
+
41
+ const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}
42
+
43
+ return (
44
+ <FlexCol alignItems="stretch" rowGap={4} {...props}>
45
+ <HashHeadingPaper
46
+ hash={wrapper?.boundWitness?._hash}
47
+ paperProps={{ sx: { p: 2 } }}
48
+ AdornmentEnd={<BWActions boundwitness={wrapper?.boundWitness} />}
49
+ identiconProps={{ p: 0.75, size: 24 }}
50
+ />
51
+ <ErrorRender error={wrapperError} scope="wrapperError:TransactionBoundWitnessDetails.tsx" />
52
+ <ErrorRender error={elevatedPayloadSetsError} scope="elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx" />
53
+ <Divider flexItem />
54
+ <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />
55
+ <Divider flexItem />
56
+ <BWPayloadTableFlexbox
57
+ IconComponent={<VscSymbolMethod />}
58
+ hashes={elevatedPayloadHashes}
59
+ headingTitle="Elevated Payloads"
60
+ schemas={elevatedPayloadSchemas}
61
+ sx={{ mb: 1 }}
62
+ />
63
+ <FlexCol alignItems="stretch" rowGap={1} mb={1}>
64
+ <HeadingPaper IconComponent={<FaSignature />} heading="Signatures" />
65
+ <BoundWitnessSignatureTable block={wrapper?.boundWitness} />
66
+ </FlexCol>
67
+ </FlexCol>
68
+ )
69
+ }
@@ -0,0 +1,121 @@
1
+ import type { CardProps } from '@mui/material'
2
+ import {
3
+ Card, CardContent, Grid, Typography,
4
+ } from '@mui/material'
5
+ import { isUndefined } from '@xylabs/typeof'
6
+ import { bigIntToFixedPointString } from '@xyo-network/chain-utils'
7
+ import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'
8
+ import React, { useCallback } from 'react'
9
+ import { GiReceiveMoney, GiSandsOfTime } from 'react-icons/gi'
10
+ import { IoStatsChartOutline } from 'react-icons/io5'
11
+ import { MdOutlineAlternateEmail } from 'react-icons/md'
12
+
13
+ import { DetailsStack } from './DetailsStack.tsx'
14
+
15
+ export interface TransactionBoundWitnessCardProps extends CardProps {
16
+ wrapper?: SignedHydratedTransactionInstance
17
+ }
18
+
19
+ export const TransactionBoundWitnessCard: React.FC<TransactionBoundWitnessCardProps> = ({ wrapper, ...props }) => {
20
+ if (!wrapper) return null
21
+
22
+ const formatFee = useCallback((fee?: bigint) => {
23
+ if (isUndefined(fee)) return
24
+ return bigIntToFixedPointString(fee, 12)
25
+ }, [])
26
+
27
+ return (
28
+ <Card {...props}>
29
+ <CardContent sx={{
30
+ display: 'flex', flexDirection: 'row', gap: 2, flexWrap: 'wrap',
31
+ }}
32
+ >
33
+ <Grid container spacing={3} sx={{ width: '100%' }}>
34
+ <Grid size={{ xs: 12 }}>
35
+ <DetailsStack IconComponent={MdOutlineAlternateEmail} heading="From:">
36
+ <Typography
37
+ variant="body2"
38
+ sx={{
39
+ maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden',
40
+ }}
41
+ >
42
+ {wrapper?.boundWitness.from}
43
+ </Typography>
44
+ </DetailsStack>
45
+ </Grid>
46
+ <Grid size={{
47
+ xs: 12, sm: 6, md: 4,
48
+ }}
49
+ >
50
+ <DetailsStack IconComponent={IoStatsChartOutline} heading="Stats">
51
+ <Typography variant="body2">
52
+ Reward:
53
+ {' '}
54
+ {wrapper?.reward()}
55
+ </Typography>
56
+ <Typography variant="body2">
57
+ Elevated Payloads:
58
+ {' '}
59
+ {wrapper?.elevatedPayloadCount}
60
+ </Typography>
61
+ <Typography variant="body2">
62
+ Total Payloads:
63
+ {' '}
64
+ {wrapper?.payloadCount}
65
+ </Typography>
66
+ <Typography variant="body2">
67
+ Signatures:
68
+ {' '}
69
+ {wrapper?.signatureCount}
70
+ </Typography>
71
+ </DetailsStack>
72
+ </Grid>
73
+ <Grid size={{
74
+ xs: 12, sm: 6, md: 4,
75
+ }}
76
+ >
77
+ <DetailsStack IconComponent={GiReceiveMoney} heading="Fees">
78
+ <Typography variant="body2">
79
+ Base:
80
+ {' '}
81
+ {formatFee(wrapper?.fees.base)}
82
+ </Typography>
83
+ <Typography variant="body2">
84
+ Gas:
85
+ {' '}
86
+ {formatFee(wrapper?.fees.gasPrice)}
87
+ </Typography>
88
+ <Typography variant="body2">
89
+ Priority:
90
+ {' '}
91
+ {formatFee(wrapper?.fees.priority)}
92
+ </Typography>
93
+ <Typography variant="body2">
94
+ Gas Limit:
95
+ {' '}
96
+ {formatFee(wrapper?.fees.gasLimit)}
97
+ </Typography>
98
+ </DetailsStack>
99
+ </Grid>
100
+ <Grid size={{
101
+ xs: 12, sm: 6, md: 4,
102
+ }}
103
+ >
104
+ <DetailsStack IconComponent={GiSandsOfTime} heading="Block Duration">
105
+ <Typography variant="body2">
106
+ Expiration:
107
+ {' '}
108
+ {wrapper?.boundWitness.exp}
109
+ </Typography>
110
+ <Typography variant="body2">
111
+ Not Before:
112
+ {' '}
113
+ {wrapper?.boundWitness?.nbf}
114
+ </Typography>
115
+ </DetailsStack>
116
+ </Grid>
117
+ </Grid>
118
+ </CardContent>
119
+ </Card>
120
+ )
121
+ }
@@ -0,0 +1,35 @@
1
+ import type { StackProps } from '@mui/material'
2
+ import {
3
+ Icon, Stack, styled, Typography,
4
+ } from '@mui/material'
5
+ import type { ComponentType, SVGAttributes } from 'react'
6
+ import React from 'react'
7
+
8
+ export interface DetailsStackProps extends StackProps {
9
+ IconComponent?: ComponentType<SVGAttributes<SVGElement>>
10
+ heading?: string
11
+ }
12
+
13
+ export const DetailsStack: React.FC<DetailsStackProps> = ({
14
+ IconComponent, heading, children, ...props
15
+ }) => {
16
+ return (
17
+ <Stack direction="row" mb={1} gap={1} {...props}>
18
+ {IconComponent && <Icon fontSize="small" sx={{ mr: 0.25 }}><IconComponent style={{ height: '0.7em' }} /></Icon>}
19
+ <Stack direction="column" flexWrap="wrap" mb={1}>
20
+ <SectionHeadingTypography>
21
+ {heading}
22
+ </SectionHeadingTypography>
23
+ {children}
24
+ </Stack>
25
+ </Stack>
26
+ )
27
+ }
28
+
29
+ const SectionHeadingTypography = styled(Typography, { name: 'SectionHeadingTypography' })(({ theme }) => ({
30
+ display: 'inline-flex',
31
+ alignItems: 'baseline',
32
+ fontFamily: 'monospace',
33
+ fontSize: 16,
34
+ marginBottom: theme.spacing(0.75),
35
+ }))
@@ -0,0 +1 @@
1
+ export * from './Card.tsx'
@@ -0,0 +1,12 @@
1
+ import type { Hash } from '@xylabs/hex'
2
+ import type { Payload } from '@xyo-network/payload-model'
3
+
4
+ export const formatPayloadsForTable = (pairs: [Payload, Hash][]) => {
5
+ let hashes: Hash[] = []
6
+ let schemas: string[] = []
7
+ for (const [bw, hash] of pairs ?? []) {
8
+ hashes.push(hash)
9
+ schemas.push(bw?.schema ?? '')
10
+ }
11
+ return { hashes, schemas }
12
+ }
@@ -0,0 +1 @@
1
+ export * from './formatPayloadsForTable.ts'
@@ -1 +0,0 @@
1
- {"version":3,"file":"BlockBoundWitnessDetails.d.ts","sourceRoot":"","sources":["../../../src/components/BlockBoundWitnessDetails.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAgBzD,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAmB/F,MAAM,WAAW,wBAAyB,SAAQ,YAAY;IAC5D,KAAK,CAAC,EAAE,mBAAmB,CAAA;CAC5B;AAED,eAAO,MAAM,wBAAwB,GAAI,sCAEtC,wBAAwB,4CA6D1B,CAAA"}