@tuwaio/nova-transactions 1.0.0-fix-integrate-orbit-alpha.22.648b8ee → 1.0.0-fix-integrate-orbit-alpha.23.c69d70b

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/TrackingTxModal.tsx","../../src/components/TrackingTxModal/TxErrorBlock.tsx","../../src/components/TrackingTxModal/TxInfoBlock.tsx","../../src/components/TrackingTxModal/TxProgressIndicator.tsx","../../src/components/TrackingTxModal/TxStatusVisual.tsx","../../src/components/TransactionHistoryItem.tsx","../../src/components/TransactionsHistory.tsx","../../src/components/TransactionsInfoModal.tsx","../../src/providers/NovaProvider.tsx"],"names":["defaultLabels","LabelsContext","createContext","LabelsProvider","labels","children","jsx","useLabels","useContext","HashLink","label","hash","explorerUrl","variant","className","isCopied","copy","useCopyToClipboard","actions","txError","containerClasses","cn","labelClasses","hashContent","textCenterEllipsis","jsxs","ArrowTopRightOnSquareIcon","CheckIcon","DocumentDuplicateIcon","STATUS_CONFIG","TransactionStatus","StatusAwareText","txStatus","source","fallback","applyColor","displayText","colorClass","config","ToastCloseButton","closeToast","XMarkIcon","TransactionKey","tx","adapter","renderHashLink","confirmations","hashLabels","statuses","foundAdapter","selectAdapterByKey","renderHash","props","trackerLabel","trackerKeyElement","TransactionTracker","onChainHashesElement","onChainHash","replacedHash","Fragment","shouldShowTrackerKey","getStatusConfig","ArrowPathIcon","CheckCircleIcon","XCircleIcon","TransactionStatusBadge","statusConfig","useMemo","baseClasses","statusKey","Icon","badgeClasses","iconClasses","DefaultSpeedUpButton","onClick","DefaultCancelButton","DefaultTxInfoButton","ToastTransaction","openTxInfoModal","icon","customization","connectedWalletAddress","toast","canBeReplaced","handleCancel","handleSpeedUp","CStatusAwareText","CTransactionKey","CStatusBadge","SpeedUpButton","CancelButton","TxInfoButton","getChainName","setChainId","Web3Icon","TrackingTxModal","onClose","onOpenAllTransactions","transactionsPool","executeTxAction","initialTx","activeTx","txToDisplay","isOpen","isProcessing","isSucceed","isFailed","isReplaced","isInitializing","isPending","canRetry","canReplace","handleRetry","retryParams","CustomHeader","CustomFooter","CustomStatusVisual","CustomProgressIndicator","CustomInfoBlock","CustomErrorBlock","Dialog","open","DialogContent","DefaultHeaderTitle","DefaultHeader","TxStatusVisual","TxProgressIndicator","TxInfoBlock","TxErrorBlock","DefaultFooter","title","DialogHeader","DialogTitle","DialogClose","CloseIcon","onRetry","onSpeedUp","onCancel","trackingModal","MainActionButton","error","ExclamationTriangleIcon","DefaultInfoRow","value","txInfo","InfoRow","chainId","isSolanaTransaction","OrbitAdapter","solanaTx","dayjs","STEP_STYLE_CONFIG","Step","status","isFirst","styles","renderIcon","StepComponent","steps","getStepStatus","stepIndex","getStepLabel","stepProps","index","STATUS_VISUAL_CONFIG","ExclamationCircleIcon","ClockIcon","relativeTime","DefaultIcon","DefaultTimestamp","timestamp","TransactionHistoryItem","Title","Description","Timestamp","StatusBadge","TxKey","HistoryPlaceholder","message","TransactionsHistory","transactionsModal","sortedTransactions","selectAllTransactionsByActiveWallet","a","b","Placeholder","HistoryItem","renderContent","closeModal","TransactionsInfoModal","setIsOpen","CustomHistory","STATUS_TO_TOAST_TYPE","NovaProvider","connectedAdapterType","closeTxTrackedModal","features","toastProps","isTransactionsInfoModalOpen","setIsTransactionsInfoModalOpen","useState","prevTransactionsRef","useRef","toastContainerId","isMobile","useMediaQuery","enabledFeatures","mergedLabels","deepMerge","showOrUpdateToast","useCallback","type","content","useEffect","prevPool","currentTx","prevTx","isTrackingModalOpen","shouldShowToasts","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 transactionsModal: {\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 openTransactionsInfo: 'Open transactions',\n },\n statuses: {\n pending: 'Pending',\n success: 'Success',\n failed: 'Failed',\n reverted: 'Reverted',\n replaced: 'Replaced',\n unknown: 'Unknown',\n confirmationsLabel: 'Confirmations',\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 recentBlockhash: 'Recent Blockhash',\n solana: 'Signature',\n },\n txInfo: {\n started: 'Started',\n network: 'Network',\n slot: 'Slot',\n },\n txError: {\n title: 'Error',\n copied: 'Copied!',\n },\n trackingModal: {\n title: 'Transaction Overview',\n processing: 'Processing...',\n close: 'Close',\n allTransactions: 'All transactions',\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\n * blockchain hashes with copy-to-clipboard and block 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 * Defines the props for the HashLink component.\n */\nexport type HashLinkProps = {\n /** The full hash string to display and copy (e.g., a transaction hash or wallet address). */\n hash: string;\n /** An optional label to display before the hash (e.g., \"From\", \"Tx Hash\"). */\n label?: string;\n /** An optional URL to a block explorer. If provided, the hash becomes a clickable link. */\n explorerUrl?: string;\n /** The visual style of the component. 'default' is larger, 'compact' is smaller. */\n variant?: 'default' | 'compact';\n /** Additional CSS classes to apply to the container element for custom styling. */\n className?: string;\n};\n\n/**\n * A component to display a hash string with an optional label, a link to a block explorer,\n * and a copy-to-clipboard button. It automatically ellipsizes the hash for readability.\n */\nexport function HashLink({ label, hash, explorerUrl, variant = 'default', className }: HashLinkProps) {\n const { isCopied, copy } = useCopyToClipboard();\n const { actions, txError } = useLabels();\n\n const containerClasses = cn(\n 'flex items-center justify-between',\n {\n 'text-sm': variant === 'default',\n 'text-xs': variant === 'compact',\n },\n className,\n );\n\n const labelClasses = cn('pr-1', {\n 'font-bold text-[var(--tuwa-text-primary)]': variant === 'default',\n 'font-medium text-[var(--tuwa-text-secondary)]': variant === 'compact',\n });\n\n // The ellipsized hash content, memoized for clarity.\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)] transition-colors hover:underline\"\n title={actions.viewOnExplorer}\n aria-label={actions.viewOnExplorer}\n >\n {hashContent}\n <ArrowTopRightOnSquareIcon className=\"h-4 w-4\" />\n </a>\n ) : (\n <span className=\"text-[var(--tuwa-text-primary)]\">{hashContent}</span>\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 ? txError.copied : actions.copy}\n aria-label={isCopied ? txError.copied : 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 array index and a theme-aware color class.\n * The index corresponds to the position in the `source` array prop: `[pending, success, error, replaced]`.\n */\nconst STATUS_CONFIG = {\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} as const;\n\nexport type StatusAwareTextProps = {\n /** The current status of the transaction, used to select the correct text and color. */\n txStatus?: TransactionStatus;\n /**\n * The source for the text. Can be a single string for static text, or an array of strings\n * for dynamic text based on status. The array format must be: `[pending, success, error, replaced]`.\n */\n source?: string | readonly string[];\n /** A fallback string to display if `source` is not provided or is invalid. */\n fallback?: string;\n /** The visual variant, which determines the base text style ('title' or 'description'). */\n variant: 'title' | 'description';\n /** If true, applies a status-specific color to the text. Defaults to false. */\n applyColor?: boolean;\n /** Optional additional CSS classes for custom styling. */\n className?: string;\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 object.\n */\nexport function StatusAwareText({\n txStatus,\n source,\n fallback,\n variant,\n className,\n applyColor = false,\n}: StatusAwareTextProps): ReactNode {\n let displayText: string | undefined;\n let colorClass = '';\n\n // 1. Determine the text to display based on the source type.\n if (typeof source === 'string') {\n displayText = source;\n } else if (Array.isArray(source)) {\n const statusKey = txStatus || 'default';\n const config = STATUS_CONFIG[statusKey] ?? STATUS_CONFIG.default;\n displayText = source[config.index];\n if (applyColor) {\n colorClass = config.colorClass;\n }\n } else {\n displayText = fallback;\n }\n\n // If no text could be determined, render nothing.\n if (!displayText) {\n return null;\n }\n\n // 2. Determine the base styling based on the variant.\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 // 3. Combine classes and render the final output.\n return <div className={cn(baseClasses, colorClass, className)}>{displayText}</div>;\n}\n","/**\n * @file This file contains a reusable close button component, designed primarily for toast notifications.\n */\n\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport { cn } from '@tuwaio/nova-core';\n\nimport { useLabels } from '../providers';\n\n/**\n * Defines the props for the ToastCloseButton component.\n */\nexport type ToastCloseButtonProps = {\n /**\n * The function to call when the button is clicked. This is typically provided by the\n * toast library (e.g., react-toastify) to dismiss the notification.\n */\n closeToast?: (e: React.MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * A simple, styled close button component ('X' icon) intended for use within toast notifications.\n * It uses theme-aware CSS variables for styling and i18n labels for accessibility.\n */\nexport function ToastCloseButton({ closeToast }: ToastCloseButtonProps) {\n const { actions } = useLabels();\n\n return (\n <button\n type=\"button\"\n onClick={closeToast}\n aria-label={actions.close}\n title={actions.close}\n className={cn(\n 'absolute top-2 right-2 cursor-pointer rounded-full p-1',\n 'text-[var(--tuwa-text-tertiary)] transition-colors',\n 'hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]',\n )}\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 { selectAdapterByKey } from '@tuwaio/orbit-core';\nimport { Transaction, TransactionTracker } from '@tuwaio/pulsar-core';\nimport { ReactNode } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { HashLink, HashLinkProps } from './HashLink';\n\n/**\n * Defines the props for the TransactionKey component.\n * @template TR - The type of the tracker identifier.\n * @template T - The transaction type.\n * @template A - The type of the key returned by an action function.\n */\nexport type TransactionKeyProps<T extends Transaction> = Pick<NovaProviderProps<T>, 'adapter'> & {\n /** The transaction object to display identifiers for. */\n tx: T;\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: HashLinkProps) => ReactNode;\n /** Optional number of confirmations for a transaction. */\n confirmations?: number;\n};\n\n/**\n * A component that intelligently displays the relevant keys and hashes for a transaction.\n * It leverages the adapter system to show chain-specific identifiers and explorer links.\n */\nexport function TransactionKey<T extends Transaction>({\n tx,\n adapter,\n variant = 'toast',\n className,\n renderHashLink,\n confirmations,\n}: TransactionKeyProps<T>) {\n const { hashLabels, statuses } = useLabels();\n\n // Select the correct adapter for the given transaction.\n const foundAdapter = selectAdapterByKey({ adapterKey: tx.adapter, adapter });\n\n if (!foundAdapter) return null;\n\n // Helper to use the render prop if provided, otherwise default to HashLink.\n const renderHash = (props: HashLinkProps) => {\n return renderHashLink ? renderHashLink(props) : <HashLink {...props} />;\n };\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 // The primary key of the transaction (e.g., taskId, safeTxHash).\n // This removes the need for `@ts-expect-error` by using a type assertion to key into hashLabels.\n const trackerLabel = (hashLabels as Record<string, string>)[String(tx.tracker)];\n const trackerKeyElement = trackerLabel\n ? renderHash({\n label: trackerLabel,\n hash: tx.txKey,\n variant: tx.tracker !== TransactionTracker.Solana ? 'compact' : 'default',\n explorerUrl:\n foundAdapter.getExplorerTxUrl && tx.tracker === TransactionTracker.Solana\n ? foundAdapter?.getExplorerTxUrl(tx)\n : undefined,\n })\n : null;\n\n // The on-chain hash elements, handling normal and replaced transactions.\n const onChainHashesElement = (() => {\n const onChainHash = (tx as any).hash;\n const replacedHash = (tx as any).replacedTxHash;\n\n if (!onChainHash && !replacedHash) return null;\n\n if (replacedHash) {\n return (\n <>\n {onChainHash &&\n renderHash({\n label: hashLabels.original,\n hash: onChainHash,\n variant: 'compact',\n })}\n {typeof foundAdapter.getExplorerTxUrl !== 'undefined' &&\n renderHash({\n label: hashLabels.replaced,\n hash: replacedHash,\n explorerUrl: foundAdapter.getExplorerTxUrl(tx),\n })}\n </>\n );\n }\n\n return (\n onChainHash &&\n typeof foundAdapter.getExplorerTxUrl !== 'undefined' &&\n renderHash({\n label: hashLabels.default,\n hash: onChainHash,\n explorerUrl: foundAdapter.getExplorerTxUrl(tx),\n })\n );\n })();\n\n // Avoid showing the tracker key if it's the same as the on-chain hash.\n const shouldShowTrackerKey = trackerLabel && trackerLabel !== hashLabels.default && tx.txKey !== (tx as any).hash;\n\n return (\n <div className={cn(containerClasses, className)}>\n {shouldShowTrackerKey && trackerKeyElement}\n {onChainHashesElement}\n {typeof confirmations === 'number' && (\n <p className=\"text-xs text-[var(--tuwa-text-tertiary)]\">\n {statuses.confirmationsLabel}: {confirmations}\n </p>\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 { useMemo } from 'react';\n\nimport { TuwaLabels } from '../i18n/types';\nimport { useLabels } from '../providers';\n\n/**\n * A factory function to create the status configuration object.\n * This is defined outside the component to avoid re-creation on every render.\n * It depends on the `labels` object for internationalization.\n */\nconst getStatusConfig = (labels: TuwaLabels['statuses']) => ({\n Pending: {\n label: labels.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.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.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.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/**\n * Defines the props for the TransactionStatusBadge component.\n * @template TR - The type of the tracker identifier.\n * @template T - The transaction type.\n */\nexport type TransactionStatusBadgeProps<T extends Transaction> = {\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 */\nexport function TransactionStatusBadge<T extends Transaction>({ tx, className }: TransactionStatusBadgeProps<T>) {\n const { statuses } = useLabels();\n\n // Memoize the configuration object so it's not re-created on every render.\n // It will only be re-calculated if the labels change (e.g., language switch).\n const statusConfig = useMemo(() => getStatusConfig(statuses), [statuses]);\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' if the transaction is pending, otherwise use its final status.\n const statusKey = tx.pending ? 'Pending' : tx.status;\n const config = statusKey ? statusConfig[statusKey as keyof typeof statusConfig] : 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 ?? 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 { selectAdapterByKey, setChainId } from '@tuwaio/orbit-core';\nimport { Transaction } from '@tuwaio/pulsar-core';\nimport { ComponentType, JSX, ReactNode } from 'react';\nimport { ToastContainerProps, ToastContentProps } from 'react-toastify';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { StatusAwareText, StatusAwareTextProps } from './StatusAwareText';\nimport { TransactionKey, TransactionKeyProps } from './TransactionKey';\nimport { TransactionStatusBadge, TransactionStatusBadgeProps } from './TransactionStatusBadge';\n\n// --- Prop Types for Customization ---\ntype CustomActionButtonProps = { onClick: () => void; children: ReactNode };\n\nexport type ToastTransactionCustomization<T extends Transaction> = {\n components?: {\n StatusAwareText?: ComponentType<StatusAwareTextProps>;\n TransactionKey?: ComponentType<TransactionKeyProps<T>>;\n StatusBadge?: ComponentType<TransactionStatusBadgeProps<T>>;\n TxInfoButton?: ComponentType<CustomActionButtonProps>;\n SpeedUpButton?: ComponentType<CustomActionButtonProps>;\n CancelButton?: ComponentType<CustomActionButtonProps>;\n };\n};\n\nexport type ToastTransactionProps<T extends Transaction> = {\n tx: T;\n openTxInfoModal?: () => void;\n icon?: ReactNode;\n className?: string;\n customization?: ToastTransactionCustomization<T>;\n closeToast?: ToastContentProps['closeToast'];\n toastProps?: ToastContainerProps;\n} & Pick<NovaProviderProps<T>, 'adapter' | 'connectedWalletAddress'>;\n\n// --- Default Sub-Components ---\n\nconst DefaultSpeedUpButton = ({ onClick, children }: CustomActionButtonProps) => (\n <button\n onClick={onClick}\n type=\"button\"\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-accent)] transition-opacity hover:opacity-80\"\n >\n {children}\n </button>\n);\n\nconst DefaultCancelButton = ({ onClick, children }: CustomActionButtonProps) => (\n <button\n onClick={onClick}\n type=\"button\"\n className=\"cursor-pointer text-sm font-medium text-[var(--tuwa-text-secondary)] transition-opacity hover:opacity-80\"\n >\n {children}\n </button>\n);\n\nconst DefaultTxInfoButton = ({ onClick, children }: CustomActionButtonProps) => (\n <button\n className=\"cursor-pointer rounded-md bg-gradient-to-r from-[var(--tuwa-button-gradient-from)] to-[var(--tuwa-button-gradient-to)] px-3 py-1 text-xs font-bold text-[var(--tuwa-text-on-accent)] shadow-lg transition-all duration-200 ease-in-out hover:shadow-xl hover:from-[var(--tuwa-button-gradient-from-hover)] hover:to-[var(--tuwa-button-gradient-to-hover)] active:scale-95\"\n onClick={onClick}\n type=\"button\"\n >\n {children}\n </button>\n);\n\n/**\n * A composite component that renders the content for a transaction toast notification.\n * It is highly customizable and leverages the adapter to show relevant actions like \"Speed Up\".\n */\nexport function ToastTransaction<T extends Transaction>({\n openTxInfoModal,\n tx,\n icon,\n className,\n customization,\n connectedWalletAddress,\n adapter,\n}: ToastTransactionProps<T>): JSX.Element {\n const { actions, toast } = useLabels();\n\n const foundAdapter = selectAdapterByKey({ adapterKey: tx.adapter, adapter });\n\n // A transaction can be replaced only if it's a standard on-chain transaction (not Safe or Gelato),\n // is pending, the adapter supports the actions, and it belongs to the connected wallet.\n const canBeReplaced = !!(\n tx.tracker === 'ethereum' &&\n tx.pending &&\n foundAdapter?.speedUpTxAction &&\n foundAdapter?.cancelTxAction &&\n tx.from.toLowerCase() === connectedWalletAddress?.toLowerCase()\n );\n\n // --- Action Handlers ---\n const handleCancel = () => {\n if (canBeReplaced) foundAdapter.cancelTxAction!(tx);\n };\n\n const handleSpeedUp = () => {\n if (canBeReplaced) foundAdapter.speedUpTxAction!(tx);\n };\n\n // --- Component Overrides ---\n const {\n StatusAwareText: CStatusAwareText = StatusAwareText,\n TransactionKey: CTransactionKey = TransactionKey,\n StatusBadge: CStatusBadge = TransactionStatusBadge,\n SpeedUpButton = DefaultSpeedUpButton,\n CancelButton = DefaultCancelButton,\n TxInfoButton = DefaultTxInfoButton,\n } = customization?.components ?? {};\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-center gap-3\">\n <div\n className=\"w-[40px] flex-shrink-0 [&>img]:w-full [&>img]:h-auto\"\n title={getChainName(setChainId(tx.chainId))}\n >\n {icon ?? <Web3Icon chainId={setChainId(tx.chainId)} />}\n </div>\n <div className=\"flex-1\">\n <CStatusAwareText txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n <CStatusAwareText txStatus={tx.status} source={tx.description} variant=\"description\" />\n </div>\n </div>\n\n {/* --- Body: Hashes + Status/Actions --- */}\n <div>\n <CTransactionKey adapter={adapter} tx={tx} variant=\"toast\" />\n <div className=\"mt-3 flex items-center justify-between\">\n <CStatusBadge tx={tx} />\n\n {canBeReplaced ? (\n <div className=\"flex items-center gap-4\">\n <SpeedUpButton onClick={handleSpeedUp}>{actions.speedUp}</SpeedUpButton>\n <CancelButton onClick={handleCancel}>{actions.cancel}</CancelButton>\n </div>\n ) : (\n openTxInfoModal &&\n !!connectedWalletAddress && (\n <TxInfoButton onClick={openTxInfoModal}>{toast.openTransactionsInfo}</TxInfoButton>\n )\n )}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TrackingTxModal`, the main UI for displaying the detailed lifecycle of a single transaction.\n */\nimport { CloseIcon, cn, Dialog, DialogClose, DialogContent, DialogHeader, DialogTitle } from '@tuwaio/nova-core';\nimport { selectAdapterByKey } from '@tuwaio/orbit-core';\nimport { InitialTransaction, InitialTransactionParams, Transaction, TransactionStatus } from '@tuwaio/pulsar-core';\nimport { MotionProps } from 'framer-motion';\nimport { ComponentPropsWithoutRef, ComponentType, ReactNode, useMemo } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../../providers';\nimport {\n TxErrorBlock,\n TxErrorBlockProps,\n TxInfoBlock,\n TxInfoBlockProps,\n TxProgressIndicator,\n TxProgressIndicatorProps,\n TxStatusVisual,\n TxStatusVisualProps,\n} from '../';\nimport { StatusAwareText } from '../StatusAwareText';\n\n// --- Prop Types for Customization ---\ntype CustomHeaderProps = { onClose: () => void; title: ReactNode };\ntype CustomFooterProps = {\n onClose: () => void;\n onOpenAllTransactions: () => void;\n onRetry?: () => void;\n onSpeedUp?: () => void;\n onCancel?: () => void;\n isProcessing?: boolean;\n isFailed?: boolean;\n canReplace?: boolean;\n connectedWalletAddress?: string;\n};\n\nexport type TrackingTxModalCustomization<T extends Transaction> = {\n // Use the new DialogContent type\n modalProps?: Partial<ComponentPropsWithoutRef<typeof DialogContent>>;\n motionProps?: MotionProps; // Kept for API contract, but unused in default render\n components?: {\n Header?: ComponentType<CustomHeaderProps>;\n Footer?: ComponentType<CustomFooterProps>;\n StatusVisual?: ComponentType<TxStatusVisualProps>;\n ProgressIndicator?: ComponentType<TxProgressIndicatorProps>;\n InfoBlock?: ComponentType<TxInfoBlockProps<T>>;\n ErrorBlock?: ComponentType<TxErrorBlockProps>;\n };\n};\n\nexport type TrackingTxModalProps<T extends Transaction> = Pick<\n NovaProviderProps<T>,\n 'executeTxAction' | 'initialTx' | 'transactionsPool' | 'adapter' | 'connectedWalletAddress'\n> & {\n onClose: (txKey?: string) => void;\n onOpenAllTransactions: () => void;\n className?: string;\n customization?: TrackingTxModalCustomization<T>;\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 */\nexport function TrackingTxModal<T extends Transaction>({\n adapter,\n onClose,\n onOpenAllTransactions,\n className,\n customization,\n transactionsPool,\n executeTxAction,\n initialTx,\n connectedWalletAddress,\n}: TrackingTxModalProps<T>) {\n // --- State Derivation ---\n const activeTx = useMemo(\n () => (initialTx?.lastTxKey ? transactionsPool[initialTx.lastTxKey] : undefined),\n [transactionsPool, initialTx],\n );\n\n const txToDisplay = activeTx ?? initialTx;\n\n const isOpen = (initialTx?.withTrackedModal && !activeTx) || (activeTx?.isTrackedModalOpen ?? false);\n\n // --- Derived Status Flags ---\n const { isProcessing, isSucceed, isFailed, isReplaced } = useMemo(() => {\n const txStatus = activeTx?.status;\n const isInitializing = initialTx?.isInitializing ?? false;\n const isPending = activeTx?.pending ?? false;\n return {\n isProcessing: isInitializing || isPending,\n isSucceed: txStatus === TransactionStatus.Success,\n isFailed: activeTx?.isError || !!initialTx?.errorMessage,\n isReplaced: txStatus === TransactionStatus.Replaced,\n };\n }, [activeTx, initialTx]);\n\n // --- Adapter and Action Logic ---\n const foundAdapter = useMemo(\n () => (txToDisplay ? selectAdapterByKey({ adapterKey: txToDisplay.adapter, adapter }) : undefined),\n [txToDisplay, adapter],\n );\n\n const canRetry = !!(isFailed && txToDisplay && initialTx?.actionFunction && executeTxAction);\n const canReplace = !!(\n foundAdapter?.speedUpTxAction &&\n foundAdapter?.cancelTxAction &&\n activeTx?.pending &&\n activeTx.tracker === 'ethereum'\n );\n\n // --- Action Handlers ---\n const handleRetry = () => {\n if (!canRetry || !foundAdapter?.retryTxAction) return;\n\n const retryParams: InitialTransactionParams = {\n adapter: txToDisplay.adapter,\n type: txToDisplay.type,\n desiredChainID: 'desiredChainID' in txToDisplay ? txToDisplay.desiredChainID : txToDisplay.chainId,\n actionFunction: initialTx?.actionFunction,\n title: txToDisplay.title,\n description: txToDisplay.description,\n payload: txToDisplay.payload,\n rpcUrl:\n 'rpcUrl' in txToDisplay\n ? txToDisplay?.rpcUrl\n : 'desiredChainID' in txToDisplay\n ? (txToDisplay.desiredChainID as string)\n : (txToDisplay.chainId as string).split(':')[1],\n withTrackedModal: 'withTrackedModal' in txToDisplay ? txToDisplay.withTrackedModal : false,\n };\n foundAdapter.retryTxAction({ tx: retryParams, txKey: activeTx?.txKey ?? '', onClose, executeTxAction });\n };\n const handleCancel = () => {\n if (canReplace && activeTx) foundAdapter.cancelTxAction!(activeTx);\n };\n const handleSpeedUp = () => {\n if (canReplace && activeTx) foundAdapter.speedUpTxAction!(activeTx);\n };\n\n // --- Customization & Rendering ---\n const CustomHeader = customization?.components?.Header;\n const CustomFooter = customization?.components?.Footer;\n const CustomStatusVisual = customization?.components?.StatusVisual;\n const CustomProgressIndicator = customization?.components?.ProgressIndicator;\n const CustomInfoBlock = customization?.components?.InfoBlock;\n const CustomErrorBlock = customization?.components?.ErrorBlock;\n\n if (!txToDisplay) return null;\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose(activeTx?.txKey)}>\n <DialogContent\n className={cn('w-full sm:max-w-md', customization?.modalProps?.className)}\n {...customization?.modalProps}\n >\n <div className={cn('relative flex w-full flex-col', className)}>\n {CustomHeader ? (\n <CustomHeader onClose={() => onClose(activeTx?.txKey)} title={<DefaultHeaderTitle tx={txToDisplay} />} />\n ) : (\n <DefaultHeader onClose={() => onClose(activeTx?.txKey)} title={<DefaultHeaderTitle tx={txToDisplay} />} />\n )}\n\n <main className=\"flex flex-col gap-4 p-4\">\n {CustomStatusVisual ? (\n <CustomStatusVisual\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n ) : (\n <TxStatusVisual\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n )}\n {CustomProgressIndicator ? (\n <CustomProgressIndicator\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n ) : (\n <TxProgressIndicator\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n )}\n {CustomInfoBlock ? (\n <CustomInfoBlock tx={txToDisplay} adapter={adapter} />\n ) : (\n <TxInfoBlock tx={txToDisplay} adapter={adapter} />\n )}\n {CustomErrorBlock ? (\n <CustomErrorBlock error={activeTx?.errorMessage || initialTx?.errorMessage} />\n ) : (\n <TxErrorBlock error={activeTx?.errorMessage || initialTx?.errorMessage} />\n )}\n </main>\n\n {CustomFooter ? (\n <CustomFooter\n onClose={() => onClose(activeTx?.txKey)}\n onOpenAllTransactions={onOpenAllTransactions}\n isProcessing={isProcessing}\n isFailed={isFailed}\n canReplace={canReplace}\n onRetry={canRetry ? handleRetry : undefined}\n onSpeedUp={canReplace ? handleSpeedUp : undefined}\n onCancel={canReplace ? handleCancel : undefined}\n connectedWalletAddress={connectedWalletAddress}\n />\n ) : (\n <DefaultFooter\n onClose={() => onClose(activeTx?.txKey)}\n onOpenAllTransactions={onOpenAllTransactions}\n isProcessing={isProcessing}\n isFailed={isFailed}\n canReplace={canReplace}\n onRetry={canRetry ? handleRetry : undefined}\n onSpeedUp={canReplace ? handleSpeedUp : undefined}\n onCancel={canReplace ? handleCancel : undefined}\n connectedWalletAddress={connectedWalletAddress}\n />\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\n// --- Default Sub-Components ---\n\nfunction DefaultHeaderTitle({ tx }: { tx: Transaction | InitialTransaction }) {\n return (\n <StatusAwareText\n txStatus={'status' in tx ? tx.status : undefined}\n source={tx.title}\n fallback={tx.type}\n variant=\"title\"\n className=\"text-lg\"\n />\n );\n}\n\nconst DefaultHeader = ({ onClose, title }: CustomHeaderProps) => {\n const { actions } = useLabels();\n return (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n\n <DialogClose asChild>\n <button\n type=\"button\"\n onClick={() => onClose()}\n aria-label={actions.close}\n className=\"cursor-pointer rounded-full p-1\n text-[var(--tuwa-text-tertiary)] transition-colors\n hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <CloseIcon />\n </button>\n </DialogClose>\n </DialogHeader>\n );\n};\n\nconst DefaultFooter = ({\n onClose,\n onOpenAllTransactions,\n isProcessing,\n onRetry,\n onSpeedUp,\n onCancel,\n canReplace,\n isFailed,\n connectedWalletAddress,\n}: CustomFooterProps) => {\n const { trackingModal, actions } = useLabels();\n\n const MainActionButton = () => {\n if (isFailed && onRetry) {\n return (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"cursor-pointer rounded-t-md sm:rounded-md\n bg-gradient-to-r from-[var(--tuwa-button-gradient-from)] to-[var(--tuwa-button-gradient-to)]\n px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-on-accent)] transition-opacity\n hover:from-[var(--tuwa-button-gradient-from-hover)] hover:to-[var(--tuwa-button-gradient-to-hover)]\"\n >\n {trackingModal.retry}\n </button>\n );\n }\n if (!isProcessing && !canReplace && !!connectedWalletAddress) {\n return (\n <button\n type=\"button\"\n onClick={onOpenAllTransactions}\n className=\"cursor-pointer rounded-md\n bg-[var(--tuwa-bg-muted)] px-4 py-2 text-sm font-semibold text-[var(--tuwa-text-primary)]\n transition-colors hover:bg-[var(--tuwa-border-primary)]\"\n >\n {trackingModal.allTransactions}\n </button>\n );\n }\n return null;\n };\n\n return (\n <footer\n className=\"flex w-full items-center justify-between\n border-t border-[var(--tuwa-border-primary)] p-4\"\n >\n <div className=\"flex items-center gap-4\">\n {canReplace && onSpeedUp && onCancel && (\n <>\n <button\n type=\"button\"\n onClick={onSpeedUp}\n className=\"cursor-pointer text-sm font-medium\n text-[var(--tuwa-text-accent)] transition-opacity hover:opacity-80\"\n >\n {actions.speedUp}\n </button>\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"cursor-pointer text-sm font-medium\n text-[var(--tuwa-text-secondary)] transition-opacity hover:opacity-80\"\n >\n {actions.cancel}\n </button>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n <MainActionButton />\n <button\n type=\"button\"\n onClick={onClose}\n disabled={isProcessing && !canReplace}\n className=\"cursor-pointer rounded-md bg-[var(--tuwa-bg-muted)] px-4 py-2 text-sm font-semibold\n text-[var(--tuwa-text-primary)] transition-colors hover:bg-[var(--tuwa-border-primary)]\n disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {isProcessing && !canReplace ? trackingModal.processing : trackingModal.close}\n </button>\n </div>\n </footer>\n );\n};\n","/**\n * @file This file contains the `TxErrorBlock` component for displaying transaction error messages.\n */\n\nimport { CheckIcon, DocumentDuplicateIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid';\nimport { cn, useCopyToClipboard } from '@tuwaio/nova-core';\n\nimport { useLabels } from '../../providers';\n\nexport type TxErrorBlockProps = {\n /** The error message string to display. If undefined or empty, 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 */\nexport function TxErrorBlock({ error, className }: TxErrorBlockProps) {\n const { isCopied, copy } = useCopyToClipboard();\n const { actions, txError } = 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>{txError.title}</span>\n </div>\n <button\n type=\"button\"\n onClick={() => copy(error)}\n title={isCopied ? txError.copied : actions.copy}\n aria-label={isCopied ? txError.copied : `${actions.copy} error message`}\n className=\"cursor-pointer text-[var(--tuwa-error-icon)]/50 transition-colors hover:text-[var(--tuwa-error-icon)]\"\n >\n {isCopied ? (\n <CheckIcon className=\"h-5 w-5 text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"h-5 w-5\" />\n )}\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 </div>\n );\n}\n","/**\n * @file This file contains the `TxInfoBlock` component, which displays key details about a transaction.\n * It also supports Solana-specific functionality to display slot, confirmations, and recentBlockhash details.\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 { OrbitAdapter, selectAdapterByKey, setChainId } from '@tuwaio/orbit-core';\nimport { InitialTransaction, SolanaTransaction, Transaction } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport { ComponentType, ReactNode } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../../providers';\nimport { HashLink } from '../HashLink';\nimport { TransactionKey, TransactionKeyProps } from '../TransactionKey';\n\n// --- Types for Customization & Props ---\ntype CustomInfoRowProps = { label: ReactNode; value: ReactNode };\n\nexport type TxInfoBlockCustomization<T extends Transaction> = {\n components?: {\n InfoRow?: ComponentType<CustomInfoRowProps>;\n transactionKey?: TransactionKeyProps<T>['renderHashLink'];\n };\n};\n\nexport type TxInfoBlockProps<T extends Transaction> = {\n /** The transaction object to display, which can be a full transaction or an initial one. */\n tx: T | InitialTransaction;\n className?: string;\n customization?: TxInfoBlockCustomization<T>;\n} & Pick<NovaProviderProps<T>, 'adapter'>;\n\n// --- Default Sub-Component ---\nfunction DefaultInfoRow({ label, value }: CustomInfoRowProps) {\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\n/**\n * A component that displays a block of essential transaction details,\n * such as network, timestamps, Solana-specific details, and relevant hashes/keys.\n */\nexport function TxInfoBlock<T extends Transaction>({ tx, adapter, className, customization }: TxInfoBlockProps<T>) {\n const { txInfo, statuses, hashLabels } = useLabels();\n\n // Select the correct adapter for the given transaction.\n const foundAdapter = selectAdapterByKey({ adapterKey: tx.adapter, adapter });\n\n if (!foundAdapter) return null;\n\n // Use the custom InfoRow component if provided, otherwise fall back to the default.\n const { InfoRow = DefaultInfoRow } = customization?.components ?? {};\n\n // Determine the chain ID, falling back from the final chainId to the desiredChainID for initial transactions.\n const chainId = 'chainId' in tx ? tx.chainId : tx.desiredChainID;\n\n const isSolanaTransaction = tx.adapter === OrbitAdapter.SOLANA;\n const solanaTx = isSolanaTransaction ? (tx as SolanaTransaction) : undefined;\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 <InfoRow\n label={txInfo.network}\n value={\n <div className=\"flex items-center justify-end gap-2\">\n <div className=\"h-4 w-4\">\n <Web3Icon chainId={setChainId(chainId)} />\n </div>\n <span>{getChainName(setChainId(chainId))}</span>\n </div>\n }\n />\n {tx.localTimestamp && (\n <InfoRow label={txInfo.started} value={dayjs.unix(tx.localTimestamp).format('MMM D, HH:mm:ss')} />\n )}\n\n {/* --- Solana-specific Details (if applicable) --- */}\n {isSolanaTransaction && (\n <>\n {solanaTx?.slot && (\n <InfoRow\n label={txInfo.slot}\n value={\n <HashLink\n hash={solanaTx.slot.toString()}\n explorerUrl={\n foundAdapter?.getExplorerUrl\n ? `${foundAdapter?.getExplorerUrl(`/block/${solanaTx.slot}`)}`\n : undefined\n }\n />\n }\n />\n )}\n {(typeof solanaTx?.confirmations === 'number' || typeof solanaTx?.confirmations === 'string') && (\n <InfoRow label={statuses.confirmationsLabel} value={solanaTx.confirmations} />\n )}\n {solanaTx?.recentBlockhash && (\n <InfoRow label={hashLabels.recentBlockhash} value={<HashLink hash={solanaTx.recentBlockhash} />} />\n )}\n </>\n )}\n\n {/* --- Transaction Hashes/Keys --- */}\n {'txKey' in tx && tx.txKey && (\n <div className=\"border-t border-[var(--tuwa-border-primary)] pt-3\">\n <TransactionKey\n tx={tx as T}\n adapter={adapter}\n variant=\"history\" // 'history' variant provides suitable styling for this block\n renderHashLink={customization?.components?.transactionKey}\n />\n </div>\n )}\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, useMemo } 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 };\n\n/**\n * A configuration map for styling each step based on its status.\n * Defined outside the component to prevent re-creation.\n */\nconst STEP_STYLE_CONFIG: Record<StepStatus, { line: string; border: string; fill: string; pulse?: string }> = {\n completed: {\n line: 'bg-[var(--tuwa-success-icon)]',\n border: 'border-[var(--tuwa-success-icon)]',\n fill: 'bg-[var(--tuwa-success-icon)]',\n },\n error: {\n line: 'bg-[var(--tuwa-error-icon)]',\n border: 'border-[var(--tuwa-error-icon)]',\n fill: 'bg-[var(--tuwa-error-icon)]',\n },\n replaced: {\n line: 'bg-[var(--tuwa-info-icon)]',\n border: 'border-[var(--tuwa-info-icon)]',\n fill: 'bg-[var(--tuwa-info-icon)]',\n },\n active: {\n line: 'bg-[var(--tuwa-pending-icon)]',\n border: 'border-[var(--tuwa-pending-icon)]',\n fill: 'bg-transparent',\n pulse: 'bg-[var(--tuwa-pending-icon)]',\n },\n inactive: {\n line: 'bg-[var(--tuwa-border-primary)]',\n border: 'border-[var(--tuwa-border-primary)]',\n fill: 'bg-transparent',\n },\n};\n\n/**\n * Renders a single step in the progress indicator.\n */\nfunction Step({ status, label, isFirst = false }: StepProps) {\n const styles = STEP_STYLE_CONFIG[status];\n\n const renderIcon = () => {\n switch (status) {\n case 'completed':\n return <CheckIcon className=\"h-3 w-3 text-white\" />;\n case 'error':\n return <ExclamationTriangleIcon className=\"h-3 w-3 text-white\" />;\n case 'replaced':\n return <ArrowPathIcon className=\"h-3 w-3 text-white\" />;\n case 'active':\n return <div className={cn('h-2 w-2 animate-pulse rounded-full', styles.pulse)} />;\n default:\n return null;\n }\n };\n\n return (\n <div className=\"relative flex min-w-[80px] flex-1 flex-col items-center\">\n {/* Connecting line */}\n {!isFirst && <div className={cn('absolute right-1/2 top-[10px] h-0.5 w-full', styles.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 styles.border,\n styles.fill,\n )}\n >\n {renderIcon()}\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 StepComponent?: ComponentType<StepProps>;\n}\n\n/**\n * A 3-step progress indicator that visually represents the lifecycle of a transaction.\n */\nexport function TxProgressIndicator({\n isProcessing,\n isSucceed,\n isFailed,\n isReplaced,\n className,\n StepComponent = Step,\n}: TxProgressIndicatorProps) {\n const { trackingModal, statuses } = useLabels();\n\n // Memoize the steps array to avoid re-calculating on every render.\n const steps = useMemo((): StepProps[] => {\n const getStepStatus = (stepIndex: 1 | 2 | 3): StepStatus => {\n if (stepIndex === 1) return 'completed'; // \"Created\" is always complete\n if (stepIndex === 2) {\n // \"Processing\"\n if (isSucceed || isFailed || isReplaced) return 'completed';\n if (isProcessing) return 'active';\n }\n if (stepIndex === 3) {\n // \"Final\"\n if (isSucceed) return 'completed';\n if (isFailed) return 'error';\n if (isReplaced) return 'replaced';\n if (isProcessing) return 'active';\n }\n return 'inactive';\n };\n\n const getStepLabel = (stepIndex: 1 | 2 | 3): string => {\n if (stepIndex === 1) return trackingModal.progressIndicator.created;\n if (stepIndex === 2) return trackingModal.progressIndicator.processing;\n if (isFailed) return statuses.failed;\n if (isReplaced) return statuses.replaced;\n return trackingModal.progressIndicator.succeed;\n };\n\n return [\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 }, [isProcessing, isSucceed, isFailed, isReplaced, trackingModal, statuses]);\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 { cn } from '@tuwaio/nova-core';\nimport { ComponentType } 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// A configuration map that links a status to its corresponding icon and styles.\n// Defined outside the component to prevent re-creation on every render.\nconst STATUS_VISUAL_CONFIG: Record<\n 'succeed' | 'failed' | 'replaced' | 'processing' | 'initializing',\n { Icon: ComponentType<{ className?: string }>; className: string }\n> = {\n succeed: {\n Icon: CheckCircleIcon,\n className: 'text-[var(--tuwa-success-icon)]',\n },\n failed: {\n Icon: ExclamationCircleIcon,\n className: 'text-[var(--tuwa-error-icon)]',\n },\n replaced: {\n Icon: ArrowPathIcon,\n className: 'text-[var(--tuwa-info-icon)]',\n },\n processing: {\n Icon: ArrowPathIcon,\n className: 'animate-spin text-[var(--tuwa-text-accent)]',\n },\n initializing: {\n Icon: ClockIcon,\n className: 'animate-pulse text-[var(--tuwa-pending-icon)]',\n },\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 */\nexport function TxStatusVisual({ isProcessing, isSucceed, isFailed, isReplaced }: TxStatusVisualProps) {\n // Determine the current status key based on the props.\n const statusKey =\n (isSucceed && 'succeed') ||\n (isFailed && 'failed') ||\n (isReplaced && 'replaced') ||\n (isProcessing && 'processing') ||\n 'initializing';\n\n const { Icon, className } = STATUS_VISUAL_CONFIG[statusKey];\n\n return (\n <div className=\"flex justify-center py-4\">\n <Icon className={cn('h-16 w-16', className)} />\n </div>\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 { setChainId } from '@tuwaio/orbit-core';\nimport { Transaction } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { ComponentType, JSX } from 'react';\n\nimport { NovaProviderProps } from '../providers';\nimport { StatusAwareText, StatusAwareTextProps } from './StatusAwareText';\nimport { TransactionKey, TransactionKeyProps } from './TransactionKey';\nimport { TransactionStatusBadge, TransactionStatusBadgeProps } 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 | string };\ntype CustomTimestampProps = { timestamp?: number };\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<T extends Transaction> = {\n components?: {\n Icon?: ComponentType<CustomIconProps>;\n Title?: ComponentType<StatusAwareTextProps>;\n Description?: ComponentType<StatusAwareTextProps>;\n Timestamp?: ComponentType<CustomTimestampProps>;\n StatusBadge?: ComponentType<TransactionStatusBadgeProps<T>>;\n TransactionKey?: ComponentType<TransactionKeyProps<T>>;\n };\n};\n\nexport type TransactionHistoryItemProps<T extends Transaction> = {\n /** The transaction object to display. */\n tx: T;\n /** An object to customize and override the default internal components. */\n customization?: TransactionHistoryItemCustomization<T>;\n /** Optional additional CSS classes for the container. */\n className?: string;\n} & Pick<NovaProviderProps<T>, 'adapter'>;\n\n// --- Default Sub-Components ---\n\nconst DefaultIcon = ({ chainId }: CustomIconProps) => (\n <div className=\"h-8 w-8 text-[var(--tuwa-text-secondary)]\">\n <Web3Icon chainId={setChainId(chainId)} />\n </div>\n);\nconst DefaultTimestamp = ({ timestamp }: CustomTimestampProps) => (\n <span className=\"mb-1 block text-xs text-[var(--tuwa-text-secondary)]\">\n {timestamp ? dayjs.unix(timestamp).fromNow() : '...'}\n </span>\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, allowing developers\n * to override any of its internal parts with their own components.\n */\nexport function TransactionHistoryItem<T extends Transaction>({\n tx,\n adapter,\n className,\n customization,\n}: TransactionHistoryItemProps<T>): JSX.Element {\n // Use the provided custom components, or fall back to the defaults.\n const {\n Icon = DefaultIcon,\n Title = StatusAwareText,\n Description = StatusAwareText,\n Timestamp = DefaultTimestamp,\n StatusBadge = TransactionStatusBadge,\n TransactionKey: TxKey = TransactionKey,\n } = 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 <Icon chainId={tx.chainId} />\n </div>\n <div>\n <Title txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n <Timestamp timestamp={tx.localTimestamp} />\n <Description txStatus={tx.status} source={tx.description} variant=\"description\" />\n </div>\n </div>\n\n {/* --- Status Badge --- */}\n <StatusBadge tx={tx} />\n </div>\n\n {/* --- Transaction Keys/Hashes --- */}\n <TxKey tx={tx} adapter={adapter} variant=\"history\" />\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, useMemo } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { TransactionHistoryItem, TransactionHistoryItemProps } from './TransactionHistoryItem';\n\n// --- Types for Customization & Props ---\n\ntype CustomPlaceholderProps = { title: string; message: string };\n\n/**\n * Defines the customization options for the TransactionsHistory component.\n */\nexport type TransactionsHistoryCustomization<T extends Transaction> = {\n title?: string;\n classNames?: {\n listWrapper?: string;\n };\n components?: {\n Placeholder?: ComponentType<CustomPlaceholderProps>;\n HistoryItem?: ComponentType<TransactionHistoryItemProps<T>>;\n };\n};\n\n/**\n * Defines the props for the TransactionsHistory component.\n * @template T - The transaction type.\n */\nexport type TransactionsHistoryProps<T extends Transaction> = Pick<\n NovaProviderProps<T>,\n 'adapter' | 'transactionsPool' | 'connectedWalletAddress'\n> & {\n className?: string;\n customization?: TransactionsHistoryCustomization<T>;\n};\n\n// --- Default Sub-Components ---\n\nfunction HistoryPlaceholder({ title, message, className }: CustomPlaceholderProps & { 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 the history is empty.\n */\nexport function TransactionsHistory<T extends Transaction>({\n adapter,\n connectedWalletAddress,\n transactionsPool,\n className,\n customization,\n}: TransactionsHistoryProps<T>) {\n const { transactionsModal } = useLabels();\n\n // Memoize the filtered and sorted transactions to prevent re-computation on every render.\n const sortedTransactions = useMemo(() => {\n if (!connectedWalletAddress) return [];\n const transactions = selectAllTransactionsByActiveWallet(transactionsPool, connectedWalletAddress);\n // Sort by timestamp, newest first.\n return transactions.sort((a, b) => (b.localTimestamp ?? 0) - (a.localTimestamp ?? 0));\n }, [transactionsPool, connectedWalletAddress]);\n\n // Use custom components if provided, otherwise fall back to the defaults.\n const { Placeholder = HistoryPlaceholder, HistoryItem = TransactionHistoryItem } = customization?.components ?? {};\n\n const renderContent = () => {\n if (!connectedWalletAddress) {\n return (\n <Placeholder\n title={transactionsModal.history.connectWalletTitle}\n message={transactionsModal.history.connectWalletMessage}\n />\n );\n }\n\n if (sortedTransactions.length > 0) {\n return (\n <div\n className={cn(\n 'NovaCustomScroll 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 <HistoryItem key={tx.txKey} tx={tx} adapter={adapter} />\n ))}\n </div>\n );\n }\n\n return (\n <Placeholder\n title={transactionsModal.history.noTransactionsTitle}\n message={transactionsModal.history.noTransactionsMessage}\n />\n );\n };\n\n return (\n <div className={cn('flex flex-col gap-y-3', className)}>\n {customization?.title && (\n <h3 className=\"text-lg font-bold text-[var(--tuwa-text-primary)]\">{customization?.title}</h3>\n )}\n {renderContent()}\n </div>\n );\n}\n","/**\n * @file This file contains the main `TransactionsInfoModal` component, which serves as the primary UI\n * for viewing wallet details and transaction history.\n */\n\nimport { CloseIcon, cn, Dialog, DialogClose, DialogContent, DialogHeader, DialogTitle } from '@tuwaio/nova-core';\nimport { Transaction } from '@tuwaio/pulsar-core';\nimport { ComponentPropsWithoutRef, ComponentType } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { TransactionsHistory, TransactionsHistoryProps } from './TransactionsHistory';\n\n// --- Prop Types for Customization ---\ntype CustomHeaderProps = { closeModal: () => void };\n\n/**\n * Defines the customization options for the TransactionsInfoModal.\n */\nexport type TransactionsInfoModalCustomization<T extends Transaction> = {\n modalProps?: Partial<ComponentPropsWithoutRef<typeof DialogContent>>;\n classNames?: {\n contentWrapper?: string;\n };\n components?: {\n Header?: ComponentType<CustomHeaderProps>;\n History?: ComponentType<TransactionsHistoryProps<T>>;\n };\n};\n\n/**\n * Defines the core props for the TransactionsInfoModal.\n */\nexport type TransactionsInfoModalProps<T extends Transaction> = Pick<\n NovaProviderProps<T>,\n 'adapter' | 'connectedAdapterType' | 'connectedWalletAddress' | 'transactionsPool'\n> & {\n isOpen?: boolean;\n setIsOpen: (value: boolean) => void;\n customization?: TransactionsInfoModalCustomization<T>;\n};\n\n/**\n * The default header component, customized for TUWA modal styles.\n */\nconst DefaultHeader = ({ closeModal, title }: CustomHeaderProps & { title: string }) => {\n const { actions } = useLabels();\n return (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n\n <DialogClose asChild>\n <button\n type=\"button\"\n onClick={closeModal}\n aria-label={actions.close}\n className=\"cursor-pointer rounded-full p-1\n text-[var(--tuwa-text-tertiary)] transition-colors\n hover:bg-[var(--tuwa-bg-muted)] hover:text-[var(--tuwa-text-primary)]\"\n >\n <CloseIcon />\n </button>\n </DialogClose>\n </DialogHeader>\n );\n};\n\n/**\n * The main modal component for displaying wallet information and transaction history.\n */\nexport function TransactionsInfoModal<T extends Transaction>({\n isOpen,\n setIsOpen,\n customization,\n adapter,\n connectedWalletAddress,\n transactionsPool,\n}: TransactionsInfoModalProps<T>) {\n const { transactionsModal } = useLabels();\n\n const closeModal = () => setIsOpen(false);\n\n const CustomHeader = customization?.components?.Header;\n const CustomHistory = customization?.components?.History;\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && closeModal()}>\n <DialogContent\n className={cn('w-full sm:max-w-2xl', customization?.modalProps?.className)}\n {...customization?.modalProps}\n >\n <div className={cn('relative max-h-[95dvh] w-full flex flex-col', customization?.classNames?.contentWrapper)}>\n {CustomHeader ? (\n <CustomHeader closeModal={closeModal} />\n ) : (\n <DefaultHeader closeModal={closeModal} title={transactionsModal.history.title} />\n )}\n\n {CustomHistory ? (\n <CustomHistory\n adapter={adapter}\n transactionsPool={transactionsPool}\n connectedWalletAddress={connectedWalletAddress}\n />\n ) : (\n <TransactionsHistory\n adapter={adapter}\n transactionsPool={transactionsPool}\n connectedWalletAddress={connectedWalletAddress}\n />\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * @file This file contains the main `NovaProvider` component, which is the root\n * for the Nova UI library. It should be placed at the top level of your application\n * to orchestrate modals, toasts, and internationalization.\n */\n\nimport { deepMerge, useMediaQuery } from '@tuwaio/nova-core';\nimport { OrbitAdapter } from '@tuwaio/orbit-core';\nimport { ITxTrackingStore, Transaction, TransactionPool, TransactionStatus, TxAdapter } from '@tuwaio/pulsar-core';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { toast, ToastContainer, ToastContainerProps, ToastContentProps, TypeOptions } from 'react-toastify';\n\nimport {\n ToastCloseButton,\n ToastTransaction,\n ToastTransactionCustomization,\n TrackingTxModal,\n TrackingTxModalCustomization,\n TransactionsInfoModal,\n TransactionsInfoModalCustomization,\n} from '../components';\nimport { defaultLabels } from '../i18n/en';\nimport { TuwaLabels } from '../i18n/types';\nimport { LabelsProvider } from './LabelsProvider';\n\n/**\n * Maps a transaction's final status to the corresponding toast type for visual feedback.\n */\nconst STATUS_TO_TOAST_TYPE: Record<string, TypeOptions> = {\n [TransactionStatus.Success]: 'success',\n [TransactionStatus.Failed]: 'error',\n [TransactionStatus.Replaced]: 'info',\n};\n\n/**\n * Defines the props for the NovaProvider component.\n */\nexport type NovaProviderProps<T extends Transaction> = {\n adapter: TxAdapter<T> | TxAdapter<T>[];\n connectedWalletAddress?: string;\n connectedAdapterType?: OrbitAdapter;\n transactionsPool: TransactionPool<T>;\n labels?: Partial<TuwaLabels>;\n features?: {\n toasts?: boolean;\n transactionsModal?: boolean;\n trackingTxModal?: boolean;\n };\n customization?: {\n toast?: ToastTransactionCustomization<T>;\n transactionsInfoModal?: TransactionsInfoModalCustomization<T>;\n trackingTxModal?: TrackingTxModalCustomization<T>;\n };\n} & Pick<ITxTrackingStore<T>, 'closeTxTrackedModal' | 'executeTxAction' | 'initialTx'> &\n Omit<ToastContainerProps, 'containerId'>;\n\n/**\n * The main component for the Nova UI ecosystem. It renders and orchestrates all\n * UI elements like toasts and modals, and provides the i18n context.\n */\nexport function NovaProvider<T extends Transaction>({\n adapter,\n connectedWalletAddress,\n connectedAdapterType,\n transactionsPool,\n initialTx,\n executeTxAction,\n closeTxTrackedModal,\n labels,\n features,\n customization,\n ...toastProps\n}: NovaProviderProps<T>) {\n const [isTransactionsInfoModalOpen, setIsTransactionsInfoModalOpen] = useState(false);\n const prevTransactionsRef = useRef<TransactionPool<T>>(transactionsPool);\n\n const toastContainerId = 'nova-transactions';\n\n const isMobile = useMediaQuery('(max-width: 767px)');\n\n const enabledFeatures = useMemo(\n () => ({\n toasts: features?.toasts ?? true,\n transactionsModal: features?.transactionsModal ?? true,\n trackingTxModal: features?.trackingTxModal ?? true,\n }),\n [features],\n );\n\n const mergedLabels = useMemo(() => deepMerge(defaultLabels, labels || {}), [labels]);\n\n // Memoized function to show or update a toast.\n const showOrUpdateToast = useCallback(\n (tx: T) => {\n if (!enabledFeatures.toasts) return;\n\n const type = tx.pending ? 'info' : (STATUS_TO_TOAST_TYPE[tx.status!] ?? 'info');\n\n const content = (props: ToastContentProps) => (\n <ToastTransaction\n {...props}\n tx={tx}\n openTxInfoModal={enabledFeatures.transactionsModal ? () => setIsTransactionsInfoModalOpen(true) : undefined}\n customization={customization?.toast}\n adapter={adapter}\n connectedWalletAddress={connectedWalletAddress}\n />\n );\n\n if (toast.isActive(tx.txKey)) {\n toast.update(tx.txKey, { render: content, type, containerId: toastContainerId });\n } else {\n toast(content, { toastId: tx.txKey, type, closeOnClick: false, containerId: toastContainerId });\n }\n },\n [transactionsPool, enabledFeatures, customization?.toast, adapter, connectedWalletAddress],\n );\n\n // Effect 1: Handles toasts for NEW or CHANGED transactions.\n useEffect(() => {\n const prevPool = prevTransactionsRef.current;\n\n Object.values(transactionsPool).forEach((currentTx) => {\n const prevTx = prevPool[currentTx.txKey];\n\n // Case 1: A new transaction is added and is pending.\n if (!prevTx && currentTx.pending) {\n showOrUpdateToast(currentTx);\n return;\n }\n\n // Case 2: An existing transaction has been updated.\n if (prevTx && JSON.stringify(prevTx) !== JSON.stringify(currentTx)) {\n showOrUpdateToast(currentTx);\n }\n });\n\n prevTransactionsRef.current = transactionsPool;\n }, [transactionsPool, showOrUpdateToast]);\n\n // Effect 2: Handles toast UPDATES when the connected wallet address change.\n useEffect(() => {\n // This ensures that visible toasts re-render to show/hide wallet-specific actions\n // like \"Speed Up\", even for completed transactions.\n Object.values(transactionsPool).forEach((tx) => {\n if (toast.isActive(tx.txKey, toastContainerId)) {\n showOrUpdateToast(tx);\n }\n });\n }, [connectedWalletAddress, showOrUpdateToast, transactionsPool]);\n\n const isTrackingModalOpen =\n !!initialTx?.withTrackedModal && transactionsPool[initialTx?.lastTxKey ?? '']?.isTrackedModalOpen;\n\n const shouldShowToasts =\n enabledFeatures.toasts && (!isMobile || (!isTrackingModalOpen && !isTransactionsInfoModalOpen));\n\n return (\n <LabelsProvider labels={mergedLabels}>\n {shouldShowToasts && (\n <ToastContainer\n position=\"bottom-right\"\n stacked\n autoClose={false}\n hideProgressBar\n closeOnClick={false}\n icon={false}\n closeButton={ToastCloseButton}\n containerId={toastContainerId}\n toastClassName=\"!p-0 !bg-transparent !shadow-none !min-h-0\"\n {...toastProps}\n />\n )}\n\n {enabledFeatures.transactionsModal && (\n <TransactionsInfoModal\n isOpen={isTransactionsInfoModalOpen}\n setIsOpen={setIsTransactionsInfoModalOpen}\n customization={customization?.transactionsInfoModal}\n adapter={adapter}\n connectedWalletAddress={connectedWalletAddress}\n connectedAdapterType={connectedAdapterType}\n transactionsPool={transactionsPool}\n />\n )}\n\n {enabledFeatures.trackingTxModal && (\n <TrackingTxModal\n initialTx={initialTx}\n onClose={closeTxTrackedModal}\n onOpenAllTransactions={() => setIsTransactionsInfoModalOpen(true)}\n transactionsPool={transactionsPool}\n customization={customization?.trackingTxModal}\n executeTxAction={executeTxAction}\n adapter={adapter}\n connectedWalletAddress={connectedWalletAddress}\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/TrackingTxModal.tsx","../../src/components/TrackingTxModal/TxErrorBlock.tsx","../../src/components/TrackingTxModal/TxInfoBlock.tsx","../../src/components/TrackingTxModal/TxProgressIndicator.tsx","../../src/components/TrackingTxModal/TxStatusVisual.tsx","../../src/components/TransactionHistoryItem.tsx","../../src/components/TransactionsHistory.tsx","../../src/components/TransactionsInfoModal.tsx","../../src/providers/NovaProvider.tsx"],"names":["defaultLabels","LabelsContext","createContext","LabelsProvider","labels","children","jsx","useLabels","useContext","HashLink","label","hash","explorerUrl","variant","className","isCopied","copy","useCopyToClipboard","actions","txError","containerClasses","cn","labelClasses","hashContent","textCenterEllipsis","jsxs","ArrowTopRightOnSquareIcon","CheckIcon","DocumentDuplicateIcon","STATUS_CONFIG","TransactionStatus","StatusAwareText","txStatus","source","fallback","applyColor","displayText","colorClass","config","ToastCloseButton","closeToast","XMarkIcon","TransactionKey","tx","adapter","renderHashLink","confirmations","hashLabels","statuses","foundAdapter","selectAdapterByKey","renderHash","props","trackerLabel","trackerKeyElement","TransactionTracker","onChainHashesElement","onChainHash","replacedHash","Fragment","shouldShowTrackerKey","getStatusConfig","ArrowPathIcon","CheckCircleIcon","XCircleIcon","TransactionStatusBadge","statusConfig","useMemo","baseClasses","statusKey","Icon","badgeClasses","iconClasses","DefaultSpeedUpButton","onClick","DefaultCancelButton","DefaultTxInfoButton","ToastTransaction","openTxInfoModal","icon","customization","connectedWalletAddress","toast","canBeReplaced","handleCancel","handleSpeedUp","CStatusAwareText","CTransactionKey","CStatusBadge","SpeedUpButton","CancelButton","TxInfoButton","getChainName","setChainId","Web3Icon","TrackingTxModal","onClose","onOpenAllTransactions","transactionsPool","executeTxAction","initialTx","activeTx","txToDisplay","isOpen","isProcessing","isSucceed","isFailed","isReplaced","isInitializing","isPending","canRetry","canReplace","handleRetry","retryParams","CustomHeader","CustomFooter","CustomStatusVisual","CustomProgressIndicator","CustomInfoBlock","CustomErrorBlock","Dialog","open","DialogContent","DefaultHeaderTitle","DefaultHeader","TxStatusVisual","TxProgressIndicator","TxInfoBlock","TxErrorBlock","DefaultFooter","title","DialogHeader","DialogTitle","DialogClose","CloseIcon","onRetry","onSpeedUp","onCancel","trackingModal","MainActionButton","error","ExclamationTriangleIcon","DefaultInfoRow","value","txInfo","InfoRow","chainId","isSolanaTransaction","OrbitAdapter","solanaTx","dayjs","STEP_STYLE_CONFIG","Step","status","isFirst","styles","renderIcon","StepComponent","steps","getStepStatus","stepIndex","getStepLabel","stepProps","index","STATUS_VISUAL_CONFIG","ExclamationCircleIcon","ClockIcon","relativeTime","DefaultIcon","DefaultTimestamp","timestamp","TransactionHistoryItem","Title","Description","Timestamp","StatusBadge","TxKey","HistoryPlaceholder","message","TransactionsHistory","transactionsModal","sortedTransactions","selectAllTransactionsByActiveWallet","a","b","Placeholder","HistoryItem","renderContent","closeModal","TransactionsInfoModal","setIsOpen","CustomHistory","STATUS_TO_TOAST_TYPE","NovaProvider","connectedAdapterType","closeTxTrackedModal","features","toastProps","isTransactionsInfoModalOpen","setIsTransactionsInfoModalOpen","useState","prevTransactionsRef","useRef","toastContainerId","isMobile","useMediaQuery","enabledFeatures","mergedLabels","deepMerge","showOrUpdateToast","useCallback","type","content","useEffect","prevPool","currentTx","prevTx","isTrackingModalOpen","shouldShowToasts","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 transactionsModal: {\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 openTransactionsInfo: 'Open transactions',\n },\n statuses: {\n pending: 'Pending',\n success: 'Success',\n failed: 'Failed',\n reverted: 'Reverted',\n replaced: 'Replaced',\n unknown: 'Unknown',\n confirmationsLabel: 'Confirmations',\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 recentBlockhash: 'Recent Blockhash',\n solana: 'Signature',\n },\n txInfo: {\n started: 'Started',\n network: 'Network',\n slot: 'Slot',\n },\n txError: {\n title: 'Error',\n copied: 'Copied!',\n },\n trackingModal: {\n title: 'Transaction Overview',\n processing: 'Processing...',\n close: 'Close',\n allTransactions: 'All transactions',\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\n * blockchain hashes with copy-to-clipboard and block 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\nexport type HashLinkProps = {\n /** The full hash string to display and copy (e.g., a transaction hash or wallet address). */\n hash: string;\n /** An optional label to display before the hash (e.g., \"From\", \"Tx Hash\"). */\n label?: string;\n /** An optional URL to a block explorer. If provided, the hash becomes a clickable link. */\n explorerUrl?: string;\n /** The visual style of the component. 'default' is larger, 'compact' is smaller. */\n variant?: 'default' | 'compact';\n /** Additional CSS classes to apply to the container element for custom styling. */\n className?: string;\n};\n\nexport function HashLink({ label, hash, explorerUrl, variant = 'default', className }: HashLinkProps) {\n const { isCopied, copy } = useCopyToClipboard();\n const { actions, txError } = useLabels();\n\n const containerClasses = cn(\n 'novatx:flex novatx:items-center novatx:justify-between',\n {\n 'novatx:text-sm': variant === 'default',\n 'novatx:text-xs': variant === 'compact',\n },\n className,\n );\n\n const labelClasses = cn('novatx:pr-1', {\n 'novatx:font-bold novatx:text-[var(--tuwa-text-primary)]': variant === 'default',\n 'novatx:font-medium novatx:text-[var(--tuwa-text-secondary)]': variant === 'compact',\n });\n\n const hashContent = <span className=\"novatx:font-mono\">{textCenterEllipsis(hash, 5, 5)}</span>;\n\n return (\n <div className={containerClasses}>\n {label && <span className={labelClasses}>{label}:</span>}\n <div className=\"novatx:flex novatx:items-center novatx:gap-x-2\">\n {explorerUrl ? (\n <a\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"novatx:flex novatx:items-center novatx:gap-x-1 novatx:text-[var(--tuwa-text-accent)] novatx:transition-colors novatx:hover:underline\"\n title={actions.viewOnExplorer}\n aria-label={actions.viewOnExplorer}\n >\n {hashContent}\n <ArrowTopRightOnSquareIcon className=\"novatx:h-4 novatx:w-4\" />\n </a>\n ) : (\n <span className=\"novatx:text-[var(--tuwa-text-primary)]\">{hashContent}</span>\n )}\n <button\n type=\"button\"\n onClick={() => copy(hash)}\n className=\"novatx:cursor-pointer novatx:text-[var(--tuwa-text-tertiary)] novatx:transition-colors novatx:hover:text-[var(--tuwa-text-secondary)]\"\n title={isCopied ? txError.copied : actions.copy}\n aria-label={isCopied ? txError.copied : actions.copy}\n >\n {isCopied ? (\n <CheckIcon className=\"novatx:h-4 novatx:w-4 novatx:text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"novatx:h-4 novatx: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 array index and a theme-aware color class.\n * The index corresponds to the position in the `source` array prop: `[pending, success, error, replaced]`.\n */\nconst STATUS_CONFIG = {\n [TransactionStatus.Success]: { index: 1, colorClass: 'novatx:text-[var(--tuwa-success-text)]' },\n [TransactionStatus.Failed]: { index: 2, colorClass: 'novatx:text-[var(--tuwa-error-text)]' },\n [TransactionStatus.Replaced]: { index: 3, colorClass: 'novatx:text-[var(--tuwa-text-secondary)]' },\n default: { index: 0, colorClass: 'novatx:text-[var(--tuwa-text-primary)]' }, // For pending or undefined status\n} as const;\n\nexport type StatusAwareTextProps = {\n /** The current status of the transaction, used to select the correct text and color. */\n txStatus?: TransactionStatus;\n /**\n * The source for the text. Can be a single string for static text, or an array of strings\n * for dynamic text based on status. The array format must be: `[pending, success, error, replaced]`.\n */\n source?: string | readonly string[];\n /** A fallback string to display if `source` is not provided or is invalid. */\n fallback?: string;\n /** The visual variant, which determines the base text style ('title' or 'description'). */\n variant: 'title' | 'description';\n /** If true, applies a status-specific color to the text. Defaults to false. */\n applyColor?: boolean;\n /** Optional additional CSS classes for custom styling. */\n className?: string;\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 object.\n */\nexport function StatusAwareText({\n txStatus,\n source,\n fallback,\n variant,\n className,\n applyColor = false,\n}: StatusAwareTextProps): ReactNode {\n let displayText: string | undefined;\n let colorClass = '';\n\n if (typeof source === 'string') {\n displayText = source;\n } else if (Array.isArray(source)) {\n const statusKey = txStatus || 'default';\n const config = STATUS_CONFIG[statusKey] ?? STATUS_CONFIG.default;\n displayText = source[config.index];\n if (applyColor) {\n colorClass = config.colorClass;\n }\n } else {\n displayText = fallback;\n }\n\n if (!displayText) {\n return null;\n }\n\n const baseClasses =\n variant === 'title'\n ? 'novatx:text-sm novatx:font-semibold novatx:text-[var(--tuwa-text-primary)]'\n : 'novatx:mt-1 novatx:text-xs novatx:text-[var(--tuwa-text-secondary)]';\n\n return <div className={cn(baseClasses, colorClass, className)}>{displayText}</div>;\n}\n","/**\n * @file This file contains a reusable close button component, designed primarily for toast notifications.\n */\n\nimport { XMarkIcon } from '@heroicons/react/24/solid';\nimport { cn } from '@tuwaio/nova-core';\n\nimport { useLabels } from '../providers';\n\n/**\n * Defines the props for the ToastCloseButton component.\n */\nexport type ToastCloseButtonProps = {\n /**\n * The function to call when the button is clicked. This is typically provided by the\n * toast library (e.g., react-toastify) to dismiss the notification.\n */\n closeToast?: (e: React.MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * A simple, styled close button component ('X' icon) intended for use within toast notifications.\n * It uses theme-aware CSS variables for styling and i18n labels for accessibility.\n */\nexport function ToastCloseButton({ closeToast }: ToastCloseButtonProps) {\n const { actions } = useLabels();\n\n return (\n <button\n type=\"button\"\n onClick={closeToast}\n aria-label={actions.close}\n title={actions.close}\n className={cn(\n 'novatx:absolute novatx:top-2 novatx:right-2 novatx:cursor-pointer novatx:rounded-full novatx:p-1',\n 'novatx:text-[var(--tuwa-text-tertiary)] novatx:transition-colors',\n 'novatx:hover:bg-[var(--tuwa-bg-muted)] novatx:hover:text-[var(--tuwa-text-primary)]',\n )}\n >\n <XMarkIcon className=\"novatx:h-5 novatx: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 { selectAdapterByKey } from '@tuwaio/orbit-core';\nimport { Transaction, TransactionTracker } from '@tuwaio/pulsar-core';\nimport { ReactNode } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { HashLink, HashLinkProps } from './HashLink';\n\nexport type TransactionKeyProps<T extends Transaction> = Pick<NovaProviderProps<T>, 'adapter'> & {\n tx: T;\n variant?: 'toast' | 'history';\n className?: string;\n renderHashLink?: (props: HashLinkProps) => ReactNode;\n confirmations?: number;\n};\n\nexport function TransactionKey<T extends Transaction>({\n tx,\n adapter,\n variant = 'toast',\n className,\n renderHashLink,\n confirmations,\n}: TransactionKeyProps<T>) {\n const { hashLabels, statuses } = useLabels();\n\n const foundAdapter = selectAdapterByKey({ adapterKey: tx.adapter, adapter });\n\n if (!foundAdapter) return null;\n\n const renderHash = (props: HashLinkProps) => {\n return renderHashLink ? renderHashLink(props) : <HashLink {...props} />;\n };\n\n const containerClasses =\n variant === 'toast'\n ? 'novatx:mt-2 novatx:flex novatx:w-full novatx:flex-col novatx:gap-y-2 novatx:border-t novatx:border-[var(--tuwa-border-primary)] novatx:pt-2'\n : 'novatx:flex novatx:w-full novatx:flex-col novatx:gap-y-2';\n\n const trackerLabel = (hashLabels as Record<string, string>)[String(tx.tracker)];\n const trackerKeyElement = trackerLabel\n ? renderHash({\n label: trackerLabel,\n hash: tx.txKey,\n variant: tx.tracker !== TransactionTracker.Solana ? 'compact' : 'default',\n explorerUrl:\n foundAdapter.getExplorerTxUrl && tx.tracker === TransactionTracker.Solana\n ? foundAdapter?.getExplorerTxUrl(tx)\n : undefined,\n })\n : null;\n\n const onChainHashesElement = (() => {\n const onChainHash = (tx as any).hash;\n const replacedHash = (tx as any).replacedTxHash;\n\n if (!onChainHash && !replacedHash) return null;\n\n if (replacedHash) {\n return (\n <>\n {onChainHash &&\n renderHash({\n label: hashLabels.original,\n hash: onChainHash,\n variant: 'compact',\n })}\n {typeof foundAdapter.getExplorerTxUrl !== 'undefined' &&\n renderHash({\n label: hashLabels.replaced,\n hash: replacedHash,\n explorerUrl: foundAdapter.getExplorerTxUrl(tx),\n })}\n </>\n );\n }\n\n return (\n onChainHash &&\n typeof foundAdapter.getExplorerTxUrl !== 'undefined' &&\n renderHash({\n label: hashLabels.default,\n hash: onChainHash,\n explorerUrl: foundAdapter.getExplorerTxUrl(tx),\n })\n );\n })();\n\n const shouldShowTrackerKey = trackerLabel && trackerLabel !== hashLabels.default && tx.txKey !== (tx as any).hash;\n\n return (\n <div className={cn(containerClasses, className)}>\n {shouldShowTrackerKey && trackerKeyElement}\n {onChainHashesElement}\n {typeof confirmations === 'number' && (\n <p className=\"novatx:text-xs novatx:text-[var(--tuwa-text-tertiary)]\">\n {statuses.confirmationsLabel}: {confirmations}\n </p>\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 { useMemo } from 'react';\n\nimport { TuwaLabels } from '../i18n/types';\nimport { useLabels } from '../providers';\n\nconst getStatusConfig = (labels: TuwaLabels['statuses']) => ({\n Pending: {\n label: labels.pending,\n Icon: ArrowPathIcon,\n badgeClasses: 'novatx:bg-[var(--tuwa-pending-bg)] novatx:text-[var(--tuwa-pending-text)]',\n iconClasses: 'novatx:animate-spin novatx:text-[var(--tuwa-pending-icon)]',\n },\n [TransactionStatus.Success]: {\n label: labels.success,\n Icon: CheckCircleIcon,\n badgeClasses: 'novatx:bg-[var(--tuwa-success-bg)] novatx:text-[var(--tuwa-success-text)]',\n iconClasses: 'novatx:text-[var(--tuwa-success-icon)]',\n },\n [TransactionStatus.Failed]: {\n label: labels.failed,\n Icon: XCircleIcon,\n badgeClasses: 'novatx:bg-[var(--tuwa-error-bg)] novatx:text-[var(--tuwa-error-text)]',\n iconClasses: 'novatx:text-[var(--tuwa-error-icon)]',\n },\n [TransactionStatus.Replaced]: {\n label: labels.replaced,\n Icon: ArrowPathIcon,\n badgeClasses: 'novatx:bg-[var(--tuwa-info-bg)] novatx:text-[var(--tuwa-info-text)]',\n iconClasses: 'novatx:text-[var(--tuwa-info-icon)]',\n },\n});\n\nexport type TransactionStatusBadgeProps<T extends Transaction> = {\n tx: T;\n className?: string;\n};\n\nexport function TransactionStatusBadge<T extends Transaction>({ tx, className }: TransactionStatusBadgeProps<T>) {\n const { statuses } = useLabels();\n\n const statusConfig = useMemo(() => getStatusConfig(statuses), [statuses]);\n\n const baseClasses =\n 'novatx:inline-flex novatx:items-center novatx:gap-x-1.5 novatx:rounded-full novatx:px-2 novatx:py-1 novatx:text-xs novatx:font-medium';\n\n const statusKey = tx.pending ? 'Pending' : tx.status;\n const config = statusKey ? statusConfig[statusKey as keyof typeof statusConfig] : null;\n\n if (!config) {\n return (\n <div\n className={cn(baseClasses, 'novatx:bg-[var(--tuwa-info-bg)] novatx:text-[var(--tuwa-info-text)]', className)}\n >\n {tx.status ?? 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('novatx:h-4 novatx: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 { selectAdapterByKey, setChainId } from '@tuwaio/orbit-core';\nimport { Transaction } from '@tuwaio/pulsar-core';\nimport { ComponentType, JSX, ReactNode } from 'react';\nimport { ToastContainerProps, ToastContentProps } from 'react-toastify';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { StatusAwareText, StatusAwareTextProps } from './StatusAwareText';\nimport { TransactionKey, TransactionKeyProps } from './TransactionKey';\nimport { TransactionStatusBadge, TransactionStatusBadgeProps } from './TransactionStatusBadge';\n\ntype CustomActionButtonProps = { onClick: () => void; children: ReactNode };\n\nexport type ToastTransactionCustomization<T extends Transaction> = {\n components?: {\n StatusAwareText?: ComponentType<StatusAwareTextProps>;\n TransactionKey?: ComponentType<TransactionKeyProps<T>>;\n StatusBadge?: ComponentType<TransactionStatusBadgeProps<T>>;\n TxInfoButton?: ComponentType<CustomActionButtonProps>;\n SpeedUpButton?: ComponentType<CustomActionButtonProps>;\n CancelButton?: ComponentType<CustomActionButtonProps>;\n };\n};\n\nexport type ToastTransactionProps<T extends Transaction> = {\n tx: T;\n openTxInfoModal?: () => void;\n icon?: ReactNode;\n className?: string;\n customization?: ToastTransactionCustomization<T>;\n closeToast?: ToastContentProps['closeToast'];\n toastProps?: ToastContainerProps;\n} & Pick<NovaProviderProps<T>, 'adapter' | 'connectedWalletAddress'>;\n\nconst DefaultSpeedUpButton = ({ onClick, children }: CustomActionButtonProps) => (\n <button\n onClick={onClick}\n type=\"button\"\n className=\"novatx:cursor-pointer novatx:text-sm novatx:font-medium novatx:text-[var(--tuwa-text-accent)] novatx:transition-opacity novatx:hover:opacity-80\"\n >\n {children}\n </button>\n);\n\nconst DefaultCancelButton = ({ onClick, children }: CustomActionButtonProps) => (\n <button\n onClick={onClick}\n type=\"button\"\n className=\"novatx:cursor-pointer novatx:text-sm novatx:font-medium novatx:text-[var(--tuwa-text-secondary)] novatx:transition-opacity novatx:hover:opacity-80\"\n >\n {children}\n </button>\n);\n\nconst DefaultTxInfoButton = ({ onClick, children }: CustomActionButtonProps) => (\n <button\n className=\"novatx:cursor-pointer novatx:rounded-md novatx:bg-gradient-to-r novatx:from-[var(--tuwa-button-gradient-from)] novatx:to-[var(--tuwa-button-gradient-to)] novatx:px-3 novatx:py-1 novatx:text-xs novatx:font-bold novatx:text-[var(--tuwa-text-on-accent)] novatx:shadow-lg novatx:transition-all novatx:duration-200 novatx:ease-in-out novatx:hover:shadow-xl novatx:hover:from-[var(--tuwa-button-gradient-from-hover)] novatx:hover:to-[var(--tuwa-button-gradient-to-hover)] novatx:active:scale-95\"\n onClick={onClick}\n type=\"button\"\n >\n {children}\n </button>\n);\n\nexport function ToastTransaction<T extends Transaction>({\n openTxInfoModal,\n tx,\n icon,\n className,\n customization,\n connectedWalletAddress,\n adapter,\n}: ToastTransactionProps<T>): JSX.Element {\n const { actions, toast } = useLabels();\n\n const foundAdapter = selectAdapterByKey({ adapterKey: tx.adapter, adapter });\n\n const canBeReplaced = !!(\n tx.tracker === 'ethereum' &&\n tx.pending &&\n foundAdapter?.speedUpTxAction &&\n foundAdapter?.cancelTxAction &&\n tx.from.toLowerCase() === connectedWalletAddress?.toLowerCase()\n );\n\n const handleCancel = () => {\n if (canBeReplaced) foundAdapter.cancelTxAction!(tx);\n };\n\n const handleSpeedUp = () => {\n if (canBeReplaced) foundAdapter.speedUpTxAction!(tx);\n };\n\n const {\n StatusAwareText: CStatusAwareText = StatusAwareText,\n TransactionKey: CTransactionKey = TransactionKey,\n StatusBadge: CStatusBadge = TransactionStatusBadge,\n SpeedUpButton = DefaultSpeedUpButton,\n CancelButton = DefaultCancelButton,\n TxInfoButton = DefaultTxInfoButton,\n } = customization?.components ?? {};\n\n return (\n <div\n className={cn(\n 'novatx:flex novatx:w-full novatx:flex-col novatx:gap-3 novatx:rounded-lg novatx:bg-[var(--tuwa-bg-primary)] novatx:p-4 novatx:shadow-md',\n className,\n )}\n >\n <div className=\"novatx:flex novatx:items-center novatx:gap-3\">\n <div\n className=\"novatx:w-[40px] novatx:flex-shrink-0 [&>img]:novatx:w-full [&>img]:novatx:h-auto\"\n title={getChainName(setChainId(tx.chainId))}\n >\n {icon ?? <Web3Icon chainId={setChainId(tx.chainId)} />}\n </div>\n <div className=\"novatx:flex-1\">\n <CStatusAwareText txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n <CStatusAwareText txStatus={tx.status} source={tx.description} variant=\"description\" />\n </div>\n </div>\n\n <div>\n <CTransactionKey adapter={adapter} tx={tx} variant=\"toast\" />\n <div className=\"novatx:mt-3 novatx:flex novatx:items-center novatx:justify-between\">\n <CStatusBadge tx={tx} />\n\n {canBeReplaced ? (\n <div className=\"novatx:flex novatx:items-center novatx:gap-4\">\n <SpeedUpButton onClick={handleSpeedUp}>{actions.speedUp}</SpeedUpButton>\n <CancelButton onClick={handleCancel}>{actions.cancel}</CancelButton>\n </div>\n ) : (\n openTxInfoModal &&\n !!connectedWalletAddress && (\n <TxInfoButton onClick={openTxInfoModal}>{toast.openTransactionsInfo}</TxInfoButton>\n )\n )}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TrackingTxModal`, the main UI for displaying the detailed lifecycle of a single transaction.\n */\nimport { CloseIcon, cn, Dialog, DialogClose, DialogContent, DialogHeader, DialogTitle } from '@tuwaio/nova-core';\nimport { selectAdapterByKey } from '@tuwaio/orbit-core';\nimport { InitialTransaction, InitialTransactionParams, Transaction, TransactionStatus } from '@tuwaio/pulsar-core';\nimport { MotionProps } from 'framer-motion';\nimport { ComponentPropsWithoutRef, ComponentType, ReactNode, useMemo } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../../providers';\nimport {\n TxErrorBlock,\n TxErrorBlockProps,\n TxInfoBlock,\n TxInfoBlockProps,\n TxProgressIndicator,\n TxProgressIndicatorProps,\n TxStatusVisual,\n TxStatusVisualProps,\n} from '../';\nimport { StatusAwareText } from '../StatusAwareText';\n\n// --- Prop Types for Customization ---\ntype CustomHeaderProps = { onClose: () => void; title: ReactNode };\ntype CustomFooterProps = {\n onClose: () => void;\n onOpenAllTransactions: () => void;\n onRetry?: () => void;\n onSpeedUp?: () => void;\n onCancel?: () => void;\n isProcessing?: boolean;\n isFailed?: boolean;\n canReplace?: boolean;\n connectedWalletAddress?: string;\n};\n\nexport type TrackingTxModalCustomization<T extends Transaction> = {\n modalProps?: Partial<ComponentPropsWithoutRef<typeof DialogContent>>;\n motionProps?: MotionProps;\n components?: {\n Header?: ComponentType<CustomHeaderProps>;\n Footer?: ComponentType<CustomFooterProps>;\n StatusVisual?: ComponentType<TxStatusVisualProps>;\n ProgressIndicator?: ComponentType<TxProgressIndicatorProps>;\n InfoBlock?: ComponentType<TxInfoBlockProps<T>>;\n ErrorBlock?: ComponentType<TxErrorBlockProps>;\n };\n};\n\nexport type TrackingTxModalProps<T extends Transaction> = Pick<\n NovaProviderProps<T>,\n 'executeTxAction' | 'initialTx' | 'transactionsPool' | 'adapter' | 'connectedWalletAddress'\n> & {\n onClose: (txKey?: string) => void;\n onOpenAllTransactions: () => void;\n className?: string;\n customization?: TrackingTxModalCustomization<T>;\n};\n\nexport function TrackingTxModal<T extends Transaction>({\n adapter,\n onClose,\n onOpenAllTransactions,\n className,\n customization,\n transactionsPool,\n executeTxAction,\n initialTx,\n connectedWalletAddress,\n}: TrackingTxModalProps<T>) {\n const activeTx = useMemo(\n () => (initialTx?.lastTxKey ? transactionsPool[initialTx.lastTxKey] : undefined),\n [transactionsPool, initialTx],\n );\n\n const txToDisplay = activeTx ?? initialTx;\n const isOpen = (initialTx?.withTrackedModal && !activeTx) || (activeTx?.isTrackedModalOpen ?? false);\n\n const { isProcessing, isSucceed, isFailed, isReplaced } = useMemo(() => {\n const txStatus = activeTx?.status;\n const isInitializing = initialTx?.isInitializing ?? false;\n const isPending = activeTx?.pending ?? false;\n return {\n isProcessing: isInitializing || isPending,\n isSucceed: txStatus === TransactionStatus.Success,\n isFailed: activeTx?.isError || !!initialTx?.errorMessage,\n isReplaced: txStatus === TransactionStatus.Replaced,\n };\n }, [activeTx, initialTx]);\n\n const foundAdapter = useMemo(\n () => (txToDisplay ? selectAdapterByKey({ adapterKey: txToDisplay.adapter, adapter }) : undefined),\n [txToDisplay, adapter],\n );\n\n const canRetry = !!(isFailed && txToDisplay && initialTx?.actionFunction && executeTxAction);\n const canReplace = !!(\n foundAdapter?.speedUpTxAction &&\n foundAdapter?.cancelTxAction &&\n activeTx?.pending &&\n activeTx.tracker === 'ethereum'\n );\n\n const handleRetry = () => {\n if (!canRetry || !foundAdapter?.retryTxAction) return;\n\n const retryParams: InitialTransactionParams = {\n adapter: txToDisplay.adapter,\n type: txToDisplay.type,\n desiredChainID: 'desiredChainID' in txToDisplay ? txToDisplay.desiredChainID : txToDisplay.chainId,\n actionFunction: initialTx?.actionFunction,\n title: txToDisplay.title,\n description: txToDisplay.description,\n payload: txToDisplay.payload,\n rpcUrl:\n 'rpcUrl' in txToDisplay\n ? txToDisplay?.rpcUrl\n : 'desiredChainID' in txToDisplay\n ? (txToDisplay.desiredChainID as string)\n : (txToDisplay.chainId as string).split(':')[1],\n withTrackedModal: 'withTrackedModal' in txToDisplay ? txToDisplay.withTrackedModal : false,\n };\n foundAdapter.retryTxAction({ tx: retryParams, txKey: activeTx?.txKey ?? '', onClose, executeTxAction });\n };\n\n const handleCancel = () => {\n if (canReplace && activeTx) foundAdapter.cancelTxAction!(activeTx);\n };\n\n const handleSpeedUp = () => {\n if (canReplace && activeTx) foundAdapter.speedUpTxAction!(activeTx);\n };\n\n const CustomHeader = customization?.components?.Header;\n const CustomFooter = customization?.components?.Footer;\n const CustomStatusVisual = customization?.components?.StatusVisual;\n const CustomProgressIndicator = customization?.components?.ProgressIndicator;\n const CustomInfoBlock = customization?.components?.InfoBlock;\n const CustomErrorBlock = customization?.components?.ErrorBlock;\n\n if (!txToDisplay) return null;\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose(activeTx?.txKey)}>\n <DialogContent\n className={cn('novatx:w-full novatx:sm:max-w-md', customization?.modalProps?.className)}\n {...customization?.modalProps}\n >\n <div className={cn('novatx:relative novatx:flex novatx:w-full novatx:flex-col', className)}>\n {CustomHeader ? (\n <CustomHeader onClose={() => onClose(activeTx?.txKey)} title={<DefaultHeaderTitle tx={txToDisplay} />} />\n ) : (\n <DefaultHeader onClose={() => onClose(activeTx?.txKey)} title={<DefaultHeaderTitle tx={txToDisplay} />} />\n )}\n\n <main className=\"novatx:flex novatx:flex-col novatx:gap-4 novatx:p-4\">\n {CustomStatusVisual ? (\n <CustomStatusVisual\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n ) : (\n <TxStatusVisual\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n )}\n {CustomProgressIndicator ? (\n <CustomProgressIndicator\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n ) : (\n <TxProgressIndicator\n isProcessing={isProcessing}\n isSucceed={isSucceed}\n isFailed={isFailed}\n isReplaced={isReplaced}\n />\n )}\n {CustomInfoBlock ? (\n <CustomInfoBlock tx={txToDisplay} adapter={adapter} />\n ) : (\n <TxInfoBlock tx={txToDisplay} adapter={adapter} />\n )}\n {CustomErrorBlock ? (\n <CustomErrorBlock error={activeTx?.errorMessage || initialTx?.errorMessage} />\n ) : (\n <TxErrorBlock error={activeTx?.errorMessage || initialTx?.errorMessage} />\n )}\n </main>\n\n {CustomFooter ? (\n <CustomFooter\n onClose={() => onClose(activeTx?.txKey)}\n onOpenAllTransactions={onOpenAllTransactions}\n isProcessing={isProcessing}\n isFailed={isFailed}\n canReplace={canReplace}\n onRetry={canRetry ? handleRetry : undefined}\n onSpeedUp={canReplace ? handleSpeedUp : undefined}\n onCancel={canReplace ? handleCancel : undefined}\n connectedWalletAddress={connectedWalletAddress}\n />\n ) : (\n <DefaultFooter\n onClose={() => onClose(activeTx?.txKey)}\n onOpenAllTransactions={onOpenAllTransactions}\n isProcessing={isProcessing}\n isFailed={isFailed}\n canReplace={canReplace}\n onRetry={canRetry ? handleRetry : undefined}\n onSpeedUp={canReplace ? handleSpeedUp : undefined}\n onCancel={canReplace ? handleCancel : undefined}\n connectedWalletAddress={connectedWalletAddress}\n />\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction DefaultHeaderTitle({ tx }: { tx: Transaction | InitialTransaction }) {\n return (\n <StatusAwareText\n txStatus={'status' in tx ? tx.status : undefined}\n source={tx.title}\n fallback={tx.type}\n variant=\"title\"\n className=\"novatx:text-lg\"\n />\n );\n}\n\nconst DefaultHeader = ({ onClose, title }: CustomHeaderProps) => {\n const { actions } = useLabels();\n return (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogClose asChild>\n <button\n type=\"button\"\n onClick={() => onClose()}\n aria-label={actions.close}\n className=\"novatx:cursor-pointer novatx:rounded-full novatx:p-1\n novatx:text-[var(--tuwa-text-tertiary)] novatx:transition-colors\n novatx:hover:bg-[var(--tuwa-bg-muted)] novatx:hover:text-[var(--tuwa-text-primary)]\"\n >\n <CloseIcon />\n </button>\n </DialogClose>\n </DialogHeader>\n );\n};\n\nconst DefaultFooter = ({\n onClose,\n onOpenAllTransactions,\n isProcessing,\n onRetry,\n onSpeedUp,\n onCancel,\n canReplace,\n isFailed,\n connectedWalletAddress,\n}: CustomFooterProps) => {\n const { trackingModal, actions } = useLabels();\n\n const MainActionButton = () => {\n if (isFailed && onRetry) {\n return (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"novatx:cursor-pointer novatx:rounded-t-md novatx:sm:rounded-md\n novatx:bg-gradient-to-r novatx:from-[var(--tuwa-button-gradient-from)] novatx:to-[var(--tuwa-button-gradient-to)]\n novatx:px-4 novatx:py-2 novatx:text-sm novatx:font-semibold novatx:text-[var(--tuwa-text-on-accent)] novatx:transition-opacity\n novatx:hover:from-[var(--tuwa-button-gradient-from-hover)] novatx:hover:to-[var(--tuwa-button-gradient-to-hover)]\"\n >\n {trackingModal.retry}\n </button>\n );\n }\n if (!isProcessing && !canReplace && !!connectedWalletAddress) {\n return (\n <button\n type=\"button\"\n onClick={onOpenAllTransactions}\n className=\"novatx:cursor-pointer novatx:rounded-md\n novatx:bg-[var(--tuwa-bg-muted)] novatx:px-4 novatx:py-2 novatx:text-sm novatx:font-semibold novatx:text-[var(--tuwa-text-primary)]\n novatx:transition-colors novatx:hover:bg-[var(--tuwa-border-primary)]\"\n >\n {trackingModal.allTransactions}\n </button>\n );\n }\n return null;\n };\n\n return (\n <footer\n className=\"novatx:flex novatx:w-full novatx:items-center novatx:justify-between\n novatx:border-t novatx:border-[var(--tuwa-border-primary)] novatx:p-4\"\n >\n <div className=\"novatx:flex novatx:items-center novatx:gap-4\">\n {canReplace && onSpeedUp && onCancel && (\n <>\n <button\n type=\"button\"\n onClick={onSpeedUp}\n className=\"novatx:cursor-pointer novatx:text-sm novatx:font-medium\n novatx:text-[var(--tuwa-text-accent)] novatx:transition-opacity novatx:hover:opacity-80\"\n >\n {actions.speedUp}\n </button>\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"novatx:cursor-pointer novatx:text-sm novatx:font-medium\n novatx:text-[var(--tuwa-text-secondary)] novatx:transition-opacity novatx:hover:opacity-80\"\n >\n {actions.cancel}\n </button>\n </>\n )}\n </div>\n <div className=\"novatx:flex novatx:items-center novatx:gap-3\">\n <MainActionButton />\n <button\n type=\"button\"\n onClick={onClose}\n disabled={isProcessing && !canReplace}\n className=\"novatx:cursor-pointer novatx:rounded-md novatx:bg-[var(--tuwa-bg-muted)] novatx:px-4 novatx:py-2 novatx:text-sm novatx:font-semibold\n novatx:text-[var(--tuwa-text-primary)] novatx:transition-colors novatx:hover:bg-[var(--tuwa-border-primary)]\n novatx:disabled:cursor-not-allowed novatx:disabled:opacity-50\"\n >\n {isProcessing && !canReplace ? trackingModal.processing : trackingModal.close}\n </button>\n </div>\n </footer>\n );\n};\n","/**\n * @file This file contains the `TxErrorBlock` component for displaying transaction error messages.\n */\n\nimport { CheckIcon, DocumentDuplicateIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid';\nimport { cn, useCopyToClipboard } from '@tuwaio/nova-core';\n\nimport { useLabels } from '../../providers';\n\nexport type TxErrorBlockProps = {\n /** The error message string to display. If undefined or empty, 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 */\nexport function TxErrorBlock({ error, className }: TxErrorBlockProps) {\n const { isCopied, copy } = useCopyToClipboard();\n const { actions, txError } = 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 'novatx:rounded-lg novatx:border novatx:border-[var(--tuwa-error-icon)]/30 novatx:bg-[var(--tuwa-error-bg)] novatx:p-3 novatx:text-sm',\n className,\n )}\n >\n {/* --- Header with Title and Copy Button --- */}\n <div className=\"novatx:mb-2 novatx:flex novatx:items-center novatx:justify-between\">\n <div className=\"novatx:flex novatx:items-center novatx:gap-2 novatx:font-bold novatx:text-[var(--tuwa-error-icon)]\">\n <ExclamationTriangleIcon className=\"novatx:h-5 novatx:w-5\" />\n <span>{txError.title}</span>\n </div>\n <button\n type=\"button\"\n onClick={() => copy(error)}\n title={isCopied ? txError.copied : actions.copy}\n aria-label={isCopied ? txError.copied : `${actions.copy} error message`}\n className=\"novatx:cursor-pointer novatx:text-[var(--tuwa-error-icon)]/50 novatx:transition-colors novatx:hover:text-[var(--tuwa-error-icon)]\"\n >\n {isCopied ? (\n <CheckIcon className=\"novatx:h-5 novatx:w-5 novatx:text-[var(--tuwa-success-icon)]\" />\n ) : (\n <DocumentDuplicateIcon className=\"novatx:h-5 novatx:w-5\" />\n )}\n </button>\n </div>\n\n {/* --- Scrollable Error Message --- */}\n <div className=\"novatx:max-h-24 novatx:overflow-y-auto novatx:rounded novatx:bg-[var(--tuwa-bg-primary)] novatx:p-2\">\n <p className=\"novatx:font-mono novatx:text-xs novatx:text-[var(--tuwa-error-text)] novatx:break-all\">{error}</p>\n </div>\n </div>\n );\n}\n","/**\n * @file This file contains the `TxInfoBlock` component, which displays key details about a transaction.\n * It also supports Solana-specific functionality to display slot, confirmations, and recentBlockhash details.\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 { OrbitAdapter, selectAdapterByKey, setChainId } from '@tuwaio/orbit-core';\nimport { InitialTransaction, SolanaTransaction, Transaction } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport { ComponentType, ReactNode } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../../providers';\nimport { HashLink } from '../HashLink';\nimport { TransactionKey, TransactionKeyProps } from '../TransactionKey';\n\n// --- Types for Customization & Props ---\ntype CustomInfoRowProps = { label: ReactNode; value: ReactNode };\n\nexport type TxInfoBlockCustomization<T extends Transaction> = {\n components?: {\n InfoRow?: ComponentType<CustomInfoRowProps>;\n transactionKey?: TransactionKeyProps<T>['renderHashLink'];\n };\n};\n\nexport type TxInfoBlockProps<T extends Transaction> = {\n /** The transaction object to display, which can be a full transaction or an initial one. */\n tx: T | InitialTransaction;\n className?: string;\n customization?: TxInfoBlockCustomization<T>;\n} & Pick<NovaProviderProps<T>, 'adapter'>;\n\n// --- Default Sub-Component ---\nfunction DefaultInfoRow({ label, value }: CustomInfoRowProps) {\n return (\n <div className=\"novatx:flex novatx:items-center novatx:justify-between novatx:text-sm\">\n <span className=\"novatx:text-[var(--tuwa-text-secondary)]\">{label}</span>\n <span className=\"novatx:font-medium novatx:text-[var(--tuwa-text-primary)]\">{value}</span>\n </div>\n );\n}\n\n/**\n * A component that displays a block of essential transaction details,\n * such as network, timestamps, Solana-specific details, and relevant hashes/keys.\n */\nexport function TxInfoBlock<T extends Transaction>({ tx, adapter, className, customization }: TxInfoBlockProps<T>) {\n const { txInfo, statuses, hashLabels } = useLabels();\n\n const foundAdapter = selectAdapterByKey({ adapterKey: tx.adapter, adapter });\n\n if (!foundAdapter) return null;\n\n const { InfoRow = DefaultInfoRow } = customization?.components ?? {};\n const chainId = 'chainId' in tx ? tx.chainId : tx.desiredChainID;\n const isSolanaTransaction = tx.adapter === OrbitAdapter.SOLANA;\n const solanaTx = isSolanaTransaction ? (tx as SolanaTransaction) : undefined;\n\n return (\n <div\n className={cn(\n 'novatx:flex novatx:flex-col novatx:gap-3 novatx:rounded-lg novatx:border novatx:border-[var(--tuwa-border-primary)] novatx:bg-[var(--tuwa-bg-primary)] novatx:p-3',\n className,\n )}\n >\n <InfoRow\n label={txInfo.network}\n value={\n <div className=\"novatx:flex novatx:items-center novatx:justify-end novatx:gap-2\">\n <div className=\"novatx:h-4 novatx:w-4\">\n <Web3Icon chainId={setChainId(chainId)} />\n </div>\n <span>{getChainName(setChainId(chainId))}</span>\n </div>\n }\n />\n {tx.localTimestamp && (\n <InfoRow label={txInfo.started} value={dayjs.unix(tx.localTimestamp).format('MMM D, HH:mm:ss')} />\n )}\n\n {isSolanaTransaction && (\n <>\n {solanaTx?.slot && (\n <InfoRow\n label={txInfo.slot}\n value={\n <HashLink\n hash={solanaTx.slot.toString()}\n explorerUrl={\n foundAdapter?.getExplorerUrl\n ? `${foundAdapter?.getExplorerUrl(`/block/${solanaTx.slot}`)}`\n : undefined\n }\n />\n }\n />\n )}\n {(typeof solanaTx?.confirmations === 'number' || typeof solanaTx?.confirmations === 'string') && (\n <InfoRow label={statuses.confirmationsLabel} value={solanaTx.confirmations} />\n )}\n {solanaTx?.recentBlockhash && (\n <InfoRow label={hashLabels.recentBlockhash} value={<HashLink hash={solanaTx.recentBlockhash} />} />\n )}\n </>\n )}\n\n {'txKey' in tx && tx.txKey && (\n <div className=\"novatx:border-t novatx:border-[var(--tuwa-border-primary)] novatx:pt-3\">\n <TransactionKey\n tx={tx as T}\n adapter={adapter}\n variant=\"history\"\n renderHashLink={customization?.components?.transactionKey}\n />\n </div>\n )}\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, useMemo } from 'react';\n\nimport { useLabels } from '../../providers';\n\nexport type StepStatus = 'active' | 'completed' | 'error' | 'inactive' | 'replaced';\nexport type StepProps = { status: StepStatus; label: string; isFirst?: boolean; isLast?: boolean };\n\nconst STEP_STYLE_CONFIG: Record<StepStatus, { line: string; border: string; fill: string; pulse?: string }> = {\n completed: {\n line: 'novatx:bg-[var(--tuwa-success-icon)]',\n border: 'novatx:border-[var(--tuwa-success-icon)]',\n fill: 'novatx:bg-[var(--tuwa-success-icon)]',\n },\n error: {\n line: 'novatx:bg-[var(--tuwa-error-icon)]',\n border: 'novatx:border-[var(--tuwa-error-icon)]',\n fill: 'novatx:bg-[var(--tuwa-error-icon)]',\n },\n replaced: {\n line: 'novatx:bg-[var(--tuwa-info-icon)]',\n border: 'novatx:border-[var(--tuwa-info-icon)]',\n fill: 'novatx:bg-[var(--tuwa-info-icon)]',\n },\n active: {\n line: 'novatx:bg-[var(--tuwa-pending-icon)]',\n border: 'novatx:border-[var(--tuwa-pending-icon)]',\n fill: 'novatx:bg-transparent',\n pulse: 'novatx:bg-[var(--tuwa-pending-icon)]',\n },\n inactive: {\n line: 'novatx:bg-[var(--tuwa-border-primary)]',\n border: 'novatx:border-[var(--tuwa-border-primary)]',\n fill: 'novatx:bg-transparent',\n },\n};\n\nfunction Step({ status, label, isFirst = false }: StepProps) {\n const styles = STEP_STYLE_CONFIG[status];\n\n const renderIcon = () => {\n switch (status) {\n case 'completed':\n return <CheckIcon className=\"novatx:h-3 novatx:w-3 novatx:text-white\" />;\n case 'error':\n return <ExclamationTriangleIcon className=\"novatx:h-3 novatx:w-3 novatx:text-white\" />;\n case 'replaced':\n return <ArrowPathIcon className=\"novatx:h-3 novatx:w-3 novatx:text-white\" />;\n case 'active':\n return <div className={cn('novatx:h-2 novatx:w-2 novatx:animate-pulse novatx:rounded-full', styles.pulse)} />;\n default:\n return null;\n }\n };\n\n return (\n <div className=\"novatx:relative novatx:flex novatx:min-w-[80px] novatx:flex-1 novatx:flex-col novatx:items-center\">\n {!isFirst && (\n <div\n className={cn('novatx:absolute novatx:right-1/2 novatx:top-[10px] novatx:h-0.5 novatx:w-full', styles.line)}\n />\n )}\n\n <div\n className={cn(\n 'novatx:relative novatx:z-10 novatx:flex novatx:h-5 novatx:w-5 novatx:items-center novatx:justify-center novatx:rounded-full novatx:border-2',\n styles.border,\n styles.fill,\n )}\n >\n {renderIcon()}\n </div>\n\n <span\n className={cn(\n 'novatx:mt-2 novatx:text-center novatx:text-xs',\n status !== 'inactive'\n ? 'novatx:font-semibold novatx:text-[var(--tuwa-text-primary)]'\n : 'novatx:text-[var(--tuwa-text-secondary)]',\n )}\n >\n {label}\n </span>\n </div>\n );\n}\n\nexport interface TxProgressIndicatorProps {\n isProcessing?: boolean;\n isSucceed?: boolean;\n isFailed?: boolean;\n isReplaced?: boolean;\n className?: string;\n StepComponent?: ComponentType<StepProps>;\n}\n\nexport function TxProgressIndicator({\n isProcessing,\n isSucceed,\n isFailed,\n isReplaced,\n className,\n StepComponent = Step,\n}: TxProgressIndicatorProps) {\n const { trackingModal, statuses } = useLabels();\n\n const steps = useMemo((): StepProps[] => {\n const getStepStatus = (stepIndex: 1 | 2 | 3): StepStatus => {\n if (stepIndex === 1) return 'completed';\n if (stepIndex === 2) {\n if (isSucceed || isFailed || isReplaced) return 'completed';\n if (isProcessing) return 'active';\n }\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 return 'inactive';\n };\n\n const getStepLabel = (stepIndex: 1 | 2 | 3): string => {\n if (stepIndex === 1) return trackingModal.progressIndicator.created;\n if (stepIndex === 2) return trackingModal.progressIndicator.processing;\n if (isFailed) return statuses.failed;\n if (isReplaced) return statuses.replaced;\n return trackingModal.progressIndicator.succeed;\n };\n\n return [\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 }, [isProcessing, isSucceed, isFailed, isReplaced, trackingModal, statuses]);\n\n return (\n <div className={cn('novatx:flex novatx:w-full novatx:items-start novatx:px-4 novatx:pt-2 novatx: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 { cn } from '@tuwaio/nova-core';\nimport { ComponentType } 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\nconst STATUS_VISUAL_CONFIG: Record<\n 'succeed' | 'failed' | 'replaced' | 'processing' | 'initializing',\n { Icon: ComponentType<{ className?: string }>; className: string }\n> = {\n succeed: {\n Icon: CheckCircleIcon,\n className: 'novatx:text-[var(--tuwa-success-icon)]',\n },\n failed: {\n Icon: ExclamationCircleIcon,\n className: 'novatx:text-[var(--tuwa-error-icon)]',\n },\n replaced: {\n Icon: ArrowPathIcon,\n className: 'novatx:text-[var(--tuwa-info-icon)]',\n },\n processing: {\n Icon: ArrowPathIcon,\n className: 'novatx:animate-spin novatx:text-[var(--tuwa-text-accent)]',\n },\n initializing: {\n Icon: ClockIcon,\n className: 'novatx:animate-pulse novatx:text-[var(--tuwa-pending-icon)]',\n },\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 */\nexport function TxStatusVisual({ isProcessing, isSucceed, isFailed, isReplaced }: TxStatusVisualProps) {\n const statusKey =\n (isSucceed && 'succeed') ||\n (isFailed && 'failed') ||\n (isReplaced && 'replaced') ||\n (isProcessing && 'processing') ||\n 'initializing';\n\n const { Icon, className } = STATUS_VISUAL_CONFIG[statusKey];\n\n return (\n <div className=\"novatx:flex novatx:justify-center novatx:py-4\">\n <Icon className={cn('novatx:h-16 novatx:w-16', className)} />\n </div>\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 { setChainId } from '@tuwaio/orbit-core';\nimport { Transaction } from '@tuwaio/pulsar-core';\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { ComponentType, JSX } from 'react';\n\nimport { NovaProviderProps } from '../providers';\nimport { StatusAwareText, StatusAwareTextProps } from './StatusAwareText';\nimport { TransactionKey, TransactionKeyProps } from './TransactionKey';\nimport { TransactionStatusBadge, TransactionStatusBadgeProps } from './TransactionStatusBadge';\n\ndayjs.extend(relativeTime);\n\ntype CustomIconProps = { chainId: number | string };\ntype CustomTimestampProps = { timestamp?: number };\n\nexport type TransactionHistoryItemCustomization<T extends Transaction> = {\n components?: {\n Icon?: ComponentType<CustomIconProps>;\n Title?: ComponentType<StatusAwareTextProps>;\n Description?: ComponentType<StatusAwareTextProps>;\n Timestamp?: ComponentType<CustomTimestampProps>;\n StatusBadge?: ComponentType<TransactionStatusBadgeProps<T>>;\n TransactionKey?: ComponentType<TransactionKeyProps<T>>;\n };\n};\n\nexport type TransactionHistoryItemProps<T extends Transaction> = {\n /** The transaction object to display. */\n tx: T;\n /** An object to customize and override the default internal components. */\n customization?: TransactionHistoryItemCustomization<T>;\n /** Optional additional CSS classes for the container. */\n className?: string;\n} & Pick<NovaProviderProps<T>, 'adapter'>;\n\nconst DefaultIcon = ({ chainId }: CustomIconProps) => (\n <div className=\"novatx:h-8 novatx:w-8 novatx:text-[var(--tuwa-text-secondary)]\">\n <Web3Icon chainId={setChainId(chainId)} />\n </div>\n);\n\nconst DefaultTimestamp = ({ timestamp }: CustomTimestampProps) => (\n <span className=\"novatx:mb-1 novatx:block novatx:text-xs novatx:text-[var(--tuwa-text-secondary)]\">\n {timestamp ? dayjs.unix(timestamp).fromNow() : '...'}\n </span>\n);\n\nexport function TransactionHistoryItem<T extends Transaction>({\n tx,\n adapter,\n className,\n customization,\n}: TransactionHistoryItemProps<T>): JSX.Element {\n const {\n Icon = DefaultIcon,\n Title = StatusAwareText,\n Description = StatusAwareText,\n Timestamp = DefaultTimestamp,\n StatusBadge = TransactionStatusBadge,\n TransactionKey: TxKey = TransactionKey,\n } = customization?.components ?? {};\n\n return (\n <div\n className={cn(\n 'novatx:flex novatx:flex-col novatx:gap-2 novatx:border-b novatx:border-[var(--tuwa-border-secondary)] novatx:p-3 novatx:transition-colors novatx:hover:bg-[var(--tuwa-bg-secondary)]',\n className,\n )}\n >\n <div className=\"novatx:flex novatx:items-start novatx:justify-between\">\n <div className=\"novatx:flex novatx:items-center novatx:gap-4\">\n <div className=\"novatx:flex novatx:h-10 novatx:w-10 novatx:flex-shrink-0 novatx:items-center novatx:justify-center novatx:rounded-full novatx:bg-[var(--tuwa-bg-muted)]\">\n <Icon chainId={tx.chainId} />\n </div>\n <div>\n <Title txStatus={tx.status} source={tx.title} fallback={tx.type} variant=\"title\" applyColor />\n <Timestamp timestamp={tx.localTimestamp} />\n <Description txStatus={tx.status} source={tx.description} variant=\"description\" />\n </div>\n </div>\n\n <StatusBadge tx={tx} />\n </div>\n\n <TxKey tx={tx} adapter={adapter} variant=\"history\" />\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, useMemo } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { TransactionHistoryItem, TransactionHistoryItemProps } from './TransactionHistoryItem';\n\ntype CustomPlaceholderProps = { title: string; message: string };\n\nexport type TransactionsHistoryCustomization<T extends Transaction> = {\n title?: string;\n classNames?: {\n listWrapper?: string;\n };\n components?: {\n Placeholder?: ComponentType<CustomPlaceholderProps>;\n HistoryItem?: ComponentType<TransactionHistoryItemProps<T>>;\n };\n};\n\nexport type TransactionsHistoryProps<T extends Transaction> = Pick<\n NovaProviderProps<T>,\n 'adapter' | 'transactionsPool' | 'connectedWalletAddress'\n> & {\n className?: string;\n customization?: TransactionsHistoryCustomization<T>;\n};\n\nfunction HistoryPlaceholder({ title, message, className }: CustomPlaceholderProps & { className?: string }) {\n return (\n <div className={cn('novatx:rounded-lg novatx:bg-[var(--tuwa-bg-muted)] novatx:p-8 novatx:text-center', className)}>\n <h4 className=\"novatx:font-semibold novatx:text-[var(--tuwa-text-primary)]\">{title}</h4>\n <p className=\"novatx:mt-1 novatx:text-sm novatx:text-[var(--tuwa-text-secondary)]\">{message}</p>\n </div>\n );\n}\n\nexport function TransactionsHistory<T extends Transaction>({\n adapter,\n connectedWalletAddress,\n transactionsPool,\n className,\n customization,\n}: TransactionsHistoryProps<T>) {\n const { transactionsModal } = useLabels();\n\n const sortedTransactions = useMemo(() => {\n if (!connectedWalletAddress) return [];\n const transactions = selectAllTransactionsByActiveWallet(transactionsPool, connectedWalletAddress);\n return transactions.sort((a, b) => (b.localTimestamp ?? 0) - (a.localTimestamp ?? 0));\n }, [transactionsPool, connectedWalletAddress]);\n\n const { Placeholder = HistoryPlaceholder, HistoryItem = TransactionHistoryItem } = customization?.components ?? {};\n\n const renderContent = () => {\n if (!connectedWalletAddress) {\n return (\n <Placeholder\n title={transactionsModal.history.connectWalletTitle}\n message={transactionsModal.history.connectWalletMessage}\n />\n );\n }\n\n if (sortedTransactions.length > 0) {\n return (\n <div\n className={cn(\n 'NovaCustomScroll novatx:max-h-[400px] novatx:overflow-y-auto novatx:rounded-lg novatx:border novatx:border-[var(--tuwa-border-primary)] novatx:bg-[var(--tuwa-bg-primary)]',\n customization?.classNames?.listWrapper,\n )}\n >\n {sortedTransactions.map((tx) => (\n <HistoryItem key={tx.txKey} tx={tx} adapter={adapter} />\n ))}\n </div>\n );\n }\n\n return (\n <Placeholder\n title={transactionsModal.history.noTransactionsTitle}\n message={transactionsModal.history.noTransactionsMessage}\n />\n );\n };\n\n return (\n <div className={cn('novatx:flex novatx:flex-col novatx:gap-y-3', className)}>\n {customization?.title && (\n <h3 className=\"novatx:text-lg novatx:font-bold novatx:text-[var(--tuwa-text-primary)]\">\n {customization?.title}\n </h3>\n )}\n {renderContent()}\n </div>\n );\n}\n","/**\n * @file This file contains the main `TransactionsInfoModal` component, which serves as the primary UI\n * for viewing wallet details and transaction history.\n */\n\nimport { CloseIcon, cn, Dialog, DialogClose, DialogContent, DialogHeader, DialogTitle } from '@tuwaio/nova-core';\nimport { Transaction } from '@tuwaio/pulsar-core';\nimport { ComponentPropsWithoutRef, ComponentType } from 'react';\n\nimport { NovaProviderProps, useLabels } from '../providers';\nimport { TransactionsHistory, TransactionsHistoryProps } from './TransactionsHistory';\n\ntype CustomHeaderProps = { closeModal: () => void };\n\nexport type TransactionsInfoModalCustomization<T extends Transaction> = {\n modalProps?: Partial<ComponentPropsWithoutRef<typeof DialogContent>>;\n classNames?: {\n contentWrapper?: string;\n };\n components?: {\n Header?: ComponentType<CustomHeaderProps>;\n History?: ComponentType<TransactionsHistoryProps<T>>;\n };\n};\n\nexport type TransactionsInfoModalProps<T extends Transaction> = Pick<\n NovaProviderProps<T>,\n 'adapter' | 'connectedAdapterType' | 'connectedWalletAddress' | 'transactionsPool'\n> & {\n isOpen?: boolean;\n setIsOpen: (value: boolean) => void;\n customization?: TransactionsInfoModalCustomization<T>;\n};\n\nconst DefaultHeader = ({ closeModal, title }: CustomHeaderProps & { title: string }) => {\n const { actions } = useLabels();\n return (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n\n <DialogClose asChild>\n <button\n type=\"button\"\n onClick={closeModal}\n aria-label={actions.close}\n className=\"novatx:cursor-pointer novatx:rounded-full novatx:p-1\n novatx:text-[var(--tuwa-text-tertiary)] novatx:transition-colors\n novatx:hover:bg-[var(--tuwa-bg-muted)] novatx:hover:text-[var(--tuwa-text-primary)]\"\n >\n <CloseIcon />\n </button>\n </DialogClose>\n </DialogHeader>\n );\n};\n\nexport function TransactionsInfoModal<T extends Transaction>({\n isOpen,\n setIsOpen,\n customization,\n adapter,\n connectedWalletAddress,\n transactionsPool,\n}: TransactionsInfoModalProps<T>) {\n const { transactionsModal } = useLabels();\n\n const closeModal = () => setIsOpen(false);\n\n const CustomHeader = customization?.components?.Header;\n const CustomHistory = customization?.components?.History;\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && closeModal()}>\n <DialogContent\n className={cn('novatx:w-full novatx:sm:max-w-2xl', customization?.modalProps?.className)}\n {...customization?.modalProps}\n >\n <div\n className={cn(\n 'novatx:relative novatx:max-h-[95dvh] novatx:w-full novatx:flex novatx:flex-col',\n customization?.classNames?.contentWrapper,\n )}\n >\n {CustomHeader ? (\n <CustomHeader closeModal={closeModal} />\n ) : (\n <DefaultHeader closeModal={closeModal} title={transactionsModal.history.title} />\n )}\n\n {CustomHistory ? (\n <CustomHistory\n adapter={adapter}\n transactionsPool={transactionsPool}\n connectedWalletAddress={connectedWalletAddress}\n />\n ) : (\n <TransactionsHistory\n adapter={adapter}\n transactionsPool={transactionsPool}\n connectedWalletAddress={connectedWalletAddress}\n />\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * @file This file contains the main `NovaProvider` component, which is the root\n * for the Nova UI library. It should be placed at the top level of your application\n * to orchestrate modals, toasts, and internationalization.\n */\n\nimport { deepMerge, useMediaQuery } from '@tuwaio/nova-core';\nimport { OrbitAdapter } from '@tuwaio/orbit-core';\nimport { ITxTrackingStore, Transaction, TransactionPool, TransactionStatus, TxAdapter } from '@tuwaio/pulsar-core';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { toast, ToastContainer, ToastContainerProps, ToastContentProps, TypeOptions } from 'react-toastify';\n\nimport {\n ToastCloseButton,\n ToastTransaction,\n ToastTransactionCustomization,\n TrackingTxModal,\n TrackingTxModalCustomization,\n TransactionsInfoModal,\n TransactionsInfoModalCustomization,\n} from '../components';\nimport { defaultLabels } from '../i18n/en';\nimport { TuwaLabels } from '../i18n/types';\nimport { LabelsProvider } from './LabelsProvider';\n\n/**\n * Maps a transaction's final status to the corresponding toast type for visual feedback.\n */\nconst STATUS_TO_TOAST_TYPE: Record<string, TypeOptions> = {\n [TransactionStatus.Success]: 'success',\n [TransactionStatus.Failed]: 'error',\n [TransactionStatus.Replaced]: 'info',\n};\n\n/**\n * Defines the props for the NovaProvider component.\n */\nexport type NovaProviderProps<T extends Transaction> = {\n adapter: TxAdapter<T> | TxAdapter<T>[];\n connectedWalletAddress?: string;\n connectedAdapterType?: OrbitAdapter;\n transactionsPool: TransactionPool<T>;\n labels?: Partial<TuwaLabels>;\n features?: {\n toasts?: boolean;\n transactionsModal?: boolean;\n trackingTxModal?: boolean;\n };\n customization?: {\n toast?: ToastTransactionCustomization<T>;\n transactionsInfoModal?: TransactionsInfoModalCustomization<T>;\n trackingTxModal?: TrackingTxModalCustomization<T>;\n };\n} & Pick<ITxTrackingStore<T>, 'closeTxTrackedModal' | 'executeTxAction' | 'initialTx'> &\n Omit<ToastContainerProps, 'containerId'>;\n\n/**\n * The main component for the Nova UI ecosystem. It renders and orchestrates all\n * UI elements like toasts and modals, and provides the i18n context.\n */\nexport function NovaProvider<T extends Transaction>({\n adapter,\n connectedWalletAddress,\n connectedAdapterType,\n transactionsPool,\n initialTx,\n executeTxAction,\n closeTxTrackedModal,\n labels,\n features,\n customization,\n ...toastProps\n}: NovaProviderProps<T>) {\n const [isTransactionsInfoModalOpen, setIsTransactionsInfoModalOpen] = useState(false);\n const prevTransactionsRef = useRef<TransactionPool<T>>(transactionsPool);\n\n const toastContainerId = 'nova-transactions';\n\n const isMobile = useMediaQuery('(max-width: 767px)');\n\n const enabledFeatures = useMemo(\n () => ({\n toasts: features?.toasts ?? true,\n transactionsModal: features?.transactionsModal ?? true,\n trackingTxModal: features?.trackingTxModal ?? true,\n }),\n [features],\n );\n\n const mergedLabels = useMemo(() => deepMerge(defaultLabels, labels || {}), [labels]);\n\n // Memoized function to show or update a toast.\n const showOrUpdateToast = useCallback(\n (tx: T) => {\n if (!enabledFeatures.toasts) return;\n\n const type = tx.pending ? 'info' : (STATUS_TO_TOAST_TYPE[tx.status!] ?? 'info');\n\n const content = (props: ToastContentProps) => (\n <ToastTransaction\n {...props}\n tx={tx}\n openTxInfoModal={enabledFeatures.transactionsModal ? () => setIsTransactionsInfoModalOpen(true) : undefined}\n customization={customization?.toast}\n adapter={adapter}\n connectedWalletAddress={connectedWalletAddress}\n />\n );\n\n if (toast.isActive(tx.txKey)) {\n toast.update(tx.txKey, { render: content, type, containerId: toastContainerId });\n } else {\n toast(content, { toastId: tx.txKey, type, closeOnClick: false, containerId: toastContainerId });\n }\n },\n [transactionsPool, enabledFeatures, customization?.toast, adapter, connectedWalletAddress],\n );\n\n // Effect 1: Handles toasts for NEW or CHANGED transactions.\n useEffect(() => {\n const prevPool = prevTransactionsRef.current;\n\n Object.values(transactionsPool).forEach((currentTx) => {\n const prevTx = prevPool[currentTx.txKey];\n\n // Case 1: A new transaction is added and is pending.\n if (!prevTx && currentTx.pending) {\n showOrUpdateToast(currentTx);\n return;\n }\n\n // Case 2: An existing transaction has been updated.\n if (prevTx && JSON.stringify(prevTx) !== JSON.stringify(currentTx)) {\n showOrUpdateToast(currentTx);\n }\n });\n\n prevTransactionsRef.current = transactionsPool;\n }, [transactionsPool, showOrUpdateToast]);\n\n // Effect 2: Handles toast UPDATES when the connected wallet address change.\n useEffect(() => {\n // This ensures that visible toasts re-render to show/hide wallet-specific actions\n // like \"Speed Up\", even for completed transactions.\n Object.values(transactionsPool).forEach((tx) => {\n if (toast.isActive(tx.txKey, toastContainerId)) {\n showOrUpdateToast(tx);\n }\n });\n }, [connectedWalletAddress, showOrUpdateToast, transactionsPool]);\n\n const isTrackingModalOpen =\n !!initialTx?.withTrackedModal && transactionsPool[initialTx?.lastTxKey ?? '']?.isTrackedModalOpen;\n\n const shouldShowToasts =\n enabledFeatures.toasts && (!isMobile || (!isTrackingModalOpen && !isTransactionsInfoModalOpen));\n\n return (\n <LabelsProvider labels={mergedLabels}>\n {shouldShowToasts && (\n <ToastContainer\n position=\"bottom-right\"\n stacked\n autoClose={false}\n hideProgressBar\n closeOnClick={false}\n icon={false}\n closeButton={ToastCloseButton}\n containerId={toastContainerId}\n toastClassName=\"novatx:!p-0 novatx:!bg-transparent novatx:!shadow-none novatx:!min-h-0\"\n {...toastProps}\n />\n )}\n\n {enabledFeatures.transactionsModal && (\n <TransactionsInfoModal\n isOpen={isTransactionsInfoModalOpen}\n setIsOpen={setIsTransactionsInfoModalOpen}\n customization={customization?.transactionsInfoModal}\n adapter={adapter}\n connectedWalletAddress={connectedWalletAddress}\n connectedAdapterType={connectedAdapterType}\n transactionsPool={transactionsPool}\n />\n )}\n\n {enabledFeatures.trackingTxModal && (\n <TrackingTxModal\n initialTx={initialTx}\n onClose={closeTxTrackedModal}\n onOpenAllTransactions={() => setIsTransactionsInfoModalOpen(true)}\n transactionsPool={transactionsPool}\n customization={customization?.trackingTxModal}\n executeTxAction={executeTxAction}\n adapter={adapter}\n connectedWalletAddress={connectedWalletAddress}\n />\n )}\n </LabelsProvider>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { T as TuwaLabels } from '../TransactionsInfoModal-ZGqfDAxN.cjs';
4
- export { G as NovaProvider, N as NovaProviderProps } from '../TransactionsInfoModal-ZGqfDAxN.cjs';
3
+ import { T as TuwaLabels } from '../TransactionsInfoModal-BPOe6aUa.cjs';
4
+ export { G as NovaProvider, N as NovaProviderProps } from '../TransactionsInfoModal-BPOe6aUa.cjs';
5
5
  import '@tuwaio/nova-core';
6
6
  import '@tuwaio/pulsar-core';
7
7
  import '@tuwaio/orbit-core';
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { T as TuwaLabels } from '../TransactionsInfoModal-ZGqfDAxN.js';
4
- export { G as NovaProvider, N as NovaProviderProps } from '../TransactionsInfoModal-ZGqfDAxN.js';
3
+ import { T as TuwaLabels } from '../TransactionsInfoModal-BPOe6aUa.js';
4
+ export { G as NovaProvider, N as NovaProviderProps } from '../TransactionsInfoModal-BPOe6aUa.js';
5
5
  import '@tuwaio/nova-core';
6
6
  import '@tuwaio/pulsar-core';
7
7
  import '@tuwaio/orbit-core';