You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR introduces robust fallback handling and visual polish for transaction activity UI, fixes a Base Account vs Coinbase connector selection bug by prioritizing connectors, enables TON activity tracking, adjusts TON message typings/connector behavior, and performs a coordinated 1.8.14 version/dependency bump across packages while relaxing CI visual regression failures to be non-blocking.
Sequence diagram for prioritized connector selection (Base Account vs Coinbase)
sequenceDiagram
actor User
participant UI
participant ConnectorController
participant ConnectorUtil
participant Provider as WalletProvider
User->>UI: Select wallet (Base Account or Coinbase)
UI->>ConnectorController: getConnectorById(id)
ConnectorController->>ConnectorController: read allConnectors
ConnectorController->>ConnectorUtil: sortConnectorsByPriority(allConnectors)
ConnectorUtil->>ConnectorUtil: getPriority(connector) for each
ConnectorUtil-->>ConnectorController: sortedConnectors
ConnectorController->>ConnectorController: find connector where id == id or explorerId == id
ConnectorController-->>UI: connector
UI->>WalletProvider: connect(connector)
WalletProvider-->>UI: connection result
Loading
Sequence diagram for transaction image fallback handling in WuiTransactionVisual
sequenceDiagram
actor User
participant W3mActivityList
participant WuiTransactionVisual
participant WuiImage
participant WuiIcon
User->>W3mActivityList: Open activity page
W3mActivityList->>WuiTransactionVisual: Render with images (TransactionImage[])
WuiTransactionVisual->>WuiTransactionVisual: templateVisual()
alt two images with URLs
WuiTransactionVisual->>WuiTransactionVisual: renderSwapImages(firstImage, secondImage)
WuiTransactionVisual->>WuiImage: renderImageOrFallback(firstImage, first, true)
WuiTransactionVisual->>WuiImage: renderImageOrFallback(secondImage, last, true)
else single image
WuiTransactionVisual->>WuiImage: renderSingleImage(image)
end
WuiImage-->>WuiTransactionVisual: onLoadError(event)
WuiTransactionVisual->>WuiTransactionVisual: handleImageError(url)
WuiTransactionVisual->>WuiTransactionVisual: failedImageUrls.add(url)
WuiTransactionVisual->>WuiTransactionVisual: requestUpdate()
WuiTransactionVisual->>WuiTransactionVisual: templateVisual()
alt image in swap container
WuiTransactionVisual->>WuiIcon: renderFallbackIconInContainer(position)
else single image
WuiTransactionVisual->>WuiIcon: renderFallbackIcon()
end
Loading
Class diagram for updated transaction visual and activity utilities
Make transaction utilities resilient to missing/null transfers and extend TON activity support and message typings.
Guard TransactionUtil helpers against undefined or null transfer arrays by using optional chaining and safe defaults.
Allow Transaction.transfers to be null and adjust spam-filtering logic accordingly in TransactionsController.
Enable TON in ACTIVITY_ENABLED_CHAIN_NAMESPACES so TON transactions can appear in activity views.
Extend TonTypesUtil message types to support payload, stateInit, and extraCurrency fields, and stop rewriting TonConnectConnector messages to a reduced shape.
Relax Chromatic visual regression CI failures to be non-blocking and bump versions/dependencies for the 1.8.14 release.
Set Chromatic exitZeroOnChanges to true and remove the explicit failure step so visual diffs do not fail CI.
Bump package versions from 1.8.13 (or earlier) to 1.8.14 across core libraries and adapters, updating PACKAGE_VERSION accordingly.
Add 1.8.14 entries to multiple CHANGELOGs summarizing TON support, WalletConnect 2.23.0, wallet search improvements, and related changes.
Update React, ReactDOM, Next.js, and related dependencies to newer patch versions across apps and examples, plus internal package peer/dev dependencies.
Increment the pay-test-exchange app version and note the change in its CHANGELOG; add/update pnpm-lock.yaml accordingly.
Trigger a new review: Comment @sourcery-ai review on the pull request.
Continue discussions: Reply directly to Sourcery's review comments.
Generate a GitHub issue from a review comment: Ask Sourcery to create an
issue from a review comment by replying to it. You can also reply to a
review comment with @sourcery-ai issue to create an issue from it.
Generate a pull request title: Write @sourcery-ai anywhere in the pull
request title to generate a title at any time. You can also comment @sourcery-ai title on the pull request to (re-)generate the title at any time.
Generate a pull request summary: Write @sourcery-ai summary anywhere in
the pull request body to generate a PR summary at any time exactly where you
want it. You can also comment @sourcery-ai summary on the pull request to
(re-)generate the summary at any time.
Generate reviewer's guide: Comment @sourcery-ai guide on the pull
request to (re-)generate the reviewer's guide at any time.
Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
pull request to resolve all Sourcery comments. Useful if you've already
addressed all the comments and don't want to see them anymore.
Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
request to dismiss all existing Sourcery reviews. Especially useful if you
want to start fresh with a new review - don't forget to comment @sourcery-ai review to trigger a new review!
Reviewer's Guide
This PR introduces robust fallback handling and visual polish for transaction activity UI, fixes a Base Account vs Coinbase connector selection bug by prioritizing connectors, enables TON activity tracking, adjusts TON message typings/connector behavior, and performs a coordinated 1.8.14 version/dependency bump across packages while relaxing CI visual regression failures to be non-blocking.
Sequence diagram for prioritized connector selection (Base Account vs Coinbase)
Sequence diagram for transaction image fallback handling in WuiTransactionVisual
sequenceDiagram actor User participant W3mActivityList participant WuiTransactionVisual participant WuiImage participant WuiIcon User->>W3mActivityList: Open activity page W3mActivityList->>WuiTransactionVisual: Render with images (TransactionImage[]) WuiTransactionVisual->>WuiTransactionVisual: templateVisual() alt two images with URLs WuiTransactionVisual->>WuiTransactionVisual: renderSwapImages(firstImage, secondImage) WuiTransactionVisual->>WuiImage: renderImageOrFallback(firstImage, first, true) WuiTransactionVisual->>WuiImage: renderImageOrFallback(secondImage, last, true) else single image WuiTransactionVisual->>WuiImage: renderSingleImage(image) end WuiImage-->>WuiTransactionVisual: onLoadError(event) WuiTransactionVisual->>WuiTransactionVisual: handleImageError(url) WuiTransactionVisual->>WuiTransactionVisual: failedImageUrls.add(url) WuiTransactionVisual->>WuiTransactionVisual: requestUpdate() WuiTransactionVisual->>WuiTransactionVisual: templateVisual() alt image in swap container WuiTransactionVisual->>WuiIcon: renderFallbackIconInContainer(position) else single image WuiTransactionVisual->>WuiIcon: renderFallbackIcon() endClass diagram for updated transaction visual and activity utilities
classDiagram class WuiTransactionVisual { - images: TransactionImage[] - failedImageUrls: Set<string> + render() - templateVisual() - renderSwapImages(firstImage: TransactionImage, secondImage: TransactionImage) - renderSingleImage(image: TransactionImage) - renderImageOrFallback(image: TransactionImage, position: string, isInSwapContainer: boolean) - renderFallbackIconInContainer(position: string) - renderFallbackIcon() - renderPlaceholderIcon(iconName: string) - handleImageError(url: string) } class TransactionImage { + type: string + url: string } class W3mActivityList { - templateLoading() - getTransactionListItemProps(transaction: Transaction) } class TransactionUtil { + mergeTransfers(transfers: TransactionTransfer[]): TransactionTransfer[] + getTransactionDescriptions(transaction: Transaction, mergedTransfers: TransactionTransfer[] | null): string[] | string + filterGasFeeTransfers(transfers: TransactionTransfer[] | null): TransactionTransfer[] } class Transaction { + id: string + metadata: TransactionMetadata + transfers: TransactionTransfer[] | null } class TransactionTransfer { + fungible_info: any + nft_info: any + quantity: any + direction: string } class TransactionMetadata { + minedAt: string | null + operationType: string | null } WuiTransactionVisual --> TransactionImage : displays W3mActivityList --> TransactionUtil : uses W3mActivityList --> Transaction : renders TransactionUtil --> Transaction : reads TransactionUtil --> TransactionTransfer : processesClass diagram for connector prioritization and TON activity enablement
classDiagram class ConnectorUtil { + sortConnectorsByMostChains(connectors: ConnectorWithProviders[]): ConnectorWithProviders[] + getPriority(connector: ConnectorWithProviders): number + sortConnectorsByPriority(connectors: ConnectorWithProviders[]): ConnectorWithProviders[] } class ConnectorController { - state: ConnectorControllerState + getConnectorById(id: string): ConnectorWithProviders | undefined + getConnector(params: GetConnectorParams): ConnectorWithProviders | undefined } class ConnectorControllerState { + allConnectors: ConnectorWithProviders[] } class ConnectorWithProviders { + id: string + explorerId: string + chain: ChainNamespace } class CommonConstantsUtil { <<utility>> } class CommonConstantsUtil_CONNECTOR_ID { + BASE_ACCOUNT: string + COINBASE: string + COINBASE_SDK: string } class ConstantsUtil { + ACTIVITY_ENABLED_CHAIN_NAMESPACES: ChainNamespace[] } class ChainNamespace { } ConnectorController --> ConnectorControllerState : reads ConnectorController --> ConnectorUtil : uses ConnectorUtil --> ConnectorWithProviders : sorts CommonConstantsUtil --> CommonConstantsUtil_CONNECTOR_ID : exposes ConnectorUtil --> CommonConstantsUtil_CONNECTOR_ID : compares ids ConstantsUtil --> ChainNamespace : listsFile-Level Changes
packages/ui/src/composites/wui-transaction-visual/index.tspackages/ui/src/composites/wui-transaction-visual/styles.tsapps/gallery/stories/composites/appkit-wui-transaction-visual.stories.tspackages/scaffold-ui/src/partials/w3m-activity-list/index.tspackages/ui/src/components/wui-shimmer/styles.tspackages/ui/src/composites/wui-transaction-list-item-loader/index.tspackages/ui/src/utils/TransactionUtil.tspackages/common/src/utils/TypeUtil.tspackages/controllers/src/controllers/TransactionsController.tspackages/controllers/src/utils/ConstantsUtil.tspackages/appkit-utils/src/ton/TonTypesUtil.tspackages/adapters/ton/src/connectors/TonConnectConnector.tspackages/controllers/src/utils/ConnectorUtil.tspackages/controllers/src/controllers/ConnectorController.tspackages/controllers/tests/utils/ConnectorUtil.test.ts.changeset/vast-trams-pull.md.github/workflows/visual_regression_tests.ymlpackages/appkit/exports/constants.tspackages/appkit/package.jsonpackages/controllers/package.jsonpackages/appkit-utils/package.jsonpackages/ui/package.jsonpackages/scaffold-ui/package.jsonpackages/polyfills/package.jsonpackages/common/package.jsonpackages/wallet/package.jsonpackages/wallet-button/package.jsonpackages/universal-connector/package.jsonpackages/siwx/package.jsonpackages/siwe/package.jsonpackages/appkit-utils/CHANGELOG.mdpackages/appkit/CHANGELOG.mdpackages/controllers/CHANGELOG.mdpackages/ui/CHANGELOG.mdpackages/scaffold-ui/CHANGELOG.mdpackages/polyfills/CHANGELOG.mdpackages/common/CHANGELOG.mdpackages/wallet/CHANGELOG.mdpackages/wallet-button/CHANGELOG.mdpackages/universal-connector/CHANGELOG.mdpackages/siwx/CHANGELOG.mdpackages/siwe/CHANGELOG.mdapps/pay-test-exchange/package.jsonapps/pay-test-exchange/CHANGELOG.mdapps/demo/package.jsonapps/laboratory/package.jsonapps/gallery/package.jsonapps/browser-extension/package.jsonexamples/**/*.package.jsonpnpm-lock.yamlTips and commands
Interacting with Sourcery
@sourcery-ai reviewon the pull request.issue from a review comment by replying to it. You can also reply to a
review comment with
@sourcery-ai issueto create an issue from it.@sourcery-aianywhere in the pullrequest title to generate a title at any time. You can also comment
@sourcery-ai titleon the pull request to (re-)generate the title at any time.@sourcery-ai summaryanywhere inthe pull request body to generate a PR summary at any time exactly where you
want it. You can also comment
@sourcery-ai summaryon the pull request to(re-)generate the summary at any time.
@sourcery-ai guideon the pullrequest to (re-)generate the reviewer's guide at any time.
@sourcery-ai resolveon thepull request to resolve all Sourcery comments. Useful if you've already
addressed all the comments and don't want to see them anymore.
@sourcery-ai dismisson the pullrequest to dismiss all existing Sourcery reviews. Especially useful if you
want to start fresh with a new review - don't forget to comment
@sourcery-ai reviewto trigger a new review!Customizing Your Experience
Access your dashboard to:
summary, the reviewer's guide, and others.
Getting Help
Originally posted by @sourcery-ai[bot] in #755 (comment)