@xyo-network/react-chain-blockchain 1.2.3 → 1.2.4

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 (35) hide show
  1. package/dist/browser/index.mjs +270 -171
  2. package/dist/browser/index.mjs.map +1 -1
  3. package/dist/types/components/block/helpers/index.d.ts +1 -0
  4. package/dist/types/components/block/helpers/index.d.ts.map +1 -1
  5. package/dist/types/components/block/helpers/payloadCountsFromBlock.d.ts +3 -0
  6. package/dist/types/components/block/helpers/payloadCountsFromBlock.d.ts.map +1 -0
  7. package/dist/types/components/block/helpers/tsxFromBlock.d.ts +2 -2
  8. package/dist/types/components/block/helpers/tsxFromBlock.d.ts.map +1 -1
  9. package/dist/types/components/block/hooks/index.d.ts +1 -0
  10. package/dist/types/components/block/hooks/index.d.ts.map +1 -1
  11. package/dist/types/components/block/hooks/useBlockHeadingEvents.d.ts +1 -1
  12. package/dist/types/components/block/hooks/useBlockHeadingEvents.d.ts.map +1 -1
  13. package/dist/types/components/block/hooks/usePayloadCountsFromBlock.d.ts +3 -0
  14. package/dist/types/components/block/hooks/usePayloadCountsFromBlock.d.ts.map +1 -0
  15. package/dist/types/components/block/hooks/useTxsFromBlock.d.ts +1 -1
  16. package/dist/types/components/block/table/cell/JsonView.d.ts.map +1 -1
  17. package/dist/types/components/block/table/cell/PayloadCounts.d.ts +6 -0
  18. package/dist/types/components/block/table/cell/PayloadCounts.d.ts.map +1 -0
  19. package/dist/types/components/block/table/cell/index.d.ts +1 -0
  20. package/dist/types/components/block/table/cell/index.d.ts.map +1 -1
  21. package/dist/types/components/block/table/head/TableHead.d.ts.map +1 -1
  22. package/dist/types/components/block/table/row/TableRow.d.ts.map +1 -1
  23. package/package.json +24 -24
  24. package/src/components/block/helpers/index.ts +1 -0
  25. package/src/components/block/helpers/payloadCountsFromBlock.ts +12 -0
  26. package/src/components/block/helpers/tsxFromBlock.ts +2 -3
  27. package/src/components/block/hooks/index.ts +1 -0
  28. package/src/components/block/hooks/useBlockHeadingEvents.ts +1 -1
  29. package/src/components/block/hooks/usePayloadCountsFromBlock.ts +13 -0
  30. package/src/components/block/table/cell/Hash.tsx +2 -2
  31. package/src/components/block/table/cell/JsonView.tsx +4 -6
  32. package/src/components/block/table/cell/PayloadCounts.tsx +34 -0
  33. package/src/components/block/table/cell/index.ts +1 -0
  34. package/src/components/block/table/head/TableHead.tsx +28 -6
  35. package/src/components/block/table/row/TableRow.tsx +4 -3
@@ -1,4 +1,5 @@
1
1
  export * from './blockProducer.ts';
2
2
  export * from './buildBlockChainRenderComponent.tsx';
3
+ export * from './payloadCountsFromBlock.ts';
3
4
  export * from './tsxFromBlock.ts';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sCAAsC,CAAA;AACpD,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sCAAsC,CAAA;AACpD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type HydratedBlock } from '@xyo-network/xl1-model';
2
+ export declare const payloadCountsFromBlock: ([block, payloads]: HydratedBlock) => [number, number];
3
+ //# sourceMappingURL=payloadCountsFromBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadCountsFromBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/helpers/payloadCountsFromBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAA6B,MAAM,wBAAwB,CAAA;AAEtF,eAAO,MAAM,sBAAsB,GAAI,mBAAmB,aAAa,KAAG,CAAC,MAAM,EAAE,MAAM,CAQxF,CAAA"}
@@ -1,7 +1,7 @@
1
- import type { HydratedBlock } from '@xyo-network/xl1-model';
1
+ import { type HydratedBlock } from '@xyo-network/xl1-model';
2
2
  export declare const txsFromBlock: (block: HydratedBlock) => Promise<[import("@xylabs/object").DeepRestrictToStringKeys<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
3
3
  schema: string;
4
- }> & Partial<import("@xyo-network/payload-model").PayloadMetaFields> & import("@xyo-network/payload-model").StorageMeta & import("@xylabs/object").DeepRestrictToStringKeys<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").BoundWitnessFields & {
4
+ }> & Partial<import("@xyo-network/payload-model").PayloadMetaFields> & import("@xyo-network/payload-model").StorageMeta & import("@xylabs/object").DeepRestrictToStringKeys<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").BoundWitnessFields & import("@xyo-network/xl1-model").TransactionBoundWitnessFields & import("@xyo-network/xl1-model").ExecutableFields & import("@xyo-network/xl1-model").FromFields & {
5
5
  schema: "network.xyo.boundwitness";
6
6
  }> & import("@xyo-network/boundwitness-model").BoundWitnessMeta & {
7
7
  $signatures: import("@xylabs/hex").Hex[];
@@ -1 +1 @@
1
- {"version":3,"file":"tsxFromBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/helpers/tsxFromBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,eAAO,MAAM,YAAY,GAAU,OAAO,aAAa;;;;;;wBAGtD,CAAA"}
1
+ {"version":3,"file":"tsxFromBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/helpers/tsxFromBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAA6B,MAAM,wBAAwB,CAAA;AAEtF,eAAO,MAAM,YAAY,GAAU,OAAO,aAAa;;;;;;wBAGtD,CAAA"}
@@ -2,6 +2,7 @@ export * from './useAnchorElement.ts';
2
2
  export * from './useBlockHeadingEvents.ts';
3
3
  export * from './useBlockProducer.ts';
4
4
  export * from './useDynamicBlockComponents.ts';
5
+ export * from './usePayloadCountsFromBlock.ts';
5
6
  export * from './useStaticBlockComponents.ts';
6
7
  export * from './useTxsFromBlock.ts';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,sBAAsB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { useEvent } from '@xyo-network/react-event';
2
- export type BlockHeaderEventNouns = 'transaction-count' | 'block-hash' | 'block-number' | 'block-producer' | 'block-verification';
2
+ export type BlockHeaderEventNouns = 'transaction-count' | 'block-hash' | 'block-number' | 'block-producer' | 'block-verification' | 'payload-counts';
3
3
  type HookArgs<TElement extends HTMLElement> = Parameters<typeof useEvent<TElement, BlockHeaderEventNouns>>;
4
4
  export declare const useBlockHeadingEvents: <TElement extends HTMLElement>(...args: HookArgs<TElement>) => [import("react").RefObject<TElement | null>, import("@xyo-network/react-event").EventDispatch<BlockHeaderEventNouns, import("@xyo-network/react-event").EventVerb, string>];
5
5
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useBlockHeadingEvents.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/hooks/useBlockHeadingEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAIjI,KAAK,QAAQ,CAAC,QAAQ,SAAS,WAAW,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAA;AAE1G,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,gLAE9F,CAAA"}
1
+ {"version":3,"file":"useBlockHeadingEvents.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/hooks/useBlockHeadingEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;AAIpJ,KAAK,QAAQ,CAAC,QAAQ,SAAS,WAAW,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAA;AAE1G,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,gLAE9F,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { HydratedBlock } from '@xyo-network/xl1-model';
2
+ export declare const usePayloadCountsFromBlock: (block?: HydratedBlock) => [number | undefined, number | undefined, Error | undefined];
3
+ //# sourceMappingURL=usePayloadCountsFromBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePayloadCountsFromBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components/block/hooks/usePayloadCountsFromBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAK3D,eAAO,MAAM,yBAAyB,GAAI,QAAQ,aAAa,KAAG,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAO3H,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { HydratedBlock } from '@xyo-network/xl1-model';
2
2
  export declare const useTxsFromBlock: (block?: HydratedBlock) => [[import("@xylabs/object").DeepRestrictToStringKeys<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
3
3
  schema: string;
4
- }> & Partial<import("@xyo-network/payload-model").PayloadMetaFields> & import("@xyo-network/payload-model").StorageMeta & import("@xylabs/object").DeepRestrictToStringKeys<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").BoundWitnessFields & {
4
+ }> & Partial<import("@xyo-network/payload-model").PayloadMetaFields> & import("@xyo-network/payload-model").StorageMeta & import("@xylabs/object").DeepRestrictToStringKeys<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").BoundWitnessFields & import("@xyo-network/xl1-model").TransactionBoundWitnessFields & import("@xyo-network/xl1-model").ExecutableFields & import("@xyo-network/xl1-model").FromFields & {
5
5
  schema: "network.xyo.boundwitness";
6
6
  }> & import("@xyo-network/boundwitness-model").BoundWitnessMeta & {
7
7
  $signatures: import("@xylabs/hex").Hex[];
@@ -1 +1 @@
1
- {"version":3,"file":"JsonView.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/cell/JsonView.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;CAAG;AAE3E,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA6BxE,CAAA"}
1
+ {"version":3,"file":"JsonView.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/cell/JsonView.tsx"],"names":[],"mappings":"AASA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;CAAG;AAE3E,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA4BxE,CAAA"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { BlockTableCellProps } from './lib/index.ts';
3
+ export interface BlockPayloadCountsTableCellProps extends BlockTableCellProps {
4
+ }
5
+ export declare const BlockPayloadCountsTableCell: React.FC<BlockPayloadCountsTableCellProps>;
6
+ //# sourceMappingURL=PayloadCounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayloadCounts.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/cell/PayloadCounts.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,MAAM,WAAW,gCAAiC,SAAQ,mBAAmB;CAAG;AAEhF,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAqBlF,CAAA"}
@@ -1,6 +1,7 @@
1
1
  export * from './BlockNumber.tsx';
2
2
  export * from './Hash.tsx';
3
3
  export * from './JsonView.tsx';
4
+ export * from './PayloadCounts.tsx';
4
5
  export * from './Producer.tsx';
5
6
  export * from './TransactionCount.tsx';
6
7
  export * from './Verification.tsx';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/cell/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/cell/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/head/TableHead.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAavC,CAAA"}
1
+ {"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/head/TableHead.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAA;AAkBzB,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAcvC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/row/TableRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAOrE,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB,EAAE,aAAa;IACjF,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAehE,CAAA"}
1
+ {"version":3,"file":"TableRow.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/table/row/TableRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAOrE,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB,EAAE,aAAa;IACjF,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAgBhE,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-blockchain",
4
- "version": "1.2.3",
4
+ "version": "1.2.4",
5
5
  "description": "XYO Layer One React SDK Blockchain",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -46,26 +46,26 @@
46
46
  "@xylabs/react-identicon": "^6.1.15",
47
47
  "@xylabs/react-promise": "^6.1.15",
48
48
  "@xylabs/react-quick-tip-button": "^6.1.15",
49
- "@xyo-network/account": "^3.12.3",
50
- "@xyo-network/api-models": "^3.12.3",
51
- "@xyo-network/archivist-model": "^3.12.3",
52
- "@xyo-network/boundwitness-builder": "^3.12.3",
53
- "@xyo-network/boundwitness-model": "^3.12.3",
54
- "@xyo-network/bridge-http": "^3.12.3",
55
- "@xyo-network/chain-ethereum": "^1.2.3",
56
- "@xyo-network/chain-protocol": "^1.2.3",
57
- "@xyo-network/chain-services": "^1.2.3",
58
- "@xyo-network/module-model": "^3.12.3",
59
- "@xyo-network/payload-builder": "^3.12.3",
60
- "@xyo-network/payload-model": "^3.12.3",
61
- "@xyo-network/react-chain-blockies": "^1.2.3",
62
- "@xyo-network/react-chain-boundwitness": "^1.2.3",
63
- "@xyo-network/react-event": "^5.1.4",
64
- "@xyo-network/react-payload-raw-info": "^5.1.4",
65
- "@xyo-network/react-payload-table": "^5.1.4",
66
- "@xyo-network/react-shared": "^5.1.4",
67
- "@xyo-network/react-table": "^5.1.4",
68
- "@xyo-network/xl1-model": "^1.2.3"
49
+ "@xyo-network/account": "^3.12.4",
50
+ "@xyo-network/api-models": "^3.12.4",
51
+ "@xyo-network/archivist-model": "^3.12.4",
52
+ "@xyo-network/boundwitness-builder": "^3.12.4",
53
+ "@xyo-network/boundwitness-model": "^3.12.4",
54
+ "@xyo-network/bridge-http": "^3.12.4",
55
+ "@xyo-network/chain-ethereum": "^1.2.4",
56
+ "@xyo-network/chain-protocol": "^1.2.4",
57
+ "@xyo-network/chain-services": "^1.2.4",
58
+ "@xyo-network/module-model": "^3.12.4",
59
+ "@xyo-network/payload-builder": "^3.12.4",
60
+ "@xyo-network/payload-model": "^3.12.4",
61
+ "@xyo-network/react-chain-blockies": "^1.2.4",
62
+ "@xyo-network/react-chain-boundwitness": "^1.2.4",
63
+ "@xyo-network/react-event": "^5.1.7",
64
+ "@xyo-network/react-payload-raw-info": "^5.1.7",
65
+ "@xyo-network/react-payload-table": "^5.1.7",
66
+ "@xyo-network/react-shared": "^5.1.7",
67
+ "@xyo-network/react-table": "^5.1.7",
68
+ "@xyo-network/xl1-model": "^1.2.4"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@emotion/react": "^11.14.0",
@@ -73,13 +73,13 @@
73
73
  "@mui/icons-material": "^7.0.2",
74
74
  "@mui/material": "^7.0.2",
75
75
  "@storybook/react": "^8.6.12",
76
- "@types/react": "^19.1.1",
76
+ "@types/react": "^19.1.2",
77
77
  "@xylabs/delay": "^4.8.5",
78
78
  "@xylabs/hex": "^4.8.5",
79
79
  "@xylabs/ts-scripts-yarn3": "^6.2.1",
80
80
  "@xylabs/tsconfig-react": "^6.2.1",
81
- "@xyo-network/archivist-memory": "^3.12.3",
82
- "@xyo-network/chain-utils": "^1.2.3",
81
+ "@xyo-network/archivist-memory": "^3.12.4",
82
+ "@xyo-network/chain-utils": "^1.2.4",
83
83
  "react": "^19.1.0",
84
84
  "react-dom": "^19.1.0",
85
85
  "react-router-dom": "^7.5.0",
@@ -1,3 +1,4 @@
1
1
  export * from './blockProducer.ts'
2
2
  export * from './buildBlockChainRenderComponent.tsx'
3
+ export * from './payloadCountsFromBlock.ts'
3
4
  export * from './tsxFromBlock.ts'
@@ -0,0 +1,12 @@
1
+ import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
2
+ import { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-model'
3
+
4
+ export const payloadCountsFromBlock = ([block, payloads]: HydratedBlock): [number, number] => {
5
+ const privPayloads = block.payload_schemas.filter(schema => schema !== BoundWitnessSchema)
6
+ const transactionPayloads = payloads.filter(payload => isTransactionBoundWitness(payload))
7
+ let privPayloadsCount = 0
8
+ for (let tx of transactionPayloads) {
9
+ privPayloadsCount += tx.payload_hashes.length - tx.$opCodes.filter(opCode => !opCode.startsWith('elevate|')).length
10
+ }
11
+ return [privPayloads.length, privPayloadsCount]
12
+ }
@@ -1,8 +1,7 @@
1
- import { isBoundWitness } from '@xyo-network/boundwitness-model'
2
1
  import { PayloadBuilder } from '@xyo-network/payload-builder'
3
- import type { HydratedBlock } from '@xyo-network/xl1-model'
2
+ import { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-model'
4
3
 
5
4
  export const txsFromBlock = async (block: HydratedBlock) => {
6
- const transactionPayloads = block[1].filter(payload => isBoundWitness(payload))
5
+ const transactionPayloads = block[1].filter(payload => isTransactionBoundWitness(payload))
7
6
  return await PayloadBuilder.hashPairs(transactionPayloads)
8
7
  }
@@ -2,5 +2,6 @@ export * from './useAnchorElement.ts'
2
2
  export * from './useBlockHeadingEvents.ts'
3
3
  export * from './useBlockProducer.ts'
4
4
  export * from './useDynamicBlockComponents.ts'
5
+ export * from './usePayloadCountsFromBlock.ts'
5
6
  export * from './useStaticBlockComponents.ts'
6
7
  export * from './useTxsFromBlock.ts'
@@ -1,6 +1,6 @@
1
1
  import { useEvent } from '@xyo-network/react-event'
2
2
 
3
- export type BlockHeaderEventNouns = 'transaction-count' | 'block-hash' | 'block-number' | 'block-producer' | 'block-verification'
3
+ export type BlockHeaderEventNouns = 'transaction-count' | 'block-hash' | 'block-number' | 'block-producer' | 'block-verification' | 'payload-counts'
4
4
 
5
5
  // NOTE: extracting the type so compilers can easily strip it off vs inlining it withing the hook
6
6
  // which causes compilation warnings.
@@ -0,0 +1,13 @@
1
+ import type { HydratedBlock } from '@xyo-network/xl1-model'
2
+ import { useMemo } from 'react'
3
+
4
+ import { payloadCountsFromBlock } from '../helpers/index.ts'
5
+
6
+ export const usePayloadCountsFromBlock = (block?: HydratedBlock): [number | undefined, number | undefined, Error | undefined] => {
7
+ return useMemo(() => {
8
+ if (block) {
9
+ return [...payloadCountsFromBlock(block), undefined]
10
+ }
11
+ return [undefined, undefined, undefined]
12
+ }, [block])
13
+ }
@@ -5,7 +5,7 @@ import {
5
5
  } from '@mui/material'
6
6
  import type { IdenticonProps } from '@xylabs/react-identicon'
7
7
  import { Identicon } from '@xylabs/react-identicon'
8
- import { usePayloadHash } from '@xyo-network/react-shared'
8
+ import { usePayloadRootHash } from '@xyo-network/react-shared'
9
9
  import React from 'react'
10
10
 
11
11
  import { FeatureNotAvailable } from '../../../FeatureNotAvailable.tsx'
@@ -20,7 +20,7 @@ export interface BlockHashTableCellProps extends BlockTableCellProps {
20
20
  export const BlockHashTableCell: React.FC<BlockHashTableCellProps> = ({
21
21
  block, identiconProps, notAvailableDialog, linked, ...props
22
22
  }) => {
23
- const hash = usePayloadHash(block?.[0])
23
+ const hash = usePayloadRootHash(block?.[0])
24
24
 
25
25
  const [ref, handleClick] = useLinkedBlockItem('block-hash', hash)
26
26
  const [notAvailable, setNotAvailable] = React.useState(false)
@@ -1,13 +1,12 @@
1
- import { Code } from '@mui/icons-material'
1
+ import { DataObject } from '@mui/icons-material'
2
2
  import {
3
3
  Button,
4
4
  Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TableCell,
5
5
  } from '@mui/material'
6
6
  import { ellipsize } from '@xylabs/eth-address'
7
7
  import { FlexRow } from '@xylabs/react-flexbox'
8
- import { useIsDark } from '@xylabs/react-theme'
9
8
  import { JsonViewerEx } from '@xyo-network/react-payload-raw-info'
10
- import { usePayloadHash } from '@xyo-network/react-shared'
9
+ import { usePayloadRootHash } from '@xyo-network/react-shared'
11
10
  import React, { useState } from 'react'
12
11
 
13
12
  import type { BlockTableCellProps } from './lib/index.ts'
@@ -17,16 +16,15 @@ export interface BlockJsonViewTableCellProps extends BlockTableCellProps {}
17
16
  export const BlockJsonViewTableCell: React.FC<BlockJsonViewTableCellProps> = ({ block, ...props }) => {
18
17
  const [open, setOpen] = useState(false)
19
18
  const onClose = () => setOpen(false)
20
- const isDark = useIsDark()
21
19
 
22
- const hash = usePayloadHash(block?.[0])
20
+ const hash = usePayloadRootHash(block?.[0])
23
21
  const title = hash ? `JSON for ${ellipsize(hash, 5)}` : 'JSON'
24
22
 
25
23
  return (
26
24
  <TableCell {...props}>
27
25
  <FlexRow sx={{ width: '100%' }}>
28
26
  <IconButton onClick={() => setOpen(true)}>
29
- <Code />
27
+ <DataObject />
30
28
  </IconButton>
31
29
  </FlexRow>
32
30
  <Dialog open={open} onClose={onClose}>
@@ -0,0 +1,34 @@
1
+ import { Error } from '@mui/icons-material'
2
+ import {
3
+ Link, TableCell, Tooltip,
4
+ } from '@mui/material'
5
+ import React from 'react'
6
+
7
+ import { usePayloadCountsFromBlock } from '../../hooks/index.ts'
8
+ import { useLinkedBlockItem } from './hooks/index.ts'
9
+ import type { BlockTableCellProps } from './lib/index.ts'
10
+
11
+ export interface BlockPayloadCountsTableCellProps extends BlockTableCellProps {}
12
+
13
+ export const BlockPayloadCountsTableCell: React.FC<BlockPayloadCountsTableCellProps> = ({
14
+ block, linked, ...props
15
+ }) => {
16
+ const [pubPayloads, privPayloads, error] = usePayloadCountsFromBlock(block)
17
+ const data = `${pubPayloads}/${privPayloads}`
18
+ const [ref, handleClick] = useLinkedBlockItem('payload-counts', data)
19
+
20
+ return (
21
+ <TableCell ref={ref} {...props}>
22
+ <span>
23
+ {error
24
+ ? (
25
+ <Tooltip title={error.message}>
26
+ <Error color="error" />
27
+ </Tooltip>
28
+ )
29
+ : null}
30
+ {linked ? <Link onClick={handleClick} sx={{ cursor: 'pointer' }}>{data ?? '--/--'}</Link> : data ?? '--/--'}
31
+ </span>
32
+ </TableCell>
33
+ )
34
+ }
@@ -1,6 +1,7 @@
1
1
  export * from './BlockNumber.tsx'
2
2
  export * from './Hash.tsx'
3
3
  export * from './JsonView.tsx'
4
+ export * from './PayloadCounts.tsx'
4
5
  export * from './Producer.tsx'
5
6
  export * from './TransactionCount.tsx'
6
7
  export * from './Verification.tsx'
@@ -1,18 +1,40 @@
1
+ import { InfoOutline } from '@mui/icons-material'
2
+ import type { TableCellProps } from '@mui/material'
1
3
  import {
2
4
  TableCell, TableHead, TableRow,
5
+ Tooltip,
6
+ Typography,
3
7
  } from '@mui/material'
8
+ import { FlexRow } from '@xylabs/react-flexbox'
4
9
  import React from 'react'
5
10
 
11
+ const ToolTipTableCell: React.FC<TableCellProps> = ({
12
+ children, align, title, ...props
13
+ }) => {
14
+ return (
15
+ <TableCell title={title} {...props}>
16
+ <Tooltip title={title}>
17
+ <FlexRow justifyContent={align}>
18
+ <Typography variant="body2">{children}</Typography>
19
+ &nbsp;
20
+ <InfoOutline fontSize="small" />
21
+ </FlexRow>
22
+ </Tooltip>
23
+ </TableCell>
24
+ )
25
+ }
26
+
6
27
  export const BlockchainTableHead: React.FC = () => {
7
28
  return (
8
29
  <TableHead>
9
30
  <TableRow>
10
- <TableCell>Block Hash</TableCell>
11
- <TableCell>Block Number</TableCell>
12
- <TableCell>Transaction Count</TableCell>
13
- <TableCell align="center">Block Producer</TableCell>
14
- <TableCell align="center">Valid</TableCell>
15
- <TableCell align="center">JSON</TableCell>
31
+ <ToolTipTableCell title="The hash of the block">Block Hash</ToolTipTableCell>
32
+ <ToolTipTableCell align="center" title="The block number that is included in the block">Block Number</ToolTipTableCell>
33
+ <ToolTipTableCell align="center" title="Count of transactions that are included in the block">Transactions</ToolTipTableCell>
34
+ <ToolTipTableCell align="center" title="Count of public and private payload counts for the block">Payloads</ToolTipTableCell>
35
+ <ToolTipTableCell align="center" title="The address of the block producer that produced the block">Block Producer</ToolTipTableCell>
36
+ <ToolTipTableCell align="center" title="The result of the local validation check for the block">Valid</ToolTipTableCell>
37
+ <ToolTipTableCell align="center" title="Link to display the raw JSON of the block">JSON</ToolTipTableCell>
16
38
  </TableRow>
17
39
  </TableHead>
18
40
  )
@@ -4,7 +4,7 @@ import React, { useMemo } from 'react'
4
4
 
5
5
  import type { BlockComponentProps } from '../../../../types/index.ts'
6
6
  import {
7
- BlockHashTableCell, BlockJsonViewTableCell, BlockNumberTableCell, BlockProducerTableCell,
7
+ BlockHashTableCell, BlockJsonViewTableCell, BlockNumberTableCell, BlockPayloadCountsTableCell, BlockProducerTableCell,
8
8
  BlockTransactionCountTableCell,
9
9
  BlockVerificationTableCell,
10
10
  } from '../cell/index.ts'
@@ -21,8 +21,9 @@ export const BlockChainTableRow: React.FC<BlockChainTableRowProps> = ({
21
21
  return (
22
22
  <TableRow sx={{ overflowY: 'scroll', ...sx }} {...props}>
23
23
  <BlockHashTableCell {...linkedTableCellProps} />
24
- <BlockNumberTableCell {...linkedTableCellProps} />
25
- <BlockTransactionCountTableCell {...linkedTableCellProps} />
24
+ <BlockNumberTableCell align="center" {...linkedTableCellProps} />
25
+ <BlockTransactionCountTableCell align="center" {...linkedTableCellProps} />
26
+ <BlockPayloadCountsTableCell align="center" {...linkedTableCellProps} />
26
27
  <BlockProducerTableCell {...linkedTableCellProps} />
27
28
  <BlockVerificationTableCell {...defaultTableCellProps} />
28
29
  <BlockJsonViewTableCell {...defaultTableCellProps} />