@xyo-network/react-chain-boundwitness 1.5.27 → 1.5.29

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.
@@ -28,6 +28,11 @@ var formatFee = /* @__PURE__ */ __name((fee) => {
28
28
  return stringValue;
29
29
  }, "formatFee");
30
30
 
31
+ // src/lib/formatNumber.ts
32
+ var formatNumber = /* @__PURE__ */ __name((num) => {
33
+ return num.toLocaleString(navigator.language ?? "en-US");
34
+ }, "formatNumber");
35
+
31
36
  // src/lib/formatPayloadsForTable.ts
32
37
  var formatPayloadsForTable = /* @__PURE__ */ __name((pairs) => {
33
38
  let hashes = [];
@@ -130,21 +135,21 @@ var BlockBoundWitnessCardHeader = /* @__PURE__ */ __name(({ linked = true, addre
130
135
  import { usePromise } from "@xylabs/react-promise";
131
136
  import { StepSizes } from "@xyo-network/xl1-protocol";
132
137
  import { useMemo } from "react";
133
- var updateStepHashWindow = /* @__PURE__ */ __name((blockNumber, stepHashIndex, stepHashes) => {
134
- for (const [index, step] of StepSizes.entries()) {
135
- const nextStep = StepSizes[index + 1];
136
- if (blockNumber >= step && blockNumber < nextStep) {
137
- stepHashes[`Step ${stepHashIndex} - ${blockNumber}`] = `${blockNumber - step + 1} - ${blockNumber}`;
138
- }
139
- }
140
- return stepHashes;
141
- }, "updateStepHashWindow");
138
+ var generateStepHashText = /* @__PURE__ */ __name((blockNumber, stepHashIndex) => {
139
+ const stepSize = StepSizes[stepHashIndex];
140
+ const stepStart = blockNumber - stepSize + 1;
141
+ const stepStop = blockNumber;
142
+ return [
143
+ `Step ${stepHashIndex} (${stepSize})`,
144
+ `${formatNumber(stepStart)} - ${formatNumber(stepStop)}`
145
+ ];
146
+ }, "generateStepHashText");
142
147
  var useBlockDetails = /* @__PURE__ */ __name((wrapper, viewer) => {
143
148
  const stats = useMemo(() => {
144
149
  const stats2 = {
145
- Height: wrapper.boundWitness.block.toLocaleString(navigator.language ?? "en-US"),
150
+ Height: formatNumber(wrapper.boundWitness.block),
146
151
  Protocol: wrapper.boundWitness.protocol.toString(),
147
- Signatures: wrapper.signatureCount.toLocaleString(navigator.language ?? "en-US"),
152
+ Signatures: formatNumber(wrapper.signatureCount),
148
153
  $epoch: wrapper.boundWitness.$epoch.toString()
149
154
  };
150
155
  return formatResults(stats2);
@@ -153,10 +158,10 @@ var useBlockDetails = /* @__PURE__ */ __name((wrapper, viewer) => {
153
158
  ]);
154
159
  const payloads = useMemo(() => {
155
160
  const payloads2 = {
156
- "Transactions": wrapper.transactionCount.toLocaleString(navigator.language ?? "en-US"),
157
- "Public Payloads": wrapper.publicPayloadCount.toLocaleString(navigator.language ?? "en-US"),
158
- "Private Payloads": wrapper.privatePayloadCount.toLocaleString(navigator.language ?? "en-US"),
159
- "Total Payloads": wrapper.payloadCount.toLocaleString(navigator.language ?? "en-US")
161
+ "Transactions": formatNumber(wrapper.transactionCount),
162
+ "Public Payloads": formatNumber(wrapper.publicPayloadCount),
163
+ "Private Payloads": formatNumber(wrapper.privatePayloadCount),
164
+ "Total Payloads": formatNumber(wrapper.payloadCount)
160
165
  };
161
166
  return formatResults(payloads2);
162
167
  }, [
@@ -174,7 +179,8 @@ var useBlockDetails = /* @__PURE__ */ __name((wrapper, viewer) => {
174
179
  continue;
175
180
  }
176
181
  const blockNumber = block[0].block;
177
- updateStepHashWindow(blockNumber, index, stepHashes2);
182
+ const [label, value] = generateStepHashText(blockNumber, index);
183
+ stepHashes2[label] = value;
178
184
  } catch (e) {
179
185
  console.error(`Error fetching block for step hash ${hash}:`, e);
180
186
  stepHashes2[`Step ${index}`] = "N/A";
@@ -384,10 +390,10 @@ import { useMemo as useMemo3 } from "react";
384
390
  var useTransactionDetails = /* @__PURE__ */ __name((wrapper) => {
385
391
  const stats = useMemo3(() => {
386
392
  const stats2 = {
387
- "Reward": wrapper.reward().toLocaleString(navigator.language ?? "en-US"),
388
- "Elevated Payloads": wrapper.elevatedPayloadCount.toLocaleString(navigator.language ?? "en-US"),
389
- "Total Payloads": wrapper.payloadCount.toLocaleString(navigator.language ?? "en-US"),
390
- "Signatures": wrapper.signatureCount.toLocaleString(navigator.language ?? "en-US")
393
+ "Reward": formatNumber(wrapper.reward()),
394
+ "Elevated Payloads": formatNumber(wrapper.elevatedPayloadCount),
395
+ "Total Payloads": formatNumber(wrapper.payloadCount),
396
+ "Signatures": formatNumber(wrapper.signatureCount)
391
397
  };
392
398
  return formatResults(stats2);
393
399
  }, [
@@ -511,7 +517,7 @@ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder"
511
517
  import { BoundWitnessSignatureTable as BoundWitnessSignatureTable2, BWActions as BWActions2, HashHeadingPaper as HashHeadingPaper2, HeadingPaper as HeadingPaper3 } from "@xyo-network/react-boundwitness-plugin";
512
518
  import React6 from "react";
513
519
  import { FaSignature as FaSignature2 } from "react-icons/fa";
514
- import { VscSymbolMethod as VscSymbolMethod3 } from "react-icons/vsc";
520
+ import { VscSymbolMethod as VscSymbolMethod3, VscSymbolNamespace as VscSymbolNamespace3 } from "react-icons/vsc";
515
521
  var nonClickableFields = [];
516
522
  var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...props }) => {
517
523
  const [wrapper, wrapperError] = usePromise3(async () => {
@@ -586,7 +592,7 @@ var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...p
586
592
  elevation: 4,
587
593
  wrapper
588
594
  }), /* @__PURE__ */ React6.createElement(BWPayloadTableFlexbox, {
589
- IconComponent: /* @__PURE__ */ React6.createElement(VscSymbolMethod3, null),
595
+ IconComponent: /* @__PURE__ */ React6.createElement(VscSymbolNamespace3, null),
590
596
  hashes: elevatedPayloadHashes,
591
597
  headingTitle: "Elevated Payloads",
592
598
  schemas: elevatedPayloadSchemas,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/block/BlockBoundWitnessDetails.tsx","../../src/lib/formatFees.ts","../../src/lib/formatPayloadsForTable.ts","../../src/lib/formatResults.ts","../../src/components/BwPayloadTable.tsx","../../src/components/block/card/Card.tsx","../../src/components/block/card/CardHeader.tsx","../../src/components/block/card/hooks/useDetails.ts","../../src/components/transactions/card/Card.tsx","../../src/components/transactions/card/hooks/useDetails.ts","../../src/components/transactions/TransactionDetails.tsx"],"sourcesContent":["import { 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 { SignedHydratedBlockWrapper } from '@xyo-network/chain-wrappers'\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 type { SignedHydratedBlock, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } 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'\nimport { BlockBoundWitnessCard } from './card/Card.tsx'\n\nexport interface BoundWitnessDetailsProps extends FlexBoxProps {\n block?: SignedHydratedBlock\n viewer?: XyoViewer\n}\n\nexport const BlockBoundWitnessDetails = ({\n block, paper, viewer, children, ...props\n}: BoundWitnessDetailsProps) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (block) {\n return await SignedHydratedBlockWrapper.parse(block)\n }\n }, [block])\n\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 <ErrorRender error={wrapperError} scope=\"BlockBoundWitnessDetails.tsx:wrapperError\" />\n <HashHeadingPaper\n hash={hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <BlockBoundWitnessCard elevation={4} viewer={viewer} wrapper={wrapper} />\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 { isUndefined } from '@xylabs/typeof'\nimport { bigIntToFixedPointString } from '@xyo-network/chain-utils'\n\nexport const formatFee = (fee?: bigint) => {\n if (isUndefined(fee)) return 'N/A'\n const stringValue = bigIntToFixedPointString(fee, 12)\n if (stringValue === '0') return stringValue\n return stringValue\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","export const formatResults = (results: Record<string, string>) => {\n const result = { labels: [] as string[], values: [] as string[] }\n for (const [label, value] of Object.entries(results)) {\n result.labels.push(label)\n result.values.push(value)\n }\n return result\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 type ClickableFields = 'hash'\nconst defaultClickableFields: ClickableFields[] = ['hash']\n\nexport interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = EventNoun> extends FlexBoxProps {\n IconComponent?: React.ReactNode\n clickableFields?: ClickableFields[]\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 clickableFields = defaultClickableFields,\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} clickableFields={clickableFields} />\n </TableEx>\n </FlexCol>\n )\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, Grid,\n Skeleton,\n Stack,\n} from '@mui/material'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { isDefined } from '@xylabs/typeof'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GrSteps } from 'react-icons/gr'\nimport { IoStatsChartOutline } from 'react-icons/io5'\nimport { VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { BlockBoundWitnessCardHeader } from './CardHeader.tsx'\nimport { useBlockDetails } from './hooks/index.ts'\n\nexport interface BlockBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n viewer?: XyoViewer\n wrapper?: SignedHydratedBlockInstance\n}\n\nexport const BlockBoundWitnessCard: React.FC<BlockBoundWitnessCardProps> = ({\n linkedAddress = true, viewer, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n } = useBlockDetails(wrapper, viewer)\n\n return (\n <Card {...props}>\n {wrapper?.boundWitness.addresses.map(address => <BlockBoundWitnessCardHeader key={address} address={address} linked={linkedAddress} />)}\n <ErrorRender error={stepHashesError} scope=\"BlockBoundWitnessCard.tsx:stepHashesError\" />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={VscSymbolNamespace} heading=\"Payloads\" tooltipTitle=\"Payloads within the Block\">\n <LabelValueStack labels={payloads.labels} values={payloads.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GrSteps} heading=\"Step Hashes\" tooltipTitle=\"Step Hashes for the Block\">\n {stepHashesLoading === 'pending'\n ? (\n <Stack gap={0.25}>\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n </Stack>\n )\n : null}\n <LabelValueStack labels={stepHashes?.labels ?? []} values={stepHashes?.values ?? []} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { CardHeaderProps } from '@mui/material'\nimport {\n CardHeader, Link,\n Tooltip, Typography,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { useEvent } from '@xyo-network/react-event'\nimport React from 'react'\n\nexport interface BlockBoundWitnessCardHeaderProps extends CardHeaderProps {\n address?: Address\n linked?: boolean\n}\n\nexport const BlockBoundWitnessCardHeader: React.FC<BlockBoundWitnessCardHeaderProps> = ({ linked = true, address }) => {\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <CardHeader\n ref={ref}\n title={(\n <Typography\n onClick={() => linked && dispatch('address', 'click', address)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linked\n ? (\n <Link sx={{ cursor: 'pointer' }}>{address}</Link>\n )\n : address}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`Address - ${address}`}>\n <BlockiesAvatarAddress\n address={address}\n onClick={() => dispatch('address', 'click', address)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { StepSizes, type XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport { formatResults } from '../../../../lib/index.ts'\n\nconst updateStepHashWindow = (blockNumber: number, stepHashIndex: number, stepHashes: Record<string, string>): Record<string, string> => {\n for (const [index, step] of StepSizes.entries()) {\n const nextStep = StepSizes[index + 1]\n if (blockNumber >= step && blockNumber < nextStep) {\n // Result Format - [block number - step size + 1, block number]\n stepHashes[`Step ${stepHashIndex} - ${blockNumber}`] = `${blockNumber - step + 1} - ${blockNumber}`\n }\n // TODO - handle case where block number is beyond all steps\n }\n return stepHashes\n}\n\nexport const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: XyoViewer) => {\n const stats = useMemo(() => {\n const stats = {\n Height: wrapper.boundWitness.block.toLocaleString(navigator.language ?? 'en-US'),\n Protocol: wrapper.boundWitness.protocol.toString(),\n Signatures: wrapper.signatureCount.toLocaleString(navigator.language ?? 'en-US'),\n $epoch: wrapper.boundWitness.$epoch.toString(),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const payloads = useMemo(() => {\n const payloads = {\n 'Transactions': wrapper.transactionCount.toLocaleString(navigator.language ?? 'en-US'),\n 'Public Payloads': wrapper.publicPayloadCount.toLocaleString(navigator.language ?? 'en-US'),\n 'Private Payloads': wrapper.privatePayloadCount.toLocaleString(navigator.language ?? 'en-US'),\n 'Total Payloads': wrapper.payloadCount.toLocaleString(navigator.language ?? 'en-US'),\n }\n\n return formatResults(payloads)\n }, [wrapper])\n\n const [stepHashes, stepHashesError, stepHashesLoading] = usePromise(async () => {\n if (viewer) {\n const stepHashes = {} as Record<string, string>\n for (const [index, hash] of wrapper.boundWitness.step_hashes.entries()) {\n try {\n const block = await viewer.blockByHash(hash)\n if (block === null) {\n console.warn(`Block not found for step hash ${hash}`)\n stepHashes[`Step ${index}`] = 'N/A'\n continue\n }\n\n const blockNumber = block[0].block\n updateStepHashWindow(blockNumber, index, stepHashes)\n } catch (e) {\n console.error(`Error fetching block for step hash ${hash}:`, e)\n stepHashes[`Step ${index}`] = 'N/A'\n }\n }\n\n return formatResults(stepHashes)\n }\n }, [wrapper, viewer], { defaultValue: { labels: [], values: [] } })\n\n return {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n }\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, CardHeader, Grid, Link, Tooltip, Typography,\n} from '@mui/material'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport { useEvent } from '@xyo-network/react-event'\nimport type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GiReceiveMoney, GiSandsOfTime } from 'react-icons/gi'\nimport { IoStatsChartOutline } from 'react-icons/io5'\n\nimport { useTransactionDetails } from './hooks/index.ts'\n\nexport interface TransactionBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n wrapper?: SignedHydratedTransactionInstance\n}\n\nexport const TransactionBoundWitnessCard: React.FC<TransactionBoundWitnessCardProps> = ({\n linkedAddress = true, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, fees, blockDuration,\n } = useTransactionDetails(wrapper)\n\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <Card ref={ref} {...props}>\n <CardHeader\n title={(\n <Typography\n onClick={() => linkedAddress && dispatch('address', 'click', wrapper.boundWitness.from)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linkedAddress\n ? (\n <Link sx={{ cursor: 'pointer' }}>{wrapper?.boundWitness.from}</Link>\n )\n : wrapper?.boundWitness.from}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`From Address - ${wrapper?.boundWitness.from}`}>\n <BlockiesAvatarAddress\n address={wrapper?.boundWitness.from}\n onClick={() => dispatch('address', 'click', wrapper.boundWitness.from)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiReceiveMoney} heading=\"Fees\" tooltipTitle=\"Fees offered to the producer\">\n <LabelValueStack labels={fees.labels} values={fees.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiSandsOfTime} heading=\"Block Duration\" tooltipTitle=\"Block window for the transaction to be valid\">\n <LabelValueStack labels={blockDuration.labels} values={blockDuration.values} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport { formatFee, formatResults } from '../../../../lib/index.ts'\n\nexport const useTransactionDetails = (wrapper: SignedHydratedTransactionInstance) => {\n const stats = useMemo(() => {\n const stats = {\n 'Reward': wrapper.reward().toLocaleString(navigator.language ?? 'en-US'),\n 'Elevated Payloads': wrapper.elevatedPayloadCount.toLocaleString(navigator.language ?? 'en-US'),\n 'Total Payloads': wrapper.payloadCount.toLocaleString(navigator.language ?? 'en-US'),\n 'Signatures': wrapper.signatureCount.toLocaleString(navigator.language ?? 'en-US'),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const fees = useMemo(() => {\n const fees = {\n 'Base': formatFee(wrapper.fees.base),\n 'Gas': formatFee(wrapper.fees.gasPrice),\n 'Priority': formatFee(wrapper.fees.priority),\n 'Gas Limit': formatFee(wrapper.fees.gasLimit),\n }\n\n return formatResults(fees)\n }, [wrapper])\n\n const blockDuration = useMemo(() => {\n const blockDuration = {\n 'Expiration': wrapper.boundWitness.exp.toLocaleString(navigator.language ?? 'en-US'),\n 'Not Before': wrapper.boundWitness.nbf.toLocaleString(navigator.language ?? 'en-US'),\n }\n\n return formatResults(blockDuration)\n }, [wrapper])\n\n return {\n stats, fees, blockDuration,\n }\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { type FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport React from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { VscSymbolMethod } from 'react-icons/vsc'\n\nimport { formatPayloadsForTable } from '../../lib/index.ts'\nimport type { ClickableFields } from '../BwPayloadTable.tsx'\nimport { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'\nimport { TransactionBoundWitnessCard } from './card/index.ts'\n\nconst nonClickableFields: ClickableFields[] = []\n\nexport interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {\n transaction?: SignedHydratedTransaction | null\n}\n\nexport const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps> = ({ transaction, ...props }) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (transaction) {\n return await SignedHydratedTransactionWrapper.parse(transaction)\n }\n }, [transaction])\n\n const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n const [nonElevatedPayloadSets, nonElevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const payloads = wrapper.payloads\n const nonElevatedPayloads = payloads.filter((payload) => {\n return elevatedPayloads.every(elevated => elevated._hash !== payload._hash)\n })\n const pairs = await PayloadBuilder.hashPairs(nonElevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}\n const { hashes: nonElevatedPayloadHashes, schemas: nonElevatedPayloadSchemas } = nonElevatedPayloadSets ?? {}\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={2} {...props}>\n <HashHeadingPaper\n hash={wrapper?.boundWitness?._hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={wrapper?.boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <ErrorRender error={wrapperError} scope=\"wrapperError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={elevatedPayloadSetsError} scope=\"elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={nonElevatedPayloadSetsError} scope=\"nonElevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />\n <BWPayloadTableFlexbox\n IconComponent={<VscSymbolMethod />}\n hashes={elevatedPayloadHashes}\n headingTitle=\"Elevated Payloads\"\n schemas={elevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n {(nonElevatedPayloadHashes?.length ?? 0) > 0 && (\n <BWPayloadTableFlexbox\n IconComponent={<VscSymbolMethod />}\n clickableFields={nonClickableFields}\n hashes={nonElevatedPayloadHashes}\n headingTitle=\"Non-Elevated Payloads\"\n schemas={nonElevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={wrapper?.boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["filterAs","ErrorRender","FlexCol","usePromise","isBoundWitness","SignedHydratedBlockWrapper","PayloadBuilder","BoundWitnessPayloadsTable","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","useTxsFromBlock","usePayloadHash","isTransactionBoundWitness","React","useMemo","FaSignature","GrTransaction","VscSymbolMethod","VscSymbolNamespace","isUndefined","bigIntToFixedPointString","formatFee","fee","isUndefined","stringValue","bigIntToFixedPointString","formatPayloadsForTable","pairs","hashes","schemas","bw","hash","push","schema","formatResults","results","result","labels","values","label","value","Object","entries","push","FlexCol","BoundWitnessPayloadTableBody","BoundWitnessPayloadTableHead","HeadingPaper","TableEx","React","VscSymbolMethod","defaultClickableFields","BWPayloadTableFlexbox","IconComponent","eventNoun","hashes","schemas","headingTitle","clickableFields","props","resolvedIconComponent","VscSymbolMethod","FlexCol","alignItems","rowGap","HeadingPaper","heading","TableEx","BoundWitnessPayloadTableHead","BoundWitnessPayloadTableBody","payloadHashes","payloadSchemas","Card","CardContent","Grid","Skeleton","Stack","ErrorRender","DetailsStack","LabelValueStack","React","GrSteps","IoStatsChartOutline","VscSymbolNamespace","CardHeader","Link","Tooltip","Typography","BlockiesAvatarAddress","useEvent","React","BlockBoundWitnessCardHeader","linked","address","ref","dispatch","useEvent","React","CardHeader","title","Typography","onClick","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","size","usePromise","StepSizes","useMemo","updateStepHashWindow","blockNumber","stepHashIndex","stepHashes","index","step","StepSizes","entries","nextStep","useBlockDetails","wrapper","viewer","stats","useMemo","Height","boundWitness","block","toLocaleString","navigator","language","Protocol","protocol","toString","Signatures","signatureCount","$epoch","formatResults","payloads","transactionCount","publicPayloadCount","privatePayloadCount","payloadCount","stepHashesError","stepHashesLoading","usePromise","hash","step_hashes","blockByHash","console","warn","e","error","defaultValue","labels","values","BlockBoundWitnessCard","linkedAddress","viewer","wrapper","props","stats","payloads","stepHashes","stepHashesError","stepHashesLoading","useBlockDetails","React","Card","boundWitness","addresses","map","address","BlockBoundWitnessCardHeader","key","linked","ErrorRender","error","scope","CardContent","Grid","container","spacing","sx","width","size","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","VscSymbolNamespace","GrSteps","Stack","gap","Skeleton","variant","height","BlockBoundWitnessDetails","block","paper","viewer","children","props","wrapper","wrapperError","usePromise","SignedHydratedBlockWrapper","parse","boundWitness","payloads","hash","usePayloadHash","transactions","txFromBlockError","useTxsFromBlock","hashes","txHashes","schemas","txSchemas","useMemo","formatPayloadsForTable","nonTxBoundWitnesses","bwsFromBlockError","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","BlockBoundWitnessCard","elevation","BWPayloadTableFlexbox","IconComponent","GrTransaction","eventNoun","headingTitle","mb","HeadingPaper","VscSymbolNamespace","heading","BoundWitnessPayloadsTable","VscSymbolMethod","FaSignature","BoundWitnessSignatureTable","Card","CardContent","CardHeader","Grid","Link","Tooltip","Typography","BlockiesAvatarAddress","DetailsStack","LabelValueStack","useEvent","React","GiReceiveMoney","GiSandsOfTime","IoStatsChartOutline","useMemo","useTransactionDetails","wrapper","stats","useMemo","reward","toLocaleString","navigator","language","elevatedPayloadCount","payloadCount","signatureCount","formatResults","fees","formatFee","base","gasPrice","priority","gasLimit","blockDuration","boundWitness","exp","nbf","TransactionBoundWitnessCard","linkedAddress","wrapper","props","stats","fees","blockDuration","useTransactionDetails","ref","dispatch","useEvent","React","Card","CardHeader","title","Typography","onClick","boundWitness","from","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","address","size","CardContent","Grid","container","spacing","width","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","GiReceiveMoney","GiSandsOfTime","ErrorRender","FlexCol","usePromise","isDefined","SignedHydratedTransactionWrapper","PayloadBuilder","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","React","FaSignature","VscSymbolMethod","nonClickableFields","TransactionBoundWitnessDetails","transaction","props","wrapper","wrapperError","usePromise","SignedHydratedTransactionWrapper","parse","elevatedPayloadSets","elevatedPayloadSetsError","isDefined","elevatedPayloads","pairs","PayloadBuilder","hashPairs","formatPayloadsForTable","hashes","schemas","nonElevatedPayloadSets","nonElevatedPayloadSetsError","payloads","nonElevatedPayloads","filter","payload","every","elevated","_hash","elevatedPayloadHashes","elevatedPayloadSchemas","nonElevatedPayloadHashes","nonElevatedPayloadSchemas","React","FlexCol","alignItems","rowGap","HashHeadingPaper","hash","boundWitness","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","ErrorRender","error","scope","TransactionBoundWitnessCard","elevation","BWPayloadTableFlexbox","IconComponent","VscSymbolMethod","headingTitle","mb","length","clickableFields","HeadingPaper","FaSignature","heading","BoundWitnessSignatureTable","block"]}
1
+ {"version":3,"sources":["../../src/components/block/BlockBoundWitnessDetails.tsx","../../src/lib/formatFees.ts","../../src/lib/formatNumber.ts","../../src/lib/formatPayloadsForTable.ts","../../src/lib/formatResults.ts","../../src/components/BwPayloadTable.tsx","../../src/components/block/card/Card.tsx","../../src/components/block/card/CardHeader.tsx","../../src/components/block/card/hooks/useDetails.ts","../../src/components/transactions/card/Card.tsx","../../src/components/transactions/card/hooks/useDetails.ts","../../src/components/transactions/TransactionDetails.tsx"],"sourcesContent":["import { 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 { SignedHydratedBlockWrapper } from '@xyo-network/chain-wrappers'\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 type { SignedHydratedBlock, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } 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'\nimport { BlockBoundWitnessCard } from './card/Card.tsx'\n\nexport interface BoundWitnessDetailsProps extends FlexBoxProps {\n block?: SignedHydratedBlock\n viewer?: XyoViewer\n}\n\nexport const BlockBoundWitnessDetails = ({\n block, paper, viewer, children, ...props\n}: BoundWitnessDetailsProps) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (block) {\n return await SignedHydratedBlockWrapper.parse(block)\n }\n }, [block])\n\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 <ErrorRender error={wrapperError} scope=\"BlockBoundWitnessDetails.tsx:wrapperError\" />\n <HashHeadingPaper\n hash={hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <BlockBoundWitnessCard elevation={4} viewer={viewer} wrapper={wrapper} />\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 { isUndefined } from '@xylabs/typeof'\nimport { bigIntToFixedPointString } from '@xyo-network/chain-utils'\n\nexport const formatFee = (fee?: bigint) => {\n if (isUndefined(fee)) return 'N/A'\n const stringValue = bigIntToFixedPointString(fee, 12)\n if (stringValue === '0') return stringValue\n return stringValue\n}\n","export const formatNumber = (num: number | bigint): string => {\n return num.toLocaleString(navigator.language ?? 'en-US')\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","export const formatResults = (results: Record<string, string>) => {\n const result = { labels: [] as string[], values: [] as string[] }\n for (const [label, value] of Object.entries(results)) {\n result.labels.push(label)\n result.values.push(value)\n }\n return result\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 type ClickableFields = 'hash'\nconst defaultClickableFields: ClickableFields[] = ['hash']\n\nexport interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = EventNoun> extends FlexBoxProps {\n IconComponent?: React.ReactNode\n clickableFields?: ClickableFields[]\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 clickableFields = defaultClickableFields,\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} clickableFields={clickableFields} />\n </TableEx>\n </FlexCol>\n )\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, Grid,\n Skeleton,\n Stack,\n} from '@mui/material'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GrSteps } from 'react-icons/gr'\nimport { IoStatsChartOutline } from 'react-icons/io5'\nimport { VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { BlockBoundWitnessCardHeader } from './CardHeader.tsx'\nimport { useBlockDetails } from './hooks/index.ts'\n\nexport interface BlockBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n viewer?: XyoViewer\n wrapper?: SignedHydratedBlockInstance\n}\n\nexport const BlockBoundWitnessCard: React.FC<BlockBoundWitnessCardProps> = ({\n linkedAddress = true, viewer, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n } = useBlockDetails(wrapper, viewer)\n\n return (\n <Card {...props}>\n {wrapper?.boundWitness.addresses.map(address => <BlockBoundWitnessCardHeader key={address} address={address} linked={linkedAddress} />)}\n <ErrorRender error={stepHashesError} scope=\"BlockBoundWitnessCard.tsx:stepHashesError\" />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={VscSymbolNamespace} heading=\"Payloads\" tooltipTitle=\"Payloads within the Block\">\n <LabelValueStack labels={payloads.labels} values={payloads.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GrSteps} heading=\"Step Hashes\" tooltipTitle=\"Step Hashes for the Block\">\n {stepHashesLoading === 'pending'\n ? (\n <Stack gap={0.25}>\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n </Stack>\n )\n : null}\n <LabelValueStack labels={stepHashes?.labels ?? []} values={stepHashes?.values ?? []} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { CardHeaderProps } from '@mui/material'\nimport {\n CardHeader, Link,\n Tooltip, Typography,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { useEvent } from '@xyo-network/react-event'\nimport React from 'react'\n\nexport interface BlockBoundWitnessCardHeaderProps extends CardHeaderProps {\n address?: Address\n linked?: boolean\n}\n\nexport const BlockBoundWitnessCardHeader: React.FC<BlockBoundWitnessCardHeaderProps> = ({ linked = true, address }) => {\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <CardHeader\n ref={ref}\n title={(\n <Typography\n onClick={() => linked && dispatch('address', 'click', address)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linked\n ? (\n <Link sx={{ cursor: 'pointer' }}>{address}</Link>\n )\n : address}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`Address - ${address}`}>\n <BlockiesAvatarAddress\n address={address}\n onClick={() => dispatch('address', 'click', address)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { StepSizes, type XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport { formatNumber, formatResults } from '../../../../lib/index.ts'\n\nconst generateStepHashText = (blockNumber: number, stepHashIndex: number): [string, string] => {\n const stepSize = StepSizes[stepHashIndex]\n const stepStart = blockNumber - stepSize + 1\n const stepStop = blockNumber\n\n return [`Step ${stepHashIndex} (${stepSize})`, `${formatNumber(stepStart)} - ${formatNumber(stepStop)}`]\n}\n\nexport const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: XyoViewer) => {\n const stats = useMemo(() => {\n const stats = {\n Height: formatNumber(wrapper.boundWitness.block),\n Protocol: wrapper.boundWitness.protocol.toString(),\n Signatures: formatNumber(wrapper.signatureCount),\n $epoch: wrapper.boundWitness.$epoch.toString(),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const payloads = useMemo(() => {\n const payloads = {\n 'Transactions': formatNumber(wrapper.transactionCount),\n 'Public Payloads': formatNumber(wrapper.publicPayloadCount),\n 'Private Payloads': formatNumber(wrapper.privatePayloadCount),\n 'Total Payloads': formatNumber(wrapper.payloadCount),\n }\n\n return formatResults(payloads)\n }, [wrapper])\n\n const [stepHashes, stepHashesError, stepHashesLoading] = usePromise(async () => {\n if (viewer) {\n const stepHashes: Record<string, string> = {}\n for (const [index, hash] of wrapper.boundWitness.step_hashes.entries()) {\n try {\n const block = await viewer.blockByHash(hash)\n if (block === null) {\n console.warn(`Block not found for step hash ${hash}`)\n stepHashes[`Step ${index}`] = 'N/A'\n continue\n }\n\n const blockNumber = block[0].block\n const [label, value] = generateStepHashText(blockNumber, index)\n stepHashes[label] = value\n } catch (e) {\n console.error(`Error fetching block for step hash ${hash}:`, e)\n stepHashes[`Step ${index}`] = 'N/A'\n }\n }\n\n return formatResults(stepHashes)\n }\n }, [wrapper, viewer], { defaultValue: { labels: [], values: [] } })\n\n return {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n }\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, CardHeader, Grid, Link, Tooltip, Typography,\n} from '@mui/material'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport { useEvent } from '@xyo-network/react-event'\nimport type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GiReceiveMoney, GiSandsOfTime } from 'react-icons/gi'\nimport { IoStatsChartOutline } from 'react-icons/io5'\n\nimport { useTransactionDetails } from './hooks/index.ts'\n\nexport interface TransactionBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n wrapper?: SignedHydratedTransactionInstance\n}\n\nexport const TransactionBoundWitnessCard: React.FC<TransactionBoundWitnessCardProps> = ({\n linkedAddress = true, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, fees, blockDuration,\n } = useTransactionDetails(wrapper)\n\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <Card ref={ref} {...props}>\n <CardHeader\n title={(\n <Typography\n onClick={() => linkedAddress && dispatch('address', 'click', wrapper.boundWitness.from)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linkedAddress\n ? (\n <Link sx={{ cursor: 'pointer' }}>{wrapper?.boundWitness.from}</Link>\n )\n : wrapper?.boundWitness.from}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`From Address - ${wrapper?.boundWitness.from}`}>\n <BlockiesAvatarAddress\n address={wrapper?.boundWitness.from}\n onClick={() => dispatch('address', 'click', wrapper.boundWitness.from)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiReceiveMoney} heading=\"Fees\" tooltipTitle=\"Fees offered to the producer\">\n <LabelValueStack labels={fees.labels} values={fees.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiSandsOfTime} heading=\"Block Duration\" tooltipTitle=\"Block window for the transaction to be valid\">\n <LabelValueStack labels={blockDuration.labels} values={blockDuration.values} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport {\n formatFee, formatNumber, formatResults,\n} from '../../../../lib/index.ts'\n\nexport const useTransactionDetails = (wrapper: SignedHydratedTransactionInstance) => {\n const stats = useMemo(() => {\n const stats = {\n 'Reward': formatNumber(wrapper.reward()),\n 'Elevated Payloads': formatNumber(wrapper.elevatedPayloadCount),\n 'Total Payloads': formatNumber(wrapper.payloadCount),\n 'Signatures': formatNumber(wrapper.signatureCount),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const fees = useMemo(() => {\n const fees = {\n 'Base': formatFee(wrapper.fees.base),\n 'Gas': formatFee(wrapper.fees.gasPrice),\n 'Priority': formatFee(wrapper.fees.priority),\n 'Gas Limit': formatFee(wrapper.fees.gasLimit),\n }\n\n return formatResults(fees)\n }, [wrapper])\n\n const blockDuration = useMemo(() => {\n const blockDuration = {\n 'Expiration': wrapper.boundWitness.exp.toLocaleString(navigator.language ?? 'en-US'),\n 'Not Before': wrapper.boundWitness.nbf.toLocaleString(navigator.language ?? 'en-US'),\n }\n\n return formatResults(blockDuration)\n }, [wrapper])\n\n return {\n stats, fees, blockDuration,\n }\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { type FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport React from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { formatPayloadsForTable } from '../../lib/index.ts'\nimport type { ClickableFields } from '../BwPayloadTable.tsx'\nimport { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'\nimport { TransactionBoundWitnessCard } from './card/index.ts'\n\nconst nonClickableFields: ClickableFields[] = []\n\nexport interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {\n transaction?: SignedHydratedTransaction | null\n}\n\nexport const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps> = ({ transaction, ...props }) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (transaction) {\n return await SignedHydratedTransactionWrapper.parse(transaction)\n }\n }, [transaction])\n\n const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n // TODO - use forthcoming wrapper method since hydrated transactions don't include non-elevated payloads\n const [nonElevatedPayloadSets, nonElevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const payloads = wrapper.payloads\n const nonElevatedPayloads = payloads.filter((payload) => {\n return elevatedPayloads.every(elevated => elevated._hash !== payload._hash)\n })\n const pairs = await PayloadBuilder.hashPairs(nonElevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}\n const { hashes: nonElevatedPayloadHashes, schemas: nonElevatedPayloadSchemas } = nonElevatedPayloadSets ?? {}\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={2} {...props}>\n <HashHeadingPaper\n hash={wrapper?.boundWitness?._hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={wrapper?.boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <ErrorRender error={wrapperError} scope=\"wrapperError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={elevatedPayloadSetsError} scope=\"elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={nonElevatedPayloadSetsError} scope=\"nonElevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />\n <BWPayloadTableFlexbox\n IconComponent={<VscSymbolNamespace />}\n hashes={elevatedPayloadHashes}\n headingTitle=\"Elevated Payloads\"\n schemas={elevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n {(nonElevatedPayloadHashes?.length ?? 0) > 0 && (\n <BWPayloadTableFlexbox\n IconComponent={<VscSymbolMethod />}\n clickableFields={nonClickableFields}\n hashes={nonElevatedPayloadHashes}\n headingTitle=\"Non-Elevated Payloads\"\n schemas={nonElevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={wrapper?.boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["filterAs","ErrorRender","FlexCol","usePromise","isBoundWitness","SignedHydratedBlockWrapper","PayloadBuilder","BoundWitnessPayloadsTable","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","useTxsFromBlock","usePayloadHash","isTransactionBoundWitness","React","useMemo","FaSignature","GrTransaction","VscSymbolMethod","VscSymbolNamespace","isUndefined","bigIntToFixedPointString","formatFee","fee","isUndefined","stringValue","bigIntToFixedPointString","formatNumber","num","toLocaleString","navigator","language","formatPayloadsForTable","pairs","hashes","schemas","bw","hash","push","schema","formatResults","results","result","labels","values","label","value","Object","entries","push","FlexCol","BoundWitnessPayloadTableBody","BoundWitnessPayloadTableHead","HeadingPaper","TableEx","React","VscSymbolMethod","defaultClickableFields","BWPayloadTableFlexbox","IconComponent","eventNoun","hashes","schemas","headingTitle","clickableFields","props","resolvedIconComponent","VscSymbolMethod","FlexCol","alignItems","rowGap","HeadingPaper","heading","TableEx","BoundWitnessPayloadTableHead","BoundWitnessPayloadTableBody","payloadHashes","payloadSchemas","Card","CardContent","Grid","Skeleton","Stack","ErrorRender","DetailsStack","LabelValueStack","React","GrSteps","IoStatsChartOutline","VscSymbolNamespace","CardHeader","Link","Tooltip","Typography","BlockiesAvatarAddress","useEvent","React","BlockBoundWitnessCardHeader","linked","address","ref","dispatch","useEvent","React","CardHeader","title","Typography","onClick","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","size","usePromise","StepSizes","useMemo","generateStepHashText","blockNumber","stepHashIndex","stepSize","StepSizes","stepStart","stepStop","formatNumber","useBlockDetails","wrapper","viewer","stats","useMemo","Height","boundWitness","block","Protocol","protocol","toString","Signatures","signatureCount","$epoch","formatResults","payloads","transactionCount","publicPayloadCount","privatePayloadCount","payloadCount","stepHashes","stepHashesError","stepHashesLoading","usePromise","index","hash","step_hashes","entries","blockByHash","console","warn","label","value","e","error","defaultValue","labels","values","BlockBoundWitnessCard","linkedAddress","viewer","wrapper","props","stats","payloads","stepHashes","stepHashesError","stepHashesLoading","useBlockDetails","React","Card","boundWitness","addresses","map","address","BlockBoundWitnessCardHeader","key","linked","ErrorRender","error","scope","CardContent","Grid","container","spacing","sx","width","size","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","VscSymbolNamespace","GrSteps","Stack","gap","Skeleton","variant","height","BlockBoundWitnessDetails","block","paper","viewer","children","props","wrapper","wrapperError","usePromise","SignedHydratedBlockWrapper","parse","boundWitness","payloads","hash","usePayloadHash","transactions","txFromBlockError","useTxsFromBlock","hashes","txHashes","schemas","txSchemas","useMemo","formatPayloadsForTable","nonTxBoundWitnesses","bwsFromBlockError","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","BlockBoundWitnessCard","elevation","BWPayloadTableFlexbox","IconComponent","GrTransaction","eventNoun","headingTitle","mb","HeadingPaper","VscSymbolNamespace","heading","BoundWitnessPayloadsTable","VscSymbolMethod","FaSignature","BoundWitnessSignatureTable","Card","CardContent","CardHeader","Grid","Link","Tooltip","Typography","BlockiesAvatarAddress","DetailsStack","LabelValueStack","useEvent","React","GiReceiveMoney","GiSandsOfTime","IoStatsChartOutline","useMemo","useTransactionDetails","wrapper","stats","useMemo","formatNumber","reward","elevatedPayloadCount","payloadCount","signatureCount","formatResults","fees","formatFee","base","gasPrice","priority","gasLimit","blockDuration","boundWitness","exp","toLocaleString","navigator","language","nbf","TransactionBoundWitnessCard","linkedAddress","wrapper","props","stats","fees","blockDuration","useTransactionDetails","ref","dispatch","useEvent","React","Card","CardHeader","title","Typography","onClick","boundWitness","from","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","address","size","CardContent","Grid","container","spacing","width","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","GiReceiveMoney","GiSandsOfTime","ErrorRender","FlexCol","usePromise","isDefined","SignedHydratedTransactionWrapper","PayloadBuilder","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","React","FaSignature","VscSymbolMethod","VscSymbolNamespace","nonClickableFields","TransactionBoundWitnessDetails","transaction","props","wrapper","wrapperError","usePromise","SignedHydratedTransactionWrapper","parse","elevatedPayloadSets","elevatedPayloadSetsError","isDefined","elevatedPayloads","pairs","PayloadBuilder","hashPairs","formatPayloadsForTable","hashes","schemas","nonElevatedPayloadSets","nonElevatedPayloadSetsError","payloads","nonElevatedPayloads","filter","payload","every","elevated","_hash","elevatedPayloadHashes","elevatedPayloadSchemas","nonElevatedPayloadHashes","nonElevatedPayloadSchemas","React","FlexCol","alignItems","rowGap","HashHeadingPaper","hash","boundWitness","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","ErrorRender","error","scope","TransactionBoundWitnessCard","elevation","BWPayloadTableFlexbox","IconComponent","VscSymbolNamespace","headingTitle","mb","length","VscSymbolMethod","clickableFields","HeadingPaper","FaSignature","heading","BoundWitnessSignatureTable","block"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAS9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,MAAM,WAAW,0BAA2B,SAAQ,SAAS;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,OAAO,CAAC,EAAE,2BAA2B,CAAA;CACtC;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAqDtE,CAAA"}
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAQ9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,MAAM,WAAW,0BAA2B,SAAQ,SAAS;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,OAAO,CAAC,EAAE,2BAA2B,CAAA;CACtC;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAqDtE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/card/hooks/useDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAiBhF,eAAO,MAAM,eAAe,GAAI,SAAS,2BAA2B,EAAE,SAAS,SAAS;;;;;;;;;;;;;;;CAkDvF,CAAA"}
1
+ {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/card/hooks/useDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAahF,eAAO,MAAM,eAAe,GAAI,SAAS,2BAA2B,EAAE,SAAS,SAAS;;;;;;;;;;;;;;;CAmDvF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/TransactionDetails.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,uBAAuB,CAAA;AASlE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,MAAM,WAAW,mCAAoC,SAAQ,YAAY;IACvE,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC/C;AAED,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC,mCAAmC,CAqExF,CAAA"}
1
+ {"version":3,"file":"TransactionDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/TransactionDetails.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAQlE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,MAAM,WAAW,mCAAoC,SAAQ,YAAY;IACvE,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC/C;AAED,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC,mCAAmC,CAsExF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/transactions/card/hooks/useDetails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAKtF,eAAO,MAAM,qBAAqB,GAAI,SAAS,iCAAiC;;;;;;;;;;;;;CAmC/E,CAAA"}
1
+ {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/transactions/card/hooks/useDetails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAOtF,eAAO,MAAM,qBAAqB,GAAI,SAAS,iCAAiC;;;;;;;;;;;;;CAmC/E,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const formatNumber: (num: number | bigint) => string;
2
+ //# sourceMappingURL=formatNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatNumber.d.ts","sourceRoot":"","sources":["../../../src/lib/formatNumber.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,GAAG,MAAM,KAAG,MAEnD,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export * from './formatFees.ts';
2
+ export * from './formatNumber.ts';
2
3
  export * from './formatPayloadsForTable.ts';
3
4
  export * from './formatResults.ts';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oBAAoB,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.5.27",
4
+ "version": "1.5.29",
5
5
  "description": "XYO Layer One React SDK BoundWitness",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -34,28 +34,28 @@
34
34
  "module": "dist/browser/index.mjs",
35
35
  "types": "dist/types/index.d.ts",
36
36
  "dependencies": {
37
- "@xylabs/array": "^4.11.14",
38
- "@xylabs/eth-address": "^4.11.14",
39
- "@xylabs/hex": "^4.11.14",
37
+ "@xylabs/array": "^4.11.16",
38
+ "@xylabs/eth-address": "^4.11.16",
39
+ "@xylabs/hex": "^4.11.16",
40
40
  "@xylabs/react-error": "^6.3.4",
41
41
  "@xylabs/react-flexbox": "^6.3.4",
42
42
  "@xylabs/react-promise": "^6.3.4",
43
- "@xylabs/typeof": "^4.11.14",
44
- "@xyo-network/boundwitness-model": "^3.18.4",
45
- "@xyo-network/chain-utils": "^1.5.27",
46
- "@xyo-network/chain-wrappers": "^1.5.27",
47
- "@xyo-network/payload-builder": "^3.18.4",
48
- "@xyo-network/payload-model": "^3.18.4",
43
+ "@xylabs/typeof": "^4.11.16",
44
+ "@xyo-network/boundwitness-model": "^3.18.5",
45
+ "@xyo-network/chain-utils": "^1.5.29",
46
+ "@xyo-network/chain-wrappers": "^1.5.29",
47
+ "@xyo-network/payload-builder": "^3.18.5",
48
+ "@xyo-network/payload-model": "^3.18.5",
49
49
  "@xyo-network/react-boundwitness-plugin": "^5.3.7",
50
- "@xyo-network/react-chain-blockchain": "^1.5.27",
51
- "@xyo-network/react-chain-blockies": "^1.5.27",
52
- "@xyo-network/react-chain-provider": "^1.5.27",
53
- "@xyo-network/react-chain-shared": "^1.5.27",
50
+ "@xyo-network/react-chain-blockchain": "^1.5.29",
51
+ "@xyo-network/react-chain-blockies": "^1.5.29",
52
+ "@xyo-network/react-chain-provider": "^1.5.29",
53
+ "@xyo-network/react-chain-shared": "^1.5.29",
54
54
  "@xyo-network/react-event": "^5.3.7",
55
55
  "@xyo-network/react-shared": "^5.3.7",
56
56
  "@xyo-network/react-table": "^5.3.7",
57
57
  "@xyo-network/xl1-protocol": "^1.4.19",
58
- "@xyo-network/xl1-protocol-sdk": "^1.5.27",
58
+ "@xyo-network/xl1-protocol-sdk": "^1.5.29",
59
59
  "react-icons": "^5.5.0"
60
60
  },
61
61
  "devDependencies": {
@@ -63,12 +63,12 @@
63
63
  "@emotion/styled": "^11.14.0",
64
64
  "@mui/icons-material": "^7.1.1",
65
65
  "@mui/material": "^7.1.1",
66
- "@storybook/react-vite": "^9.0.5",
66
+ "@storybook/react-vite": "^9.0.6",
67
67
  "@xylabs/ts-scripts-yarn3": "^6.5.8",
68
68
  "@xylabs/tsconfig-react": "^6.5.8",
69
- "@xyo-network/chain-protocol": "^1.5.27",
70
- "@xyo-network/react-chain-network": "^1.5.27",
71
- "@xyo-network/react-chain-shared": "^1.5.27",
69
+ "@xyo-network/chain-protocol": "^1.5.29",
70
+ "@xyo-network/react-chain-network": "^1.5.29",
71
+ "@xyo-network/react-chain-shared": "^1.5.29",
72
72
  "knip": "^5.60.2",
73
73
  "react": "^19.1.0",
74
74
  "react-dom": "^19.1.0",
@@ -10,6 +10,7 @@ import { ChainNetworkProvider, SequenceNetwork } from '@xyo-network/react-chain-
10
10
  import { useViewer } from '@xyo-network/react-chain-provider'
11
11
  import { buildRandomBlockChain } from '@xyo-network/react-chain-shared'
12
12
  import type { Event } from '@xyo-network/react-event'
13
+ import type { XyoViewer } from '@xyo-network/xl1-protocol'
13
14
  import React, { useState } from 'react'
14
15
 
15
16
  import { BlockBoundWitnessDetails } from './BlockBoundWitnessDetails.tsx'
@@ -26,10 +27,19 @@ export default {
26
27
  decorators: [NetworkDecorator],
27
28
  } as Meta
28
29
 
29
- const blocks = await buildRandomBlockChain()
30
+ const blocks = await buildRandomBlockChain(300)
31
+ const viewer: XyoViewer = {
32
+ blockByHash: (hash) => {
33
+ const block = blocks.find(b => b[0]._hash === hash) ?? null
34
+ return block
35
+ },
36
+ blockByNumber: (number) => {
37
+ const block = blocks.find(b => b[0].block === number) ?? null
38
+ return block
39
+ },
40
+ } as XyoViewer
30
41
 
31
42
  const Template: StoryFn<typeof BlockBoundWitnessDetails> = (args) => {
32
- const viewer = useViewer()
33
43
  return <BlockBoundWitnessDetails viewer={viewer} {...args} />
34
44
  }
35
45
 
@@ -61,10 +71,10 @@ const Default = Template.bind({})
61
71
  Default.args = {}
62
72
 
63
73
  const WithData = Template.bind({})
64
- WithData.args = { block: blocks[3] }
74
+ WithData.args = { block: blocks[199] }
65
75
 
66
76
  const WithDataEvents = TemplateWithEvents.bind({})
67
- WithDataEvents.args = { block: blocks[3] }
77
+ WithDataEvents.args = { block: blocks[199] }
68
78
 
69
79
  export {
70
80
  Default, WithData, WithDataEvents,
@@ -5,7 +5,6 @@ import {
5
5
  Stack,
6
6
  } from '@mui/material'
7
7
  import { ErrorRender } from '@xylabs/react-error'
8
- import { isDefined } from '@xylabs/typeof'
9
8
  import { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'
10
9
  import type { XyoViewer } from '@xyo-network/xl1-protocol'
11
10
  import type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'
@@ -3,26 +3,22 @@ import { StepSizes, type XyoViewer } from '@xyo-network/xl1-protocol'
3
3
  import type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'
4
4
  import { useMemo } from 'react'
5
5
 
6
- import { formatResults } from '../../../../lib/index.ts'
6
+ import { formatNumber, formatResults } from '../../../../lib/index.ts'
7
7
 
8
- const updateStepHashWindow = (blockNumber: number, stepHashIndex: number, stepHashes: Record<string, string>): Record<string, string> => {
9
- for (const [index, step] of StepSizes.entries()) {
10
- const nextStep = StepSizes[index + 1]
11
- if (blockNumber >= step && blockNumber < nextStep) {
12
- // Result Format - [block number - step size + 1, block number]
13
- stepHashes[`Step ${stepHashIndex} - ${blockNumber}`] = `${blockNumber - step + 1} - ${blockNumber}`
14
- }
15
- // TODO - handle case where block number is beyond all steps
16
- }
17
- return stepHashes
8
+ const generateStepHashText = (blockNumber: number, stepHashIndex: number): [string, string] => {
9
+ const stepSize = StepSizes[stepHashIndex]
10
+ const stepStart = blockNumber - stepSize + 1
11
+ const stepStop = blockNumber
12
+
13
+ return [`Step ${stepHashIndex} (${stepSize})`, `${formatNumber(stepStart)} - ${formatNumber(stepStop)}`]
18
14
  }
19
15
 
20
16
  export const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: XyoViewer) => {
21
17
  const stats = useMemo(() => {
22
18
  const stats = {
23
- Height: wrapper.boundWitness.block.toLocaleString(navigator.language ?? 'en-US'),
19
+ Height: formatNumber(wrapper.boundWitness.block),
24
20
  Protocol: wrapper.boundWitness.protocol.toString(),
25
- Signatures: wrapper.signatureCount.toLocaleString(navigator.language ?? 'en-US'),
21
+ Signatures: formatNumber(wrapper.signatureCount),
26
22
  $epoch: wrapper.boundWitness.$epoch.toString(),
27
23
  }
28
24
 
@@ -31,10 +27,10 @@ export const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: X
31
27
 
32
28
  const payloads = useMemo(() => {
33
29
  const payloads = {
34
- 'Transactions': wrapper.transactionCount.toLocaleString(navigator.language ?? 'en-US'),
35
- 'Public Payloads': wrapper.publicPayloadCount.toLocaleString(navigator.language ?? 'en-US'),
36
- 'Private Payloads': wrapper.privatePayloadCount.toLocaleString(navigator.language ?? 'en-US'),
37
- 'Total Payloads': wrapper.payloadCount.toLocaleString(navigator.language ?? 'en-US'),
30
+ 'Transactions': formatNumber(wrapper.transactionCount),
31
+ 'Public Payloads': formatNumber(wrapper.publicPayloadCount),
32
+ 'Private Payloads': formatNumber(wrapper.privatePayloadCount),
33
+ 'Total Payloads': formatNumber(wrapper.payloadCount),
38
34
  }
39
35
 
40
36
  return formatResults(payloads)
@@ -42,7 +38,7 @@ export const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: X
42
38
 
43
39
  const [stepHashes, stepHashesError, stepHashesLoading] = usePromise(async () => {
44
40
  if (viewer) {
45
- const stepHashes = {} as Record<string, string>
41
+ const stepHashes: Record<string, string> = {}
46
42
  for (const [index, hash] of wrapper.boundWitness.step_hashes.entries()) {
47
43
  try {
48
44
  const block = await viewer.blockByHash(hash)
@@ -53,7 +49,8 @@ export const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: X
53
49
  }
54
50
 
55
51
  const blockNumber = block[0].block
56
- updateStepHashWindow(blockNumber, index, stepHashes)
52
+ const [label, value] = generateStepHashText(blockNumber, index)
53
+ stepHashes[label] = value
57
54
  } catch (e) {
58
55
  console.error(`Error fetching block for step hash ${hash}:`, e)
59
56
  stepHashes[`Step ${index}`] = 'N/A'
@@ -4,14 +4,13 @@ import { usePromise } from '@xylabs/react-promise'
4
4
  import { isDefined } from '@xylabs/typeof'
5
5
  import { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'
6
6
  import { PayloadBuilder } from '@xyo-network/payload-builder'
7
- import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
8
7
  import {
9
8
  BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,
10
9
  } from '@xyo-network/react-boundwitness-plugin'
11
10
  import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
12
11
  import React from 'react'
13
12
  import { FaSignature } from 'react-icons/fa'
14
- import { VscSymbolMethod } from 'react-icons/vsc'
13
+ import { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'
15
14
 
16
15
  import { formatPayloadsForTable } from '../../lib/index.ts'
17
16
  import type { ClickableFields } from '../BwPayloadTable.tsx'
@@ -41,6 +40,7 @@ export const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDet
41
40
  }
42
41
  }, [wrapper])
43
42
 
43
+ // TODO - use forthcoming wrapper method since hydrated transactions don't include non-elevated payloads
44
44
  const [nonElevatedPayloadSets, nonElevatedPayloadSetsError] = usePromise(async () => {
45
45
  if (isDefined(wrapper)) {
46
46
  const elevatedPayloads = wrapper.elevatedPayloads
@@ -71,7 +71,7 @@ export const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDet
71
71
  <ErrorRender error={nonElevatedPayloadSetsError} scope="nonElevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx" />
72
72
  <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />
73
73
  <BWPayloadTableFlexbox
74
- IconComponent={<VscSymbolMethod />}
74
+ IconComponent={<VscSymbolNamespace />}
75
75
  hashes={elevatedPayloadHashes}
76
76
  headingTitle="Elevated Payloads"
77
77
  schemas={elevatedPayloadSchemas}
@@ -1,15 +1,17 @@
1
1
  import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'
2
2
  import { useMemo } from 'react'
3
3
 
4
- import { formatFee, formatResults } from '../../../../lib/index.ts'
4
+ import {
5
+ formatFee, formatNumber, formatResults,
6
+ } from '../../../../lib/index.ts'
5
7
 
6
8
  export const useTransactionDetails = (wrapper: SignedHydratedTransactionInstance) => {
7
9
  const stats = useMemo(() => {
8
10
  const stats = {
9
- 'Reward': wrapper.reward().toLocaleString(navigator.language ?? 'en-US'),
10
- 'Elevated Payloads': wrapper.elevatedPayloadCount.toLocaleString(navigator.language ?? 'en-US'),
11
- 'Total Payloads': wrapper.payloadCount.toLocaleString(navigator.language ?? 'en-US'),
12
- 'Signatures': wrapper.signatureCount.toLocaleString(navigator.language ?? 'en-US'),
11
+ 'Reward': formatNumber(wrapper.reward()),
12
+ 'Elevated Payloads': formatNumber(wrapper.elevatedPayloadCount),
13
+ 'Total Payloads': formatNumber(wrapper.payloadCount),
14
+ 'Signatures': formatNumber(wrapper.signatureCount),
13
15
  }
14
16
 
15
17
  return formatResults(stats)
@@ -0,0 +1,3 @@
1
+ export const formatNumber = (num: number | bigint): string => {
2
+ return num.toLocaleString(navigator.language ?? 'en-US')
3
+ }
package/src/lib/index.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './formatFees.ts'
2
+ export * from './formatNumber.ts'
2
3
  export * from './formatPayloadsForTable.ts'
3
4
  export * from './formatResults.ts'