@aurora-is-near/intents-swap-widget 3.18.1 → 3.18.3

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 (180) hide show
  1. package/dist/components/Accordion.js +34 -35
  2. package/dist/components/Accordion.js.map +1 -1
  3. package/dist/components/Banner.js +33 -19
  4. package/dist/components/Banner.js.map +1 -1
  5. package/dist/components/BlockingError.js +11 -16
  6. package/dist/components/BlockingError.js.map +1 -1
  7. package/dist/components/Button.d.ts +10 -2
  8. package/dist/components/Button.js +53 -43
  9. package/dist/components/Button.js.map +1 -1
  10. package/dist/components/CloseButton.js +6 -6
  11. package/dist/components/CloseButton.js.map +1 -1
  12. package/dist/components/CopyButton.d.ts +5 -2
  13. package/dist/components/CopyButton.js +11 -7
  14. package/dist/components/CopyButton.js.map +1 -1
  15. package/dist/components/DirectionSwitcher.js +12 -11
  16. package/dist/components/DirectionSwitcher.js.map +1 -1
  17. package/dist/components/Input.d.ts +5 -3
  18. package/dist/components/Input.js +16 -16
  19. package/dist/components/Input.js.map +1 -1
  20. package/dist/components/Notes.js +1 -1
  21. package/dist/components/Notes.js.map +1 -1
  22. package/dist/components/StatusWidget.js +8 -21
  23. package/dist/components/StatusWidget.js.map +1 -1
  24. package/dist/{config-DJObWR7Z.js → config-BMvXuF1-.js} +692 -673
  25. package/dist/config-BMvXuF1-.js.map +1 -0
  26. package/dist/config.js +21 -6
  27. package/dist/config.js.map +1 -1
  28. package/dist/errors.js +1 -1
  29. package/dist/ext/alchemy/index.js +1 -1
  30. package/dist/ext/index.js +1 -1
  31. package/dist/features/BalanceRpcLoader/TokenBalanceLoader.js +1 -1
  32. package/dist/features/BalanceRpcLoader/index.js +1 -1
  33. package/dist/features/BalanceRpcLoader/useTokenBalanceRpc.js +1 -1
  34. package/dist/features/ChainsDropdown/AllNetworksIcon.js +3 -3
  35. package/dist/features/ChainsDropdown/AllNetworksIcon.js.map +1 -1
  36. package/dist/features/ChainsDropdown/ChainItem.js +7 -7
  37. package/dist/features/ChainsDropdown/ChainItem.js.map +1 -1
  38. package/dist/features/ChainsDropdown/index.js +45 -33
  39. package/dist/features/ChainsDropdown/index.js.map +1 -1
  40. package/dist/features/DepositMethodSwitcher.js +18 -17
  41. package/dist/features/DepositMethodSwitcher.js.map +1 -1
  42. package/dist/features/ErrorBoundary.js +1 -1
  43. package/dist/features/ExternalDeposit.js +22 -15
  44. package/dist/features/ExternalDeposit.js.map +1 -1
  45. package/dist/features/SendAddress/index.js +15 -14
  46. package/dist/features/SendAddress/index.js.map +1 -1
  47. package/dist/features/SendAddress/useNotification.js +1 -1
  48. package/dist/features/SubmitButton/index.js +1 -1
  49. package/dist/features/SuccessScreen/CopyableValue.d.ts +5 -0
  50. package/dist/features/SuccessScreen/CopyableValue.js +11 -0
  51. package/dist/features/SuccessScreen/CopyableValue.js.map +1 -0
  52. package/dist/features/SuccessScreen/TokenRow.d.ts +8 -0
  53. package/dist/features/SuccessScreen/TokenRow.js +20 -0
  54. package/dist/features/SuccessScreen/TokenRow.js.map +1 -0
  55. package/dist/features/SuccessScreen/index.d.ts +5 -4
  56. package/dist/features/SuccessScreen/index.js +151 -49
  57. package/dist/features/SuccessScreen/index.js.map +1 -1
  58. package/dist/features/SuccessScreen/useSummaryItemsCount.d.ts +1 -0
  59. package/dist/features/SuccessScreen/useSummaryItemsCount.js +14 -0
  60. package/dist/features/SuccessScreen/useSummaryItemsCount.js.map +1 -0
  61. package/dist/features/SwapDirectionSwitcher.js +1 -1
  62. package/dist/features/SwapQuote/SwapQuote.js +1 -1
  63. package/dist/features/SwapQuote/index.js +1 -1
  64. package/dist/features/TokenInput/TokenInput.js +1 -1
  65. package/dist/features/TokenInput/TokenInputEmpty.js +1 -1
  66. package/dist/features/TokenInput/TokenInputSource.js +1 -1
  67. package/dist/features/TokenInput/TokenInputTarget.js +2 -2
  68. package/dist/features/TokenInput/WalletBalance.js +1 -1
  69. package/dist/features/TokenInput/hooks/index.js +1 -1
  70. package/dist/features/TokenInput/hooks/useTokenInputBalance.js +1 -1
  71. package/dist/features/TokenInput/index.js +1 -1
  72. package/dist/features/TokensList/TokenItem.js +2 -2
  73. package/dist/features/TokensList/TokensList.js +1 -1
  74. package/dist/features/TokensList/index.js +1 -1
  75. package/dist/features/TokensModal.js +11 -11
  76. package/dist/features/TokensModal.js.map +1 -1
  77. package/dist/features/WalletCompatibilityCheck/WalletCompatibilityModal.js +19 -6
  78. package/dist/features/WalletCompatibilityCheck/WalletCompatibilityModal.js.map +1 -1
  79. package/dist/features/WalletCompatibilityCheck/index.js +1 -1
  80. package/dist/features/index.js +1 -1
  81. package/dist/hooks/index.js +1 -1
  82. package/dist/hooks/useAllTokens.js +1 -1
  83. package/dist/hooks/useChains.js +1 -1
  84. package/dist/hooks/useCompatibilityCheck.js +1 -1
  85. package/dist/hooks/useDefaultToken.js +1 -1
  86. package/dist/hooks/useExternalDepositStatus/index.js +1 -1
  87. package/dist/hooks/useExternalDepositStatus/usePoaExternalDepositStatus.js +1 -1
  88. package/dist/hooks/useIntentsBalance.js +1 -1
  89. package/dist/hooks/useIsCompatibilityCheckRequired.js +1 -1
  90. package/dist/hooks/useMakeDepositAddress.js +1 -1
  91. package/dist/hooks/useMakeIntentsTransfer.js +1 -1
  92. package/dist/hooks/useMakeNEARFtTransferCall.js +1 -1
  93. package/dist/hooks/useMakeQuote.js +1 -1
  94. package/dist/hooks/useMakeQuoteTransfer.js +1 -1
  95. package/dist/hooks/useMakeTransfer.js +1 -1
  96. package/dist/hooks/useMergedBalance.js +1 -1
  97. package/dist/hooks/useSwitchChain.js +1 -1
  98. package/dist/hooks/useTheme.js +1 -1
  99. package/dist/hooks/useTokenInputPair.js +1 -1
  100. package/dist/hooks/useTokens.js +1 -1
  101. package/dist/hooks/useTokensFiltered.js +1 -1
  102. package/dist/hooks/useTokensIntentsUnique.js +1 -1
  103. package/dist/index.js +1 -1
  104. package/dist/machine/effects/index.js +1 -1
  105. package/dist/machine/effects/useAlchemyBalanceEffect.js +1 -1
  106. package/dist/machine/effects/useBalancesUpdateEffect.js +1 -1
  107. package/dist/machine/effects/useMakeQuoteEffect.js +1 -1
  108. package/dist/machine/effects/useSelectedTokensEffect.js +1 -1
  109. package/dist/machine/effects/useSetTokenBalanceEffect.js +1 -1
  110. package/dist/machine/effects/useSetTokenIntentsTargetEffect.js +1 -1
  111. package/dist/machine/effects/useWalletConnEffect.js +1 -1
  112. package/dist/machine/events/index.js +1 -1
  113. package/dist/machine/events/reset.d.ts +1 -0
  114. package/dist/machine/events/reset.js +2 -2
  115. package/dist/machine/events/reset.js.map +1 -1
  116. package/dist/machine/events/tokenSelect.js +1 -1
  117. package/dist/machine/events/validateInputAndMoveTo.js +1 -1
  118. package/dist/machine/events/validateInputs.js +1 -1
  119. package/dist/machine/index.js +1 -1
  120. package/dist/machine/snap.js +1 -1
  121. package/dist/machine/subscriptions/checkers/isSendAddressAsConnected.js +1 -1
  122. package/dist/machine/subscriptions/index.js +1 -1
  123. package/dist/styles.css +1 -1
  124. package/dist/tailwind.css +9 -0
  125. package/dist/theme/ThemeProvider.js +1 -1
  126. package/dist/types/localisation.d.ts +1 -1
  127. package/dist/utils/intents/signers/near.js +1 -1
  128. package/dist/utils/intents/signers/privy.js +1 -1
  129. package/dist/utils/near/getNearNep141StorageBalance.js +1 -1
  130. package/dist/widgets/WidgetDeposit/WidgetDepositContent.js +79 -71
  131. package/dist/widgets/WidgetDeposit/WidgetDepositContent.js.map +1 -1
  132. package/dist/widgets/WidgetDeposit/WidgetDepositSkeleton.js +1 -1
  133. package/dist/widgets/WidgetSwap/WidgetSwapContent.js +94 -81
  134. package/dist/widgets/WidgetSwap/WidgetSwapContent.js.map +1 -1
  135. package/dist/widgets/WidgetSwap/WidgetSwapSkeleton.js +1 -1
  136. package/dist/widgets/WidgetWithdraw/WidgetWithdrawContent.js +79 -67
  137. package/dist/widgets/WidgetWithdraw/WidgetWithdrawContent.js.map +1 -1
  138. package/dist/widgets/WidgetWithdraw/WidgetWithdrawSkeleton.js +1 -1
  139. package/package.json +1 -2
  140. package/src/components/Accordion.tsx +8 -9
  141. package/src/components/Banner.tsx +17 -8
  142. package/src/components/BlockingError.tsx +4 -6
  143. package/src/components/Button.tsx +26 -7
  144. package/src/components/CloseButton.tsx +2 -2
  145. package/src/components/CopyButton.tsx +14 -4
  146. package/src/components/DirectionSwitcher.tsx +4 -4
  147. package/src/components/Input.tsx +5 -4
  148. package/src/components/Notes.tsx +1 -1
  149. package/src/components/StatusWidget.tsx +4 -11
  150. package/src/features/ChainsDropdown/AllNetworksIcon.tsx +2 -2
  151. package/src/features/ChainsDropdown/ChainItem.tsx +2 -2
  152. package/src/features/ChainsDropdown/index.tsx +9 -3
  153. package/src/features/DepositMethodSwitcher.tsx +4 -3
  154. package/src/features/ExternalDeposit.tsx +2 -2
  155. package/src/features/SendAddress/index.tsx +3 -2
  156. package/src/features/SuccessScreen/CopyableValue.tsx +13 -0
  157. package/src/features/SuccessScreen/TokenRow.tsx +26 -0
  158. package/src/features/SuccessScreen/index.tsx +161 -55
  159. package/src/features/SuccessScreen/useSummaryItemsCount.ts +33 -0
  160. package/src/features/TokensModal.tsx +2 -2
  161. package/src/features/WalletCompatibilityCheck/WalletCompatibilityModal.tsx +8 -9
  162. package/src/machine/events/reset.ts +6 -3
  163. package/src/tailwind.css +9 -0
  164. package/src/types/localisation.ts +10 -3
  165. package/src/widgets/WidgetDeposit/WidgetDepositContent.tsx +6 -4
  166. package/src/widgets/WidgetSwap/WidgetSwapContent.tsx +7 -4
  167. package/src/widgets/WidgetWithdraw/WidgetWithdrawContent.tsx +7 -4
  168. package/dist/config-DJObWR7Z.js.map +0 -1
  169. package/dist/features/SuccessScreen/CheckIcon.d.ts +0 -1
  170. package/dist/features/SuccessScreen/CheckIcon.js +0 -7
  171. package/dist/features/SuccessScreen/CheckIcon.js.map +0 -1
  172. package/dist/features/SuccessScreen/ExternalAction.d.ts +0 -5
  173. package/dist/features/SuccessScreen/ExternalAction.js +0 -16
  174. package/dist/features/SuccessScreen/ExternalAction.js.map +0 -1
  175. package/dist/features/SuccessScreen/SummaryItem.d.ts +0 -8
  176. package/dist/features/SuccessScreen/SummaryItem.js +0 -21
  177. package/dist/features/SuccessScreen/SummaryItem.js.map +0 -1
  178. package/src/features/SuccessScreen/CheckIcon.tsx +0 -7
  179. package/src/features/SuccessScreen/ExternalAction.tsx +0 -15
  180. package/src/features/SuccessScreen/SummaryItem.tsx +0 -28
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalDeposit.js","sources":["../../src/features/ExternalDeposit.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { QRCodeSVG } from 'qrcode.react';\nimport { GetExecutionStatusResponse } from '@defuse-protocol/one-click-sdk-typescript';\nimport * as Icons from 'lucide-react';\n\nimport { notReachable } from '@/utils';\nimport { CHAIN_IDS_MAP } from '@/constants/chains';\nimport { useExternalDepositStatus } from '@/hooks';\nimport { useTypedTranslation } from '@/localisation';\nimport { CopyButton, StatusWidget } from '@/components';\nimport {\n fireEvent,\n guardStates,\n moveTo,\n useComputedSnapshot,\n useUnsafeSnapshot,\n} from '@/machine';\nimport { formatAddressTruncate } from '@/utils/formatters/formatAddressTruncate';\nimport { getTransactionLink } from '@/utils/formatters/getTransactionLink';\nimport { isNotEmptyAmount } from '@/utils/checkers/isNotEmptyAmount';\nimport type { TransferResult } from '@/types';\n\ntype Msg =\n | { type: 'on_transaction_received' }\n | { type: 'on_successful_transfer'; transferResult: TransferResult };\n\ntype Props = {\n onMsg: (msg: Msg) => void;\n};\n\nconst QrCode = ({ address }: { address: string }) => (\n <div className=\"flex flex-col gap-sw-2xl items-center\">\n <div className=\"p-sw-lg m-sw-lg mx-auto w-fit rounded-sw-md bg-[#fff]\">\n <QRCodeSVG size={156} value={address} fgColor=\"#161926\" />\n </div>\n <div className=\"py-sw-lg px-sw-lg w-full flex items-center justify-between rounded-sw-md bg-sw-gray-800\">\n <span className=\"text-sw-label-md text-sw-gray-100\">\n {formatAddressTruncate(address, 38)}\n </span>\n <CopyButton value={address} />\n </div>\n </div>\n);\n\nconst Skeleton = () => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n\n return (\n <div className=\"flex flex-col gap-sw-2xl items-center\">\n <div className=\"bg-sw-gray-800 h-[180px] w-[180px] animate-pulse rounded-sw-md\" />\n <div className=\"bg-sw-gray-800 h-[44px] w-full animate-pulse rounded-sw-md flex items-center justify-center gap-sw-sm\">\n <Icons.Loader className=\"animate-spin text-sw-gray-100 h-sw-lg w-sw-lg\" />\n <span className=\"text-sw-gray-100 text-sw-label-sm\">\n {!isNotEmptyAmount(ctx.sourceTokenAmount)\n ? t('deposit.external.loading.waiting', 'Waiting for token amount')\n : t('deposit.external.loading.fetching', 'Fetching new address')}\n </span>\n </div>\n </div>\n );\n};\n\nexport const ExternalDeposit = ({ onMsg }: Props) => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n const { isNativeNearDeposit } = useComputedSnapshot();\n\n const isValidState = guardStates(ctx, [\n 'quote_success_external',\n 'quote_success_internal',\n ]);\n\n const isBridgePoaDeposit =\n (isNativeNearDeposit && ctx.isDepositFromExternalWallet) ||\n (!isNativeNearDeposit &&\n ctx.sourceToken?.assetId === ctx.targetToken?.assetId);\n\n const depositStatusQuery = useExternalDepositStatus({\n depositAddress: isValidState ? ctx.quote.depositAddress : '',\n depositAddressType: isBridgePoaDeposit ? 'poa' : 'one_click',\n });\n\n useEffect(() => {\n const status = depositStatusQuery.data?.status;\n\n if (!depositStatusQuery.data) {\n return;\n }\n\n switch (status) {\n case GetExecutionStatusResponse.status.SUCCESS: {\n const txHash =\n depositStatusQuery.data.swapDetails.destinationChainTxHashes[0]?.hash;\n\n fireEvent('transferSetStatus', { status: 'success' });\n moveTo('transfer_success');\n\n onMsg({\n type: 'on_successful_transfer',\n transferResult: {\n hash: txHash ?? '',\n intent: depositStatusQuery.data.swapDetails.intentHashes[0],\n transactionLink:\n (ctx.sourceToken &&\n txHash &&\n getTransactionLink(\n CHAIN_IDS_MAP[ctx.sourceToken.blockchain],\n txHash,\n )) ??\n '',\n },\n });\n break;\n }\n\n case GetExecutionStatusResponse.status.FAILED:\n fireEvent('transferSetStatus', { status: 'error' });\n fireEvent('errorSet', { code: 'EXTERNAL_TRANSFER_FAILED' });\n break;\n case GetExecutionStatusResponse.status.INCOMPLETE_DEPOSIT:\n fireEvent('transferSetStatus', { status: 'error' });\n fireEvent('errorSet', { code: 'EXTERNAL_TRANSFER_INCOMPLETE' });\n break;\n case GetExecutionStatusResponse.status.REFUNDED:\n fireEvent('transferSetStatus', { status: 'error' });\n fireEvent('errorSet', { code: 'EXTERNAL_TRANSFER_REFUNDED' });\n break;\n case GetExecutionStatusResponse.status.PROCESSING:\n case GetExecutionStatusResponse.status.KNOWN_DEPOSIT_TX:\n // Transaction was received from external wallet\n fireEvent('externalDepositTxSet', true);\n onMsg({ type: 'on_transaction_received' });\n break;\n case GetExecutionStatusResponse.status.PENDING_DEPOSIT:\n case undefined:\n // No action needed - waiting for deposit\n break;\n default:\n notReachable(status);\n }\n // do not include onMsg to avoid infinite loop\n }, [depositStatusQuery.data, ctx.sourceToken]);\n\n if (!isValidState) {\n return <Skeleton />;\n }\n\n if (!depositStatusQuery.data) {\n return <QrCode address={ctx.quote.depositAddress} />;\n }\n\n switch (depositStatusQuery.status) {\n case 'error':\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.noStatus',\n 'Unable to check transfer status',\n )}\n />\n );\n\n case 'success': {\n switch (depositStatusQuery.data.status) {\n case GetExecutionStatusResponse.status.FAILED:\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.noStatus',\n 'Unable to check transfer status',\n )}\n />\n );\n case GetExecutionStatusResponse.status.INCOMPLETE_DEPOSIT:\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.incomplete',\n 'Incomplete deposit',\n )}\n />\n );\n case GetExecutionStatusResponse.status.REFUNDED:\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.failed',\n 'Deposit failed. You were refunded.',\n )}\n />\n );\n case GetExecutionStatusResponse.status.PROCESSING:\n case GetExecutionStatusResponse.status.KNOWN_DEPOSIT_TX:\n return <StatusWidget.Success />;\n case GetExecutionStatusResponse.status.PENDING_DEPOSIT:\n return <QrCode address={ctx.quote.depositAddress} />;\n case GetExecutionStatusResponse.status.SUCCESS:\n return <StatusWidget.Success />;\n default:\n return null;\n }\n }\n\n default:\n return notReachable(depositStatusQuery);\n }\n};\n"],"names":["QrCode","address","jsxs","jsx","QRCodeSVG","formatAddressTruncate","CopyButton","Skeleton","t","useTypedTranslation","ctx","useUnsafeSnapshot","Icons","isNotEmptyAmount","ExternalDeposit","onMsg","isNativeNearDeposit","useComputedSnapshot","isValidState","guardStates","isBridgePoaDeposit","depositStatusQuery","useExternalDepositStatus","useEffect","status","GetExecutionStatusResponse","txHash","fireEvent","moveTo","getTransactionLink","CHAIN_IDS_MAP","notReachable","StatusWidget"],"mappings":"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"}
1
+ {"version":3,"file":"ExternalDeposit.js","sources":["../../src/features/ExternalDeposit.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { QRCodeSVG } from 'qrcode.react';\nimport { GetExecutionStatusResponse } from '@defuse-protocol/one-click-sdk-typescript';\nimport { ProgressActivityW700 as ProgressActivity } from '@material-symbols-svg/react-rounded/icons/progress-activity';\n\nimport { notReachable } from '@/utils';\nimport { CHAIN_IDS_MAP } from '@/constants/chains';\nimport { useExternalDepositStatus } from '@/hooks';\nimport { useTypedTranslation } from '@/localisation';\nimport { CopyButton, StatusWidget } from '@/components';\nimport {\n fireEvent,\n guardStates,\n moveTo,\n useComputedSnapshot,\n useUnsafeSnapshot,\n} from '@/machine';\nimport { formatAddressTruncate } from '@/utils/formatters/formatAddressTruncate';\nimport { getTransactionLink } from '@/utils/formatters/getTransactionLink';\nimport { isNotEmptyAmount } from '@/utils/checkers/isNotEmptyAmount';\nimport type { TransferResult } from '@/types';\n\ntype Msg =\n | { type: 'on_transaction_received' }\n | { type: 'on_successful_transfer'; transferResult: TransferResult };\n\ntype Props = {\n onMsg: (msg: Msg) => void;\n};\n\nconst QrCode = ({ address }: { address: string }) => (\n <div className=\"flex flex-col gap-sw-2xl items-center\">\n <div className=\"p-sw-lg m-sw-lg mx-auto w-fit rounded-sw-md bg-[#fff]\">\n <QRCodeSVG size={156} value={address} fgColor=\"#161926\" />\n </div>\n <div className=\"py-sw-lg px-sw-lg w-full flex items-center justify-between rounded-sw-md bg-sw-gray-800\">\n <span className=\"text-sw-label-md text-sw-gray-100\">\n {formatAddressTruncate(address, 38)}\n </span>\n <CopyButton value={address} />\n </div>\n </div>\n);\n\nconst Skeleton = () => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n\n return (\n <div className=\"flex flex-col gap-sw-2xl items-center\">\n <div className=\"bg-sw-gray-800 h-[180px] w-[180px] animate-pulse rounded-sw-md\" />\n <div className=\"bg-sw-gray-800 h-[44px] w-full animate-pulse rounded-sw-md flex items-center justify-center gap-sw-sm\">\n <ProgressActivity className=\"animate-spin text-sw-gray-100 h-sw-lg w-sw-lg\" />\n <span className=\"text-sw-gray-100 text-sw-label-sm\">\n {!isNotEmptyAmount(ctx.sourceTokenAmount)\n ? t('deposit.external.loading.waiting', 'Waiting for token amount')\n : t('deposit.external.loading.fetching', 'Fetching new address')}\n </span>\n </div>\n </div>\n );\n};\n\nexport const ExternalDeposit = ({ onMsg }: Props) => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n const { isNativeNearDeposit } = useComputedSnapshot();\n\n const isValidState = guardStates(ctx, [\n 'quote_success_external',\n 'quote_success_internal',\n ]);\n\n const isBridgePoaDeposit =\n (isNativeNearDeposit && ctx.isDepositFromExternalWallet) ||\n (!isNativeNearDeposit &&\n ctx.sourceToken?.assetId === ctx.targetToken?.assetId);\n\n const depositStatusQuery = useExternalDepositStatus({\n depositAddress: isValidState ? ctx.quote.depositAddress : '',\n depositAddressType: isBridgePoaDeposit ? 'poa' : 'one_click',\n });\n\n useEffect(() => {\n const status = depositStatusQuery.data?.status;\n\n if (!depositStatusQuery.data) {\n return;\n }\n\n switch (status) {\n case GetExecutionStatusResponse.status.SUCCESS: {\n const txHash =\n depositStatusQuery.data.swapDetails.destinationChainTxHashes[0]?.hash;\n\n fireEvent('transferSetStatus', { status: 'success' });\n moveTo('transfer_success');\n\n onMsg({\n type: 'on_successful_transfer',\n transferResult: {\n hash: txHash ?? '',\n intent: depositStatusQuery.data.swapDetails.intentHashes[0],\n transactionLink:\n (ctx.sourceToken &&\n txHash &&\n getTransactionLink(\n CHAIN_IDS_MAP[ctx.sourceToken.blockchain],\n txHash,\n )) ??\n '',\n },\n });\n break;\n }\n\n case GetExecutionStatusResponse.status.FAILED:\n fireEvent('transferSetStatus', { status: 'error' });\n fireEvent('errorSet', { code: 'EXTERNAL_TRANSFER_FAILED' });\n break;\n case GetExecutionStatusResponse.status.INCOMPLETE_DEPOSIT:\n fireEvent('transferSetStatus', { status: 'error' });\n fireEvent('errorSet', { code: 'EXTERNAL_TRANSFER_INCOMPLETE' });\n break;\n case GetExecutionStatusResponse.status.REFUNDED:\n fireEvent('transferSetStatus', { status: 'error' });\n fireEvent('errorSet', { code: 'EXTERNAL_TRANSFER_REFUNDED' });\n break;\n case GetExecutionStatusResponse.status.PROCESSING:\n case GetExecutionStatusResponse.status.KNOWN_DEPOSIT_TX:\n // Transaction was received from external wallet\n fireEvent('externalDepositTxSet', true);\n onMsg({ type: 'on_transaction_received' });\n break;\n case GetExecutionStatusResponse.status.PENDING_DEPOSIT:\n case undefined:\n // No action needed - waiting for deposit\n break;\n default:\n notReachable(status);\n }\n // do not include onMsg to avoid infinite loop\n }, [depositStatusQuery.data, ctx.sourceToken]);\n\n if (!isValidState) {\n return <Skeleton />;\n }\n\n if (!depositStatusQuery.data) {\n return <QrCode address={ctx.quote.depositAddress} />;\n }\n\n switch (depositStatusQuery.status) {\n case 'error':\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.noStatus',\n 'Unable to check transfer status',\n )}\n />\n );\n\n case 'success': {\n switch (depositStatusQuery.data.status) {\n case GetExecutionStatusResponse.status.FAILED:\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.noStatus',\n 'Unable to check transfer status',\n )}\n />\n );\n case GetExecutionStatusResponse.status.INCOMPLETE_DEPOSIT:\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.incomplete',\n 'Incomplete deposit',\n )}\n />\n );\n case GetExecutionStatusResponse.status.REFUNDED:\n return (\n <StatusWidget.Error\n message={t(\n 'deposit.external.error.failed',\n 'Deposit failed. You were refunded.',\n )}\n />\n );\n case GetExecutionStatusResponse.status.PROCESSING:\n case GetExecutionStatusResponse.status.KNOWN_DEPOSIT_TX:\n return <StatusWidget.Success />;\n case GetExecutionStatusResponse.status.PENDING_DEPOSIT:\n return <QrCode address={ctx.quote.depositAddress} />;\n case GetExecutionStatusResponse.status.SUCCESS:\n return <StatusWidget.Success />;\n default:\n return null;\n }\n }\n\n default:\n return notReachable(depositStatusQuery);\n }\n};\n"],"names":["QrCode","address","jsxs","jsx","QRCodeSVG","formatAddressTruncate","CopyButton","Skeleton","t","useTypedTranslation","ctx","useUnsafeSnapshot","ProgressActivity","isNotEmptyAmount","ExternalDeposit","onMsg","isNativeNearDeposit","useComputedSnapshot","isValidState","guardStates","isBridgePoaDeposit","depositStatusQuery","useExternalDepositStatus","useEffect","status","GetExecutionStatusResponse","txHash","fireEvent","moveTo","getTransactionLink","CHAIN_IDS_MAP","notReachable","StatusWidget"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
- import * as S from "lucide-react";
3
- import { Button as N } from "@headlessui/react";
4
- import { useState as y, useEffect as m, useMemo as C } from "react";
5
- import { useDebounce as k } from "use-debounce";
2
+ import { Button as A } from "@headlessui/react";
3
+ import { useState as N, useEffect as m, useMemo as y } from "react";
4
+ import { useDebounce as C } from "use-debounce";
5
+ import { WandShineW700 as k } from "@material-symbols-svg/react-rounded/icons/wand-shine";
6
6
  import { useNotification as T } from "./useNotification.js";
7
7
  import { Card as v } from "../../components/Card.js";
8
8
  import { Input as B } from "../../components/Input.js";
@@ -11,14 +11,14 @@ import "../../constants/chains.js";
11
11
  import "viem";
12
12
  import "ethers";
13
13
  import { cn as M } from "../../utils/cn.js";
14
- import { b as V, y as _ } from "../../config-DJObWR7Z.js";
14
+ import { b as V, y as _ } from "../../config-BMvXuF1-.js";
15
15
  import "../../machine/machine.js";
16
16
  import { fireEvent as d } from "../../machine/events/utils/fireEvent.js";
17
17
  import { useTypedTranslation as j } from "../../localisation.js";
18
- const X = ({ error: c, className: p, onMsg: u }) => {
19
- const { t: o } = j(), { ctx: e } = V(), { walletSupportedChains: f, sendAddress: s, hideSendAddress: h } = _(), [a, x] = y(e.sendAddress ?? ""), [i] = k(a, 700), r = T(c), w = e.targetToken && !e.sendAddress && f.includes(e.targetToken.blockchain), b = (n) => {
20
- const A = n.target.value;
21
- x(A);
18
+ const Y = ({ error: c, className: p, onMsg: u }) => {
19
+ const { t: o } = j(), { ctx: e } = V(), { walletSupportedChains: f, sendAddress: s, hideSendAddress: h } = _(), [a, x] = N(e.sendAddress ?? ""), [i] = C(a, 700), r = T(c), w = e.targetToken && !e.sendAddress && f.includes(e.targetToken.blockchain), b = (n) => {
20
+ const g = n.target.value;
21
+ x(g);
22
22
  };
23
23
  m(() => {
24
24
  s && s !== e.sendAddress && d("addressSet", s);
@@ -26,14 +26,15 @@ const X = ({ error: c, className: p, onMsg: u }) => {
26
26
  const n = i ?? a;
27
27
  d("addressSet", n), u({ type: "on_change_send_address", address: n });
28
28
  }, [i]);
29
- const g = C(() => s ? "fixed" : r?.state ?? "default", [r, s]);
29
+ const S = y(() => s ? "fixed" : r?.state ?? "default", [r, s]);
30
30
  return h ? null : /* @__PURE__ */ l(v, { className: M("flex flex-col", p), children: [
31
31
  /* @__PURE__ */ t("h5", { className: "text-sw-label-md text-sw-gray-50 mb-sw-2xl", children: o("sendAddress.label", "Send to") }),
32
32
  /* @__PURE__ */ t(
33
33
  B,
34
34
  {
35
+ fontSize: "sm",
35
36
  defaultValue: e.sendAddress,
36
- state: g,
37
+ state: S,
37
38
  className: "mb-sw-xl",
38
39
  placeholder: o(
39
40
  "wallet.recipient.placeholder",
@@ -41,12 +42,12 @@ const X = ({ error: c, className: p, onMsg: u }) => {
41
42
  ),
42
43
  onChange: b,
43
44
  children: !!w && /* @__PURE__ */ l(
44
- N,
45
+ A,
45
46
  {
46
47
  className: "absolute right-0 flex items-center gap-sw-md min-w-max cursor-pointer",
47
48
  onClick: () => d("addressSet", e.walletAddress ?? ""),
48
49
  children: [
49
- /* @__PURE__ */ t(S.Wand2, { size: 14 }),
50
+ /* @__PURE__ */ t(k, { size: 14 }),
50
51
  /* @__PURE__ */ t("span", { className: "text-sw-label-md", children: o("sendAddress.button.magic.label", "My wallet") })
51
52
  ]
52
53
  }
@@ -57,6 +58,6 @@ const X = ({ error: c, className: p, onMsg: u }) => {
57
58
  ] });
58
59
  };
59
60
  export {
60
- X as SendAddress
61
+ Y as SendAddress
61
62
  };
62
63
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/features/SendAddress/index.tsx"],"sourcesContent":["import * as Icons from 'lucide-react';\nimport { Button } from '@headlessui/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport type { ChangeEvent } from 'react';\n\nimport { useNotification } from './useNotification';\nimport { Card } from '@/components/Card';\nimport { Input } from '@/components/Input';\nimport { Banner } from '@/components/Banner';\n\nimport { cn } from '@/utils';\nimport { useConfig } from '@/config';\nimport { fireEvent } from '@/machine';\nimport { useTypedTranslation } from '@/localisation';\nimport { useUnsafeSnapshot } from '@/machine/snap';\n\ntype Msg = { type: 'on_change_send_address'; address: string };\n\ntype Props = {\n error?: string;\n className?: string;\n onMsg: (msg: Msg) => void;\n};\n\nexport const SendAddress = ({ error, className, onMsg }: Props) => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n const { walletSupportedChains, sendAddress, hideSendAddress } = useConfig();\n\n const [value, setValue] = useState(ctx.sendAddress ?? '');\n const [debouncedValue] = useDebounce(value, 700);\n\n const notification = useNotification(error);\n\n const showMagicButton =\n ctx.targetToken &&\n !ctx.sendAddress &&\n walletSupportedChains.includes(ctx.targetToken.blockchain);\n\n const onChange = (e: ChangeEvent<HTMLInputElement>) => {\n const address = e.target.value;\n\n setValue(address);\n };\n\n // Sync fixed sendAddress with machine state\n useEffect(() => {\n if (sendAddress && sendAddress !== ctx.sendAddress) {\n fireEvent('addressSet', sendAddress);\n }\n }, [sendAddress, ctx.sendAddress]);\n\n useEffect(() => {\n const address = debouncedValue ?? value;\n\n fireEvent('addressSet', address);\n onMsg({ type: 'on_change_send_address', address });\n }, [debouncedValue]);\n\n const inputState = useMemo(() => {\n if (sendAddress) {\n return 'fixed' as const;\n }\n\n return notification?.state ?? 'default';\n }, [notification, sendAddress]);\n\n if (hideSendAddress) {\n return null;\n }\n\n return (\n <Card className={cn('flex flex-col', className)}>\n <h5 className=\"text-sw-label-md text-sw-gray-50 mb-sw-2xl\">\n {t('sendAddress.label', 'Send to')}\n </h5>\n <Input\n defaultValue={ctx.sendAddress}\n state={inputState}\n className=\"mb-sw-xl\"\n placeholder={t(\n 'wallet.recipient.placeholder',\n 'Enter recipient wallet address',\n )}\n onChange={onChange}>\n {!!showMagicButton && (\n <Button\n className=\"absolute right-0 flex items-center gap-sw-md min-w-max cursor-pointer\"\n onClick={() => fireEvent('addressSet', ctx.walletAddress ?? '')}>\n <Icons.Wand2 size={14} />\n <span className=\"text-sw-label-md\">\n {t('sendAddress.button.magic.label', 'My wallet')}\n </span>\n </Button>\n )}\n </Input>\n\n {notification && <Banner {...notification} />}\n </Card>\n );\n};\n"],"names":["SendAddress","error","className","onMsg","t","useTypedTranslation","ctx","useUnsafeSnapshot","walletSupportedChains","sendAddress","hideSendAddress","useConfig","value","setValue","useState","debouncedValue","useDebounce","notification","useNotification","showMagicButton","onChange","e","address","useEffect","fireEvent","inputState","useMemo","Card","cn","jsx","Input","jsxs","Button","Icons","Banner"],"mappings":";;;;;;;;;;;;;;;;;AAyBO,MAAMA,IAAc,CAAC,EAAE,OAAAC,GAAO,WAAAC,GAAW,OAAAC,QAAmB;AACjE,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACV,EAAE,uBAAAC,GAAuB,aAAAC,GAAa,iBAAAC,EAAA,IAAoBC,EAAA,GAE1D,CAACC,GAAOC,CAAQ,IAAIC,EAASR,EAAI,eAAe,EAAE,GAClD,CAACS,CAAc,IAAIC,EAAYJ,GAAO,GAAG,GAEzCK,IAAeC,EAAgBjB,CAAK,GAEpCkB,IACJb,EAAI,eACJ,CAACA,EAAI,eACLE,EAAsB,SAASF,EAAI,YAAY,UAAU,GAErDc,IAAW,CAACC,MAAqC;AACrD,UAAMC,IAAUD,EAAE,OAAO;AAEzB,IAAAR,EAASS,CAAO;AAAA,EAClB;AAGA,EAAAC,EAAU,MAAM;AACd,IAAId,KAAeA,MAAgBH,EAAI,eACrCkB,EAAU,cAAcf,CAAW;AAAA,EAEvC,GAAG,CAACA,GAAaH,EAAI,WAAW,CAAC,GAEjCiB,EAAU,MAAM;AACd,UAAMD,IAAUP,KAAkBH;AAElC,IAAAY,EAAU,cAAcF,CAAO,GAC/BnB,EAAM,EAAE,MAAM,0BAA0B,SAAAmB,EAAA,CAAS;AAAA,EACnD,GAAG,CAACP,CAAc,CAAC;AAEnB,QAAMU,IAAaC,EAAQ,MACrBjB,IACK,UAGFQ,GAAc,SAAS,WAC7B,CAACA,GAAcR,CAAW,CAAC;AAE9B,SAAIC,IACK,yBAINiB,GAAA,EAAK,WAAWC,EAAG,iBAAiB1B,CAAS,GAC5C,UAAA;AAAA,IAAA,gBAAA2B,EAAC,QAAG,WAAU,8CACX,UAAAzB,EAAE,qBAAqB,SAAS,GACnC;AAAA,IACA,gBAAAyB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,cAAcxB,EAAI;AAAA,QAClB,OAAOmB;AAAA,QACP,WAAU;AAAA,QACV,aAAarB;AAAA,UACX;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAAgB;AAAA,QACC,UAAA,CAAC,CAACD,KACD,gBAAAY;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAMR,EAAU,cAAclB,EAAI,iBAAiB,EAAE;AAAA,YAC9D,UAAA;AAAA,cAAA,gBAAAuB,EAACI,EAAM,OAAN,EAAY,MAAM,GAAA,CAAI;AAAA,gCACtB,QAAA,EAAK,WAAU,oBACb,UAAA7B,EAAE,kCAAkC,WAAW,EAAA,CAClD;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAIHa,KAAgB,gBAAAY,EAACK,GAAA,EAAQ,GAAGjB,EAAA,CAAc;AAAA,EAAA,GAC7C;AAEJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/features/SendAddress/index.tsx"],"sourcesContent":["import { Button } from '@headlessui/react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { WandShineW700 as WandShine } from '@material-symbols-svg/react-rounded/icons/wand-shine';\nimport type { ChangeEvent } from 'react';\n\nimport { useNotification } from './useNotification';\nimport { Card } from '@/components/Card';\nimport { Input } from '@/components/Input';\nimport { Banner } from '@/components/Banner';\n\nimport { cn } from '@/utils';\nimport { useConfig } from '@/config';\nimport { fireEvent } from '@/machine';\nimport { useTypedTranslation } from '@/localisation';\nimport { useUnsafeSnapshot } from '@/machine/snap';\n\ntype Msg = { type: 'on_change_send_address'; address: string };\n\ntype Props = {\n error?: string;\n className?: string;\n onMsg: (msg: Msg) => void;\n};\n\nexport const SendAddress = ({ error, className, onMsg }: Props) => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n const { walletSupportedChains, sendAddress, hideSendAddress } = useConfig();\n\n const [value, setValue] = useState(ctx.sendAddress ?? '');\n const [debouncedValue] = useDebounce(value, 700);\n\n const notification = useNotification(error);\n\n const showMagicButton =\n ctx.targetToken &&\n !ctx.sendAddress &&\n walletSupportedChains.includes(ctx.targetToken.blockchain);\n\n const onChange = (e: ChangeEvent<HTMLInputElement>) => {\n const address = e.target.value;\n\n setValue(address);\n };\n\n // Sync fixed sendAddress with machine state\n useEffect(() => {\n if (sendAddress && sendAddress !== ctx.sendAddress) {\n fireEvent('addressSet', sendAddress);\n }\n }, [sendAddress, ctx.sendAddress]);\n\n useEffect(() => {\n const address = debouncedValue ?? value;\n\n fireEvent('addressSet', address);\n onMsg({ type: 'on_change_send_address', address });\n }, [debouncedValue]);\n\n const inputState = useMemo(() => {\n if (sendAddress) {\n return 'fixed' as const;\n }\n\n return notification?.state ?? 'default';\n }, [notification, sendAddress]);\n\n if (hideSendAddress) {\n return null;\n }\n\n return (\n <Card className={cn('flex flex-col', className)}>\n <h5 className=\"text-sw-label-md text-sw-gray-50 mb-sw-2xl\">\n {t('sendAddress.label', 'Send to')}\n </h5>\n <Input\n fontSize=\"sm\"\n defaultValue={ctx.sendAddress}\n state={inputState}\n className=\"mb-sw-xl\"\n placeholder={t(\n 'wallet.recipient.placeholder',\n 'Enter recipient wallet address',\n )}\n onChange={onChange}>\n {!!showMagicButton && (\n <Button\n className=\"absolute right-0 flex items-center gap-sw-md min-w-max cursor-pointer\"\n onClick={() => fireEvent('addressSet', ctx.walletAddress ?? '')}>\n <WandShine size={14} />\n <span className=\"text-sw-label-md\">\n {t('sendAddress.button.magic.label', 'My wallet')}\n </span>\n </Button>\n )}\n </Input>\n\n {notification && <Banner {...notification} />}\n </Card>\n );\n};\n"],"names":["SendAddress","error","className","onMsg","t","useTypedTranslation","ctx","useUnsafeSnapshot","walletSupportedChains","sendAddress","hideSendAddress","useConfig","value","setValue","useState","debouncedValue","useDebounce","notification","useNotification","showMagicButton","onChange","e","address","useEffect","fireEvent","inputState","useMemo","Card","cn","jsx","Input","jsxs","Button","WandShine","Banner"],"mappings":";;;;;;;;;;;;;;;;;AAyBO,MAAMA,IAAc,CAAC,EAAE,OAAAC,GAAO,WAAAC,GAAW,OAAAC,QAAmB;AACjE,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACV,EAAE,uBAAAC,GAAuB,aAAAC,GAAa,iBAAAC,EAAA,IAAoBC,EAAA,GAE1D,CAACC,GAAOC,CAAQ,IAAIC,EAASR,EAAI,eAAe,EAAE,GAClD,CAACS,CAAc,IAAIC,EAAYJ,GAAO,GAAG,GAEzCK,IAAeC,EAAgBjB,CAAK,GAEpCkB,IACJb,EAAI,eACJ,CAACA,EAAI,eACLE,EAAsB,SAASF,EAAI,YAAY,UAAU,GAErDc,IAAW,CAACC,MAAqC;AACrD,UAAMC,IAAUD,EAAE,OAAO;AAEzB,IAAAR,EAASS,CAAO;AAAA,EAClB;AAGA,EAAAC,EAAU,MAAM;AACd,IAAId,KAAeA,MAAgBH,EAAI,eACrCkB,EAAU,cAAcf,CAAW;AAAA,EAEvC,GAAG,CAACA,GAAaH,EAAI,WAAW,CAAC,GAEjCiB,EAAU,MAAM;AACd,UAAMD,IAAUP,KAAkBH;AAElC,IAAAY,EAAU,cAAcF,CAAO,GAC/BnB,EAAM,EAAE,MAAM,0BAA0B,SAAAmB,EAAA,CAAS;AAAA,EACnD,GAAG,CAACP,CAAc,CAAC;AAEnB,QAAMU,IAAaC,EAAQ,MACrBjB,IACK,UAGFQ,GAAc,SAAS,WAC7B,CAACA,GAAcR,CAAW,CAAC;AAE9B,SAAIC,IACK,yBAINiB,GAAA,EAAK,WAAWC,EAAG,iBAAiB1B,CAAS,GAC5C,UAAA;AAAA,IAAA,gBAAA2B,EAAC,QAAG,WAAU,8CACX,UAAAzB,EAAE,qBAAqB,SAAS,GACnC;AAAA,IACA,gBAAAyB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,cAAcxB,EAAI;AAAA,QAClB,OAAOmB;AAAA,QACP,WAAU;AAAA,QACV,aAAarB;AAAA,UACX;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAAgB;AAAA,QACC,UAAA,CAAC,CAACD,KACD,gBAAAY;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAMR,EAAU,cAAclB,EAAI,iBAAiB,EAAE;AAAA,YAC9D,UAAA;AAAA,cAAA,gBAAAuB,EAACI,GAAA,EAAU,MAAM,GAAA,CAAI;AAAA,gCACpB,QAAA,EAAK,WAAU,oBACb,UAAA7B,EAAE,kCAAkC,WAAW,EAAA,CAClD;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAIHa,KAAgB,gBAAAY,EAACK,GAAA,EAAQ,GAAGjB,EAAA,CAAc;AAAA,EAAA,GAC7C;AAEJ;"}
@@ -1,5 +1,5 @@
1
1
  import { useMemo as o } from "react";
2
- import { b as d, y as l } from "../../config-DJObWR7Z.js";
2
+ import { b as d, y as l } from "../../config-BMvXuF1-.js";
3
3
  import { useTypedTranslation as c } from "../../localisation.js";
4
4
  import { getIntentsAccountId as u } from "../../utils/intents/getIntentsAccountId.js";
5
5
  import { CHAINS_LIST as f, EVM_CHAINS as m } from "../../constants/chains.js";
@@ -3,7 +3,7 @@ import "react-i18next";
3
3
  import "../../components/Button.js";
4
4
  import "../../components/TinyNumber.js";
5
5
  import "../../components/ErrorMessage.js";
6
- import { S as b } from "../../config-DJObWR7Z.js";
6
+ import { S as b } from "../../config-BMvXuF1-.js";
7
7
  import "../../localisation.js";
8
8
  import "../../utils/checkers/isNotEmptyAmount.js";
9
9
  export {
@@ -0,0 +1,5 @@
1
+ type Props = {
2
+ value: string;
3
+ };
4
+ export declare const CopyableValue: ({ value }: Props) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,11 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { formatAddressTruncate as o } from "../../utils/formatters/formatAddressTruncate.js";
3
+ import { CopyButton as t } from "../../components/CopyButton.js";
4
+ const l = ({ value: s }) => /* @__PURE__ */ r("span", { className: "text-sw-gray-50 flex items-center gap-sw-xs bg-sw-gray-800 rounded-full px-sw-sm py-sw-xs", children: [
5
+ o(s, 16),
6
+ /* @__PURE__ */ e(t, { className: "scale-80", value: s })
7
+ ] });
8
+ export {
9
+ l as CopyableValue
10
+ };
11
+ //# sourceMappingURL=CopyableValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyableValue.js","sources":["../../../src/features/SuccessScreen/CopyableValue.tsx"],"sourcesContent":["import { formatAddressTruncate } from '@/utils/formatters/formatAddressTruncate';\nimport { CopyButton } from '@/components/CopyButton';\n\ntype Props = {\n value: string;\n};\n\nexport const CopyableValue = ({ value }: Props) => (\n <span className=\"text-sw-gray-50 flex items-center gap-sw-xs bg-sw-gray-800 rounded-full px-sw-sm py-sw-xs\">\n {formatAddressTruncate(value, 16)}\n <CopyButton className=\"scale-80\" value={value} />\n </span>\n);\n"],"names":["CopyableValue","value","jsxs","formatAddressTruncate","jsx","CopyButton"],"mappings":";;;AAOO,MAAMA,IAAgB,CAAC,EAAE,OAAAC,QAC9B,gBAAAC,EAAC,QAAA,EAAK,WAAU,6FACb,UAAA;AAAA,EAAAC,EAAsBF,GAAO,EAAE;AAAA,EAChC,gBAAAG,EAACC,GAAA,EAAW,WAAU,YAAW,OAAAJ,EAAA,CAAc;AAAA,EAAA,CACjD;"}
@@ -0,0 +1,8 @@
1
+ import { Token } from '../../types/token';
2
+ type Props = {
3
+ token: Token;
4
+ amount: string;
5
+ amountUsd: number | bigint;
6
+ };
7
+ export declare const TokenRow: ({ token, amount, amountUsd }: Props) => import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,20 @@
1
+ import { jsxs as m, jsx as e } from "react/jsx-runtime";
2
+ import { Card as a } from "../../components/Card.js";
3
+ import { TokenIcon as o } from "../../components/TokenIcon.js";
4
+ import { formatUsdAmount as l } from "../../utils/formatters/formatUsdAmount.js";
5
+ const d = ({ token: s, amount: r, amountUsd: t }) => /* @__PURE__ */ m(a, { className: "flex items-center justify-between gap-sw-md pl-sw-2xl py-sw-lg", children: [
6
+ /* @__PURE__ */ e(
7
+ o,
8
+ {
9
+ token: s,
10
+ chainShowIcon: !s.isIntent,
11
+ className: "border-sw-gray-900"
12
+ }
13
+ ),
14
+ /* @__PURE__ */ e("div", { className: "text-sw-label-md text-sw-gray-50 mr-auto", children: `${r} ${s.symbol}` }),
15
+ /* @__PURE__ */ e("span", { className: "text-sw-label-sm text-sw-gray-200", children: l(t) })
16
+ ] });
17
+ export {
18
+ d as TokenRow
19
+ };
20
+ //# sourceMappingURL=TokenRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenRow.js","sources":["../../../src/features/SuccessScreen/TokenRow.tsx"],"sourcesContent":["import { Card } from '@/components/Card';\nimport { TokenIcon } from '@/components/TokenIcon';\nimport { formatUsdAmount } from '@/utils/formatters/formatUsdAmount';\nimport type { Token } from '@/types/token';\n\ntype Props = {\n token: Token;\n amount: string;\n amountUsd: number | bigint;\n};\n\nexport const TokenRow = ({ token, amount, amountUsd }: Props) => (\n <Card className=\"flex items-center justify-between gap-sw-md pl-sw-2xl py-sw-lg\">\n <TokenIcon\n token={token}\n chainShowIcon={!token.isIntent}\n className=\"border-sw-gray-900\"\n />\n <div className=\"text-sw-label-md text-sw-gray-50 mr-auto\">\n {`${amount} ${token.symbol}`}\n </div>\n <span className=\"text-sw-label-sm text-sw-gray-200\">\n {formatUsdAmount(amountUsd)}\n </span>\n </Card>\n);\n"],"names":["TokenRow","token","amount","amountUsd","jsxs","Card","jsx","TokenIcon","formatUsdAmount"],"mappings":";;;;AAWO,MAAMA,IAAW,CAAC,EAAE,OAAAC,GAAO,QAAAC,GAAQ,WAAAC,QACxC,gBAAAC,EAACC,GAAA,EAAK,WAAU,kEACd,UAAA;AAAA,EAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAN;AAAA,MACA,eAAe,CAACA,EAAM;AAAA,MACtB,WAAU;AAAA,IAAA;AAAA,EAAA;AAAA,EAEZ,gBAAAK,EAAC,SAAI,WAAU,4CACZ,aAAGJ,CAAM,IAAID,EAAM,MAAM,GAAA,CAC5B;AAAA,oBACC,QAAA,EAAK,WAAU,qCACb,UAAAO,EAAgBL,CAAS,EAAA,CAC5B;AAAA,EAAA,CACF;"}
@@ -3,9 +3,10 @@ type Msg = {
3
3
  type: 'on_dismiss_success';
4
4
  };
5
5
  type Props = TransferResult & {
6
- message: string | string[];
7
- onMsg?: (msg: Msg) => void;
8
- hideHeader?: boolean;
6
+ title: string;
7
+ message?: string;
8
+ showTargetToken?: boolean;
9
+ onMsg: (msg: Msg) => void;
9
10
  };
10
- export declare const SuccessScreen: ({ intent, transactionLink, hash: txHash, message, onMsg, hideHeader, }: Props) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const SuccessScreen: ({ title, message, showTargetToken, transactionLink, onMsg, ...transferResult }: Props) => import("react/jsx-runtime").JSX.Element | null;
11
12
  export {};
@@ -1,63 +1,165 @@
1
- import { jsxs as e, jsx as s, Fragment as h } from "react/jsx-runtime";
2
- import { Fragment as u } from "react";
3
- import { CheckIcon as x } from "./CheckIcon.js";
4
- import { SummaryItem as n } from "./SummaryItem.js";
5
- import { Hr as w } from "../../components/Hr.js";
6
- import { Card as y } from "../../components/Card.js";
7
- import { CloseButton as b } from "../../components/CloseButton.js";
8
- import { b as A } from "../../config-DJObWR7Z.js";
9
- import "ethers";
1
+ import { jsxs as o, jsx as t, Fragment as N } from "react/jsx-runtime";
2
+ import { Check as I, ArrowDownward as A, OpenInNew as U } from "@material-symbols-svg/react-rounded/w700";
3
+ import { TokenRow as f } from "./TokenRow.js";
4
+ import { CopyableValue as c } from "./CopyableValue.js";
5
+ import { useSummaryItemsCount as S } from "./useSummaryItemsCount.js";
6
+ import { Notes as r } from "../../components/Notes.js";
7
+ import { Button as h } from "../../components/Button.js";
8
+ import { CloseButton as C } from "../../components/CloseButton.js";
9
+ import { Accordion as F } from "../../components/Accordion.js";
10
+ import { guardStates as _ } from "../../machine/guards/index.js";
11
+ import { b as q } from "../../config-BMvXuF1-.js";
12
+ import { formatUsdAmount as B } from "../../utils/formatters/formatUsdAmount.js";
13
+ import { formatTinyNumber as E } from "../../utils/formatters/formatTinyNumber.js";
14
+ import { formatBigToHuman as g } from "../../utils/formatters/formatBigToHuman.js";
15
+ import { useTypedTranslation as O } from "../../localisation.js";
16
+ import "react";
17
+ import "@tanstack/react-query";
18
+ import "@defuse-protocol/one-click-sdk-typescript";
19
+ import "../../constants/chains.js";
10
20
  import "../../machine/machine.js";
11
- import { fireEvent as C } from "../../machine/events/utils/fireEvent.js";
12
- import { useTypedTranslation as N } from "../../localisation.js";
13
- const H = ({
14
- intent: l,
15
- transactionLink: m,
16
- hash: i,
17
- message: r,
18
- onMsg: c,
19
- hideHeader: f
21
+ import { logger as j } from "../../logger.js";
22
+ import "zod";
23
+ import "../../utils/near/rpc.js";
24
+ import "../../index-DEq3oXQF.js";
25
+ import "@defuse-protocol/intents-sdk";
26
+ import "change-case";
27
+ import "@defuse-protocol/internal-utils";
28
+ import "bs58";
29
+ import "../../index-xuotMAFm.js";
30
+ import "axios";
31
+ import "../../network.js";
32
+ import "ethers";
33
+ import "viem";
34
+ import "../../utils/cn.js";
35
+ import "viem/chains";
36
+ import "browser-or-node";
37
+ import { useHandleKeyDown as z } from "../../hooks/useHandleKeyDown.js";
38
+ const H = 44, be = ({
39
+ title: w,
40
+ message: l,
41
+ showTargetToken: x = !0,
42
+ transactionLink: T,
43
+ onMsg: y,
44
+ ...a
20
45
  }) => {
21
- const { ctx: p } = A(), { t } = N(), a = Array.isArray(r) ? r : [r];
22
- return /* @__PURE__ */ e(y, { className: "w-full", children: [
23
- !f && /* @__PURE__ */ e(h, { children: [
24
- /* @__PURE__ */ e("header", { className: "flex justify-between", children: [
25
- /* @__PURE__ */ s(x, {}),
26
- /* @__PURE__ */ s(b, { onClick: () => {
27
- C("reset", { clearWalletAddress: !1 }).moveTo(
28
- p.walletAddress ? "initial_wallet" : "initial_dry"
29
- ), c?.({ type: "on_dismiss_success" });
30
- } })
31
- ] }),
32
- /* @__PURE__ */ s("span", { className: "text-sw-label-lg text-sw-gray-50", children: t("transfer.success.title", "All done!") })
46
+ const { t: s } = O(), { ctx: e } = q(), k = _(e, ["transfer_success"]), n = () => y({ type: "on_dismiss_success" }), b = S(!!a.intent);
47
+ if (z("Escape", n), !k)
48
+ return j.warn(
49
+ "[WIDGET] Success screen can be rendered only in transfer_success state"
50
+ ), null;
51
+ const i = g(
52
+ e.quote?.amountIn ?? e.sourceTokenAmount,
53
+ e.sourceToken.decimals
54
+ ), m = g(
55
+ e.quote?.amountOut ?? e.targetTokenAmount,
56
+ e.targetToken.decimals
57
+ ), u = e.quote?.amountInUsd ? parseFloat(e.quote.amountInUsd) : e.sourceToken.price * parseFloat(i), d = e.quote?.amountOutUsd ? parseFloat(e.quote.amountOutUsd) : e.targetToken.price * parseFloat(m), p = d / parseFloat(m), v = E(
58
+ p / (parseFloat(i) / u)
59
+ );
60
+ return /* @__PURE__ */ o("div", { className: "flex flex-col gap-sw-2xl w-full", children: [
61
+ /* @__PURE__ */ o("header", { className: "flex items-center gap-sw-lg", children: [
62
+ /* @__PURE__ */ t("div", { className: "flex items-center justify-center p-sw-md bg-sw-status-success rounded-sw-md", children: /* @__PURE__ */ t(I, { size: 20, className: "text-sw-gray-900" }) }),
63
+ /* @__PURE__ */ t("span", { className: "text-sw-label-lg text-sw-status-success mr-auto", children: w }),
64
+ /* @__PURE__ */ t(C, { onClick: n })
33
65
  ] }),
34
- /* @__PURE__ */ s("p", { className: "mt-sw-sm text-sw-body-md text-sw-gray-400", children: a.map((d, o) => /* @__PURE__ */ e(u, { children: [
35
- d,
36
- o !== a.length - 1 && /* @__PURE__ */ s("br", {})
37
- ] }, o)) }),
38
- /* @__PURE__ */ s(w, { className: "mt-sw-xl mb-sw-md" }),
39
- /* @__PURE__ */ e("ul", { className: "mt-sw-xl flex flex-col", children: [
40
- /* @__PURE__ */ s(
41
- n,
66
+ !!l && /* @__PURE__ */ t("p", { className: "text-sw-body-md text-sw-gray-200", children: l }),
67
+ /* @__PURE__ */ o("div", { className: "flex flex-col", children: [
68
+ /* @__PURE__ */ t(
69
+ f,
42
70
  {
43
- hasCopyAction: !0,
44
- value: i,
45
- externalUrl: m,
46
- label: t("transfer.success.hash.label", "Transaction hash")
71
+ token: e.sourceToken,
72
+ amount: i,
73
+ amountUsd: u
47
74
  }
48
75
  ),
49
- !!l && /* @__PURE__ */ s(
50
- n,
76
+ x && /* @__PURE__ */ o(N, { children: [
77
+ /* @__PURE__ */ t("div", { className: "flex items-center justify-center w-full h-[12px] z-1", children: /* @__PURE__ */ t("div", { className: "flex items-center justify-center p-sw-md bg-sw-gray-950 rounded-sw-md w-fit", children: /* @__PURE__ */ t(A, { size: 18, className: "text-sw-gray-200" }) }) }),
78
+ /* @__PURE__ */ t(
79
+ f,
80
+ {
81
+ token: e.targetToken,
82
+ amount: m,
83
+ amountUsd: d
84
+ }
85
+ )
86
+ ] })
87
+ ] }),
88
+ /* @__PURE__ */ t(
89
+ F,
90
+ {
91
+ expandedByDefault: !1,
92
+ expandedHeightPx: b * H,
93
+ title: s("transfer.success.details.label", "Transaction details"),
94
+ children: /* @__PURE__ */ o(r, { children: [
95
+ e.sourceToken.symbol !== e.targetToken.symbol && /* @__PURE__ */ t(
96
+ r.Item,
97
+ {
98
+ label: s("transfer.success.details.rate", "Rate"),
99
+ value: /* @__PURE__ */ o(
100
+ "span",
101
+ {
102
+ className: "text-sw-gray-50",
103
+ style: { borderBottomWidth: "2px", borderStyle: "dotted" },
104
+ children: [
105
+ `1 ${e.targetToken.symbol} ≈ `,
106
+ " ",
107
+ v,
108
+ " ",
109
+ `${e.sourceToken.symbol}`,
110
+ /* @__PURE__ */ t("span", { children: ` (${B(p)})` })
111
+ ]
112
+ }
113
+ )
114
+ }
115
+ ),
116
+ !!e.sendAddress && /* @__PURE__ */ t(
117
+ r.Item,
118
+ {
119
+ label: s(
120
+ "transfer.success.details.recipient",
121
+ "Recipient address"
122
+ ),
123
+ value: /* @__PURE__ */ t(c, { value: e.sendAddress })
124
+ }
125
+ ),
126
+ !!a.intent && /* @__PURE__ */ t(
127
+ r.Item,
128
+ {
129
+ label: s("transfer.success.details.intent", "Intent hash"),
130
+ value: /* @__PURE__ */ t(c, { value: a.intent })
131
+ }
132
+ ),
133
+ /* @__PURE__ */ t(
134
+ r.Item,
135
+ {
136
+ label: s("transfer.success.details.hash", "Transaction hash"),
137
+ value: /* @__PURE__ */ t(c, { value: a.hash })
138
+ }
139
+ )
140
+ ] })
141
+ }
142
+ ),
143
+ /* @__PURE__ */ o("div", { className: "flex flex-col gap-sw-lg", children: [
144
+ /* @__PURE__ */ t(
145
+ h,
51
146
  {
52
- hasCopyAction: !0,
53
- label: t("transfer.success.intent.label", "Intent"),
54
- value: l
147
+ fluid: !0,
148
+ as: "a",
149
+ size: "lg",
150
+ target: "_blank",
151
+ variant: "primary",
152
+ iconPosition: "tail",
153
+ href: T,
154
+ icon: U,
155
+ children: s("transfer.success.action.viewOnExplorer", "View in explorer")
55
156
  }
56
- )
157
+ ),
158
+ /* @__PURE__ */ t(h, { fluid: !0, size: "lg", variant: "outlined", onClick: n, children: s("transfer.success.action.backToSwap", "Back to swap") })
57
159
  ] })
58
160
  ] });
59
161
  };
60
162
  export {
61
- H as SuccessScreen
163
+ be as SuccessScreen
62
164
  };
63
165
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/features/SuccessScreen/index.tsx"],"sourcesContent":["import { Fragment } from 'react';\n\nimport { CheckIcon } from './CheckIcon';\nimport { SummaryItem } from './SummaryItem';\nimport { Hr } from '@/components/Hr';\nimport { Card } from '@/components/Card';\nimport { CloseButton } from '@/components/CloseButton';\nimport type { TransferResult } from '@/types/transfer';\n\nimport { fireEvent, useUnsafeSnapshot } from '@/machine';\nimport { useTypedTranslation } from '@/localisation';\n\ntype Msg = { type: 'on_dismiss_success' };\n\ntype Props = TransferResult & {\n message: string | string[];\n onMsg?: (msg: Msg) => void;\n hideHeader?: boolean;\n};\n\nexport const SuccessScreen = ({\n intent,\n transactionLink,\n hash: txHash,\n message,\n onMsg,\n hideHeader,\n}: Props) => {\n const { ctx } = useUnsafeSnapshot();\n const { t } = useTypedTranslation();\n const lines = Array.isArray(message) ? message : [message];\n\n const onDismiss = () => {\n fireEvent('reset', { clearWalletAddress: false }).moveTo(\n ctx.walletAddress ? 'initial_wallet' : 'initial_dry',\n );\n onMsg?.({ type: 'on_dismiss_success' });\n };\n\n return (\n <Card className=\"w-full\">\n {!hideHeader && (\n <>\n <header className=\"flex justify-between\">\n <CheckIcon />\n <CloseButton onClick={onDismiss} />\n </header>\n <span className=\"text-sw-label-lg text-sw-gray-50\">\n {t('transfer.success.title', 'All done!')}\n </span>\n </>\n )}\n <p className=\"mt-sw-sm text-sw-body-md text-sw-gray-400\">\n {lines.map((line, idx) => (\n <Fragment key={idx}>\n {line}\n {idx !== lines.length - 1 && <br />}\n </Fragment>\n ))}\n </p>\n <Hr className=\"mt-sw-xl mb-sw-md\" />\n <ul className=\"mt-sw-xl flex flex-col\">\n <SummaryItem\n hasCopyAction\n value={txHash}\n externalUrl={transactionLink}\n label={t('transfer.success.hash.label', 'Transaction hash')}\n />\n {!!intent && (\n <SummaryItem\n hasCopyAction\n label={t('transfer.success.intent.label', 'Intent')}\n value={intent}\n />\n )}\n </ul>\n </Card>\n );\n};\n"],"names":["SuccessScreen","intent","transactionLink","txHash","message","onMsg","hideHeader","ctx","useUnsafeSnapshot","useTypedTranslation","lines","jsxs","Card","Fragment","jsx","CheckIcon","CloseButton","fireEvent","line","idx","Hr","SummaryItem"],"mappings":";;;;;;;;;;;;AAoBO,MAAMA,IAAgB,CAAC;AAAA,EAC5B,QAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,MAAMC;AAAA,EACN,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AACF,MAAa;AACX,QAAM,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACV,EAAE,EAAA,IAAMC,EAAA,GACRC,IAAQ,MAAM,QAAQN,CAAO,IAAIA,IAAU,CAACA,CAAO;AASzD,SACE,gBAAAO,EAACC,GAAA,EAAK,WAAU,UACb,UAAA;AAAA,IAAA,CAACN,KACA,gBAAAK,EAAAE,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAF,EAAC,UAAA,EAAO,WAAU,wBAChB,UAAA;AAAA,QAAA,gBAAAG,EAACC,GAAA,EAAU;AAAA,QACX,gBAAAD,EAACE,GAAA,EAAY,SAbL,MAAM;AACtB,UAAAC,EAAU,SAAS,EAAE,oBAAoB,GAAA,CAAO,EAAE;AAAA,YAChDV,EAAI,gBAAgB,mBAAmB;AAAA,UAAA,GAEzCF,IAAQ,EAAE,MAAM,sBAAsB;AAAA,QACxC,EAQgC,CAAW;AAAA,MAAA,GACnC;AAAA,wBACC,QAAA,EAAK,WAAU,oCACb,UAAA,EAAE,0BAA0B,WAAW,EAAA,CAC1C;AAAA,IAAA,GACF;AAAA,IAEF,gBAAAS,EAAC,KAAA,EAAE,WAAU,6CACV,UAAAJ,EAAM,IAAI,CAACQ,GAAMC,MAChB,gBAAAR,EAACE,GAAA,EACE,UAAA;AAAA,MAAAK;AAAA,MACAC,MAAQT,EAAM,SAAS,uBAAM,MAAA,CAAA,CAAG;AAAA,IAAA,KAFpBS,CAGf,CACD,GACH;AAAA,IACA,gBAAAL,EAACM,GAAA,EAAG,WAAU,oBAAA,CAAoB;AAAA,IAClC,gBAAAT,EAAC,MAAA,EAAG,WAAU,0BACZ,UAAA;AAAA,MAAA,gBAAAG;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,eAAa;AAAA,UACb,OAAOlB;AAAA,UACP,aAAaD;AAAA,UACb,OAAO,EAAE,+BAA+B,kBAAkB;AAAA,QAAA;AAAA,MAAA;AAAA,MAE3D,CAAC,CAACD,KACD,gBAAAa;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,eAAa;AAAA,UACb,OAAO,EAAE,iCAAiC,QAAQ;AAAA,UAClD,OAAOpB;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/features/SuccessScreen/index.tsx"],"sourcesContent":["import {\n ArrowDownward,\n Check,\n OpenInNew,\n} from '@material-symbols-svg/react-rounded/w700';\n\nimport { TokenRow } from './TokenRow';\nimport { CopyableValue } from './CopyableValue';\nimport { useSummaryItemsCount } from './useSummaryItemsCount';\n\nimport { Notes } from '@/components/Notes';\nimport { Button } from '@/components/Button';\nimport { CloseButton } from '@/components/CloseButton';\nimport { Accordion } from '@/components/Accordion';\n\nimport { guardStates } from '@/machine/guards';\nimport { useUnsafeSnapshot } from '@/machine/snap';\nimport { formatUsdAmount } from '@/utils/formatters/formatUsdAmount';\nimport { formatTinyNumber } from '@/utils/formatters/formatTinyNumber';\nimport { formatBigToHuman } from '@/utils/formatters/formatBigToHuman';\nimport { useTypedTranslation } from '@/localisation';\nimport { useHandleKeyDown } from '@/hooks';\nimport { logger } from '@/logger';\n\nimport type { TransferResult } from '@/types/transfer';\n\nconst NOTES_ITEM_HEIGHT = 44;\n\ntype Msg = { type: 'on_dismiss_success' };\n\ntype Props = TransferResult & {\n title: string;\n message?: string;\n showTargetToken?: boolean;\n onMsg: (msg: Msg) => void;\n};\n\nexport const SuccessScreen = ({\n title,\n message,\n showTargetToken = true,\n transactionLink,\n onMsg,\n ...transferResult\n}: Props) => {\n const { t } = useTypedTranslation();\n const { ctx } = useUnsafeSnapshot();\n\n const isValidState = guardStates(ctx, ['transfer_success']);\n const handleClose = () => onMsg({ type: 'on_dismiss_success' });\n const summaryItemsCount = useSummaryItemsCount(!!transferResult.intent);\n\n useHandleKeyDown('Escape', handleClose);\n\n if (!isValidState) {\n logger.warn(\n '[WIDGET] Success screen can be rendered only in transfer_success state',\n );\n\n return null;\n }\n\n const sourceAmount = formatBigToHuman(\n ctx.quote?.amountIn ?? ctx.sourceTokenAmount,\n ctx.sourceToken.decimals,\n );\n\n const targetAmount = formatBigToHuman(\n ctx.quote?.amountOut ?? ctx.targetTokenAmount,\n ctx.targetToken.decimals,\n );\n\n const sourceAmountUsd = ctx.quote?.amountInUsd\n ? parseFloat(ctx.quote.amountInUsd)\n : ctx.sourceToken.price * parseFloat(sourceAmount);\n\n const targetAmountUsd = ctx.quote?.amountOutUsd\n ? parseFloat(ctx.quote.amountOutUsd)\n : ctx.targetToken.price * parseFloat(targetAmount);\n\n const targetTokenUnitPrice = targetAmountUsd / parseFloat(targetAmount);\n\n const sourceTokenUnitAmount = formatTinyNumber(\n targetTokenUnitPrice / (parseFloat(sourceAmount) / sourceAmountUsd),\n );\n\n return (\n <div className=\"flex flex-col gap-sw-2xl w-full\">\n <header className=\"flex items-center gap-sw-lg\">\n <div className=\"flex items-center justify-center p-sw-md bg-sw-status-success rounded-sw-md\">\n <Check size={20} className=\"text-sw-gray-900\" />\n </div>\n <span className=\"text-sw-label-lg text-sw-status-success mr-auto\">\n {title}\n </span>\n <CloseButton onClick={handleClose} />\n </header>\n\n {!!message && (\n <p className=\"text-sw-body-md text-sw-gray-200\">{message}</p>\n )}\n\n <div className=\"flex flex-col\">\n <TokenRow\n token={ctx.sourceToken}\n amount={sourceAmount}\n amountUsd={sourceAmountUsd}\n />\n {showTargetToken && (\n <>\n <div className=\"flex items-center justify-center w-full h-[12px] z-1\">\n <div className=\"flex items-center justify-center p-sw-md bg-sw-gray-950 rounded-sw-md w-fit\">\n <ArrowDownward size={18} className=\"text-sw-gray-200\" />\n </div>\n </div>\n <TokenRow\n token={ctx.targetToken}\n amount={targetAmount}\n amountUsd={targetAmountUsd}\n />\n </>\n )}\n </div>\n\n <Accordion\n expandedByDefault={false}\n expandedHeightPx={summaryItemsCount * NOTES_ITEM_HEIGHT}\n title={t('transfer.success.details.label', 'Transaction details')}>\n <Notes>\n {ctx.sourceToken.symbol !== ctx.targetToken.symbol && (\n <Notes.Item\n label={t('transfer.success.details.rate', 'Rate')}\n value={\n <span\n className=\"text-sw-gray-50\"\n style={{ borderBottomWidth: '2px', borderStyle: 'dotted' }}>\n {`1 ${ctx.targetToken.symbol} ≈ `} {sourceTokenUnitAmount}{' '}\n {`${ctx.sourceToken.symbol}`}\n <span>{` (${formatUsdAmount(targetTokenUnitPrice)})`}</span>\n </span>\n }\n />\n )}\n {/* send address is missing if target token is on intents */}\n {!!ctx.sendAddress && (\n <Notes.Item\n label={t(\n 'transfer.success.details.recipient',\n 'Recipient address',\n )}\n value={<CopyableValue value={ctx.sendAddress} />}\n />\n )}\n {!!transferResult.intent && (\n <Notes.Item\n label={t('transfer.success.details.intent', 'Intent hash')}\n value={<CopyableValue value={transferResult.intent} />}\n />\n )}\n <Notes.Item\n label={t('transfer.success.details.hash', 'Transaction hash')}\n value={<CopyableValue value={transferResult.hash} />}\n />\n </Notes>\n </Accordion>\n\n <div className=\"flex flex-col gap-sw-lg\">\n <Button\n fluid\n as=\"a\"\n size=\"lg\"\n target=\"_blank\"\n variant=\"primary\"\n iconPosition=\"tail\"\n href={transactionLink}\n icon={OpenInNew}>\n {t('transfer.success.action.viewOnExplorer', 'View in explorer')}\n </Button>\n <Button fluid size=\"lg\" variant=\"outlined\" onClick={handleClose}>\n {t('transfer.success.action.backToSwap', 'Back to swap')}\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["NOTES_ITEM_HEIGHT","SuccessScreen","title","message","showTargetToken","transactionLink","onMsg","transferResult","t","useTypedTranslation","ctx","useUnsafeSnapshot","isValidState","guardStates","handleClose","summaryItemsCount","useSummaryItemsCount","useHandleKeyDown","logger","sourceAmount","formatBigToHuman","targetAmount","sourceAmountUsd","targetAmountUsd","targetTokenUnitPrice","sourceTokenUnitAmount","formatTinyNumber","jsxs","jsx","Check","CloseButton","TokenRow","Fragment","ArrowDownward","Accordion","Notes","formatUsdAmount","CopyableValue","Button","OpenInNew"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const useSummaryItemsCount: (hasIntentHash: boolean) => number;
@@ -0,0 +1,14 @@
1
+ import { useMemo as r } from "react";
2
+ import { guardStates as m } from "../../machine/guards/index.js";
3
+ import { b as n } from "../../config-BMvXuF1-.js";
4
+ const i = (t) => {
5
+ const { ctx: s } = n(), o = m(s, ["transfer_success"]);
6
+ return r(() => {
7
+ let e = 1;
8
+ return o ? (s.sourceToken.symbol !== s.targetToken.symbol && (e += 1), s.sendAddress && (e += 1), t && (e += 1), e) : 0;
9
+ }, [t, s.sendAddress, s.sourceToken, s.targetToken]);
10
+ };
11
+ export {
12
+ i as useSummaryItemsCount
13
+ };
14
+ //# sourceMappingURL=useSummaryItemsCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSummaryItemsCount.js","sources":["../../../src/features/SuccessScreen/useSummaryItemsCount.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { guardStates } from '@/machine/guards';\nimport { useUnsafeSnapshot } from '@/machine/snap';\n\nexport const useSummaryItemsCount = (hasIntentHash: boolean) => {\n const { ctx } = useUnsafeSnapshot();\n const isValidState = guardStates(ctx, ['transfer_success']);\n\n const summaryItemsCount = useMemo(() => {\n let count = 1;\n\n if (!isValidState) {\n return 0;\n }\n\n if (ctx.sourceToken.symbol !== ctx.targetToken.symbol) {\n count += 1;\n }\n\n if (ctx.sendAddress) {\n count += 1;\n }\n\n if (hasIntentHash) {\n count += 1;\n }\n\n return count;\n }, [hasIntentHash, ctx.sendAddress, ctx.sourceToken, ctx.targetToken]);\n\n return summaryItemsCount;\n};\n"],"names":["useSummaryItemsCount","hasIntentHash","ctx","useUnsafeSnapshot","isValidState","guardStates","useMemo","count"],"mappings":";;;AAKO,MAAMA,IAAuB,CAACC,MAA2B;AAC9D,QAAM,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACVC,IAAeC,EAAYH,GAAK,CAAC,kBAAkB,CAAC;AAwB1D,SAtB0BI,EAAQ,MAAM;AACtC,QAAIC,IAAQ;AAEZ,WAAKH,KAIDF,EAAI,YAAY,WAAWA,EAAI,YAAY,WAC7CK,KAAS,IAGPL,EAAI,gBACNK,KAAS,IAGPN,MACFM,KAAS,IAGJA,KAfE;AAAA,EAgBX,GAAG,CAACN,GAAeC,EAAI,aAAaA,EAAI,aAAaA,EAAI,WAAW,CAAC;AAGvE;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
2
  import { DirectionSwitcher as r } from "../components/DirectionSwitcher.js";
3
- import { b as i } from "../config-DJObWR7Z.js";
3
+ import { b as i } from "../config-BMvXuF1-.js";
4
4
  import "ethers";
5
5
  import "../machine/machine.js";
6
6
  import { fireEvent as n } from "../machine/events/utils/fireEvent.js";
@@ -1,6 +1,6 @@
1
1
  import "react/jsx-runtime";
2
2
  import "./SwapQuoteSkeleton.js";
3
- import { a3 as s } from "../../config-DJObWR7Z.js";
3
+ import { a4 as s } from "../../config-BMvXuF1-.js";
4
4
  import "../../components/Notes.js";
5
5
  import "../../components/Accordion.js";
6
6
  import "../../utils/formatters/formatUsdAmount.js";
@@ -1,4 +1,4 @@
1
- import { o as t } from "../../config-DJObWR7Z.js";
1
+ import { o as t } from "../../config-BMvXuF1-.js";
2
2
  import "./SwapQuoteSkeleton.js";
3
3
  export {
4
4
  t as SwapQuote
@@ -1,6 +1,6 @@
1
1
  import "react/jsx-runtime";
2
2
  import "react";
3
- import { a5 as I } from "../../config-DJObWR7Z.js";
3
+ import { a6 as I } from "../../config-BMvXuF1-.js";
4
4
  import "./utils/getBalancePortion.js";
5
5
  import "./utils/getUsdDisplayAmount.js";
6
6
  import "./TokenInputHeading.js";
@@ -1,5 +1,5 @@
1
1
  import "react/jsx-runtime";
2
- import { a6 as f } from "../../config-DJObWR7Z.js";
2
+ import { a7 as f } from "../../config-BMvXuF1-.js";
3
3
  import "../../constants/chains.js";
4
4
  import "viem";
5
5
  import "ethers";
@@ -1,6 +1,6 @@
1
1
  import "react/jsx-runtime";
2
2
  import "react";
3
- import { a8 as e } from "../../config-DJObWR7Z.js";
3
+ import { a9 as e } from "../../config-BMvXuF1-.js";
4
4
  import "../../utils/formatters/formatBigToHuman.js";
5
5
  export {
6
6
  e as TokenInputSource
@@ -1,8 +1,8 @@
1
1
  import "react/jsx-runtime";
2
2
  import "react";
3
- import { a9 as a } from "../../config-DJObWR7Z.js";
3
+ import { aa as m } from "../../config-BMvXuF1-.js";
4
4
  import "../../utils/formatters/formatBigToHuman.js";
5
5
  export {
6
- a as TokenInputTarget
6
+ m as TokenInputTarget
7
7
  };
8
8
  //# sourceMappingURL=TokenInputTarget.js.map