@tuwaio/nova-transactions 0.0.8 → 0.0.9

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/i18n/en.ts","../../src/providers/LabelsProvider.tsx","../../src/components/HashLink.tsx","../../src/components/StatusAwareText.tsx","../../src/components/ToastCloseButton.tsx","../../src/components/TransactionKey.tsx","../../src/components/TransactionStatusBadge.tsx","../../src/components/ToastTransaction.tsx","../../src/components/TrackingTxModal/TxErrorBlock.tsx","../../src/components/TrackingTxModal/TxInfoBlock.tsx","../../src/components/TrackingTxModal/TxProgressIndicator.tsx","../../src/components/TrackingTxModal/TxStatusVisual.tsx","../../src/components/TrackingTxModal/TrackingTxModal.tsx","../../src/components/TransactionHistoryItem.tsx","../../src/components/TransactionsHistory.tsx","../../src/components/WalletInfoModal/WalletAddressDisplay.tsx","../../src/components/WalletInfoModal/WalletAvatar.tsx","../../src/components/WalletInfoModal/WalletHeader.tsx","../../src/components/WalletInfoModal/WalletInfoModal.tsx","../../src/providers/NovaProvider.tsx"],"names":["defaultLabels","LabelsContext","createContext","LabelsProvider","labels","children","jsx","useLabels","useContext","HashLink","label","hash","explorerUrl","variant","className","isCopied","copy","useCopyToClipboard","containerClasses","cn","labelClasses","hashContent","textCenterEllipsis","jsxs","ArrowTopRightOnSquareIcon","CheckIcon","DocumentDuplicateIcon","STATUS_MAP","TransactionStatus","StatusAwareText","txStatus","source","fallback","applyColor","baseClasses","config","text","colorClass","ToastCloseButton","closeToast","XMarkIcon","TransactionKey","tx","appChains","transactionsPool","renderHashLink","TransactionAdapter","wasReplaced","renderHash","props","TransactionTracker","Fragment","selectEvmTxExplorerLink","TransactionStatusBadge","STATUS_CONFIG","ArrowPathIcon","CheckCircleIcon","XCircleIcon","statusKey","Icon","badgeClasses","iconClasses","ToastTransaction","openWalletInfoModal","icon","customization","C","canReplace","handleSpeedUp","speedUpTxAction","handleCancel","cancelTxAction","getChainName","Web3Icon","TxErrorBlock","error","ExclamationTriangleIcon","InfoRow","value","TxInfoBlock","renderInfoRow","dayjs","Step","status","isFirst","state","colorConfig","TxProgressIndicator","isProcessing","isSucceed","isFailed","isReplaced","StepComponent","getStepStatus","stepIndex","getStepLabel","steps","stepProps","index","TxStatusVisual","ExclamationCircleIcon","ClockIcon","TrackingTxModal","onClose","onOpenWalletInfo","actions","handleTransaction","initialTx","trackedTx","setTrackedTx","useState","useEffect","currentTx","txToDisplay","isInitializing","isPending","isError","canRetry","motionProps","handleRetry","retryParams","isOpen","h","open","AnimatePresence","motion","relativeTime","TransactionHistoryItem","HistoryPlaceholder","title","message","TransactionsHistory","walletAddress","sortedTransactions","selectAllTransactionsByActiveWallet","a","b","renderPlaceholder","HistoryItemComponent","WalletAddressDisplay","address","chain","explorerLink","WalletAvatar","ensAvatar","bgColor","avatar","setAvatar","makeBlockie","isHex","zeroAddress","WalletHeader","renderAvatar","renderName","renderAddressDisplay","renderNoWalletContent","ensName","setEnsName","setEnsAvatar","isLoading","setIsLoading","name","getName","getAvatar","ensNameAbbreviated","WalletInfoModal","setIsOpen","closeModal","w","STATUS_TO_TOAST_TYPE","NovaProvider","features","closeTxTrackedModal","toastProps","isWalletInfoModalOpen","setIsWalletInfoModalOpen","prevTransactionsRef","useRef","enabledFeatures","useMemo","mergedLabels","deepMerge","showOrUpdateToast","type","content","toast","prevPool","prevTx","statusChanged","hashAppeared","toastType","ToastContainer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @file This file contains the default English labels for all UI components.\n * It serves as the default language pack for the library.\n */\n\nimport { TuwaLabels } from './types';\n\n/**\n * An object containing the default English text for all labels used in the UI.\n * This object implements the `TuwaLabels` type and can be used as a template\n * for creating other language translations.\n */\nexport const defaultLabels: TuwaLabels = {\n walletModal: {\n title: 'Wallet & Transactions',\n header: {\n notConnected: 'Wallet not connected',\n avatarAlt: 'Avatar for',\n },\n history: {\n title: 'Transactions History',\n connectWalletTitle: 'Connect Wallet',\n connectWalletMessage: 'Please connect your wallet to see your past activity.',\n noTransactionsTitle: 'No Transactions Yet',\n noTransactionsMessage: 'Once you interact with the app, your transaction history will appear here.',\n },\n },\n toast: {\n openWalletInfo: 'Open wallet info',\n },\n statuses: {\n pending: 'Pending',\n success: 'Success',\n failed: 'Failed',\n reverted: 'Reverted',\n replaced: 'Replaced',\n unknown: 'Unknown',\n },\n hashLabels: {\n gelato: 'Gelato Task ID',\n safe: 'Safe Tx Hash',\n original: 'Original Tx Hash',\n replaced: 'Replaced Tx Hash',\n default: 'Tx Hash',\n },\n txInfo: {\n started: 'Started',\n network: 'Network',\n },\n txError: {\n title: 'Error',\n copied: 'Copied!',\n },\n trackingModal: {\n title: 'Transaction Overview',\n processing: 'Processing...',\n close: 'Close',\n walletInfo: 'Wallet Info',\n retry: 'Retry',\n progressIndicator: {\n created: 'Created',\n processing: 'Processing',\n succeed: 'Succeed',\n },\n },\n trackedTxButton: {\n loading: 'Processing...',\n succeed: 'Success',\n failed: 'Failed',\n replaced: 'Replaced',\n },\n actions: {\n copy: 'Copy address',\n viewOnExplorer: 'View on explorer',\n close: 'Close',\n cancel: 'Cancel',\n speedUp: 'Speed up',\n },\n};\n","/**\n * @file This file sets up the React Context for providing i18n labels throughout the UI components.\n * It allows for deep customization of all text displayed by the library.\n */\n\nimport { createContext, ReactNode, useContext } from 'react';\n\nimport { defaultLabels } from '../i18n/en';\nimport { TuwaLabels } from '../i18n/types';\n\n/**\n * React Context for storing and providing the UI labels.\n * It is initialized with the default English labels, ensuring that components\n * work even without an explicit provider.\n */\nconst LabelsContext = createContext<TuwaLabels>(defaultLabels);\n\n/**\n * A React component that provides a custom set of labels to all child components.\n * Wrap your application or component tree with this provider to apply custom translations.\n *\n * @param {object} props - The component props.\n * @param {TuwaLabels} props.labels - An object containing the custom labels.\n * @param {ReactNode} props.children - The child components to render.\n */\nexport const LabelsProvider = ({ labels, children }: { labels: TuwaLabels; children: ReactNode }) => {\n return <LabelsContext.Provider value={labels}>{children}</LabelsContext.Provider>;\n};\n\n/**\n * A custom hook to easily access the i18n labels from any component\n * within the `LabelsProvider` tree.\n *\n * @returns {TuwaLabels} The complete object of UI labels.\n *\n * @example\n * const MyComponent = () => {\n * const labels = useLabels();\n * return <h1>{labels.walletModal.title}</h1>;\n * }\n */\nexport const useLabels = (): TuwaLabels => {\n return useContext(LabelsContext);\n};\n","/**\n * @file This file contains the `HashLink` component, a UI element for displaying hashes with copy and explorer link functionality.\n */\n\nimport { ArrowTopRightOnSquareIcon, CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/24/solid';\nimport { cn, textCenterEllipsis, useCopyToClipboard } from '@tuwaio/nova-core';\n\nimport { useLabels } from '../providers';\n\n/**\n * A component to display a hash string (e.g., transaction hash or address)\n * with an optional label, a link to a block explorer, and a copy-to-clipboard button.\n *\n * @param {object} props - The component props.\n * @param {string} [props.label] - An optional label to display before the hash (e.g., \"Tx Hash\").\n * @param {string} props.hash - The full hash string to display and copy.\n * @param {string} [props.explorerUrl] - An optional URL to a block explorer. If provided, the hash becomes a link.\n * @param {'default' | 'compact'} [props.variant='default'] - The visual style of the component.\n * @param {string} [props.className] - Additional CSS classes to apply to the container element.\n * @returns {JSX.Element} The rendered HashLink component.\n */\nexport function HashLink({\n label,\n hash,\n explorerUrl,\n variant = 'default',\n className,\n}: {\n label?: string;\n hash: string;\n explorerUrl?: string;\n variant?: 'default' | 'compact';\n className?: string;\n}) {\n const { isCopied, copy } = useCopyToClipboard();\n const labels = useLabels();\n\n const containerClasses = cn(\n 'flex items-center justify-between',\n variant === 'default' && 'text-sm',\n variant === 'compact' && 'text-xs',\n className,\n );\n\n const labelClasses = cn(\n 'pr-1',\n variant === 'default' && 'font-bold text-[var(--tuwa-text-primary)]',\n variant === 'compact' && 'font-medium text-[var(--tuwa-text-secondary)]',\n );\n\n const hashContent = <span className=\"font-mono\">{textCenterEllipsis(hash, 5, 5)}</span>;\n\n return (\n <div className={containerClasses}>\n {label && <span className={labelClasses}>{label}:</span>}\n <div className=\"flex items-center gap-x-2\">\n {explorerUrl ? (\n <a\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-x-1 text-[var(--tuwa-text-accent)] hover:underline\"\n title={labels.actions.viewOnExplorer}\n aria-label={labels.actions.viewOnExplorer}\n >\n {hashContent}\n <ArrowTopRightOnSquareIcon className=\"h-4 w-4\" />\n </a>\n ) : (\n hashContent\n )}\n <button\n type=\"button\"\n onClick={() => copy(hash)}\n className=\"cursor-pointer text-[var(--tuwa-text-tertiary)] transition-colors hover:text-[var(--tuwa-text-secondary)]\"\n title={isCopied ? labels.txError.copied : labels.actions.copy}\n aria-label={isCopied ? labels.txError.copied : labels.actions.copy}\n >\n {isCopied ? (\n <CheckIcon className=\"h-4 w-4 text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `StatusAwareText` component, which displays different text based on a transaction's status.\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport { TransactionStatus } from '@tuwaio/pulsar-core';\nimport { ReactNode } from 'react';\n\n/**\n * A mapping from transaction status to an index and a color class.\n * The index corresponds to the position in the `source` array prop.\n * Index 0: Pending\n * Index 1: Success\n * Index 2: Failed\n * Index 3: Replaced\n */\nconst STATUS_MAP: Record<TransactionStatus | 'default', { index: number; colorClass: string }> = {\n [TransactionStatus.Success]: { index: 1, colorClass: 'text-[var(--tuwa-success-text)]' },\n [TransactionStatus.Failed]: { index: 2, colorClass: 'text-[var(--tuwa-error-text)]' },\n [TransactionStatus.Replaced]: { index: 3, colorClass: 'text-[var(--tuwa-text-secondary)]' },\n default: { index: 0, colorClass: 'text-[var(--tuwa-text-primary)]' }, // For pending or undefined status\n};\n\ntype StatusAwareTextProps = {\n /** The current status of the transaction. */\n txStatus?: TransactionStatus;\n /**\n * The source for the text. Can be a single string, or an array of strings\n * corresponding to different statuses in the format: `[pending, success, error, replaced]`.\n */\n source?: string | string[];\n /** A fallback string to display if `source` is not provided. */\n fallback?: string;\n /** The visual variant, determines the base text style ('title' or 'description'). */\n variant: 'title' | 'description';\n /** Optional additional CSS classes. */\n className?: string;\n /** If true, applies a status-specific color to the text. */\n applyColor?: boolean;\n};\n\n/**\n * A component that renders text conditionally based on a transaction's status.\n * It's designed to work with the `title` and `description` fields of a transaction,\n * which can be a single string or a status-dependent array of strings.\n *\n * @param {StatusAwareTextProps} props - The component props.\n * @returns {ReactNode} The rendered text element or null.\n */\nexport function StatusAwareText({\n txStatus,\n source,\n fallback,\n variant,\n className,\n applyColor = false,\n}: StatusAwareTextProps): ReactNode {\n const baseClasses =\n variant === 'title'\n ? 'text-sm font-semibold text-[var(--tuwa-text-primary)]'\n : 'mt-1 text-xs text-[var(--tuwa-text-secondary)]';\n\n // Case 1: Source is a simple string.\n if (typeof source === 'string') {\n return <div className={cn(baseClasses, className)}>{source}</div>;\n }\n\n // Case 2: Source is a status-dependent array.\n if (Array.isArray(source)) {\n const statusKey = txStatus || 'default';\n const config = STATUS_MAP[statusKey] || STATUS_MAP['default'];\n const text = source[config.index];\n const colorClass = applyColor ? config.colorClass : '';\n\n return <div className={cn(baseClasses, colorClass, className)}>{text}</div>;\n }\n\n // Case 3: Source is not provided, use the fallback.\n if (fallback) {\n return <div className={cn(baseClasses, className)}>{fallback}</div>;\n }\n\n // Case 4: Nothing to render.\n return null;\n}\n","/**\n * @file This file contains a reusable close button component, typically for toast notifications.\n */\n\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport { JSX } from 'react';\n\nimport { useLabels } from '../providers';\n\ntype ToastCloseButtonProps = {\n /**\n * The function to call when the button is clicked.\n * This is typically provided by a toast library to dismiss the notification.\n */\n closeToast?: (e: React.MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * A simple, styled close button component (X icon) designed for use within toast notifications.\n *\n * @param {ToastCloseButtonProps} props - The component props.\n * @returns {JSX.Element} The rendered close button.\n */\nexport function ToastCloseButton({ closeToast }: ToastCloseButtonProps): JSX.Element {\n const labels = useLabels();\n\n return (\n <button\n type=\"button\"\n onClick={closeToast}\n aria-label={labels.actions.close}\n title={labels.actions.close}\n className=\"absolute top-2 right-2 cursor-pointer rounded-full p-1 text-[var(--tuwa-text-tertiary)] transition-colors hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n );\n}\n","/**\n * @file This file contains the `TransactionKey` component, which is responsible for displaying\n * the various identifiers associated with a transaction (e.g., hash, Gelato Task ID).\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionAdapter } from '@tuwaio/pulsar-core';\nimport { selectEvmTxExplorerLink, TransactionTracker } from '@tuwaio/pulsar-evm';\nimport { ReactNode } from 'react';\nimport { Chain, Hex } from 'viem';\n\nimport { useLabels } from '../providers';\nimport { HashLink } from './HashLink';\nimport { WalletInfoModalProps } from './WalletInfoModal';\n\n// Utility type to extract the props of the HashLink component.\ntype CustomHashLinkProps = Parameters<typeof HashLink>[0];\n\nexport interface ToastTransactionKeyProps<TR, T extends Transaction<TR>>\n extends Pick<WalletInfoModalProps<TR, T>, 'transactionsPool'> {\n /** The transaction object to display identifiers for. */\n tx: T;\n /** An array of supported chain objects, used for generating explorer links. */\n appChains: Chain[];\n /** The visual variant, which applies different container styles. */\n variant?: 'toast' | 'history';\n /** Optional additional CSS classes for the container. */\n className?: string;\n /**\n * An optional render prop to allow for complete customization of how the hash link is rendered.\n * If not provided, the default `HashLink` component will be used.\n */\n renderHashLink?: (props: CustomHashLinkProps) => ReactNode;\n}\n\n/**\n * A component that intelligently displays the relevant keys and hashes for a transaction.\n * It handles different tracker types (EVM, Gelato, Safe) and statuses (e.g., replaced transactions).\n *\n * @param {ToastTransactionKeyProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered component.\n */\nexport function TransactionKey<TR, T extends Transaction<TR>>({\n tx,\n appChains,\n transactionsPool,\n variant = 'toast',\n className,\n renderHashLink,\n}: ToastTransactionKeyProps<TR, T>) {\n const labels = useLabels();\n\n if (tx?.adapter !== TransactionAdapter.EVM) return null;\n\n const wasReplaced = !!tx.replacedTxHash;\n\n const containerClasses =\n variant === 'toast'\n ? 'mt-2 flex w-full flex-col gap-y-2 border-t border-[var(--tuwa-border-primary)] pt-2'\n : 'flex w-full flex-col gap-y-2';\n\n // Helper to use the render prop if provided, otherwise default to HashLink.\n const renderHash = (props: CustomHashLinkProps) => {\n return renderHashLink ? renderHashLink(props) : <HashLink {...props} />;\n };\n\n return (\n <div className={cn(containerClasses, className)}>\n {/* Display tracker-specific identifiers (like Gelato Task ID or SafeTxHash) */}\n {tx.tracker === TransactionTracker.Gelato &&\n renderHash({ label: labels.hashLabels.gelato, hash: tx.txKey, variant: 'compact' })}\n {tx.tracker === TransactionTracker.Safe &&\n renderHash({ label: labels.hashLabels.safe, hash: tx.txKey, variant: 'compact' })}\n\n {/* Display on-chain hashes */}\n {wasReplaced ? (\n // Case 1: The transaction was replaced (e.g., sped up).\n <>\n {tx.hash && renderHash({ label: labels.hashLabels.original, hash: tx.hash, variant: 'compact' })}\n {renderHash({\n label: labels.hashLabels.replaced,\n hash: tx.replacedTxHash as Hex,\n // The explorer link should point to the NEW (replaced) transaction.\n explorerUrl: selectEvmTxExplorerLink(\n transactionsPool,\n appChains,\n tx.txKey as Hex,\n tx.replacedTxHash as Hex,\n ),\n })}\n </>\n ) : (\n // Case 2: Standard transaction hash.\n tx.hash &&\n renderHash({\n label: labels.hashLabels.default,\n hash: tx.hash as Hex,\n explorerUrl: selectEvmTxExplorerLink(transactionsPool, appChains, tx.txKey as Hex),\n })\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `TransactionStatusBadge` component for visually displaying a transaction's status.\n */\n\nimport { ArrowPathIcon, CheckCircleIcon, XCircleIcon } from '@heroicons/react/24/solid';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionStatus } from '@tuwaio/pulsar-core';\nimport { JSX } from 'react';\n\nimport { useLabels } from '../providers';\n\ntype TransactionStatusBadgeProps<TR, T extends Transaction<TR>> = {\n /** The transaction object whose status will be displayed. */\n tx: T;\n /** Optional additional CSS classes to apply to the badge container. */\n className?: string;\n};\n\n/**\n * A component that displays a transaction's status as a styled badge\n * with a corresponding icon, color, and label.\n *\n * @param {TransactionStatusBadgeProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered status badge.\n */\nexport function TransactionStatusBadge<TR, T extends Transaction<TR>>({\n tx,\n className,\n}: TransactionStatusBadgeProps<TR, T>): JSX.Element {\n const labels = useLabels();\n\n // A configuration map that links a status to its visual representation.\n const STATUS_CONFIG = {\n Pending: {\n label: labels.statuses.pending,\n Icon: ArrowPathIcon,\n badgeClasses: 'bg-[var(--tuwa-pending-bg)] text-[var(--tuwa-pending-text)]',\n iconClasses: 'animate-spin text-[var(--tuwa-pending-icon)]',\n },\n [TransactionStatus.Success]: {\n label: labels.statuses.success,\n Icon: CheckCircleIcon,\n badgeClasses: 'bg-[var(--tuwa-success-bg)] text-[var(--tuwa-success-text)]',\n iconClasses: 'text-[var(--tuwa-success-icon)]',\n },\n [TransactionStatus.Failed]: {\n label: labels.statuses.failed,\n Icon: XCircleIcon,\n badgeClasses: 'bg-[var(--tuwa-error-bg)] text-[var(--tuwa-error-text)]',\n iconClasses: 'text-[var(--tuwa-error-icon)]',\n },\n [TransactionStatus.Replaced]: {\n label: labels.statuses.replaced,\n Icon: ArrowPathIcon,\n badgeClasses: 'bg-[var(--tuwa-info-bg)] text-[var(--tuwa-info-text)]',\n iconClasses: 'text-[var(--tuwa-info-icon)]',\n },\n };\n\n const baseClasses = 'inline-flex items-center gap-x-1.5 rounded-full px-2 py-1 text-xs font-medium';\n\n // Determine the status key: 'Pending' takes precedence, otherwise use the final status.\n const statusKey = tx.pending ? 'Pending' : tx.status;\n const config = statusKey ? STATUS_CONFIG[statusKey as keyof typeof STATUS_CONFIG] : null;\n\n // Fallback for unknown or missing statuses.\n if (!config) {\n return (\n <div className={cn(baseClasses, 'bg-[var(--tuwa-info-bg)] text-[var(--tuwa-info-text)]', className)}>\n {tx.status ?? labels.statuses.unknown}\n </div>\n );\n }\n\n const { label, Icon, badgeClasses, iconClasses } = config;\n\n return (\n <div className={cn(baseClasses, badgeClasses, className)}>\n <Icon className={cn('h-4 w-4', iconClasses)} />\n {label}\n </div>\n );\n}\n","/**\n * @file This file contains the `ToastTransaction` component, which serves as the main body for a transaction notification toast.\n */\n\nimport { Web3Icon } from '@bgd-labs/react-web3-icons';\nimport { getChainName } from '@bgd-labs/react-web3-icons/dist/utils';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionAdapter } from '@tuwaio/pulsar-core';\nimport { cancelTxAction, speedUpTxAction } from '@tuwaio/pulsar-evm';\nimport { Config } from '@wagmi/core';\nimport { JSX, ReactNode } from 'react';\nimport { ToastContainerProps, ToastContentProps } from 'react-toastify';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../providers';\nimport { StatusAwareText } from './StatusAwareText';\nimport { TransactionKey } from './TransactionKey';\nimport { TransactionStatusBadge } from './TransactionStatusBadge';\nimport { WalletInfoModalProps } from './WalletInfoModal';\n\n// --- Prop Types for Customization ---\ntype CustomStatusAwareTextProps = Parameters<typeof StatusAwareText>[0];\ntype CustomTransactionKeyProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionKey<TR, T>>[0];\ntype CustomStatusBadgeProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionStatusBadge<TR, T>>[0];\n/** Props provided to custom action buttons like 'Wallet Info', 'Speed Up', or 'Cancel'. */\ntype CustomActionButtonProps = { onClick: () => void; children: ReactNode };\n\n/**\n * Defines the structure for the `customization` prop, allowing users to override\n * default sub-components with their own implementations.\n */\nexport type ToastTransactionCustomization<TR, T extends Transaction<TR>> = {\n components?: {\n /** Override the default title/description component. */\n statusAwareText?: (props: CustomStatusAwareTextProps) => ReactNode;\n /** Override the default component for displaying transaction keys/hashes. */\n transactionKey?: (props: CustomTransactionKeyProps<TR, T>) => ReactNode;\n /** Override the default status badge component. */\n statusBadge?: (props: CustomStatusBadgeProps<TR, T>) => ReactNode;\n /** Override the default \"Open wallet info\" button. */\n walletInfoButton?: (props: CustomActionButtonProps) => ReactNode;\n /** Override the default \"Speed Up\" button. */\n speedUpButton?: (props: CustomActionButtonProps) => ReactNode;\n /** Override the default \"Cancel\" button. */\n cancelButton?: (props: CustomActionButtonProps) => ReactNode;\n };\n};\n\nexport type ToastTransactionProps<TR, T extends Transaction<TR>> = {\n /** The transaction object to display in the toast. */\n tx: T;\n /** A function to open the main wallet info modal. If not provided, the button will not be rendered. */\n openWalletInfoModal?: (value: boolean) => void;\n /** An array of supported chain objects, used for displaying network information. */\n appChains: Chain[];\n /** An optional custom icon to display instead of the default chain icon. */\n icon?: ReactNode;\n /** Optional additional CSS classes for the toast container. */\n className?: string;\n /** An object to customize and override the default internal components. */\n customization?: ToastTransactionCustomization<TR, T>;\n /** The wagmi config object, required for Speed Up and Cancel functionality. */\n config?: Config;\n\n /** Props from `react-toastify` to control the toast itself. */\n closeToast?: ToastContentProps['closeToast'];\n toastProps?: ToastContainerProps;\n} & Pick<WalletInfoModalProps<TR, T>, 'transactionsPool'>;\n\n/**\n * A composite component that renders the content for a transaction toast notification.\n * It is highly customizable and includes actions for speeding up or canceling transactions\n * when they are in a pending state.\n *\n * @template TR The generic type for the transaction tracker registry.\n * @template T The generic type for the transaction object.\n * @param {ToastTransactionProps<TR, T>} props The component props.\n * @returns {JSX.Element} The rendered toast body.\n */\nexport function ToastTransaction<TR, T extends Transaction<TR>>({\n openWalletInfoModal,\n tx,\n transactionsPool,\n appChains,\n icon,\n className,\n customization,\n config,\n}: ToastTransactionProps<TR, T>): JSX.Element {\n const labels = useLabels();\n const C = customization?.components; // Shortcut for customization components\n\n // A transaction can be replaced if it's pending and has the necessary fee info.\n const canReplace =\n config &&\n tx?.adapter === TransactionAdapter.EVM &&\n tx.nonce !== undefined &&\n tx.pending &&\n tx.maxFeePerGas &&\n tx.maxPriorityFeePerGas;\n\n // --- Action Handlers ---\n const handleSpeedUp = async () => {\n if (canReplace) await speedUpTxAction({ config, tx });\n };\n\n const handleCancel = async () => {\n if (canReplace) await cancelTxAction({ config, tx });\n };\n\n return (\n <div className={cn('flex w-full flex-col gap-3 rounded-lg bg-[var(--tuwa-bg-primary)] p-4 shadow-md', className)}>\n {/* --- Header: Icon + Title/Description --- */}\n <div className=\"flex items-start gap-3\">\n <div className=\"w-[40px] flex-shrink-0\" title={getChainName(tx.chainId as number)}>\n {icon ?? <Web3Icon chainId={tx.chainId as number} />}\n </div>\n <div className=\"flex-1\">\n {C?.statusAwareText ? (\n C.statusAwareText({\n txStatus: tx.status,\n source: tx.title,\n fallback: tx.type,\n variant: 'title',\n applyColor: true,\n })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n )}\n {C?.statusAwareText ? (\n C.statusAwareText({ txStatus: tx.status, source: tx.description, variant: 'description' })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.description} variant=\"description\" />\n )}\n </div>\n </div>\n\n {/* --- Body: Hashes + Status/Actions --- */}\n <div>\n {C?.transactionKey ? (\n C.transactionKey({ transactionsPool, appChains, tx, variant: 'toast' })\n ) : (\n <TransactionKey transactionsPool={transactionsPool} appChains={appChains} tx={tx} variant=\"toast\" />\n )}\n <div className=\"mt-3 flex items-center justify-between\">\n {C?.statusBadge ? C.statusBadge({ tx }) : <TransactionStatusBadge tx={tx} />}\n\n {/* Conditionally render Speed Up/Cancel or the Wallet Info button */}\n {canReplace ? (\n <div className=\"flex items-center gap-4\">\n {C?.speedUpButton ? (\n C.speedUpButton({ onClick: handleSpeedUp, children: labels.actions.speedUp })\n ) : (\n <button\n onClick={handleSpeedUp}\n type=\"button\"\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-accent)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.speedUp}\n </button>\n )}\n {C?.cancelButton ? (\n C.cancelButton({ onClick: handleCancel, children: labels.actions.cancel })\n ) : (\n <button\n onClick={handleCancel}\n type=\"button\"\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-secondary)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.cancel}\n </button>\n )}\n </div>\n ) : (\n openWalletInfoModal &&\n (C?.walletInfoButton ? (\n C.walletInfoButton({ onClick: () => openWalletInfoModal(true), children: labels.toast.openWalletInfo })\n ) : (\n <button\n className=\"cursor-pointer bg-gradient-to-r from-[var(--tuwa-button-gradient-from)] to-[var(--tuwa-button-gradient-to)] text-[var(--tuwa-text-on-accent)] font-bold text-xs py-1 px-3 rounded-md shadow-lg hover:shadow-xl hover:from-[var(--tuwa-button-gradient-from-hover)] hover:to-[var(--tuwa-button-gradient-to-hover)] active:scale-95 transition-all duration-200 ease-in-out\"\n onClick={() => openWalletInfoModal(true)}\n type=\"button\"\n >\n {labels.toast.openWalletInfo}\n </button>\n ))\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\n/**\n * @file This file contains the `TxErrorBlock` component for displaying transaction error messages.\n */\n\nimport { DocumentDuplicateIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid';\nimport { cn, useCopyToClipboard } from '@tuwaio/nova-core';\nimport { JSX } from 'react';\n\nimport { useLabels } from '../../providers';\n\nexport type TxErrorBlockProps = {\n /** The error message string to display. If undefined, the component renders nothing. */\n error?: string;\n /** Optional additional CSS classes for the container. */\n className?: string;\n};\n\n/**\n * A component that displays a formatted block for a transaction error message.\n * It includes a title, an icon, the error message in a scrollable area,\n * and a button to copy the message to the clipboard.\n *\n * @param {TxErrorBlockProps} props - The component props.\n * @returns {JSX.Element | null} The rendered error block, or null if no error is provided.\n */\nexport function TxErrorBlock({ error, className }: TxErrorBlockProps): JSX.Element | null {\n const { isCopied, copy } = useCopyToClipboard();\n const labels = useLabels();\n\n // Don't render anything if there is no error message.\n if (!error) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-[var(--tuwa-error-icon)]/30 bg-[var(--tuwa-error-bg)] p-3 text-sm',\n className,\n )}\n >\n {/* --- Header with Title and Copy Button --- */}\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2 font-bold text-[var(--tuwa-error-icon)]\">\n <ExclamationTriangleIcon className=\"h-5 w-5\" />\n <span>{labels.txError.title}</span>\n </div>\n <button\n type=\"button\"\n onClick={() => copy(error)}\n title={labels.actions.copy}\n aria-label={labels.actions.copy}\n className=\"cursor-pointer text-[var(--tuwa-error-icon)]/50 transition-colors hover:text-[var(--tuwa-error-icon)]\"\n >\n <DocumentDuplicateIcon className=\"h-5 w-5\" />\n </button>\n </div>\n\n {/* --- Scrollable Error Message --- */}\n <div className=\"max-h-24 overflow-y-auto rounded bg-[var(--tuwa-bg-primary)] p-2\">\n <p className=\"font-mono text-xs text-[var(--tuwa-error-text)] break-all\">{error}</p>\n </div>\n\n {/* --- \"Copied!\" Feedback Text --- */}\n <div className=\"mt-1 h-5 text-right\">\n <p\n className={cn(\n 'text-xs text-[var(--tuwa-success-icon)] transition-opacity duration-300 ease-in-out',\n isCopied ? 'opacity-100' : 'opacity-0',\n )}\n >\n {labels.txError.copied}\n </p>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TxInfoBlock` component, which displays key details about a transaction.\n */\n\nimport { Web3Icon } from '@bgd-labs/react-web3-icons';\nimport { getChainName } from '@bgd-labs/react-web3-icons/dist/utils';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionPool } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport { JSX, ReactNode } from 'react';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { ToastTransactionKeyProps, TransactionKey } from '../TransactionKey';\n\n// --- Prop Types for Customization ---\ntype CustomInfoRowProps = { label: ReactNode; value: ReactNode };\n\n/**\n * Defines the customization options for the `TxInfoBlock` component.\n */\nexport type TxInfoBlockCustomization<TR, T extends Transaction<TR>> = {\n components?: {\n /** A render prop to replace the default label-value row component. */\n infoRow?: (props: CustomInfoRowProps) => ReactNode;\n /**\n * A render prop to customize the rendering of the transaction keys/hashes.\n * This is passed down to the underlying `TransactionKey` component.\n */\n transactionKey?: ToastTransactionKeyProps<TR, T>['renderHashLink'];\n };\n};\n\n// A local component for displaying a label-value pair.\nfunction InfoRow({ label, value }: { label: ReactNode; value: ReactNode }) {\n return (\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-[var(--tuwa-text-secondary)]\">{label}</span>\n <span className=\"font-medium text-[var(--tuwa-text-primary)]\">{value}</span>\n </div>\n );\n}\n\nexport type TxInfoBlockProps<TR, T extends Transaction<TR>> = {\n tx: T & {\n desiredChainID?: number;\n };\n appChains: Chain[];\n transactionsPool: TransactionPool<TR, T>;\n className?: string;\n customization?: TxInfoBlockCustomization<TR, T>;\n};\n\n/**\n * A component that displays a block of essential transaction details,\n * such as network, start time, and relevant hashes/keys.\n *\n * @param {object} props - The component props.\n * @returns {JSX.Element} The rendered info block.\n */\nexport function TxInfoBlock<TR, T extends Transaction<TR>>({\n tx,\n appChains,\n transactionsPool,\n className,\n customization,\n}: TxInfoBlockProps<TR, T>): JSX.Element {\n const labels = useLabels();\n\n const renderInfoRow = (props: CustomInfoRowProps) => {\n return customization?.components?.infoRow ? customization.components.infoRow(props) : <InfoRow {...props} />;\n };\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 rounded-lg border border-[var(--tuwa-border-primary)] bg-[var(--tuwa-bg-primary)] p-3',\n className,\n )}\n >\n {/* --- Network and Timestamp Info --- */}\n {renderInfoRow({\n label: labels.txInfo.network,\n value: (\n <div className=\"flex items-center justify-end gap-2\">\n <div className=\"h-4 w-4\">\n <Web3Icon chainId={(tx.chainId ?? tx?.desiredChainID ?? 1) as number} />\n </div>\n <span>{getChainName((tx.chainId ?? tx?.desiredChainID ?? 1) as number)}</span>\n </div>\n ),\n })}\n {tx.localTimestamp &&\n renderInfoRow({\n label: labels.txInfo.started,\n value: dayjs.unix(tx.localTimestamp).format('MMM D, HH:mm:ss'),\n })}\n\n {/* --- Transaction Hashes/Keys --- */}\n {/* Reusing the TransactionKey component to avoid code duplication. */}\n <div className=\"border-t border-[var(--tuwa-border-primary)] pt-3\">\n <TransactionKey\n tx={tx}\n appChains={appChains}\n transactionsPool={transactionsPool}\n variant=\"history\" // 'history' variant has suitable styling for this block\n renderHashLink={customization?.components?.transactionKey}\n />\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TxProgressIndicator` component, a visual step-by-step progress bar for transactions.\n */\n\nimport { ArrowPathIcon, CheckIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid';\nimport { cn } from '@tuwaio/nova-core';\nimport { ComponentType, JSX } from 'react';\n\nimport { useLabels } from '../../providers';\n\n// --- Sub-component: Step ---\n\nexport type StepStatus = 'active' | 'completed' | 'error' | 'inactive' | 'replaced';\nexport type StepProps = { status: StepStatus; label: string; isFirst?: boolean; isLast?: boolean; className?: string };\n\n/**\n * Renders a single step in the progress indicator.\n * This is an internal component but can be replaced via customization.\n */\nfunction Step({ status, label, isFirst = false }: StepProps): JSX.Element {\n const state = {\n isCompleted: status === 'completed',\n isError: status === 'error',\n isReplaced: status === 'replaced',\n isActive: status === 'active',\n };\n\n const colorConfig = {\n line: cn({\n 'bg-[var(--tuwa-success-icon)]': state.isCompleted,\n 'bg-[var(--tuwa-error-icon)]': state.isError,\n 'bg-[var(--tuwa-info-icon)]': state.isReplaced,\n 'bg-[var(--tuwa-pending-icon)]': state.isActive,\n 'bg-[var(--tuwa-border-primary)]': status === 'inactive',\n }),\n border: cn({\n 'border-[var(--tuwa-success-icon)]': state.isCompleted,\n 'border-[var(--tuwa-error-icon)]': state.isError,\n 'border-[var(--tuwa-info-icon)]': state.isReplaced,\n 'border-[var(--tuwa-pending-icon)]': state.isActive,\n 'border-[var(--tuwa-border-primary)]': status === 'inactive',\n }),\n fill: cn({\n 'bg-[var(--tuwa-success-icon)]': state.isCompleted,\n 'bg-[var(--tuwa-error-icon)]': state.isError,\n 'bg-[var(--tuwa-info-icon)]': state.isReplaced,\n }),\n pulse: cn({ 'bg-[var(--tuwa-pending-icon)]': state.isActive }),\n };\n\n return (\n <div className=\"relative flex flex-1 flex-col items-center min-w-[80px]\">\n {/* Connecting line */}\n {!isFirst && <div className={cn('absolute right-1/2 top-[10px] h-0.5 w-full', colorConfig.line)} />}\n\n {/* Circle and Icon */}\n <div\n className={cn(\n 'relative z-10 flex h-5 w-5 items-center justify-center rounded-full border-2',\n colorConfig.border,\n colorConfig.fill,\n )}\n >\n {state.isCompleted && <CheckIcon className=\"h-3 w-3 text-white\" />}\n {state.isError && <ExclamationTriangleIcon className=\"h-3 w-3 text-white\" />}\n {state.isReplaced && <ArrowPathIcon className=\"h-3 w-3 text-white\" />}\n {state.isActive && <div className={cn('h-2 w-2 animate-pulse rounded-full', colorConfig.pulse)} />}\n </div>\n\n {/* Label */}\n <span\n className={cn(\n 'mt-2 text-center text-xs',\n status !== 'inactive' ? 'font-semibold text-[var(--tuwa-text-primary)]' : 'text-[var(--tuwa-text-secondary)]',\n )}\n >\n {label}\n </span>\n </div>\n );\n}\n\n// --- Main Component: TxProgressIndicator ---\n\nexport interface TxProgressIndicatorProps {\n isProcessing?: boolean;\n isSucceed?: boolean;\n isFailed?: boolean;\n isReplaced?: boolean;\n className?: string;\n /** A custom component to use instead of the default `Step`. */\n StepComponent?: ComponentType<StepProps>;\n}\n\n/**\n * A 3-step progress indicator that visually represents the lifecycle of a transaction.\n *\n * @param {TxProgressIndicatorProps} props - The component props.\n * @returns {JSX.Element} The rendered progress indicator.\n */\nexport function TxProgressIndicator({\n isProcessing,\n isSucceed,\n isFailed,\n isReplaced,\n className,\n StepComponent = Step,\n}: TxProgressIndicatorProps): JSX.Element {\n const labels = useLabels();\n\n // This logic determines the status of each of the three steps.\n const getStepStatus = (stepIndex: 1 | 2 | 3): StepStatus => {\n // Step 1: \"Created\" - Always completed once the process starts.\n if (stepIndex === 1) return 'completed';\n\n // Step 2: \"Processing\"\n if (stepIndex === 2) {\n if (isSucceed || isFailed || isReplaced) return 'completed';\n if (isProcessing) return 'active';\n }\n\n // Step 3: \"Final\"\n if (stepIndex === 3) {\n if (isSucceed) return 'completed';\n if (isFailed) return 'error';\n if (isReplaced) return 'replaced';\n if (isProcessing) return 'active';\n }\n\n return 'inactive';\n };\n\n const getStepLabel = (stepIndex: 1 | 2 | 3): string => {\n if (stepIndex === 1) return labels.trackingModal.progressIndicator.created;\n if (stepIndex === 2) return labels.trackingModal.progressIndicator.processing;\n // For step 3, the label changes based on the final status.\n if (isFailed) return labels.statuses.failed;\n if (isReplaced) return labels.statuses.replaced;\n return labels.trackingModal.progressIndicator.succeed;\n };\n\n const steps: StepProps[] = [\n { status: getStepStatus(1), label: getStepLabel(1), isFirst: true },\n { status: getStepStatus(2), label: getStepLabel(2) },\n { status: getStepStatus(3), label: getStepLabel(3), isLast: true },\n ];\n\n return (\n <div className={cn('flex w-full items-start px-4 pt-2 pb-1', className)}>\n {steps.map((stepProps, index) => (\n <StepComponent key={index} {...stepProps} />\n ))}\n </div>\n );\n}\n","/**\n * @file This file contains the `TxStatusVisual` component, which displays a large icon representing the transaction's status.\n */\n\nimport { ArrowPathIcon, CheckCircleIcon, ClockIcon, ExclamationCircleIcon } from '@heroicons/react/24/solid';\nimport { JSX, ReactNode } from 'react';\n\nexport type TxStatusVisualProps = {\n /** True if the transaction is currently being processed (e.g., in the mempool). */\n isProcessing?: boolean;\n /** True if the transaction has successfully completed. */\n isSucceed?: boolean;\n /** True if the transaction has failed or was reverted. */\n isFailed?: boolean;\n /** True if the transaction was replaced (e.g., sped up). */\n isReplaced?: boolean;\n};\n\n/**\n * A component that renders a large, animated icon to visually represent the\n * current state of a transaction within the tracking modal.\n *\n * @param {TxStatusVisualProps} props - The component props.\n * @returns {JSX.Element} The rendered visual status indicator.\n */\nexport function TxStatusVisual({ isProcessing, isSucceed, isFailed, isReplaced }: TxStatusVisualProps): JSX.Element {\n let icon: ReactNode;\n\n // The logic is structured as an if/else if chain to ensure only one icon is selected.\n if (isSucceed) {\n icon = <CheckCircleIcon className=\"h-16 w-16 text-[var(--tuwa-success-icon)]\" />;\n } else if (isFailed) {\n icon = <ExclamationCircleIcon className=\"h-16 w-16 text-[var(--tuwa-error-icon)]\" />;\n } else if (isReplaced) {\n icon = <ArrowPathIcon className=\"h-16 w-16 text-[var(--tuwa-info-icon)]\" />;\n } else if (isProcessing) {\n icon = <ArrowPathIcon className=\"h-16 w-16 animate-spin text-[var(--tuwa-text-accent)]\" />;\n } else {\n // Default state when the transaction is created but not yet processing.\n icon = <ClockIcon className=\"h-16 w-16 animate-pulse text-[var(--tuwa-pending-icon)]\" />;\n }\n\n return <div className=\"flex justify-center py-4\">{icon}</div>;\n}\n","/**\n * @file This file contains the `TrackingTxModal`, the main UI for displaying the detailed lifecycle of a single transaction.\n * It provides real-time feedback, customization options, and actions like retry, speed up, and cancel.\n */\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { cn } from '@tuwaio/nova-core';\nimport {\n InitialTransactionParams,\n ITxTrackingStore,\n Transaction,\n TransactionAdapter,\n TransactionPool,\n TransactionStatus,\n} from '@tuwaio/pulsar-core';\nimport { ActionTxKey, cancelTxAction, speedUpTxAction, TransactionTracker } from '@tuwaio/pulsar-evm';\nimport { Config } from '@wagmi/core';\nimport { AnimatePresence, motion, MotionProps } from 'framer-motion';\nimport { ComponentPropsWithoutRef, JSX, ReactNode, useEffect, useState } from 'react';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { StatusAwareText } from '../StatusAwareText';\nimport { TxErrorBlock, TxErrorBlockProps } from './TxErrorBlock';\nimport { TxInfoBlock, TxInfoBlockProps } from './TxInfoBlock';\nimport { TxProgressIndicator, TxProgressIndicatorProps } from './TxProgressIndicator';\nimport { TxStatusVisual, TxStatusVisualProps } from './TxStatusVisual';\n\n// --- Prop Types for Customization ---\n\n/** Props provided to a custom header component. */\ntype CustomHeaderProps = { onClose: (txKey?: string) => void };\n/** Props provided to a custom footer component. */\ntype CustomFooterProps = {\n onClose: (txKey?: string) => void;\n onOpenWalletInfo: () => void;\n onRetry?: () => void;\n onSpeedUp?: () => void;\n onCancel?: () => void;\n isProcessing?: boolean;\n};\n\n/** A registry of functions that can be re-executed via the 'Retry' button. The key should match `actionKey` on a transaction. */\nexport type TxActions = Record<string, (...args: any[]) => Promise<unknown>>;\n\n/**\n * Defines the customization options for the TrackingTxModal.\n * Allows overriding modal behavior, animations, and individual UI components.\n */\nexport type TrackingTxModalCustomization<TR, T extends Transaction<TR>> = {\n /** Custom props to pass to the underlying Radix UI `Dialog.Content` component. */\n modalProps?: Partial<ComponentPropsWithoutRef<typeof Dialog.Content>>;\n /** Custom Framer Motion animation properties for the modal's entrance and exit. */\n motionProps?: MotionProps;\n /** A record of custom components to override parts of the modal's UI. */\n components?: {\n header?: (props: CustomHeaderProps) => ReactNode;\n footer?: (props: CustomFooterProps) => ReactNode;\n statusVisual?: (props: TxStatusVisualProps) => ReactNode;\n progressIndicator?: (props: TxProgressIndicatorProps) => ReactNode;\n infoBlock?: (props: TxInfoBlockProps<TR, T>) => ReactNode;\n errorBlock?: (props: TxErrorBlockProps) => ReactNode;\n };\n};\n\nexport interface TrackingTxModalProps<TR, T extends Transaction<TR>>\n extends Partial<Pick<ITxTrackingStore<TR, T, ActionTxKey>, 'handleTransaction' | 'initialTx'>> {\n /** A function to close the modal. */\n onClose: (txKey?: string) => void;\n /** A function to open the main wallet info modal. */\n onOpenWalletInfo: () => void;\n /** Optional additional CSS classes for the modal's container. */\n className?: string;\n /** An object containing all customization options for the modal. */\n customization?: TrackingTxModalCustomization<TR, T>;\n /** An array of `viem` chain objects supported by the application. */\n appChains: Chain[];\n /** The global transaction pool from the tracking store. */\n transactionsPool: TransactionPool<TR, T>;\n /** A registry of retryable actions, keyed by `actionKey`. */\n actions?: TxActions;\n /** The wagmi config object, required for retry, cancel, and speed up functionality. */\n config?: Config;\n}\n\n/**\n * A detailed modal that displays the real-time status and lifecycle of a transaction.\n * It opens automatically for transactions initiated with `withTrackedModal: true`.\n *\n * @template TR - The generic type for the transaction tracker registry.\n * @template T - The generic type for the transaction object.\n * @param {TrackingTxModalProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered tracking modal.\n */\nexport function TrackingTxModal<TR, T extends Transaction<TR>>({\n onClose,\n onOpenWalletInfo,\n className,\n customization,\n appChains,\n transactionsPool,\n actions,\n handleTransaction,\n config,\n initialTx,\n}: TrackingTxModalProps<TR, T>): JSX.Element {\n const labels = useLabels();\n const C = customization?.components;\n\n const [trackedTx, setTrackedTx] = useState<T | undefined>(undefined);\n\n // This effect syncs the modal's internal state (`trackedTx`) with the global `transactionsPool`.\n // It ensures the modal always displays the latest information for the tracked transaction.\n useEffect(() => {\n let currentTx: T | undefined;\n if (initialTx?.lastTxKey) {\n currentTx = transactionsPool[initialTx.lastTxKey];\n } else if (trackedTx) {\n currentTx = transactionsPool[trackedTx.txKey];\n }\n setTrackedTx(currentTx);\n }, [transactionsPool, initialTx, trackedTx]);\n\n // The transaction object to use for displaying information. Prioritizes the tracked transaction.\n const txToDisplay = trackedTx ?? initialTx;\n\n // --- Derived State Constants for Clarity ---\n const txStatus = trackedTx?.status;\n const isInitializing = initialTx?.isInitializing ?? false;\n const isPending = trackedTx?.pending ?? true;\n const isProcessing = isInitializing || isPending;\n const isError = trackedTx?.isError || !!initialTx?.errorMessage;\n const canRetry = txToDisplay?.actionKey && actions?.[txToDisplay.actionKey] && handleTransaction && config;\n const canReplace =\n config &&\n trackedTx?.adapter === TransactionAdapter.EVM &&\n trackedTx?.nonce !== undefined &&\n trackedTx.pending &&\n trackedTx.maxFeePerGas &&\n trackedTx.maxPriorityFeePerGas;\n\n const motionProps: MotionProps = {\n initial: { opacity: 0, scale: 0.95 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n transition: { duration: 0.2, ease: 'easeOut' },\n ...customization?.motionProps,\n };\n\n // --- Action Handlers ---\n const handleRetry = async () => {\n if (!canRetry || !txToDisplay?.actionKey) return;\n const retryParams: InitialTransactionParams = {\n adapter: TransactionAdapter.EVM,\n type: txToDisplay.type,\n desiredChainID: trackedTx?.chainId || initialTx?.desiredChainID || 1,\n actionKey: txToDisplay.actionKey,\n title: txToDisplay.title,\n description: txToDisplay.description,\n payload: txToDisplay.payload,\n withTrackedModal: true,\n };\n onClose(trackedTx?.txKey);\n\n await handleTransaction({\n actionFunction: () =>\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n actions![txToDisplay.actionKey]({\n config,\n ...txToDisplay.payload,\n }),\n params: retryParams,\n defaultTracker: TransactionTracker.Ethereum as any,\n });\n };\n\n const handleCancel = async () => {\n if (canReplace && trackedTx) await cancelTxAction({ config, tx: trackedTx });\n };\n\n const handleSpeedUp = async () => {\n if (canReplace && trackedTx) await speedUpTxAction({ config, tx: trackedTx });\n };\n\n const isOpen = (trackedTx?.isTrackedModalOpen || initialTx?.withTrackedModal) ?? false;\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => !open && onClose(trackedTx?.txKey)}>\n <Dialog.Portal>\n <AnimatePresence>\n {isOpen && (\n <>\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/60 z-50\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n </Dialog.Overlay>\n <Dialog.Content\n className=\"fixed left-1/2 top-1/2 w-full max-w-md -translate-x-1/2 -translate-y-1/2 outline-none z-50\"\n onOpenAutoFocus={() => setTrackedTx(undefined)}\n {...customization?.modalProps}\n asChild\n >\n <motion.div {...motionProps}>\n <div\n className={cn(\n 'relative flex flex-col gap-3 rounded-2xl bg-[var(--tuwa-bg-primary)] p-5 pt-0 shadow-2xl max-h-[98dvh] overflow-y-auto',\n className,\n )}\n >\n {/* Header: Title and Close Button */}\n {C?.header ? (\n C.header({ onClose: () => onClose(trackedTx?.txKey) })\n ) : (\n <header className=\"flex items-start justify-between sticky top-0 w-full z-10 pt-5 pb-2 bg-[var(--tuwa-bg-primary)]\">\n <Dialog.Title className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">\n {labels.trackingModal.title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n onClick={() => onClose(trackedTx?.txKey)}\n aria-label={labels.actions.close}\n className=\"cursor-pointer ml-2 -mt-1 rounded-full p-1 text-[var(--tuwa-text-tertiary)] transition-colors hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n </Dialog.Close>\n </header>\n )}\n\n {/* Main Content: Visuals, Info, and Error Blocks */}\n <main className=\"flex flex-col gap-3\">\n {C?.statusVisual ? (\n C.statusVisual({\n isProcessing,\n isSucceed: txStatus === TransactionStatus.Success,\n isFailed: isError,\n isReplaced: txStatus === TransactionStatus.Replaced,\n })\n ) : (\n <TxStatusVisual\n isProcessing={isProcessing}\n isSucceed={txStatus === TransactionStatus.Success}\n isFailed={isError}\n isReplaced={txStatus === TransactionStatus.Replaced}\n />\n )}\n <div className=\"flex flex-col items-center text-center -mt-2\">\n <StatusAwareText\n txStatus={txStatus}\n source={txToDisplay?.title}\n fallback={txToDisplay?.type}\n variant=\"title\"\n applyColor\n className=\"text-xl\"\n />\n <StatusAwareText\n txStatus={txStatus}\n source={txToDisplay?.description}\n variant=\"description\"\n className=\"mt-0\"\n />\n </div>\n {C?.progressIndicator ? (\n C.progressIndicator({\n isProcessing,\n isSucceed: txStatus === TransactionStatus.Success,\n isFailed: isError,\n isReplaced: txStatus === TransactionStatus.Replaced,\n })\n ) : (\n <TxProgressIndicator\n isProcessing={isProcessing}\n isSucceed={txStatus === TransactionStatus.Success}\n isFailed={isError}\n isReplaced={txStatus === TransactionStatus.Replaced}\n />\n )}\n {C?.infoBlock ? (\n C.infoBlock({ tx: txToDisplay as T, appChains, transactionsPool })\n ) : (\n <TxInfoBlock tx={txToDisplay as T} appChains={appChains} transactionsPool={transactionsPool} />\n )}\n {C?.errorBlock ? (\n C.errorBlock({ error: trackedTx?.errorMessage || initialTx?.errorMessage })\n ) : (\n <TxErrorBlock error={trackedTx?.errorMessage || initialTx?.errorMessage} />\n )}\n </main>\n\n {/* Footer: Action Buttons */}\n {C?.footer ? (\n C.footer({\n onClose: () => onClose(trackedTx?.txKey),\n onOpenWalletInfo,\n isProcessing,\n onRetry: canRetry ? handleRetry : undefined,\n onSpeedUp: canReplace ? handleSpeedUp : undefined,\n onCancel: canReplace ? handleCancel : undefined,\n })\n ) : (\n <footer className=\"mt-2 flex w-full items-center justify-between border-t border-[var(--tuwa-border-primary)] pt-4\">\n <div className=\"flex items-center gap-4\">\n {canReplace && (\n <>\n <button\n type=\"button\"\n onClick={handleSpeedUp}\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-accent)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.speedUp}\n </button>\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-secondary)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.cancel}\n </button>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n {isError && canRetry ? (\n <button\n type=\"button\"\n onClick={handleRetry}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-button-gradient-from)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-on-accent)] transition-opacity hover:opacity-90\"\n >\n {labels.trackingModal.retry}\n </button>\n ) : (\n !canReplace && (\n <button\n type=\"button\"\n onClick={onOpenWalletInfo}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-bg-muted)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-primary)] transition-colors hover:bg-[var(--tuwa-border-primary)]\"\n >\n {labels.trackingModal.walletInfo}\n </button>\n )\n )}\n <button\n type=\"button\"\n onClick={() => onClose(trackedTx?.txKey)}\n disabled={isProcessing && !canReplace}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-bg-muted)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-primary)] transition-colors hover:bg-[var(--tuwa-border-primary)] disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {isProcessing && !canReplace ? labels.trackingModal.processing : labels.trackingModal.close}\n </button>\n </div>\n </footer>\n )}\n </div>\n </motion.div>\n </Dialog.Content>\n </>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","/**\n * @file This file contains the `TransactionHistoryItem` component, which renders a single transaction\n * in a list format for the transaction history view.\n */\n\nimport { Web3Icon } from '@bgd-labs/react-web3-icons';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionPool } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { JSX, ReactNode } from 'react';\nimport { Chain } from 'viem';\n\nimport { StatusAwareText } from './StatusAwareText';\nimport { TransactionKey } from './TransactionKey';\nimport { TransactionStatusBadge } from './TransactionStatusBadge';\n\n// Extend dayjs with the relativeTime plugin to format timestamps as \"a few seconds ago\".\ndayjs.extend(relativeTime);\n\n// --- Prop Types for Customization ---\ntype CustomIconProps = { chainId: number };\ntype CustomStatusAwareTextProps = Parameters<typeof StatusAwareText>[0];\ntype CustomTimestampProps = { timestamp?: number };\ntype CustomStatusBadgeProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionStatusBadge<TR, T>>[0];\ntype CustomTransactionKeyProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionKey<TR, T>>[0];\n\n/**\n * Defines the structure for the `customization` prop, allowing users to override\n * default sub-components with their own implementations for a history item.\n */\nexport type TransactionHistoryItemCustomization<TR, T extends Transaction<TR>> = {\n components?: {\n /** Override the default chain icon. */\n icon?: (props: CustomIconProps) => ReactNode;\n /** Override the default title component. */\n title?: (props: CustomStatusAwareTextProps) => ReactNode;\n /** Override the default description component. */\n description?: (props: CustomStatusAwareTextProps) => ReactNode;\n /** Override the default timestamp component. */\n timestamp?: (props: CustomTimestampProps) => ReactNode;\n /** Override the default status badge component. */\n statusBadge?: (props: CustomStatusBadgeProps<TR, T>) => ReactNode;\n /** Override the default component for displaying transaction keys/hashes. */\n transactionKey?: (props: CustomTransactionKeyProps<TR, T>) => ReactNode;\n };\n};\n\nexport type TransactionHistoryItemProps<TR, T extends Transaction<TR>> = {\n /** The transaction object to display. */\n tx: T;\n /** An array of supported chain objects. */\n appChains: Chain[];\n /** The entire pool of transactions. */\n transactionsPool: TransactionPool<TR, T>;\n /** Optional additional CSS classes for the container. */\n className?: string;\n /** An object to customize and override the default internal components. */\n customization?: TransactionHistoryItemCustomization<TR, T>;\n};\n\n/**\n * A component that renders a single row in the transaction history list.\n * It is highly customizable via the `customization` prop.\n *\n * @param {TransactionHistoryItemProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered history item.\n */\nexport function TransactionHistoryItem<TR, T extends Transaction<TR>>({\n tx,\n appChains,\n transactionsPool,\n className,\n customization,\n}: TransactionHistoryItemProps<TR, T>): JSX.Element {\n const C = customization?.components; // Shortcut for customization components\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-2 border-b border-[var(--tuwa-border-secondary)] p-3 transition-colors hover:bg-[var(--tuwa-bg-secondary)]',\n className,\n )}\n >\n <div className=\"flex items-start justify-between\">\n {/* --- Main Info: Icon, Title, Timestamp, Description --- */}\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-[var(--tuwa-bg-muted)]\">\n {C?.icon ? (\n C.icon({ chainId: tx.chainId as number })\n ) : (\n <div className=\"h-8 w-8 text-[var(--tuwa-text-secondary)]\">\n <Web3Icon chainId={tx.chainId as number} />\n </div>\n )}\n </div>\n <div>\n {C?.title ? (\n C.title({ txStatus: tx.status, source: tx.title, fallback: tx.type, variant: 'title', applyColor: true })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n )}\n\n {C?.timestamp ? (\n C.timestamp({ timestamp: tx.localTimestamp })\n ) : (\n <span className=\"mb-1 block text-xs text-[var(--tuwa-text-secondary)]\">\n {tx.localTimestamp ? dayjs.unix(tx.localTimestamp).fromNow() : '...'}\n </span>\n )}\n\n {C?.description ? (\n C.description({ txStatus: tx.status, source: tx.description, variant: 'description' })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.description} variant=\"description\" />\n )}\n </div>\n </div>\n\n {/* --- Status Badge --- */}\n {C?.statusBadge ? C.statusBadge({ tx }) : <TransactionStatusBadge tx={tx} />}\n </div>\n\n {/* --- Transaction Keys/Hashes --- */}\n {C?.transactionKey ? (\n C.transactionKey({ tx, appChains, transactionsPool, variant: 'history' })\n ) : (\n <TransactionKey tx={tx} appChains={appChains} transactionsPool={transactionsPool} variant=\"history\" />\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `TransactionsHistory` component, which displays a list of past and pending transactions.\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport { selectAllTransactionsByActiveWallet, Transaction } from '@tuwaio/pulsar-core';\nimport { ComponentType, JSX, ReactNode } from 'react';\n\nimport { useLabels } from '../providers';\nimport { TransactionHistoryItem, TransactionHistoryItemProps } from './TransactionHistoryItem';\nimport { WalletInfoModalProps } from './WalletInfoModal';\n\ntype CustomPlaceholderProps = { title: string; message: string };\n\n/**\n * Defines the customization options for the TransactionsHistory component.\n */\nexport type TransactionsHistoryCustomization<TR, T extends Transaction<TR>> = {\n classNames?: {\n /** CSS classes for the list's wrapper `div`. */\n listWrapper?: string;\n };\n components?: {\n /**\n * A render prop to replace the default placeholder component\n * (e.g., for \"Connect Wallet\" or \"No Transactions\").\n */\n placeholder?: (props: CustomPlaceholderProps) => ReactNode;\n /**\n * A custom component to use instead of the default `TransactionHistoryItem`.\n * This should be a component type, not a render function.\n */\n HistoryItem?: ComponentType<TransactionHistoryItemProps<TR, T>>;\n };\n};\n\n// A local component for displaying placeholder messages.\nfunction HistoryPlaceholder({ title, message, className }: { title: string; message: string; className?: string }) {\n return (\n <div className={cn('rounded-lg bg-[var(--tuwa-bg-muted)] p-8 text-center', className)}>\n <h4 className=\"font-semibold text-[var(--tuwa-text-primary)]\">{title}</h4>\n <p className=\"mt-1 text-sm text-[var(--tuwa-text-secondary)]\">{message}</p>\n </div>\n );\n}\n\n/**\n * A component that displays a scrollable list of transactions for the connected wallet.\n * It handles states for when a wallet is not connected or when there is no history.\n *\n * @param {WalletInfoModalProps<TR, T> & { customization?: TransactionsHistoryCustomization<TR, T> }} props\n * @returns {JSX.Element} The rendered transaction history section.\n */\nexport function TransactionsHistory<TR, T extends Transaction<TR>>({\n walletAddress,\n transactionsPool,\n appChains,\n className,\n customization,\n}: WalletInfoModalProps<TR, T> & {\n className?: string;\n customization?: TransactionsHistoryCustomization<TR, T>;\n}): JSX.Element {\n const labels = useLabels();\n const C = customization?.components;\n\n const transactionsByWallet = walletAddress\n ? selectAllTransactionsByActiveWallet(transactionsPool, walletAddress)\n : [];\n\n // Sort transactions by timestamp, newest first.\n const sortedTransactions = [...transactionsByWallet].sort(\n (a, b) => (b.localTimestamp ?? 0) - (a.localTimestamp ?? 0),\n );\n\n const renderPlaceholder = (title: string, message: string) => {\n if (C?.placeholder) {\n return C.placeholder({ title, message });\n }\n return <HistoryPlaceholder title={title} message={message} />;\n };\n\n // Use the custom component if provided, otherwise default to TransactionHistoryItem.\n const HistoryItemComponent = C?.HistoryItem || TransactionHistoryItem;\n\n return (\n <div className={cn('flex flex-col gap-y-3', className)}>\n <h3 className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">{labels.walletModal.history.title}</h3>\n\n {!walletAddress ? (\n // Case 1: Wallet is not connected.\n renderPlaceholder(\n labels.walletModal.history.connectWalletTitle,\n labels.walletModal.history.connectWalletMessage,\n )\n ) : sortedTransactions.length > 0 ? (\n // Case 2: Wallet is connected and there are transactions.\n <div\n className={cn(\n 'max-h-[400px] overflow-y-auto rounded-lg border border-[var(--tuwa-border-primary)] bg-[var(--tuwa-bg-primary)]',\n customization?.classNames?.listWrapper,\n )}\n >\n {sortedTransactions.map((tx) => (\n <HistoryItemComponent\n key={tx.txKey} // The key is now correctly and safely handled here.\n tx={tx}\n transactionsPool={transactionsPool}\n appChains={appChains}\n />\n ))}\n </div>\n ) : (\n // Case 3: Wallet is connected, but no transactions.\n renderPlaceholder(\n labels.walletModal.history.noTransactionsTitle,\n labels.walletModal.history.noTransactionsMessage,\n )\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `WalletAddressDisplay` component, a UI element for showing a wallet address.\n */\n\nimport { ArrowTopRightOnSquareIcon, CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/24/solid';\nimport { cn, textCenterEllipsis, useCopyToClipboard } from '@tuwaio/nova-core';\nimport { JSX } from 'react';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\n\nexport type WalletAddressDisplayProps = {\n /** The wallet address to display. */\n address: string;\n /**\n * The viem `Chain` object for the network the address belongs to.\n * This is used to generate the correct block explorer link.\n */\n chain?: Chain;\n /** Optional additional CSS classes for the container. */\n className?: string;\n};\n\n/**\n * A component that renders a wallet address in a styled \"pill\" format,\n * including a copy button and a link to the appropriate block explorer.\n *\n * @param {WalletAddressDisplayProps} props - The component props.\n * @returns {JSX.Element} The rendered component.\n */\nexport function WalletAddressDisplay({ address, chain, className }: WalletAddressDisplayProps): JSX.Element {\n const { isCopied, copy } = useCopyToClipboard();\n const labels = useLabels();\n\n // Dynamically generate the explorer link based on the provided chain.\n const explorerUrl = chain?.blockExplorers?.default.url;\n const explorerLink = explorerUrl ? `${explorerUrl}/address/${address}` : undefined;\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-3 rounded-full bg-[var(--tuwa-bg-muted)] px-3 py-1 font-mono text-xs text-[var(--tuwa-text-secondary)]',\n className,\n )}\n >\n <span>{textCenterEllipsis(address, 6, 6)}</span>\n <button\n type=\"button\"\n title={isCopied ? labels.txError.copied : labels.actions.copy}\n aria-label={isCopied ? labels.txError.copied : labels.actions.copy}\n onClick={() => copy(address)}\n className=\"cursor-pointer transition-colors hover:text-[var(--tuwa-text-primary)]\"\n >\n {isCopied ? (\n <CheckIcon className=\"h-4 w-4 text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"h-4 w-4\" />\n )}\n </button>\n\n {/* Only render the explorer link if a URL could be generated */}\n {explorerLink && (\n <a\n href={explorerLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"transition-colors hover:text-[var(--tuwa-text-accent)]\"\n title={labels.actions.viewOnExplorer}\n aria-label={labels.actions.viewOnExplorer}\n >\n <ArrowTopRightOnSquareIcon className=\"h-4 w-4\" />\n </a>\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `WalletAvatar` component for displaying a user's avatar.\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport makeBlockie from 'ethereum-blockies-base64';\nimport { JSX, useEffect, useState } from 'react';\nimport { isHex, zeroAddress } from 'viem';\n\nimport { useLabels } from '../../providers';\n\nexport type WalletAvatarProps = {\n /** The user's wallet address. Used for the blockie fallback and background color generation. */\n address: string;\n /** An optional URL for the user's ENS avatar image. */\n ensAvatar?: string;\n /** Optional additional CSS classes for the container. */\n className?: string;\n};\n\n/**\n * A component that displays a user's avatar.\n * It prioritizes showing the provided `ensAvatar`. If unavailable, it falls back\n * to a procedurally generated \"blockie\" based on the user's address.\n * It also generates a unique background color from the address as a placeholder.\n *\n * @param {WalletAvatarProps} props - The component props.\n * @returns {JSX.Element} The rendered avatar component.\n */\nexport function WalletAvatar({ address, ensAvatar, className }: WalletAvatarProps): JSX.Element {\n const labels = useLabels();\n\n // Generate a unique, consistent background color from the first 6 hex characters of the address.\n const bgColor = `#${address.slice(2, 8)}`;\n\n const [avatar, setAvatar] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n setAvatar(ensAvatar ?? makeBlockie(isHex(address) ? address : zeroAddress));\n }, [ensAvatar, address]);\n\n return (\n <div className={cn('h-12 w-12 flex-shrink-0 rounded-full', className)} style={{ backgroundColor: bgColor }}>\n <img\n className=\"h-full w-full rounded-full object-cover\"\n // Use the ENS avatar if provided, otherwise generate a blockie as a fallback.\n src={avatar}\n alt={`${labels.walletModal.header.avatarAlt} ${address}`}\n onError={() => setAvatar(makeBlockie(isHex(address) ? address : zeroAddress))}\n />\n </div>\n );\n}\n","/**\n * @file This file contains the `WalletHeader` component, used to display user avatar, name, and address.\n */\n\nimport { cn, textCenterEllipsis } from '@tuwaio/nova-core';\nimport { getAvatar, getName } from '@tuwaio/pulsar-evm';\nimport { JSX, ReactNode, useEffect, useState } from 'react';\nimport { Address, Chain, Hex } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { WalletAddressDisplay } from './WalletAddressDisplay';\nimport { WalletAvatar } from './WalletAvatar';\n\n// --- Prop Types for Customization ---\ntype AvatarRenderProps = { address: string; ensAvatar?: string };\ntype NameRenderProps = { ensName?: string; isLoading: boolean; address: string };\ntype AddressRenderProps = { address: string; chain?: Chain };\n\n/**\n * Defines the props for the `WalletHeader` component, including extensive customization options.\n */\nexport interface WalletHeaderProps {\n /** The user's wallet address. If undefined, the 'not connected' state is shown. */\n walletAddress?: Address;\n /** The viem `Chain` object for the currently connected network. */\n chain?: Chain;\n /** Optional additional CSS classes for the container. */\n className?: string;\n /** A render prop to replace the default `WalletAvatar` component. */\n renderAvatar?: (props: AvatarRenderProps) => ReactNode;\n /** A render prop to replace the default ENS name display. */\n renderName?: (props: NameRenderProps) => ReactNode;\n /** A render prop to replace the default `WalletAddressDisplay` component. */\n renderAddressDisplay?: (props: AddressRenderProps) => ReactNode;\n /** A render prop to replace the default content shown when no wallet is connected. */\n renderNoWalletContent?: () => ReactNode;\n}\n\n/**\n * A component that displays the header for the wallet modal, including the user's avatar,\n * ENS name (if available), and address. It handles loading states for ENS data and\n * provides a \"not connected\" view.\n *\n * @param {WalletHeaderProps} props - The component props.\n * @returns {JSX.Element} The rendered wallet header.\n */\nexport function WalletHeader({\n walletAddress,\n chain,\n className,\n renderAvatar,\n renderName,\n renderAddressDisplay,\n renderNoWalletContent,\n}: WalletHeaderProps): JSX.Element {\n const labels = useLabels();\n\n const [ensName, setEnsName] = useState<string | undefined>(undefined);\n const [ensAvatar, setEnsAvatar] = useState<string | undefined>(undefined);\n const [isLoading, setIsLoading] = useState(true);\n\n // Fetch ENS data whenever the wallet address changes.\n useEffect(() => {\n const fetchEnsData = async () => {\n if (walletAddress) {\n setIsLoading(true);\n setEnsName(undefined);\n setEnsAvatar(undefined);\n\n try {\n const name = await getName(walletAddress as Hex);\n if (name) {\n setEnsName(name);\n const avatar = await getAvatar(name);\n setEnsAvatar(avatar);\n }\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n fetchEnsData();\n }, [walletAddress]);\n\n // --- Render \"Not Connected\" State ---\n if (!walletAddress) {\n if (renderNoWalletContent) {\n return <>{renderNoWalletContent()}</>;\n }\n\n return (\n <div\n className={cn(\n 'flex h-20 items-center justify-center rounded-lg bg-[var(--tuwa-bg-muted)] text-[var(--tuwa-text-secondary)]',\n className,\n )}\n >\n {labels.walletModal.header.notConnected}\n </div>\n );\n }\n\n const ensNameAbbreviated = ensName\n ? ensName.length > 30\n ? textCenterEllipsis(ensName, 12, 12)\n : ensName\n : undefined;\n\n // --- Render \"Connected\" State ---\n return (\n <div className={cn('flex items-center gap-4 min-h-[4rem]', className)}>\n <div>\n {renderAvatar ? (\n renderAvatar({ address: walletAddress, ensAvatar })\n ) : (\n <WalletAvatar address={walletAddress} ensAvatar={ensAvatar} />\n )}\n </div>\n\n <div className=\"flex flex-col justify-center min-h-[3.5rem] min-w-[200px]\">\n {renderName ? (\n renderName({ ensName: ensNameAbbreviated, isLoading, address: walletAddress })\n ) : (\n <div className=\"flex flex-col\">\n {/* Primary content area - ENS name or large address */}\n <div className=\"h-7 flex items-center mb-1.5\">\n {isLoading ? (\n <div className=\"h-full w-48 animate-pulse rounded-md bg-[var(--tuwa-bg-muted)]\" />\n ) : ensNameAbbreviated ? (\n <h2 className=\"text-xl font-bold text-[var(--tuwa-text-primary)]\">{ensNameAbbreviated}</h2>\n ) : (\n <WalletAddressDisplay\n address={walletAddress}\n chain={chain}\n className=\"text-xl font-bold text-[var(--tuwa-text-primary)] bg-transparent px-0 py-0 rounded-none\"\n />\n )}\n </div>\n\n {/* Secondary content area - small address display (only when ENS exists) */}\n <div className=\"h-5 flex items-center\">\n {!isLoading &&\n ensNameAbbreviated &&\n (renderAddressDisplay ? (\n renderAddressDisplay({ address: walletAddress, chain })\n ) : (\n <WalletAddressDisplay address={walletAddress} chain={chain} />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the main `WalletInfoModal` component, which serves as the primary UI for viewing wallet details and transaction history.\n */\n\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionPool } from '@tuwaio/pulsar-core';\nimport { AnimatePresence, motion, MotionProps } from 'framer-motion';\nimport { ComponentPropsWithoutRef, JSX, ReactNode } from 'react';\nimport { Address, Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { TransactionsHistory, TransactionsHistoryCustomization } from '../TransactionsHistory';\nimport { WalletHeader } from './WalletHeader';\n\n// --- Prop Types for Customization ---\ntype CustomHeaderProps = { closeModal: () => void };\ntype CustomWalletInfoProps<TR, T extends Transaction<TR>> = WalletInfoModalProps<TR, T>;\ntype CustomHistoryProps<TR, T extends Transaction<TR>> = WalletInfoModalProps<TR, T> & {\n customization?: TransactionsHistoryCustomization<TR, T>;\n};\n\n/**\n * Defines the customization options for the WalletInfoModal.\n * Allows customization of modal behavior, animations, and individual UI components.\n */\nexport type WalletInfoModalCustomization<TR, T extends Transaction<TR>> = {\n /** Custom props to pass to the underlying Radix UI Dialog.Content component */\n modalProps?: Partial<ComponentPropsWithoutRef<typeof Dialog.Content>>;\n /** Custom Framer Motion animation properties */\n motionProps?: MotionProps;\n classNames?: {\n /** CSS classes for the main content wrapper div. */\n contentWrapper?: string;\n };\n /** Custom component overrides for different parts of the modal */\n components?: {\n /** A render prop to replace the entire modal header. */\n header?: (props: CustomHeaderProps) => ReactNode;\n /** A render prop to replace the `WalletHeader` component. */\n walletInfo?: (props: CustomWalletInfoProps<TR, T>) => ReactNode;\n /** A render prop to replace the `TransactionsHistory` component. */\n history?: (props: CustomHistoryProps<TR, T>) => ReactNode;\n };\n};\n\n/**\n * Defines the core props for the WalletInfoModal and its children.\n */\nexport interface WalletInfoModalProps<TR, T extends Transaction<TR>> {\n /** The connected wallet's address. */\n walletAddress?: Address;\n /** The viem `Chain` object for the currently connected network. */\n chain?: Chain;\n /** The entire pool of transactions from the store. */\n transactionsPool: TransactionPool<TR, T>;\n /** An array of all chains supported by the application. */\n appChains: Chain[];\n}\n\n/**\n * The main modal component for displaying wallet information and transaction history.\n * It is highly customizable through the `customization` prop and supports full Radix UI Dialog customization.\n *\n * @param {WalletInfoModalProps<TR, T> & { ... }} props - The component props.\n * @returns {JSX.Element | null} The rendered modal or null if not open.\n */\nexport function WalletInfoModal<TR, T extends Transaction<TR>>({\n isOpen,\n setIsOpen,\n customization,\n ...props\n}: WalletInfoModalProps<TR, T> & {\n isOpen: boolean;\n setIsOpen: (value: boolean) => void;\n customization?: WalletInfoModalCustomization<TR, T>;\n}): JSX.Element | null {\n const labels = useLabels();\n\n const defaultMotionProps: MotionProps = {\n initial: { opacity: 0, scale: 0.95 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n transition: { duration: 0.2, ease: 'easeOut' },\n };\n\n const motionProps = { ...defaultMotionProps, ...customization?.motionProps };\n const closeModal = () => setIsOpen(false);\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => !open && closeModal()}>\n <Dialog.Portal>\n <AnimatePresence>\n {isOpen && (\n <>\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/45 flex items-center justify-center p-2 z-50\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n />\n </Dialog.Overlay>\n <Dialog.Content\n className=\"fixed left-1/2 top-1/2 w-full max-w-2xl -translate-x-1/2 -translate-y-1/2 outline-none z-50\"\n {...customization?.modalProps}\n asChild\n >\n <motion.div {...motionProps}>\n <div\n className={cn(\n 'relative w-full max-w-2xl outline-none rounded-2xl bg-[var(--tuwa-bg-secondary)] shadow-xl max-h-[98dvh] overflow-y-auto',\n customization?.classNames?.contentWrapper,\n )}\n >\n {/* Header */}\n {customization?.components?.header ? (\n customization.components.header({ closeModal })\n ) : (\n <div className=\"flex items-center justify-between border-b border-[var(--tuwa-border-primary)] p-4 sticky top-0 left-0 w-full bg-[var(--tuwa-bg-secondary)] z-10\">\n <Dialog.Title className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">\n {labels.walletModal.title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n onClick={closeModal}\n aria-label={labels.actions.close}\n className=\"cursor-pointer rounded-full p-1 text-[var(--tuwa-text-tertiary)] transition-colors hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <XMarkIcon className=\"h-6 w-6\" />\n </button>\n </Dialog.Close>\n </div>\n )}\n\n {/* Body */}\n <div className=\"flex flex-col gap-4 p-4 sm:p-6 sm:gap-6\">\n {customization?.components?.walletInfo ? (\n customization.components.walletInfo(props)\n ) : (\n <WalletHeader walletAddress={props.walletAddress} chain={props.chain} />\n )}\n\n {customization?.components?.history ? (\n customization.components.history(props)\n ) : (\n <TransactionsHistory {...props} />\n )}\n </div>\n </div>\n </motion.div>\n </Dialog.Content>\n </>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","/**\n * @file This file contains the main `NovaProvider` component, the primary entry point for the UI library.\n */\n\nimport { deepMerge } from '@tuwaio/nova-core';\nimport {\n IInitializeTxTrackingStore,\n Transaction,\n TransactionAdapter,\n TransactionPool,\n TransactionStatus,\n} from '@tuwaio/pulsar-core';\nimport { JSX, useEffect, useMemo, useRef, useState } from 'react';\nimport { toast, ToastContainer, ToastContainerProps, ToastContentProps, TypeOptions } from 'react-toastify';\nimport { Address, Chain } from 'viem';\n\nimport {\n ToastCloseButton,\n ToastTransaction,\n ToastTransactionCustomization,\n TrackingTxModal,\n TrackingTxModalCustomization,\n TrackingTxModalProps,\n WalletInfoModal,\n WalletInfoModalCustomization,\n} from '../components';\nimport { defaultLabels } from '../i18n/en';\nimport { TuwaLabels } from '../i18n/types';\nimport { LabelsProvider } from './LabelsProvider';\n\nconst STATUS_TO_TOAST_TYPE: Record<string, TypeOptions> = {\n [TransactionStatus.Success]: 'success',\n [TransactionStatus.Failed]: 'error',\n [TransactionStatus.Replaced]: 'info',\n};\n\nexport type NovaProviderProps<TR, T extends Transaction<TR>> = {\n /** A partial object of labels to override the default English text. */\n labels?: Partial<TuwaLabels>;\n /** An object to enable or disable major UI features. All are enabled by default. */\n features?: {\n toasts?: boolean;\n walletInfoModal?: boolean;\n trackingTxModal?: boolean;\n };\n /** A single object to pass down deep customization options to all child components. */\n customization?: {\n toast?: ToastTransactionCustomization<TR, T>;\n walletInfoModal?: WalletInfoModalCustomization<TR, T>;\n trackingTxModal?: TrackingTxModalCustomization<TR, T>;\n };\n chain?: Chain;\n walletAddress?: string;\n} & Pick<IInitializeTxTrackingStore<TR, T>, 'closeTxTrackedModal'> &\n ToastContainerProps &\n Pick<\n TrackingTxModalProps<TR, T>,\n 'handleTransaction' | 'actions' | 'config' | 'appChains' | 'transactionsPool' | 'initialTx'\n >;\n\n/**\n * The main provider for the Nova UI ecosystem.\n * It orchestrates toasts, modals, and the i18n context for the entire application.\n *\n * @param {NovaProviderProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered provider.\n */\nexport function NovaProvider<TR, T extends Transaction<TR>>({\n labels,\n features,\n customization,\n closeTxTrackedModal,\n actions,\n config,\n handleTransaction,\n initialTx,\n appChains,\n transactionsPool,\n walletAddress,\n chain,\n ...toastProps\n}: NovaProviderProps<TR, T>): JSX.Element {\n const [isWalletInfoModalOpen, setIsWalletInfoModalOpen] = useState(false);\n const prevTransactionsRef = useRef<TransactionPool<TR, T>>(transactionsPool);\n\n // Memoize feature flags for stability.\n const enabledFeatures = useMemo(\n () => ({\n toasts: features?.toasts ?? true,\n walletInfoModal: features?.walletInfoModal ?? true,\n trackingTxModal: features?.trackingTxModal ?? true,\n }),\n [features],\n );\n\n // Merge default and custom labels.\n const mergedLabels = useMemo(() => deepMerge(defaultLabels, labels || {}), [labels]);\n\n // Effect to handle automatic toast notifications.\n useEffect(() => {\n if (!enabledFeatures.toasts) return;\n\n const showOrUpdateToast = (tx: T, type: TypeOptions) => {\n const content = (props: ToastContentProps) => (\n <ToastTransaction\n {...props}\n tx={tx}\n transactionsPool={transactionsPool}\n appChains={appChains}\n openWalletInfoModal={enabledFeatures.walletInfoModal ? () => setIsWalletInfoModalOpen(true) : undefined}\n customization={customization?.toast}\n config={config}\n />\n );\n\n if (toast.isActive(tx.txKey)) {\n toast.update(tx.txKey, { render: content, type });\n } else {\n toast(content, { toastId: tx.txKey, type, closeOnClick: false });\n }\n };\n\n const prevPool = prevTransactionsRef.current;\n\n // Compare current pool with the previous one to detect changes.\n Object.values(transactionsPool).forEach((currentTx) => {\n const prevTx = prevPool[currentTx.txKey];\n const statusChanged = prevTx && prevTx.status !== currentTx.status;\n const hashAppeared =\n prevTx &&\n prevTx?.adapter === TransactionAdapter.EVM &&\n !prevTx.hash &&\n currentTx?.adapter === TransactionAdapter.EVM &&\n currentTx.hash;\n\n // Show toast for new pending transactions.\n if (!prevTx && currentTx.pending) {\n showOrUpdateToast(currentTx, 'info');\n }\n // Update toast for pending transactions.\n if (\n (prevTx && prevTx?.adapter === TransactionAdapter.EVM && prevTx.nonce) !==\n (currentTx?.adapter === TransactionAdapter.EVM && currentTx?.nonce)\n ) {\n showOrUpdateToast(currentTx, 'info');\n }\n // Update toast when a final status is reached or a hash appears.\n else if (statusChanged || hashAppeared) {\n const toastType = STATUS_TO_TOAST_TYPE[currentTx.status!] ?? 'info';\n showOrUpdateToast(currentTx, toastType);\n }\n });\n\n prevTransactionsRef.current = transactionsPool;\n }, [transactionsPool, appChains, customization?.toast, enabledFeatures, config]);\n\n return (\n <LabelsProvider labels={mergedLabels}>\n {enabledFeatures.toasts && (\n <ToastContainer\n position=\"bottom-right\"\n stacked\n autoClose={false}\n hideProgressBar\n closeOnClick={false}\n icon={false}\n closeButton={ToastCloseButton}\n toastClassName=\"!p-0 !bg-transparent !shadow-none !min-h-0\"\n {...toastProps}\n />\n )}\n\n {enabledFeatures.walletInfoModal && (\n <WalletInfoModal\n transactionsPool={transactionsPool}\n walletAddress={walletAddress as Address}\n chain={chain}\n isOpen={isWalletInfoModalOpen}\n setIsOpen={setIsWalletInfoModalOpen}\n appChains={appChains}\n customization={customization?.walletInfoModal}\n />\n )}\n\n {enabledFeatures.trackingTxModal && (\n <TrackingTxModal\n initialTx={initialTx}\n onClose={closeTxTrackedModal}\n onOpenWalletInfo={() => setIsWalletInfoModalOpen(true)}\n appChains={appChains}\n transactionsPool={transactionsPool}\n customization={customization?.trackingTxModal}\n actions={actions}\n config={config}\n handleTransaction={handleTransaction}\n />\n )}\n </LabelsProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/i18n/en.ts","../../src/providers/LabelsProvider.tsx","../../src/components/HashLink.tsx","../../src/components/StatusAwareText.tsx","../../src/components/ToastCloseButton.tsx","../../src/components/TransactionKey.tsx","../../src/components/TransactionStatusBadge.tsx","../../src/components/ToastTransaction.tsx","../../src/components/TrackingTxModal/TxErrorBlock.tsx","../../src/components/TrackingTxModal/TxInfoBlock.tsx","../../src/components/TrackingTxModal/TxProgressIndicator.tsx","../../src/components/TrackingTxModal/TxStatusVisual.tsx","../../src/components/TrackingTxModal/TrackingTxModal.tsx","../../src/components/TransactionHistoryItem.tsx","../../src/components/TransactionsHistory.tsx","../../src/components/WalletInfoModal/WalletAddressDisplay.tsx","../../src/components/WalletInfoModal/WalletAvatar.tsx","../../src/components/WalletInfoModal/WalletHeader.tsx","../../src/components/WalletInfoModal/WalletInfoModal.tsx","../../src/providers/NovaProvider.tsx"],"names":["defaultLabels","LabelsContext","createContext","LabelsProvider","labels","children","jsx","useLabels","useContext","HashLink","label","hash","explorerUrl","variant","className","isCopied","copy","useCopyToClipboard","containerClasses","cn","labelClasses","hashContent","textCenterEllipsis","jsxs","ArrowTopRightOnSquareIcon","CheckIcon","DocumentDuplicateIcon","STATUS_MAP","TransactionStatus","StatusAwareText","txStatus","source","fallback","applyColor","baseClasses","config","text","colorClass","ToastCloseButton","closeToast","XMarkIcon","TransactionKey","tx","appChains","transactionsPool","renderHashLink","TransactionAdapter","wasReplaced","renderHash","props","TransactionTracker","Fragment","selectEvmTxExplorerLink","TransactionStatusBadge","STATUS_CONFIG","ArrowPathIcon","CheckCircleIcon","XCircleIcon","statusKey","Icon","badgeClasses","iconClasses","ToastTransaction","openWalletInfoModal","icon","customization","C","canReplace","handleSpeedUp","speedUpTxAction","handleCancel","cancelTxAction","getChainName","Web3Icon","getAccount","TxErrorBlock","error","ExclamationTriangleIcon","InfoRow","value","TxInfoBlock","renderInfoRow","dayjs","Step","status","isFirst","state","colorConfig","TxProgressIndicator","isProcessing","isSucceed","isFailed","isReplaced","StepComponent","getStepStatus","stepIndex","getStepLabel","steps","stepProps","index","TxStatusVisual","ExclamationCircleIcon","ClockIcon","TrackingTxModal","onClose","onOpenWalletInfo","actions","handleTransaction","initialTx","trackedTx","setTrackedTx","useState","useEffect","currentTx","txToDisplay","isInitializing","isPending","isError","canRetry","motionProps","handleRetry","retryParams","isOpen","h","open","AnimatePresence","motion","relativeTime","TransactionHistoryItem","HistoryPlaceholder","title","message","TransactionsHistory","walletAddress","sortedTransactions","selectAllTransactionsByActiveWallet","a","b","renderPlaceholder","HistoryItemComponent","WalletAddressDisplay","address","chain","explorerLink","WalletAvatar","ensAvatar","bgColor","avatar","setAvatar","makeBlockie","isHex","zeroAddress","WalletHeader","renderAvatar","renderName","renderAddressDisplay","renderNoWalletContent","ensName","setEnsName","setEnsAvatar","isLoading","setIsLoading","name","getName","getAvatar","ensNameAbbreviated","WalletInfoModal","setIsOpen","closeModal","w","STATUS_TO_TOAST_TYPE","NovaProvider","features","closeTxTrackedModal","toastProps","isWalletInfoModalOpen","setIsWalletInfoModalOpen","prevTransactionsRef","useRef","enabledFeatures","useMemo","mergedLabels","deepMerge","showOrUpdateToast","type","content","toast","prevPool","prevTx","statusChanged","hashAppeared","toastType","ToastContainer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @file This file contains the default English labels for all UI components.\n * It serves as the default language pack for the library.\n */\n\nimport { TuwaLabels } from './types';\n\n/**\n * An object containing the default English text for all labels used in the UI.\n * This object implements the `TuwaLabels` type and can be used as a template\n * for creating other language translations.\n */\nexport const defaultLabels: TuwaLabels = {\n walletModal: {\n title: 'Wallet & Transactions',\n header: {\n notConnected: 'Wallet not connected',\n avatarAlt: 'Avatar for',\n },\n history: {\n title: 'Transactions History',\n connectWalletTitle: 'Connect Wallet',\n connectWalletMessage: 'Please connect your wallet to see your past activity.',\n noTransactionsTitle: 'No Transactions Yet',\n noTransactionsMessage: 'Once you interact with the app, your transaction history will appear here.',\n },\n },\n toast: {\n openWalletInfo: 'Open wallet info',\n },\n statuses: {\n pending: 'Pending',\n success: 'Success',\n failed: 'Failed',\n reverted: 'Reverted',\n replaced: 'Replaced',\n unknown: 'Unknown',\n },\n hashLabels: {\n gelato: 'Gelato Task ID',\n safe: 'Safe Tx Hash',\n original: 'Original Tx Hash',\n replaced: 'Replaced Tx Hash',\n default: 'Tx Hash',\n },\n txInfo: {\n started: 'Started',\n network: 'Network',\n },\n txError: {\n title: 'Error',\n copied: 'Copied!',\n },\n trackingModal: {\n title: 'Transaction Overview',\n processing: 'Processing...',\n close: 'Close',\n walletInfo: 'Wallet Info',\n retry: 'Retry',\n progressIndicator: {\n created: 'Created',\n processing: 'Processing',\n succeed: 'Succeed',\n },\n },\n trackedTxButton: {\n loading: 'Processing...',\n succeed: 'Success',\n failed: 'Failed',\n replaced: 'Replaced',\n },\n actions: {\n copy: 'Copy address',\n viewOnExplorer: 'View on explorer',\n close: 'Close',\n cancel: 'Cancel',\n speedUp: 'Speed up',\n },\n};\n","/**\n * @file This file sets up the React Context for providing i18n labels throughout the UI components.\n * It allows for deep customization of all text displayed by the library.\n */\n\nimport { createContext, ReactNode, useContext } from 'react';\n\nimport { defaultLabels } from '../i18n/en';\nimport { TuwaLabels } from '../i18n/types';\n\n/**\n * React Context for storing and providing the UI labels.\n * It is initialized with the default English labels, ensuring that components\n * work even without an explicit provider.\n */\nconst LabelsContext = createContext<TuwaLabels>(defaultLabels);\n\n/**\n * A React component that provides a custom set of labels to all child components.\n * Wrap your application or component tree with this provider to apply custom translations.\n *\n * @param {object} props - The component props.\n * @param {TuwaLabels} props.labels - An object containing the custom labels.\n * @param {ReactNode} props.children - The child components to render.\n */\nexport const LabelsProvider = ({ labels, children }: { labels: TuwaLabels; children: ReactNode }) => {\n return <LabelsContext.Provider value={labels}>{children}</LabelsContext.Provider>;\n};\n\n/**\n * A custom hook to easily access the i18n labels from any component\n * within the `LabelsProvider` tree.\n *\n * @returns {TuwaLabels} The complete object of UI labels.\n *\n * @example\n * const MyComponent = () => {\n * const labels = useLabels();\n * return <h1>{labels.walletModal.title}</h1>;\n * }\n */\nexport const useLabels = (): TuwaLabels => {\n return useContext(LabelsContext);\n};\n","/**\n * @file This file contains the `HashLink` component, a UI element for displaying hashes with copy and explorer link functionality.\n */\n\nimport { ArrowTopRightOnSquareIcon, CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/24/solid';\nimport { cn, textCenterEllipsis, useCopyToClipboard } from '@tuwaio/nova-core';\n\nimport { useLabels } from '../providers';\n\n/**\n * A component to display a hash string (e.g., transaction hash or address)\n * with an optional label, a link to a block explorer, and a copy-to-clipboard button.\n *\n * @param {object} props - The component props.\n * @param {string} [props.label] - An optional label to display before the hash (e.g., \"Tx Hash\").\n * @param {string} props.hash - The full hash string to display and copy.\n * @param {string} [props.explorerUrl] - An optional URL to a block explorer. If provided, the hash becomes a link.\n * @param {'default' | 'compact'} [props.variant='default'] - The visual style of the component.\n * @param {string} [props.className] - Additional CSS classes to apply to the container element.\n * @returns {JSX.Element} The rendered HashLink component.\n */\nexport function HashLink({\n label,\n hash,\n explorerUrl,\n variant = 'default',\n className,\n}: {\n label?: string;\n hash: string;\n explorerUrl?: string;\n variant?: 'default' | 'compact';\n className?: string;\n}) {\n const { isCopied, copy } = useCopyToClipboard();\n const labels = useLabels();\n\n const containerClasses = cn(\n 'flex items-center justify-between',\n variant === 'default' && 'text-sm',\n variant === 'compact' && 'text-xs',\n className,\n );\n\n const labelClasses = cn(\n 'pr-1',\n variant === 'default' && 'font-bold text-[var(--tuwa-text-primary)]',\n variant === 'compact' && 'font-medium text-[var(--tuwa-text-secondary)]',\n );\n\n const hashContent = <span className=\"font-mono\">{textCenterEllipsis(hash, 5, 5)}</span>;\n\n return (\n <div className={containerClasses}>\n {label && <span className={labelClasses}>{label}:</span>}\n <div className=\"flex items-center gap-x-2\">\n {explorerUrl ? (\n <a\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-x-1 text-[var(--tuwa-text-accent)] hover:underline\"\n title={labels.actions.viewOnExplorer}\n aria-label={labels.actions.viewOnExplorer}\n >\n {hashContent}\n <ArrowTopRightOnSquareIcon className=\"h-4 w-4\" />\n </a>\n ) : (\n hashContent\n )}\n <button\n type=\"button\"\n onClick={() => copy(hash)}\n className=\"cursor-pointer text-[var(--tuwa-text-tertiary)] transition-colors hover:text-[var(--tuwa-text-secondary)]\"\n title={isCopied ? labels.txError.copied : labels.actions.copy}\n aria-label={isCopied ? labels.txError.copied : labels.actions.copy}\n >\n {isCopied ? (\n <CheckIcon className=\"h-4 w-4 text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `StatusAwareText` component, which displays different text based on a transaction's status.\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport { TransactionStatus } from '@tuwaio/pulsar-core';\nimport { ReactNode } from 'react';\n\n/**\n * A mapping from transaction status to an index and a color class.\n * The index corresponds to the position in the `source` array prop.\n * Index 0: Pending\n * Index 1: Success\n * Index 2: Failed\n * Index 3: Replaced\n */\nconst STATUS_MAP: Record<TransactionStatus | 'default', { index: number; colorClass: string }> = {\n [TransactionStatus.Success]: { index: 1, colorClass: 'text-[var(--tuwa-success-text)]' },\n [TransactionStatus.Failed]: { index: 2, colorClass: 'text-[var(--tuwa-error-text)]' },\n [TransactionStatus.Replaced]: { index: 3, colorClass: 'text-[var(--tuwa-text-secondary)]' },\n default: { index: 0, colorClass: 'text-[var(--tuwa-text-primary)]' }, // For pending or undefined status\n};\n\ntype StatusAwareTextProps = {\n /** The current status of the transaction. */\n txStatus?: TransactionStatus;\n /**\n * The source for the text. Can be a single string, or an array of strings\n * corresponding to different statuses in the format: `[pending, success, error, replaced]`.\n */\n source?: string | string[];\n /** A fallback string to display if `source` is not provided. */\n fallback?: string;\n /** The visual variant, determines the base text style ('title' or 'description'). */\n variant: 'title' | 'description';\n /** Optional additional CSS classes. */\n className?: string;\n /** If true, applies a status-specific color to the text. */\n applyColor?: boolean;\n};\n\n/**\n * A component that renders text conditionally based on a transaction's status.\n * It's designed to work with the `title` and `description` fields of a transaction,\n * which can be a single string or a status-dependent array of strings.\n *\n * @param {StatusAwareTextProps} props - The component props.\n * @returns {ReactNode} The rendered text element or null.\n */\nexport function StatusAwareText({\n txStatus,\n source,\n fallback,\n variant,\n className,\n applyColor = false,\n}: StatusAwareTextProps): ReactNode {\n const baseClasses =\n variant === 'title'\n ? 'text-sm font-semibold text-[var(--tuwa-text-primary)]'\n : 'mt-1 text-xs text-[var(--tuwa-text-secondary)]';\n\n // Case 1: Source is a simple string.\n if (typeof source === 'string') {\n return <div className={cn(baseClasses, className)}>{source}</div>;\n }\n\n // Case 2: Source is a status-dependent array.\n if (Array.isArray(source)) {\n const statusKey = txStatus || 'default';\n const config = STATUS_MAP[statusKey] || STATUS_MAP['default'];\n const text = source[config.index];\n const colorClass = applyColor ? config.colorClass : '';\n\n return <div className={cn(baseClasses, colorClass, className)}>{text}</div>;\n }\n\n // Case 3: Source is not provided, use the fallback.\n if (fallback) {\n return <div className={cn(baseClasses, className)}>{fallback}</div>;\n }\n\n // Case 4: Nothing to render.\n return null;\n}\n","/**\n * @file This file contains a reusable close button component, typically for toast notifications.\n */\n\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport { JSX } from 'react';\n\nimport { useLabels } from '../providers';\n\ntype ToastCloseButtonProps = {\n /**\n * The function to call when the button is clicked.\n * This is typically provided by a toast library to dismiss the notification.\n */\n closeToast?: (e: React.MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * A simple, styled close button component (X icon) designed for use within toast notifications.\n *\n * @param {ToastCloseButtonProps} props - The component props.\n * @returns {JSX.Element} The rendered close button.\n */\nexport function ToastCloseButton({ closeToast }: ToastCloseButtonProps): JSX.Element {\n const labels = useLabels();\n\n return (\n <button\n type=\"button\"\n onClick={closeToast}\n aria-label={labels.actions.close}\n title={labels.actions.close}\n className=\"absolute top-2 right-2 cursor-pointer rounded-full p-1 text-[var(--tuwa-text-tertiary)] transition-colors hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n );\n}\n","/**\n * @file This file contains the `TransactionKey` component, which is responsible for displaying\n * the various identifiers associated with a transaction (e.g., hash, Gelato Task ID).\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionAdapter } from '@tuwaio/pulsar-core';\nimport { selectEvmTxExplorerLink, TransactionTracker } from '@tuwaio/pulsar-evm';\nimport { ReactNode } from 'react';\nimport { Chain, Hex } from 'viem';\n\nimport { useLabels } from '../providers';\nimport { HashLink } from './HashLink';\nimport { WalletInfoModalProps } from './WalletInfoModal';\n\n// Utility type to extract the props of the HashLink component.\ntype CustomHashLinkProps = Parameters<typeof HashLink>[0];\n\nexport interface ToastTransactionKeyProps<TR, T extends Transaction<TR>>\n extends Pick<WalletInfoModalProps<TR, T>, 'transactionsPool'> {\n /** The transaction object to display identifiers for. */\n tx: T;\n /** An array of supported chain objects, used for generating explorer links. */\n appChains: Chain[];\n /** The visual variant, which applies different container styles. */\n variant?: 'toast' | 'history';\n /** Optional additional CSS classes for the container. */\n className?: string;\n /**\n * An optional render prop to allow for complete customization of how the hash link is rendered.\n * If not provided, the default `HashLink` component will be used.\n */\n renderHashLink?: (props: CustomHashLinkProps) => ReactNode;\n}\n\n/**\n * A component that intelligently displays the relevant keys and hashes for a transaction.\n * It handles different tracker types (EVM, Gelato, Safe) and statuses (e.g., replaced transactions).\n *\n * @param {ToastTransactionKeyProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered component.\n */\nexport function TransactionKey<TR, T extends Transaction<TR>>({\n tx,\n appChains,\n transactionsPool,\n variant = 'toast',\n className,\n renderHashLink,\n}: ToastTransactionKeyProps<TR, T>) {\n const labels = useLabels();\n\n if (tx?.adapter !== TransactionAdapter.EVM) return null;\n\n const wasReplaced = !!tx.replacedTxHash;\n\n const containerClasses =\n variant === 'toast'\n ? 'mt-2 flex w-full flex-col gap-y-2 border-t border-[var(--tuwa-border-primary)] pt-2'\n : 'flex w-full flex-col gap-y-2';\n\n // Helper to use the render prop if provided, otherwise default to HashLink.\n const renderHash = (props: CustomHashLinkProps) => {\n return renderHashLink ? renderHashLink(props) : <HashLink {...props} />;\n };\n\n return (\n <div className={cn(containerClasses, className)}>\n {/* Display tracker-specific identifiers (like Gelato Task ID or SafeTxHash) */}\n {tx.tracker === TransactionTracker.Gelato &&\n renderHash({ label: labels.hashLabels.gelato, hash: tx.txKey, variant: 'compact' })}\n {tx.tracker === TransactionTracker.Safe &&\n renderHash({ label: labels.hashLabels.safe, hash: tx.txKey, variant: 'compact' })}\n\n {/* Display on-chain hashes */}\n {wasReplaced ? (\n // Case 1: The transaction was replaced (e.g., sped up).\n <>\n {tx.hash && renderHash({ label: labels.hashLabels.original, hash: tx.hash, variant: 'compact' })}\n {renderHash({\n label: labels.hashLabels.replaced,\n hash: tx.replacedTxHash as Hex,\n // The explorer link should point to the NEW (replaced) transaction.\n explorerUrl: selectEvmTxExplorerLink(\n transactionsPool,\n appChains,\n tx.txKey as Hex,\n tx.replacedTxHash as Hex,\n ),\n })}\n </>\n ) : (\n // Case 2: Standard transaction hash.\n tx.hash &&\n renderHash({\n label: labels.hashLabels.default,\n hash: tx.hash as Hex,\n explorerUrl: selectEvmTxExplorerLink(transactionsPool, appChains, tx.txKey as Hex),\n })\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `TransactionStatusBadge` component for visually displaying a transaction's status.\n */\n\nimport { ArrowPathIcon, CheckCircleIcon, XCircleIcon } from '@heroicons/react/24/solid';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionStatus } from '@tuwaio/pulsar-core';\nimport { JSX } from 'react';\n\nimport { useLabels } from '../providers';\n\ntype TransactionStatusBadgeProps<TR, T extends Transaction<TR>> = {\n /** The transaction object whose status will be displayed. */\n tx: T;\n /** Optional additional CSS classes to apply to the badge container. */\n className?: string;\n};\n\n/**\n * A component that displays a transaction's status as a styled badge\n * with a corresponding icon, color, and label.\n *\n * @param {TransactionStatusBadgeProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered status badge.\n */\nexport function TransactionStatusBadge<TR, T extends Transaction<TR>>({\n tx,\n className,\n}: TransactionStatusBadgeProps<TR, T>): JSX.Element {\n const labels = useLabels();\n\n // A configuration map that links a status to its visual representation.\n const STATUS_CONFIG = {\n Pending: {\n label: labels.statuses.pending,\n Icon: ArrowPathIcon,\n badgeClasses: 'bg-[var(--tuwa-pending-bg)] text-[var(--tuwa-pending-text)]',\n iconClasses: 'animate-spin text-[var(--tuwa-pending-icon)]',\n },\n [TransactionStatus.Success]: {\n label: labels.statuses.success,\n Icon: CheckCircleIcon,\n badgeClasses: 'bg-[var(--tuwa-success-bg)] text-[var(--tuwa-success-text)]',\n iconClasses: 'text-[var(--tuwa-success-icon)]',\n },\n [TransactionStatus.Failed]: {\n label: labels.statuses.failed,\n Icon: XCircleIcon,\n badgeClasses: 'bg-[var(--tuwa-error-bg)] text-[var(--tuwa-error-text)]',\n iconClasses: 'text-[var(--tuwa-error-icon)]',\n },\n [TransactionStatus.Replaced]: {\n label: labels.statuses.replaced,\n Icon: ArrowPathIcon,\n badgeClasses: 'bg-[var(--tuwa-info-bg)] text-[var(--tuwa-info-text)]',\n iconClasses: 'text-[var(--tuwa-info-icon)]',\n },\n };\n\n const baseClasses = 'inline-flex items-center gap-x-1.5 rounded-full px-2 py-1 text-xs font-medium';\n\n // Determine the status key: 'Pending' takes precedence, otherwise use the final status.\n const statusKey = tx.pending ? 'Pending' : tx.status;\n const config = statusKey ? STATUS_CONFIG[statusKey as keyof typeof STATUS_CONFIG] : null;\n\n // Fallback for unknown or missing statuses.\n if (!config) {\n return (\n <div className={cn(baseClasses, 'bg-[var(--tuwa-info-bg)] text-[var(--tuwa-info-text)]', className)}>\n {tx.status ?? labels.statuses.unknown}\n </div>\n );\n }\n\n const { label, Icon, badgeClasses, iconClasses } = config;\n\n return (\n <div className={cn(baseClasses, badgeClasses, className)}>\n <Icon className={cn('h-4 w-4', iconClasses)} />\n {label}\n </div>\n );\n}\n","/**\n * @file This file contains the `ToastTransaction` component, which serves as the main body for a transaction notification toast.\n */\n\nimport { Web3Icon } from '@bgd-labs/react-web3-icons';\nimport { getChainName } from '@bgd-labs/react-web3-icons/dist/utils';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionAdapter } from '@tuwaio/pulsar-core';\nimport { cancelTxAction, speedUpTxAction } from '@tuwaio/pulsar-evm';\nimport { Config, getAccount } from '@wagmi/core';\nimport { JSX, ReactNode } from 'react';\nimport { ToastContainerProps, ToastContentProps } from 'react-toastify';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../providers';\nimport { StatusAwareText } from './StatusAwareText';\nimport { TransactionKey } from './TransactionKey';\nimport { TransactionStatusBadge } from './TransactionStatusBadge';\nimport { WalletInfoModalProps } from './WalletInfoModal';\n\n// --- Prop Types for Customization ---\ntype CustomStatusAwareTextProps = Parameters<typeof StatusAwareText>[0];\ntype CustomTransactionKeyProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionKey<TR, T>>[0];\ntype CustomStatusBadgeProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionStatusBadge<TR, T>>[0];\n/** Props provided to custom action buttons like 'Wallet Info', 'Speed Up', or 'Cancel'. */\ntype CustomActionButtonProps = { onClick: () => void; children: ReactNode };\n\n/**\n * Defines the structure for the `customization` prop, allowing users to override\n * default sub-components with their own implementations.\n */\nexport type ToastTransactionCustomization<TR, T extends Transaction<TR>> = {\n components?: {\n /** Override the default title/description component. */\n statusAwareText?: (props: CustomStatusAwareTextProps) => ReactNode;\n /** Override the default component for displaying transaction keys/hashes. */\n transactionKey?: (props: CustomTransactionKeyProps<TR, T>) => ReactNode;\n /** Override the default status badge component. */\n statusBadge?: (props: CustomStatusBadgeProps<TR, T>) => ReactNode;\n /** Override the default \"Open wallet info\" button. */\n walletInfoButton?: (props: CustomActionButtonProps) => ReactNode;\n /** Override the default \"Speed Up\" button. */\n speedUpButton?: (props: CustomActionButtonProps) => ReactNode;\n /** Override the default \"Cancel\" button. */\n cancelButton?: (props: CustomActionButtonProps) => ReactNode;\n };\n};\n\nexport type ToastTransactionProps<TR, T extends Transaction<TR>> = {\n /** The transaction object to display in the toast. */\n tx: T;\n /** A function to open the main wallet info modal. If not provided, the button will not be rendered. */\n openWalletInfoModal?: (value: boolean) => void;\n /** An array of supported chain objects, used for displaying network information. */\n appChains: Chain[];\n /** An optional custom icon to display instead of the default chain icon. */\n icon?: ReactNode;\n /** Optional additional CSS classes for the toast container. */\n className?: string;\n /** An object to customize and override the default internal components. */\n customization?: ToastTransactionCustomization<TR, T>;\n /** The wagmi config object, required for Speed Up and Cancel functionality. */\n config?: Config;\n\n /** Props from `react-toastify` to control the toast itself. */\n closeToast?: ToastContentProps['closeToast'];\n toastProps?: ToastContainerProps;\n} & Pick<WalletInfoModalProps<TR, T>, 'transactionsPool'>;\n\n/**\n * A composite component that renders the content for a transaction toast notification.\n * It is highly customizable and includes actions for speeding up or canceling transactions\n * when they are in a pending state.\n *\n * @template TR The generic type for the transaction tracker registry.\n * @template T The generic type for the transaction object.\n * @param {ToastTransactionProps<TR, T>} props The component props.\n * @returns {JSX.Element} The rendered toast body.\n */\nexport function ToastTransaction<TR, T extends Transaction<TR>>({\n openWalletInfoModal,\n tx,\n transactionsPool,\n appChains,\n icon,\n className,\n customization,\n config,\n}: ToastTransactionProps<TR, T>): JSX.Element {\n const labels = useLabels();\n const C = customization?.components; // Shortcut for customization components\n\n // A transaction can be replaced if it's pending and has the necessary fee info.\n const canReplace =\n config &&\n tx?.adapter === TransactionAdapter.EVM &&\n tx.nonce !== undefined &&\n tx.pending &&\n tx.maxFeePerGas &&\n tx.maxPriorityFeePerGas;\n\n // --- Action Handlers ---\n const handleSpeedUp = async () => {\n if (canReplace) await speedUpTxAction({ config, tx });\n };\n\n const handleCancel = async () => {\n if (canReplace) await cancelTxAction({ config, tx });\n };\n\n return (\n <div className={cn('flex w-full flex-col gap-3 rounded-lg bg-[var(--tuwa-bg-primary)] p-4 shadow-md', className)}>\n {/* --- Header: Icon + Title/Description --- */}\n <div className=\"flex items-start gap-3\">\n <div className=\"w-[40px] flex-shrink-0\" title={getChainName(tx.chainId as number)}>\n {icon ?? <Web3Icon chainId={tx.chainId as number} />}\n </div>\n <div className=\"flex-1\">\n {C?.statusAwareText ? (\n C.statusAwareText({\n txStatus: tx.status,\n source: tx.title,\n fallback: tx.type,\n variant: 'title',\n applyColor: true,\n })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n )}\n {C?.statusAwareText ? (\n C.statusAwareText({ txStatus: tx.status, source: tx.description, variant: 'description' })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.description} variant=\"description\" />\n )}\n </div>\n </div>\n\n {/* --- Body: Hashes + Status/Actions --- */}\n <div>\n {C?.transactionKey ? (\n C.transactionKey({ transactionsPool, appChains, tx, variant: 'toast' })\n ) : (\n <TransactionKey transactionsPool={transactionsPool} appChains={appChains} tx={tx} variant=\"toast\" />\n )}\n <div className=\"mt-3 flex items-center justify-between\">\n {C?.statusBadge ? C.statusBadge({ tx }) : <TransactionStatusBadge tx={tx} />}\n\n {/* Conditionally render Speed Up/Cancel or the Wallet Info button */}\n {canReplace ? (\n <div className=\"flex items-center gap-4\">\n {C?.speedUpButton ? (\n C.speedUpButton({ onClick: handleSpeedUp, children: labels.actions.speedUp })\n ) : (\n <button\n onClick={handleSpeedUp}\n type=\"button\"\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-accent)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.speedUp}\n </button>\n )}\n {C?.cancelButton ? (\n C.cancelButton({ onClick: handleCancel, children: labels.actions.cancel })\n ) : (\n <button\n onClick={handleCancel}\n type=\"button\"\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-secondary)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.cancel}\n </button>\n )}\n </div>\n ) : (\n config &&\n getAccount(config).address &&\n openWalletInfoModal &&\n (C?.walletInfoButton ? (\n C.walletInfoButton({ onClick: () => openWalletInfoModal(true), children: labels.toast.openWalletInfo })\n ) : (\n <button\n className=\"cursor-pointer bg-gradient-to-r from-[var(--tuwa-button-gradient-from)] to-[var(--tuwa-button-gradient-to)] text-[var(--tuwa-text-on-accent)] font-bold text-xs py-1 px-3 rounded-md shadow-lg hover:shadow-xl hover:from-[var(--tuwa-button-gradient-from-hover)] hover:to-[var(--tuwa-button-gradient-to-hover)] active:scale-95 transition-all duration-200 ease-in-out\"\n onClick={() => openWalletInfoModal(true)}\n type=\"button\"\n >\n {labels.toast.openWalletInfo}\n </button>\n ))\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\n/**\n * @file This file contains the `TxErrorBlock` component for displaying transaction error messages.\n */\n\nimport { DocumentDuplicateIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid';\nimport { cn, useCopyToClipboard } from '@tuwaio/nova-core';\nimport { JSX } from 'react';\n\nimport { useLabels } from '../../providers';\n\nexport type TxErrorBlockProps = {\n /** The error message string to display. If undefined, the component renders nothing. */\n error?: string;\n /** Optional additional CSS classes for the container. */\n className?: string;\n};\n\n/**\n * A component that displays a formatted block for a transaction error message.\n * It includes a title, an icon, the error message in a scrollable area,\n * and a button to copy the message to the clipboard.\n *\n * @param {TxErrorBlockProps} props - The component props.\n * @returns {JSX.Element | null} The rendered error block, or null if no error is provided.\n */\nexport function TxErrorBlock({ error, className }: TxErrorBlockProps): JSX.Element | null {\n const { isCopied, copy } = useCopyToClipboard();\n const labels = useLabels();\n\n // Don't render anything if there is no error message.\n if (!error) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-[var(--tuwa-error-icon)]/30 bg-[var(--tuwa-error-bg)] p-3 text-sm',\n className,\n )}\n >\n {/* --- Header with Title and Copy Button --- */}\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2 font-bold text-[var(--tuwa-error-icon)]\">\n <ExclamationTriangleIcon className=\"h-5 w-5\" />\n <span>{labels.txError.title}</span>\n </div>\n <button\n type=\"button\"\n onClick={() => copy(error)}\n title={labels.actions.copy}\n aria-label={labels.actions.copy}\n className=\"cursor-pointer text-[var(--tuwa-error-icon)]/50 transition-colors hover:text-[var(--tuwa-error-icon)]\"\n >\n <DocumentDuplicateIcon className=\"h-5 w-5\" />\n </button>\n </div>\n\n {/* --- Scrollable Error Message --- */}\n <div className=\"max-h-24 overflow-y-auto rounded bg-[var(--tuwa-bg-primary)] p-2\">\n <p className=\"font-mono text-xs text-[var(--tuwa-error-text)] break-all\">{error}</p>\n </div>\n\n {/* --- \"Copied!\" Feedback Text --- */}\n <div className=\"mt-1 h-5 text-right\">\n <p\n className={cn(\n 'text-xs text-[var(--tuwa-success-icon)] transition-opacity duration-300 ease-in-out',\n isCopied ? 'opacity-100' : 'opacity-0',\n )}\n >\n {labels.txError.copied}\n </p>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TxInfoBlock` component, which displays key details about a transaction.\n */\n\nimport { Web3Icon } from '@bgd-labs/react-web3-icons';\nimport { getChainName } from '@bgd-labs/react-web3-icons/dist/utils';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionPool } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport { JSX, ReactNode } from 'react';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { ToastTransactionKeyProps, TransactionKey } from '../TransactionKey';\n\n// --- Prop Types for Customization ---\ntype CustomInfoRowProps = { label: ReactNode; value: ReactNode };\n\n/**\n * Defines the customization options for the `TxInfoBlock` component.\n */\nexport type TxInfoBlockCustomization<TR, T extends Transaction<TR>> = {\n components?: {\n /** A render prop to replace the default label-value row component. */\n infoRow?: (props: CustomInfoRowProps) => ReactNode;\n /**\n * A render prop to customize the rendering of the transaction keys/hashes.\n * This is passed down to the underlying `TransactionKey` component.\n */\n transactionKey?: ToastTransactionKeyProps<TR, T>['renderHashLink'];\n };\n};\n\n// A local component for displaying a label-value pair.\nfunction InfoRow({ label, value }: { label: ReactNode; value: ReactNode }) {\n return (\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-[var(--tuwa-text-secondary)]\">{label}</span>\n <span className=\"font-medium text-[var(--tuwa-text-primary)]\">{value}</span>\n </div>\n );\n}\n\nexport type TxInfoBlockProps<TR, T extends Transaction<TR>> = {\n tx: T & {\n desiredChainID?: number;\n };\n appChains: Chain[];\n transactionsPool: TransactionPool<TR, T>;\n className?: string;\n customization?: TxInfoBlockCustomization<TR, T>;\n};\n\n/**\n * A component that displays a block of essential transaction details,\n * such as network, start time, and relevant hashes/keys.\n *\n * @param {object} props - The component props.\n * @returns {JSX.Element} The rendered info block.\n */\nexport function TxInfoBlock<TR, T extends Transaction<TR>>({\n tx,\n appChains,\n transactionsPool,\n className,\n customization,\n}: TxInfoBlockProps<TR, T>): JSX.Element {\n const labels = useLabels();\n\n const renderInfoRow = (props: CustomInfoRowProps) => {\n return customization?.components?.infoRow ? customization.components.infoRow(props) : <InfoRow {...props} />;\n };\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 rounded-lg border border-[var(--tuwa-border-primary)] bg-[var(--tuwa-bg-primary)] p-3',\n className,\n )}\n >\n {/* --- Network and Timestamp Info --- */}\n {renderInfoRow({\n label: labels.txInfo.network,\n value: (\n <div className=\"flex items-center justify-end gap-2\">\n <div className=\"h-4 w-4\">\n <Web3Icon chainId={(tx.chainId ?? tx?.desiredChainID ?? 1) as number} />\n </div>\n <span>{getChainName((tx.chainId ?? tx?.desiredChainID ?? 1) as number)}</span>\n </div>\n ),\n })}\n {tx.localTimestamp &&\n renderInfoRow({\n label: labels.txInfo.started,\n value: dayjs.unix(tx.localTimestamp).format('MMM D, HH:mm:ss'),\n })}\n\n {/* --- Transaction Hashes/Keys --- */}\n {/* Reusing the TransactionKey component to avoid code duplication. */}\n <div className=\"border-t border-[var(--tuwa-border-primary)] pt-3\">\n <TransactionKey\n tx={tx}\n appChains={appChains}\n transactionsPool={transactionsPool}\n variant=\"history\" // 'history' variant has suitable styling for this block\n renderHashLink={customization?.components?.transactionKey}\n />\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TxProgressIndicator` component, a visual step-by-step progress bar for transactions.\n */\n\nimport { ArrowPathIcon, CheckIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid';\nimport { cn } from '@tuwaio/nova-core';\nimport { ComponentType, JSX } from 'react';\n\nimport { useLabels } from '../../providers';\n\n// --- Sub-component: Step ---\n\nexport type StepStatus = 'active' | 'completed' | 'error' | 'inactive' | 'replaced';\nexport type StepProps = { status: StepStatus; label: string; isFirst?: boolean; isLast?: boolean; className?: string };\n\n/**\n * Renders a single step in the progress indicator.\n * This is an internal component but can be replaced via customization.\n */\nfunction Step({ status, label, isFirst = false }: StepProps): JSX.Element {\n const state = {\n isCompleted: status === 'completed',\n isError: status === 'error',\n isReplaced: status === 'replaced',\n isActive: status === 'active',\n };\n\n const colorConfig = {\n line: cn({\n 'bg-[var(--tuwa-success-icon)]': state.isCompleted,\n 'bg-[var(--tuwa-error-icon)]': state.isError,\n 'bg-[var(--tuwa-info-icon)]': state.isReplaced,\n 'bg-[var(--tuwa-pending-icon)]': state.isActive,\n 'bg-[var(--tuwa-border-primary)]': status === 'inactive',\n }),\n border: cn({\n 'border-[var(--tuwa-success-icon)]': state.isCompleted,\n 'border-[var(--tuwa-error-icon)]': state.isError,\n 'border-[var(--tuwa-info-icon)]': state.isReplaced,\n 'border-[var(--tuwa-pending-icon)]': state.isActive,\n 'border-[var(--tuwa-border-primary)]': status === 'inactive',\n }),\n fill: cn({\n 'bg-[var(--tuwa-success-icon)]': state.isCompleted,\n 'bg-[var(--tuwa-error-icon)]': state.isError,\n 'bg-[var(--tuwa-info-icon)]': state.isReplaced,\n }),\n pulse: cn({ 'bg-[var(--tuwa-pending-icon)]': state.isActive }),\n };\n\n return (\n <div className=\"relative flex flex-1 flex-col items-center min-w-[80px]\">\n {/* Connecting line */}\n {!isFirst && <div className={cn('absolute right-1/2 top-[10px] h-0.5 w-full', colorConfig.line)} />}\n\n {/* Circle and Icon */}\n <div\n className={cn(\n 'relative z-10 flex h-5 w-5 items-center justify-center rounded-full border-2',\n colorConfig.border,\n colorConfig.fill,\n )}\n >\n {state.isCompleted && <CheckIcon className=\"h-3 w-3 text-white\" />}\n {state.isError && <ExclamationTriangleIcon className=\"h-3 w-3 text-white\" />}\n {state.isReplaced && <ArrowPathIcon className=\"h-3 w-3 text-white\" />}\n {state.isActive && <div className={cn('h-2 w-2 animate-pulse rounded-full', colorConfig.pulse)} />}\n </div>\n\n {/* Label */}\n <span\n className={cn(\n 'mt-2 text-center text-xs',\n status !== 'inactive' ? 'font-semibold text-[var(--tuwa-text-primary)]' : 'text-[var(--tuwa-text-secondary)]',\n )}\n >\n {label}\n </span>\n </div>\n );\n}\n\n// --- Main Component: TxProgressIndicator ---\n\nexport interface TxProgressIndicatorProps {\n isProcessing?: boolean;\n isSucceed?: boolean;\n isFailed?: boolean;\n isReplaced?: boolean;\n className?: string;\n /** A custom component to use instead of the default `Step`. */\n StepComponent?: ComponentType<StepProps>;\n}\n\n/**\n * A 3-step progress indicator that visually represents the lifecycle of a transaction.\n *\n * @param {TxProgressIndicatorProps} props - The component props.\n * @returns {JSX.Element} The rendered progress indicator.\n */\nexport function TxProgressIndicator({\n isProcessing,\n isSucceed,\n isFailed,\n isReplaced,\n className,\n StepComponent = Step,\n}: TxProgressIndicatorProps): JSX.Element {\n const labels = useLabels();\n\n // This logic determines the status of each of the three steps.\n const getStepStatus = (stepIndex: 1 | 2 | 3): StepStatus => {\n // Step 1: \"Created\" - Always completed once the process starts.\n if (stepIndex === 1) return 'completed';\n\n // Step 2: \"Processing\"\n if (stepIndex === 2) {\n if (isSucceed || isFailed || isReplaced) return 'completed';\n if (isProcessing) return 'active';\n }\n\n // Step 3: \"Final\"\n if (stepIndex === 3) {\n if (isSucceed) return 'completed';\n if (isFailed) return 'error';\n if (isReplaced) return 'replaced';\n if (isProcessing) return 'active';\n }\n\n return 'inactive';\n };\n\n const getStepLabel = (stepIndex: 1 | 2 | 3): string => {\n if (stepIndex === 1) return labels.trackingModal.progressIndicator.created;\n if (stepIndex === 2) return labels.trackingModal.progressIndicator.processing;\n // For step 3, the label changes based on the final status.\n if (isFailed) return labels.statuses.failed;\n if (isReplaced) return labels.statuses.replaced;\n return labels.trackingModal.progressIndicator.succeed;\n };\n\n const steps: StepProps[] = [\n { status: getStepStatus(1), label: getStepLabel(1), isFirst: true },\n { status: getStepStatus(2), label: getStepLabel(2) },\n { status: getStepStatus(3), label: getStepLabel(3), isLast: true },\n ];\n\n return (\n <div className={cn('flex w-full items-start px-4 pt-2 pb-1', className)}>\n {steps.map((stepProps, index) => (\n <StepComponent key={index} {...stepProps} />\n ))}\n </div>\n );\n}\n","/**\n * @file This file contains the `TxStatusVisual` component, which displays a large icon representing the transaction's status.\n */\n\nimport { ArrowPathIcon, CheckCircleIcon, ClockIcon, ExclamationCircleIcon } from '@heroicons/react/24/solid';\nimport { JSX, ReactNode } from 'react';\n\nexport type TxStatusVisualProps = {\n /** True if the transaction is currently being processed (e.g., in the mempool). */\n isProcessing?: boolean;\n /** True if the transaction has successfully completed. */\n isSucceed?: boolean;\n /** True if the transaction has failed or was reverted. */\n isFailed?: boolean;\n /** True if the transaction was replaced (e.g., sped up). */\n isReplaced?: boolean;\n};\n\n/**\n * A component that renders a large, animated icon to visually represent the\n * current state of a transaction within the tracking modal.\n *\n * @param {TxStatusVisualProps} props - The component props.\n * @returns {JSX.Element} The rendered visual status indicator.\n */\nexport function TxStatusVisual({ isProcessing, isSucceed, isFailed, isReplaced }: TxStatusVisualProps): JSX.Element {\n let icon: ReactNode;\n\n // The logic is structured as an if/else if chain to ensure only one icon is selected.\n if (isSucceed) {\n icon = <CheckCircleIcon className=\"h-16 w-16 text-[var(--tuwa-success-icon)]\" />;\n } else if (isFailed) {\n icon = <ExclamationCircleIcon className=\"h-16 w-16 text-[var(--tuwa-error-icon)]\" />;\n } else if (isReplaced) {\n icon = <ArrowPathIcon className=\"h-16 w-16 text-[var(--tuwa-info-icon)]\" />;\n } else if (isProcessing) {\n icon = <ArrowPathIcon className=\"h-16 w-16 animate-spin text-[var(--tuwa-text-accent)]\" />;\n } else {\n // Default state when the transaction is created but not yet processing.\n icon = <ClockIcon className=\"h-16 w-16 animate-pulse text-[var(--tuwa-pending-icon)]\" />;\n }\n\n return <div className=\"flex justify-center py-4\">{icon}</div>;\n}\n","/**\n * @file This file contains the `TrackingTxModal`, the main UI for displaying the detailed lifecycle of a single transaction.\n * It provides real-time feedback, customization options, and actions like retry, speed up, and cancel.\n */\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { cn } from '@tuwaio/nova-core';\nimport {\n InitialTransactionParams,\n ITxTrackingStore,\n Transaction,\n TransactionAdapter,\n TransactionPool,\n TransactionStatus,\n} from '@tuwaio/pulsar-core';\nimport { ActionTxKey, cancelTxAction, speedUpTxAction, TransactionTracker } from '@tuwaio/pulsar-evm';\nimport { Config } from '@wagmi/core';\nimport { AnimatePresence, motion, MotionProps } from 'framer-motion';\nimport { ComponentPropsWithoutRef, JSX, ReactNode, useEffect, useState } from 'react';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { StatusAwareText } from '../StatusAwareText';\nimport { TxErrorBlock, TxErrorBlockProps } from './TxErrorBlock';\nimport { TxInfoBlock, TxInfoBlockProps } from './TxInfoBlock';\nimport { TxProgressIndicator, TxProgressIndicatorProps } from './TxProgressIndicator';\nimport { TxStatusVisual, TxStatusVisualProps } from './TxStatusVisual';\n\n// --- Prop Types for Customization ---\n\n/** Props provided to a custom header component. */\ntype CustomHeaderProps = { onClose: (txKey?: string) => void };\n/** Props provided to a custom footer component. */\ntype CustomFooterProps = {\n onClose: (txKey?: string) => void;\n onOpenWalletInfo: () => void;\n onRetry?: () => void;\n onSpeedUp?: () => void;\n onCancel?: () => void;\n isProcessing?: boolean;\n};\n\n/** A registry of functions that can be re-executed via the 'Retry' button. The key should match `actionKey` on a transaction. */\nexport type TxActions = Record<string, (...args: any[]) => Promise<unknown>>;\n\n/**\n * Defines the customization options for the TrackingTxModal.\n * Allows overriding modal behavior, animations, and individual UI components.\n */\nexport type TrackingTxModalCustomization<TR, T extends Transaction<TR>> = {\n /** Custom props to pass to the underlying Radix UI `Dialog.Content` component. */\n modalProps?: Partial<ComponentPropsWithoutRef<typeof Dialog.Content>>;\n /** Custom Framer Motion animation properties for the modal's entrance and exit. */\n motionProps?: MotionProps;\n /** A record of custom components to override parts of the modal's UI. */\n components?: {\n header?: (props: CustomHeaderProps) => ReactNode;\n footer?: (props: CustomFooterProps) => ReactNode;\n statusVisual?: (props: TxStatusVisualProps) => ReactNode;\n progressIndicator?: (props: TxProgressIndicatorProps) => ReactNode;\n infoBlock?: (props: TxInfoBlockProps<TR, T>) => ReactNode;\n errorBlock?: (props: TxErrorBlockProps) => ReactNode;\n };\n};\n\nexport interface TrackingTxModalProps<TR, T extends Transaction<TR>>\n extends Partial<Pick<ITxTrackingStore<TR, T, ActionTxKey>, 'handleTransaction' | 'initialTx'>> {\n /** A function to close the modal. */\n onClose: (txKey?: string) => void;\n /** A function to open the main wallet info modal. */\n onOpenWalletInfo: () => void;\n /** Optional additional CSS classes for the modal's container. */\n className?: string;\n /** An object containing all customization options for the modal. */\n customization?: TrackingTxModalCustomization<TR, T>;\n /** An array of `viem` chain objects supported by the application. */\n appChains: Chain[];\n /** The global transaction pool from the tracking store. */\n transactionsPool: TransactionPool<TR, T>;\n /** A registry of retryable actions, keyed by `actionKey`. */\n actions?: TxActions;\n /** The wagmi config object, required for retry, cancel, and speed up functionality. */\n config?: Config;\n}\n\n/**\n * A detailed modal that displays the real-time status and lifecycle of a transaction.\n * It opens automatically for transactions initiated with `withTrackedModal: true`.\n *\n * @template TR - The generic type for the transaction tracker registry.\n * @template T - The generic type for the transaction object.\n * @param {TrackingTxModalProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered tracking modal.\n */\nexport function TrackingTxModal<TR, T extends Transaction<TR>>({\n onClose,\n onOpenWalletInfo,\n className,\n customization,\n appChains,\n transactionsPool,\n actions,\n handleTransaction,\n config,\n initialTx,\n}: TrackingTxModalProps<TR, T>): JSX.Element {\n const labels = useLabels();\n const C = customization?.components;\n\n const [trackedTx, setTrackedTx] = useState<T | undefined>(undefined);\n\n // This effect syncs the modal's internal state (`trackedTx`) with the global `transactionsPool`.\n // It ensures the modal always displays the latest information for the tracked transaction.\n useEffect(() => {\n let currentTx: T | undefined;\n if (initialTx?.lastTxKey) {\n currentTx = transactionsPool[initialTx.lastTxKey];\n } else if (trackedTx) {\n currentTx = transactionsPool[trackedTx.txKey];\n }\n setTrackedTx(currentTx);\n }, [transactionsPool, initialTx, trackedTx]);\n\n // The transaction object to use for displaying information. Prioritizes the tracked transaction.\n const txToDisplay = trackedTx ?? initialTx;\n\n // --- Derived State Constants for Clarity ---\n const txStatus = trackedTx?.status;\n const isInitializing = initialTx?.isInitializing ?? false;\n const isPending = trackedTx?.pending ?? true;\n const isProcessing = isInitializing || isPending;\n const isError = trackedTx?.isError || !!initialTx?.errorMessage;\n const canRetry = txToDisplay?.actionKey && actions?.[txToDisplay.actionKey] && handleTransaction && config;\n const canReplace =\n config &&\n trackedTx?.adapter === TransactionAdapter.EVM &&\n trackedTx?.nonce !== undefined &&\n trackedTx.pending &&\n trackedTx.maxFeePerGas &&\n trackedTx.maxPriorityFeePerGas;\n\n const motionProps: MotionProps = {\n initial: { opacity: 0, scale: 0.95 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n transition: { duration: 0.2, ease: 'easeOut' },\n ...customization?.motionProps,\n };\n\n // --- Action Handlers ---\n const handleRetry = async () => {\n if (!canRetry || !txToDisplay?.actionKey) return;\n const retryParams: InitialTransactionParams = {\n adapter: TransactionAdapter.EVM,\n type: txToDisplay.type,\n desiredChainID: trackedTx?.chainId || initialTx?.desiredChainID || 1,\n actionKey: txToDisplay.actionKey,\n title: txToDisplay.title,\n description: txToDisplay.description,\n payload: txToDisplay.payload,\n withTrackedModal: true,\n };\n onClose(trackedTx?.txKey);\n\n await handleTransaction({\n actionFunction: () =>\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n actions![txToDisplay.actionKey]({\n config,\n ...txToDisplay.payload,\n }),\n params: retryParams,\n defaultTracker: TransactionTracker.Ethereum as any,\n });\n };\n\n const handleCancel = async () => {\n if (canReplace && trackedTx) await cancelTxAction({ config, tx: trackedTx });\n };\n\n const handleSpeedUp = async () => {\n if (canReplace && trackedTx) await speedUpTxAction({ config, tx: trackedTx });\n };\n\n const isOpen = (trackedTx?.isTrackedModalOpen || initialTx?.withTrackedModal) ?? false;\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => !open && onClose(trackedTx?.txKey)}>\n <Dialog.Portal>\n <AnimatePresence>\n {isOpen && (\n <>\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/60 z-50\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n </Dialog.Overlay>\n <Dialog.Content\n className=\"fixed left-1/2 top-1/2 w-full max-w-md -translate-x-1/2 -translate-y-1/2 outline-none z-50\"\n onOpenAutoFocus={() => setTrackedTx(undefined)}\n {...customization?.modalProps}\n asChild\n >\n <motion.div {...motionProps}>\n <div\n className={cn(\n 'relative flex flex-col gap-3 rounded-2xl bg-[var(--tuwa-bg-primary)] p-5 pt-0 shadow-2xl max-h-[98dvh] overflow-y-auto',\n className,\n )}\n >\n {/* Header: Title and Close Button */}\n {C?.header ? (\n C.header({ onClose: () => onClose(trackedTx?.txKey) })\n ) : (\n <header className=\"flex items-start justify-between sticky top-0 w-full z-10 pt-5 pb-2 bg-[var(--tuwa-bg-primary)]\">\n <Dialog.Title className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">\n {labels.trackingModal.title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n onClick={() => onClose(trackedTx?.txKey)}\n aria-label={labels.actions.close}\n className=\"cursor-pointer ml-2 -mt-1 rounded-full p-1 text-[var(--tuwa-text-tertiary)] transition-colors hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n </Dialog.Close>\n </header>\n )}\n\n {/* Main Content: Visuals, Info, and Error Blocks */}\n <main className=\"flex flex-col gap-3\">\n {C?.statusVisual ? (\n C.statusVisual({\n isProcessing,\n isSucceed: txStatus === TransactionStatus.Success,\n isFailed: isError,\n isReplaced: txStatus === TransactionStatus.Replaced,\n })\n ) : (\n <TxStatusVisual\n isProcessing={isProcessing}\n isSucceed={txStatus === TransactionStatus.Success}\n isFailed={isError}\n isReplaced={txStatus === TransactionStatus.Replaced}\n />\n )}\n <div className=\"flex flex-col items-center text-center -mt-2\">\n <StatusAwareText\n txStatus={txStatus}\n source={txToDisplay?.title}\n fallback={txToDisplay?.type}\n variant=\"title\"\n applyColor\n className=\"text-xl\"\n />\n <StatusAwareText\n txStatus={txStatus}\n source={txToDisplay?.description}\n variant=\"description\"\n className=\"mt-0\"\n />\n </div>\n {C?.progressIndicator ? (\n C.progressIndicator({\n isProcessing,\n isSucceed: txStatus === TransactionStatus.Success,\n isFailed: isError,\n isReplaced: txStatus === TransactionStatus.Replaced,\n })\n ) : (\n <TxProgressIndicator\n isProcessing={isProcessing}\n isSucceed={txStatus === TransactionStatus.Success}\n isFailed={isError}\n isReplaced={txStatus === TransactionStatus.Replaced}\n />\n )}\n {C?.infoBlock ? (\n C.infoBlock({ tx: txToDisplay as T, appChains, transactionsPool })\n ) : (\n <TxInfoBlock tx={txToDisplay as T} appChains={appChains} transactionsPool={transactionsPool} />\n )}\n {C?.errorBlock ? (\n C.errorBlock({ error: trackedTx?.errorMessage || initialTx?.errorMessage })\n ) : (\n <TxErrorBlock error={trackedTx?.errorMessage || initialTx?.errorMessage} />\n )}\n </main>\n\n {/* Footer: Action Buttons */}\n {C?.footer ? (\n C.footer({\n onClose: () => onClose(trackedTx?.txKey),\n onOpenWalletInfo,\n isProcessing,\n onRetry: canRetry ? handleRetry : undefined,\n onSpeedUp: canReplace ? handleSpeedUp : undefined,\n onCancel: canReplace ? handleCancel : undefined,\n })\n ) : (\n <footer className=\"mt-2 flex w-full items-center justify-between border-t border-[var(--tuwa-border-primary)] pt-4\">\n <div className=\"flex items-center gap-4\">\n {canReplace && (\n <>\n <button\n type=\"button\"\n onClick={handleSpeedUp}\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-accent)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.speedUp}\n </button>\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-secondary)] transition-opacity hover:opacity-80\"\n >\n {labels.actions.cancel}\n </button>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n {isError && canRetry ? (\n <button\n type=\"button\"\n onClick={handleRetry}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-button-gradient-from)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-on-accent)] transition-opacity hover:opacity-90\"\n >\n {labels.trackingModal.retry}\n </button>\n ) : (\n !canReplace && (\n <button\n type=\"button\"\n onClick={onOpenWalletInfo}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-bg-muted)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-primary)] transition-colors hover:bg-[var(--tuwa-border-primary)]\"\n >\n {labels.trackingModal.walletInfo}\n </button>\n )\n )}\n <button\n type=\"button\"\n onClick={() => onClose(trackedTx?.txKey)}\n disabled={isProcessing && !canReplace}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-bg-muted)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-primary)] transition-colors hover:bg-[var(--tuwa-border-primary)] disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {isProcessing && !canReplace ? labels.trackingModal.processing : labels.trackingModal.close}\n </button>\n </div>\n </footer>\n )}\n </div>\n </motion.div>\n </Dialog.Content>\n </>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","/**\n * @file This file contains the `TransactionHistoryItem` component, which renders a single transaction\n * in a list format for the transaction history view.\n */\n\nimport { Web3Icon } from '@bgd-labs/react-web3-icons';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionPool } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { JSX, ReactNode } from 'react';\nimport { Chain } from 'viem';\n\nimport { StatusAwareText } from './StatusAwareText';\nimport { TransactionKey } from './TransactionKey';\nimport { TransactionStatusBadge } from './TransactionStatusBadge';\n\n// Extend dayjs with the relativeTime plugin to format timestamps as \"a few seconds ago\".\ndayjs.extend(relativeTime);\n\n// --- Prop Types for Customization ---\ntype CustomIconProps = { chainId: number };\ntype CustomStatusAwareTextProps = Parameters<typeof StatusAwareText>[0];\ntype CustomTimestampProps = { timestamp?: number };\ntype CustomStatusBadgeProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionStatusBadge<TR, T>>[0];\ntype CustomTransactionKeyProps<TR, T extends Transaction<TR>> = Parameters<typeof TransactionKey<TR, T>>[0];\n\n/**\n * Defines the structure for the `customization` prop, allowing users to override\n * default sub-components with their own implementations for a history item.\n */\nexport type TransactionHistoryItemCustomization<TR, T extends Transaction<TR>> = {\n components?: {\n /** Override the default chain icon. */\n icon?: (props: CustomIconProps) => ReactNode;\n /** Override the default title component. */\n title?: (props: CustomStatusAwareTextProps) => ReactNode;\n /** Override the default description component. */\n description?: (props: CustomStatusAwareTextProps) => ReactNode;\n /** Override the default timestamp component. */\n timestamp?: (props: CustomTimestampProps) => ReactNode;\n /** Override the default status badge component. */\n statusBadge?: (props: CustomStatusBadgeProps<TR, T>) => ReactNode;\n /** Override the default component for displaying transaction keys/hashes. */\n transactionKey?: (props: CustomTransactionKeyProps<TR, T>) => ReactNode;\n };\n};\n\nexport type TransactionHistoryItemProps<TR, T extends Transaction<TR>> = {\n /** The transaction object to display. */\n tx: T;\n /** An array of supported chain objects. */\n appChains: Chain[];\n /** The entire pool of transactions. */\n transactionsPool: TransactionPool<TR, T>;\n /** Optional additional CSS classes for the container. */\n className?: string;\n /** An object to customize and override the default internal components. */\n customization?: TransactionHistoryItemCustomization<TR, T>;\n};\n\n/**\n * A component that renders a single row in the transaction history list.\n * It is highly customizable via the `customization` prop.\n *\n * @param {TransactionHistoryItemProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered history item.\n */\nexport function TransactionHistoryItem<TR, T extends Transaction<TR>>({\n tx,\n appChains,\n transactionsPool,\n className,\n customization,\n}: TransactionHistoryItemProps<TR, T>): JSX.Element {\n const C = customization?.components; // Shortcut for customization components\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-2 border-b border-[var(--tuwa-border-secondary)] p-3 transition-colors hover:bg-[var(--tuwa-bg-secondary)]',\n className,\n )}\n >\n <div className=\"flex items-start justify-between\">\n {/* --- Main Info: Icon, Title, Timestamp, Description --- */}\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-[var(--tuwa-bg-muted)]\">\n {C?.icon ? (\n C.icon({ chainId: tx.chainId as number })\n ) : (\n <div className=\"h-8 w-8 text-[var(--tuwa-text-secondary)]\">\n <Web3Icon chainId={tx.chainId as number} />\n </div>\n )}\n </div>\n <div>\n {C?.title ? (\n C.title({ txStatus: tx.status, source: tx.title, fallback: tx.type, variant: 'title', applyColor: true })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n )}\n\n {C?.timestamp ? (\n C.timestamp({ timestamp: tx.localTimestamp })\n ) : (\n <span className=\"mb-1 block text-xs text-[var(--tuwa-text-secondary)]\">\n {tx.localTimestamp ? dayjs.unix(tx.localTimestamp).fromNow() : '...'}\n </span>\n )}\n\n {C?.description ? (\n C.description({ txStatus: tx.status, source: tx.description, variant: 'description' })\n ) : (\n <StatusAwareText txStatus={tx.status} source={tx.description} variant=\"description\" />\n )}\n </div>\n </div>\n\n {/* --- Status Badge --- */}\n {C?.statusBadge ? C.statusBadge({ tx }) : <TransactionStatusBadge tx={tx} />}\n </div>\n\n {/* --- Transaction Keys/Hashes --- */}\n {C?.transactionKey ? (\n C.transactionKey({ tx, appChains, transactionsPool, variant: 'history' })\n ) : (\n <TransactionKey tx={tx} appChains={appChains} transactionsPool={transactionsPool} variant=\"history\" />\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `TransactionsHistory` component, which displays a list of past and pending transactions.\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport { selectAllTransactionsByActiveWallet, Transaction } from '@tuwaio/pulsar-core';\nimport { ComponentType, JSX, ReactNode } from 'react';\n\nimport { useLabels } from '../providers';\nimport { TransactionHistoryItem, TransactionHistoryItemProps } from './TransactionHistoryItem';\nimport { WalletInfoModalProps } from './WalletInfoModal';\n\ntype CustomPlaceholderProps = { title: string; message: string };\n\n/**\n * Defines the customization options for the TransactionsHistory component.\n */\nexport type TransactionsHistoryCustomization<TR, T extends Transaction<TR>> = {\n classNames?: {\n /** CSS classes for the list's wrapper `div`. */\n listWrapper?: string;\n };\n components?: {\n /**\n * A render prop to replace the default placeholder component\n * (e.g., for \"Connect Wallet\" or \"No Transactions\").\n */\n placeholder?: (props: CustomPlaceholderProps) => ReactNode;\n /**\n * A custom component to use instead of the default `TransactionHistoryItem`.\n * This should be a component type, not a render function.\n */\n HistoryItem?: ComponentType<TransactionHistoryItemProps<TR, T>>;\n };\n};\n\n// A local component for displaying placeholder messages.\nfunction HistoryPlaceholder({ title, message, className }: { title: string; message: string; className?: string }) {\n return (\n <div className={cn('rounded-lg bg-[var(--tuwa-bg-muted)] p-8 text-center', className)}>\n <h4 className=\"font-semibold text-[var(--tuwa-text-primary)]\">{title}</h4>\n <p className=\"mt-1 text-sm text-[var(--tuwa-text-secondary)]\">{message}</p>\n </div>\n );\n}\n\n/**\n * A component that displays a scrollable list of transactions for the connected wallet.\n * It handles states for when a wallet is not connected or when there is no history.\n *\n * @param {WalletInfoModalProps<TR, T> & { customization?: TransactionsHistoryCustomization<TR, T> }} props\n * @returns {JSX.Element} The rendered transaction history section.\n */\nexport function TransactionsHistory<TR, T extends Transaction<TR>>({\n walletAddress,\n transactionsPool,\n appChains,\n className,\n customization,\n}: WalletInfoModalProps<TR, T> & {\n className?: string;\n customization?: TransactionsHistoryCustomization<TR, T>;\n}): JSX.Element {\n const labels = useLabels();\n const C = customization?.components;\n\n const transactionsByWallet = walletAddress\n ? selectAllTransactionsByActiveWallet(transactionsPool, walletAddress)\n : [];\n\n // Sort transactions by timestamp, newest first.\n const sortedTransactions = [...transactionsByWallet].sort(\n (a, b) => (b.localTimestamp ?? 0) - (a.localTimestamp ?? 0),\n );\n\n const renderPlaceholder = (title: string, message: string) => {\n if (C?.placeholder) {\n return C.placeholder({ title, message });\n }\n return <HistoryPlaceholder title={title} message={message} />;\n };\n\n // Use the custom component if provided, otherwise default to TransactionHistoryItem.\n const HistoryItemComponent = C?.HistoryItem || TransactionHistoryItem;\n\n return (\n <div className={cn('flex flex-col gap-y-3', className)}>\n <h3 className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">{labels.walletModal.history.title}</h3>\n\n {!walletAddress ? (\n // Case 1: Wallet is not connected.\n renderPlaceholder(\n labels.walletModal.history.connectWalletTitle,\n labels.walletModal.history.connectWalletMessage,\n )\n ) : sortedTransactions.length > 0 ? (\n // Case 2: Wallet is connected and there are transactions.\n <div\n className={cn(\n 'max-h-[400px] overflow-y-auto rounded-lg border border-[var(--tuwa-border-primary)] bg-[var(--tuwa-bg-primary)]',\n customization?.classNames?.listWrapper,\n )}\n >\n {sortedTransactions.map((tx) => (\n <HistoryItemComponent\n key={tx.txKey} // The key is now correctly and safely handled here.\n tx={tx}\n transactionsPool={transactionsPool}\n appChains={appChains}\n />\n ))}\n </div>\n ) : (\n // Case 3: Wallet is connected, but no transactions.\n renderPlaceholder(\n labels.walletModal.history.noTransactionsTitle,\n labels.walletModal.history.noTransactionsMessage,\n )\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `WalletAddressDisplay` component, a UI element for showing a wallet address.\n */\n\nimport { ArrowTopRightOnSquareIcon, CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/24/solid';\nimport { cn, textCenterEllipsis, useCopyToClipboard } from '@tuwaio/nova-core';\nimport { JSX } from 'react';\nimport { Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\n\nexport type WalletAddressDisplayProps = {\n /** The wallet address to display. */\n address: string;\n /**\n * The viem `Chain` object for the network the address belongs to.\n * This is used to generate the correct block explorer link.\n */\n chain?: Chain;\n /** Optional additional CSS classes for the container. */\n className?: string;\n};\n\n/**\n * A component that renders a wallet address in a styled \"pill\" format,\n * including a copy button and a link to the appropriate block explorer.\n *\n * @param {WalletAddressDisplayProps} props - The component props.\n * @returns {JSX.Element} The rendered component.\n */\nexport function WalletAddressDisplay({ address, chain, className }: WalletAddressDisplayProps): JSX.Element {\n const { isCopied, copy } = useCopyToClipboard();\n const labels = useLabels();\n\n // Dynamically generate the explorer link based on the provided chain.\n const explorerUrl = chain?.blockExplorers?.default.url;\n const explorerLink = explorerUrl ? `${explorerUrl}/address/${address}` : undefined;\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-3 rounded-full bg-[var(--tuwa-bg-muted)] px-3 py-1 font-mono text-xs text-[var(--tuwa-text-secondary)]',\n className,\n )}\n >\n <span>{textCenterEllipsis(address, 6, 6)}</span>\n <button\n type=\"button\"\n title={isCopied ? labels.txError.copied : labels.actions.copy}\n aria-label={isCopied ? labels.txError.copied : labels.actions.copy}\n onClick={() => copy(address)}\n className=\"cursor-pointer transition-colors hover:text-[var(--tuwa-text-primary)]\"\n >\n {isCopied ? (\n <CheckIcon className=\"h-4 w-4 text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"h-4 w-4\" />\n )}\n </button>\n\n {/* Only render the explorer link if a URL could be generated */}\n {explorerLink && (\n <a\n href={explorerLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"transition-colors hover:text-[var(--tuwa-text-accent)]\"\n title={labels.actions.viewOnExplorer}\n aria-label={labels.actions.viewOnExplorer}\n >\n <ArrowTopRightOnSquareIcon className=\"h-4 w-4\" />\n </a>\n )}\n </div>\n );\n}\n","/**\n * @file This file contains the `WalletAvatar` component for displaying a user's avatar.\n */\n\nimport { cn } from '@tuwaio/nova-core';\nimport makeBlockie from 'ethereum-blockies-base64';\nimport { JSX, useEffect, useState } from 'react';\nimport { isHex, zeroAddress } from 'viem';\n\nimport { useLabels } from '../../providers';\n\nexport type WalletAvatarProps = {\n /** The user's wallet address. Used for the blockie fallback and background color generation. */\n address: string;\n /** An optional URL for the user's ENS avatar image. */\n ensAvatar?: string;\n /** Optional additional CSS classes for the container. */\n className?: string;\n};\n\n/**\n * A component that displays a user's avatar.\n * It prioritizes showing the provided `ensAvatar`. If unavailable, it falls back\n * to a procedurally generated \"blockie\" based on the user's address.\n * It also generates a unique background color from the address as a placeholder.\n *\n * @param {WalletAvatarProps} props - The component props.\n * @returns {JSX.Element} The rendered avatar component.\n */\nexport function WalletAvatar({ address, ensAvatar, className }: WalletAvatarProps): JSX.Element {\n const labels = useLabels();\n\n // Generate a unique, consistent background color from the first 6 hex characters of the address.\n const bgColor = `#${address.slice(2, 8)}`;\n\n const [avatar, setAvatar] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n setAvatar(ensAvatar ?? makeBlockie(isHex(address) ? address : zeroAddress));\n }, [ensAvatar, address]);\n\n return (\n <div className={cn('h-12 w-12 flex-shrink-0 rounded-full', className)} style={{ backgroundColor: bgColor }}>\n <img\n className=\"h-full w-full rounded-full object-cover\"\n // Use the ENS avatar if provided, otherwise generate a blockie as a fallback.\n src={avatar}\n alt={`${labels.walletModal.header.avatarAlt} ${address}`}\n onError={() => setAvatar(makeBlockie(isHex(address) ? address : zeroAddress))}\n />\n </div>\n );\n}\n","/**\n * @file This file contains the `WalletHeader` component, used to display user avatar, name, and address.\n */\n\nimport { cn, textCenterEllipsis } from '@tuwaio/nova-core';\nimport { getAvatar, getName } from '@tuwaio/pulsar-evm';\nimport { JSX, ReactNode, useEffect, useState } from 'react';\nimport { Address, Chain, Hex } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { WalletAddressDisplay } from './WalletAddressDisplay';\nimport { WalletAvatar } from './WalletAvatar';\n\n// --- Prop Types for Customization ---\ntype AvatarRenderProps = { address: string; ensAvatar?: string };\ntype NameRenderProps = { ensName?: string; isLoading: boolean; address: string };\ntype AddressRenderProps = { address: string; chain?: Chain };\n\n/**\n * Defines the props for the `WalletHeader` component, including extensive customization options.\n */\nexport interface WalletHeaderProps {\n /** The user's wallet address. If undefined, the 'not connected' state is shown. */\n walletAddress?: Address;\n /** The viem `Chain` object for the currently connected network. */\n chain?: Chain;\n /** Optional additional CSS classes for the container. */\n className?: string;\n /** A render prop to replace the default `WalletAvatar` component. */\n renderAvatar?: (props: AvatarRenderProps) => ReactNode;\n /** A render prop to replace the default ENS name display. */\n renderName?: (props: NameRenderProps) => ReactNode;\n /** A render prop to replace the default `WalletAddressDisplay` component. */\n renderAddressDisplay?: (props: AddressRenderProps) => ReactNode;\n /** A render prop to replace the default content shown when no wallet is connected. */\n renderNoWalletContent?: () => ReactNode;\n}\n\n/**\n * A component that displays the header for the wallet modal, including the user's avatar,\n * ENS name (if available), and address. It handles loading states for ENS data and\n * provides a \"not connected\" view.\n *\n * @param {WalletHeaderProps} props - The component props.\n * @returns {JSX.Element} The rendered wallet header.\n */\nexport function WalletHeader({\n walletAddress,\n chain,\n className,\n renderAvatar,\n renderName,\n renderAddressDisplay,\n renderNoWalletContent,\n}: WalletHeaderProps): JSX.Element {\n const labels = useLabels();\n\n const [ensName, setEnsName] = useState<string | undefined>(undefined);\n const [ensAvatar, setEnsAvatar] = useState<string | undefined>(undefined);\n const [isLoading, setIsLoading] = useState(true);\n\n // Fetch ENS data whenever the wallet address changes.\n useEffect(() => {\n const fetchEnsData = async () => {\n if (walletAddress) {\n setIsLoading(true);\n setEnsName(undefined);\n setEnsAvatar(undefined);\n\n try {\n const name = await getName(walletAddress as Hex);\n if (name) {\n setEnsName(name);\n const avatar = await getAvatar(name);\n setEnsAvatar(avatar);\n }\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n fetchEnsData();\n }, [walletAddress]);\n\n // --- Render \"Not Connected\" State ---\n if (!walletAddress) {\n if (renderNoWalletContent) {\n return <>{renderNoWalletContent()}</>;\n }\n\n return (\n <div\n className={cn(\n 'flex h-20 items-center justify-center rounded-lg bg-[var(--tuwa-bg-muted)] text-[var(--tuwa-text-secondary)]',\n className,\n )}\n >\n {labels.walletModal.header.notConnected}\n </div>\n );\n }\n\n const ensNameAbbreviated = ensName\n ? ensName.length > 30\n ? textCenterEllipsis(ensName, 12, 12)\n : ensName\n : undefined;\n\n // --- Render \"Connected\" State ---\n return (\n <div className={cn('flex items-center gap-4 min-h-[4rem]', className)}>\n <div>\n {renderAvatar ? (\n renderAvatar({ address: walletAddress, ensAvatar })\n ) : (\n <WalletAvatar address={walletAddress} ensAvatar={ensAvatar} />\n )}\n </div>\n\n <div className=\"flex flex-col justify-center min-h-[3.5rem] min-w-[200px]\">\n {renderName ? (\n renderName({ ensName: ensNameAbbreviated, isLoading, address: walletAddress })\n ) : (\n <div className=\"flex flex-col\">\n {/* Primary content area - ENS name or large address */}\n <div className=\"h-7 flex items-center mb-1.5\">\n {isLoading ? (\n <div className=\"h-full w-48 animate-pulse rounded-md bg-[var(--tuwa-bg-muted)]\" />\n ) : ensNameAbbreviated ? (\n <h2 className=\"text-xl font-bold text-[var(--tuwa-text-primary)]\">{ensNameAbbreviated}</h2>\n ) : (\n <WalletAddressDisplay\n address={walletAddress}\n chain={chain}\n className=\"text-xl font-bold text-[var(--tuwa-text-primary)] bg-transparent px-0 py-0 rounded-none\"\n />\n )}\n </div>\n\n {/* Secondary content area - small address display (only when ENS exists) */}\n <div className=\"h-5 flex items-center\">\n {!isLoading &&\n ensNameAbbreviated &&\n (renderAddressDisplay ? (\n renderAddressDisplay({ address: walletAddress, chain })\n ) : (\n <WalletAddressDisplay address={walletAddress} chain={chain} />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the main `WalletInfoModal` component, which serves as the primary UI for viewing wallet details and transaction history.\n */\n\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { cn } from '@tuwaio/nova-core';\nimport { Transaction, TransactionPool } from '@tuwaio/pulsar-core';\nimport { AnimatePresence, motion, MotionProps } from 'framer-motion';\nimport { ComponentPropsWithoutRef, JSX, ReactNode } from 'react';\nimport { Address, Chain } from 'viem';\n\nimport { useLabels } from '../../providers';\nimport { TransactionsHistory, TransactionsHistoryCustomization } from '../TransactionsHistory';\nimport { WalletHeader } from './WalletHeader';\n\n// --- Prop Types for Customization ---\ntype CustomHeaderProps = { closeModal: () => void };\ntype CustomWalletInfoProps<TR, T extends Transaction<TR>> = WalletInfoModalProps<TR, T>;\ntype CustomHistoryProps<TR, T extends Transaction<TR>> = WalletInfoModalProps<TR, T> & {\n customization?: TransactionsHistoryCustomization<TR, T>;\n};\n\n/**\n * Defines the customization options for the WalletInfoModal.\n * Allows customization of modal behavior, animations, and individual UI components.\n */\nexport type WalletInfoModalCustomization<TR, T extends Transaction<TR>> = {\n /** Custom props to pass to the underlying Radix UI Dialog.Content component */\n modalProps?: Partial<ComponentPropsWithoutRef<typeof Dialog.Content>>;\n /** Custom Framer Motion animation properties */\n motionProps?: MotionProps;\n classNames?: {\n /** CSS classes for the main content wrapper div. */\n contentWrapper?: string;\n };\n /** Custom component overrides for different parts of the modal */\n components?: {\n /** A render prop to replace the entire modal header. */\n header?: (props: CustomHeaderProps) => ReactNode;\n /** A render prop to replace the `WalletHeader` component. */\n walletInfo?: (props: CustomWalletInfoProps<TR, T>) => ReactNode;\n /** A render prop to replace the `TransactionsHistory` component. */\n history?: (props: CustomHistoryProps<TR, T>) => ReactNode;\n };\n};\n\n/**\n * Defines the core props for the WalletInfoModal and its children.\n */\nexport interface WalletInfoModalProps<TR, T extends Transaction<TR>> {\n /** The connected wallet's address. */\n walletAddress?: Address;\n /** The viem `Chain` object for the currently connected network. */\n chain?: Chain;\n /** The entire pool of transactions from the store. */\n transactionsPool: TransactionPool<TR, T>;\n /** An array of all chains supported by the application. */\n appChains: Chain[];\n}\n\n/**\n * The main modal component for displaying wallet information and transaction history.\n * It is highly customizable through the `customization` prop and supports full Radix UI Dialog customization.\n *\n * @param {WalletInfoModalProps<TR, T> & { ... }} props - The component props.\n * @returns {JSX.Element | null} The rendered modal or null if not open.\n */\nexport function WalletInfoModal<TR, T extends Transaction<TR>>({\n isOpen,\n setIsOpen,\n customization,\n ...props\n}: WalletInfoModalProps<TR, T> & {\n isOpen: boolean;\n setIsOpen: (value: boolean) => void;\n customization?: WalletInfoModalCustomization<TR, T>;\n}): JSX.Element | null {\n const labels = useLabels();\n\n const defaultMotionProps: MotionProps = {\n initial: { opacity: 0, scale: 0.95 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n transition: { duration: 0.2, ease: 'easeOut' },\n };\n\n const motionProps = { ...defaultMotionProps, ...customization?.motionProps };\n const closeModal = () => setIsOpen(false);\n\n return (\n <Dialog.Root open={isOpen} onOpenChange={(open) => !open && closeModal()}>\n <Dialog.Portal>\n <AnimatePresence>\n {isOpen && (\n <>\n <Dialog.Overlay asChild>\n <motion.div\n className=\"fixed inset-0 bg-black/45 flex items-center justify-center p-2 z-50\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n />\n </Dialog.Overlay>\n <Dialog.Content\n className=\"fixed left-1/2 top-1/2 w-full max-w-2xl -translate-x-1/2 -translate-y-1/2 outline-none z-50\"\n {...customization?.modalProps}\n asChild\n >\n <motion.div {...motionProps}>\n <div\n className={cn(\n 'relative w-full max-w-2xl outline-none rounded-2xl bg-[var(--tuwa-bg-secondary)] shadow-xl max-h-[98dvh] overflow-y-auto',\n customization?.classNames?.contentWrapper,\n )}\n >\n {/* Header */}\n {customization?.components?.header ? (\n customization.components.header({ closeModal })\n ) : (\n <div className=\"flex items-center justify-between border-b border-[var(--tuwa-border-primary)] p-4 sticky top-0 left-0 w-full bg-[var(--tuwa-bg-secondary)] z-10\">\n <Dialog.Title className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">\n {labels.walletModal.title}\n </Dialog.Title>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n onClick={closeModal}\n aria-label={labels.actions.close}\n className=\"cursor-pointer rounded-full p-1 text-[var(--tuwa-text-tertiary)] transition-colors hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <XMarkIcon className=\"h-6 w-6\" />\n </button>\n </Dialog.Close>\n </div>\n )}\n\n {/* Body */}\n <div className=\"flex flex-col gap-4 p-4 sm:p-6 sm:gap-6\">\n {customization?.components?.walletInfo ? (\n customization.components.walletInfo(props)\n ) : (\n <WalletHeader walletAddress={props.walletAddress} chain={props.chain} />\n )}\n\n {customization?.components?.history ? (\n customization.components.history(props)\n ) : (\n <TransactionsHistory {...props} />\n )}\n </div>\n </div>\n </motion.div>\n </Dialog.Content>\n </>\n )}\n </AnimatePresence>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","/**\n * @file This file contains the main `NovaProvider` component, the primary entry point for the UI library.\n */\n\nimport { deepMerge } from '@tuwaio/nova-core';\nimport {\n IInitializeTxTrackingStore,\n Transaction,\n TransactionAdapter,\n TransactionPool,\n TransactionStatus,\n} from '@tuwaio/pulsar-core';\nimport { JSX, useEffect, useMemo, useRef, useState } from 'react';\nimport { toast, ToastContainer, ToastContainerProps, ToastContentProps, TypeOptions } from 'react-toastify';\nimport { Address, Chain } from 'viem';\n\nimport {\n ToastCloseButton,\n ToastTransaction,\n ToastTransactionCustomization,\n TrackingTxModal,\n TrackingTxModalCustomization,\n TrackingTxModalProps,\n WalletInfoModal,\n WalletInfoModalCustomization,\n} from '../components';\nimport { defaultLabels } from '../i18n/en';\nimport { TuwaLabels } from '../i18n/types';\nimport { LabelsProvider } from './LabelsProvider';\n\nconst STATUS_TO_TOAST_TYPE: Record<string, TypeOptions> = {\n [TransactionStatus.Success]: 'success',\n [TransactionStatus.Failed]: 'error',\n [TransactionStatus.Replaced]: 'info',\n};\n\nexport type NovaProviderProps<TR, T extends Transaction<TR>> = {\n /** A partial object of labels to override the default English text. */\n labels?: Partial<TuwaLabels>;\n /** An object to enable or disable major UI features. All are enabled by default. */\n features?: {\n toasts?: boolean;\n walletInfoModal?: boolean;\n trackingTxModal?: boolean;\n };\n /** A single object to pass down deep customization options to all child components. */\n customization?: {\n toast?: ToastTransactionCustomization<TR, T>;\n walletInfoModal?: WalletInfoModalCustomization<TR, T>;\n trackingTxModal?: TrackingTxModalCustomization<TR, T>;\n };\n chain?: Chain;\n walletAddress?: string;\n} & Pick<IInitializeTxTrackingStore<TR, T>, 'closeTxTrackedModal'> &\n ToastContainerProps &\n Pick<\n TrackingTxModalProps<TR, T>,\n 'handleTransaction' | 'actions' | 'config' | 'appChains' | 'transactionsPool' | 'initialTx'\n >;\n\n/**\n * The main provider for the Nova UI ecosystem.\n * It orchestrates toasts, modals, and the i18n context for the entire application.\n *\n * @param {NovaProviderProps<TR, T>} props - The component props.\n * @returns {JSX.Element} The rendered provider.\n */\nexport function NovaProvider<TR, T extends Transaction<TR>>({\n labels,\n features,\n customization,\n closeTxTrackedModal,\n actions,\n config,\n handleTransaction,\n initialTx,\n appChains,\n transactionsPool,\n walletAddress,\n chain,\n ...toastProps\n}: NovaProviderProps<TR, T>): JSX.Element {\n const [isWalletInfoModalOpen, setIsWalletInfoModalOpen] = useState(false);\n const prevTransactionsRef = useRef<TransactionPool<TR, T>>(transactionsPool);\n\n // Memoize feature flags for stability.\n const enabledFeatures = useMemo(\n () => ({\n toasts: features?.toasts ?? true,\n walletInfoModal: features?.walletInfoModal ?? true,\n trackingTxModal: features?.trackingTxModal ?? true,\n }),\n [features],\n );\n\n // Merge default and custom labels.\n const mergedLabels = useMemo(() => deepMerge(defaultLabels, labels || {}), [labels]);\n\n // Effect to handle automatic toast notifications.\n useEffect(() => {\n if (!enabledFeatures.toasts) return;\n\n const showOrUpdateToast = (tx: T, type: TypeOptions) => {\n const content = (props: ToastContentProps) => (\n <ToastTransaction\n {...props}\n tx={tx}\n transactionsPool={transactionsPool}\n appChains={appChains}\n openWalletInfoModal={enabledFeatures.walletInfoModal ? () => setIsWalletInfoModalOpen(true) : undefined}\n customization={customization?.toast}\n config={config}\n />\n );\n\n if (toast.isActive(tx.txKey)) {\n toast.update(tx.txKey, { render: content, type });\n } else {\n toast(content, { toastId: tx.txKey, type, closeOnClick: false });\n }\n };\n\n const prevPool = prevTransactionsRef.current;\n\n // Compare current pool with the previous one to detect changes.\n Object.values(transactionsPool).forEach((currentTx) => {\n const prevTx = prevPool[currentTx.txKey];\n const statusChanged = prevTx && prevTx.status !== currentTx.status;\n const hashAppeared =\n prevTx &&\n prevTx?.adapter === TransactionAdapter.EVM &&\n !prevTx.hash &&\n currentTx?.adapter === TransactionAdapter.EVM &&\n currentTx.hash;\n\n // Show toast for new pending transactions.\n if (!prevTx && currentTx.pending) {\n showOrUpdateToast(currentTx, 'info');\n }\n // Update toast for pending transactions and nonce changes.\n if (\n (prevTx && prevTx?.adapter === TransactionAdapter.EVM && prevTx.pending ? prevTx.nonce : undefined) !==\n (currentTx?.adapter === TransactionAdapter.EVM && currentTx.pending ? currentTx?.nonce : undefined)\n ) {\n showOrUpdateToast(currentTx, 'info');\n }\n // Update toast when a final status is reached or a hash appears.\n else if (statusChanged || hashAppeared) {\n const toastType = STATUS_TO_TOAST_TYPE[currentTx.status!] ?? 'info';\n showOrUpdateToast(currentTx, toastType);\n }\n });\n\n prevTransactionsRef.current = transactionsPool;\n }, [transactionsPool, appChains, customization?.toast, enabledFeatures, config]);\n\n return (\n <LabelsProvider labels={mergedLabels}>\n {enabledFeatures.toasts && (\n <ToastContainer\n position=\"bottom-right\"\n stacked\n autoClose={false}\n hideProgressBar\n closeOnClick={false}\n icon={false}\n closeButton={ToastCloseButton}\n toastClassName=\"!p-0 !bg-transparent !shadow-none !min-h-0\"\n {...toastProps}\n />\n )}\n\n {enabledFeatures.walletInfoModal && (\n <WalletInfoModal\n transactionsPool={transactionsPool}\n walletAddress={walletAddress as Address}\n chain={chain}\n isOpen={isWalletInfoModalOpen}\n setIsOpen={setIsWalletInfoModalOpen}\n appChains={appChains}\n customization={customization?.walletInfoModal}\n />\n )}\n\n {enabledFeatures.trackingTxModal && (\n <TrackingTxModal\n initialTx={initialTx}\n onClose={closeTxTrackedModal}\n onOpenWalletInfo={() => setIsWalletInfoModalOpen(true)}\n appChains={appChains}\n transactionsPool={transactionsPool}\n customization={customization?.trackingTxModal}\n actions={actions}\n config={config}\n handleTransaction={handleTransaction}\n />\n )}\n </LabelsProvider>\n );\n}\n"]}