@tuwaio/nova-transactions 1.0.0-fix-integrate-orbit-alpha.24.6471ec9 → 1.0.0-fix-integrate-orbit-alpha.26.ece038b

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.js","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
+ {"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","isWithActions","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.js","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 ['metamask'].includes(tx.walletType.split(':')[1])\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 isWithActions = canReplace && activeTx && ['metamask'].includes(activeTx?.walletType.split(':')[1]);\n\n const handleCancel = () => {\n if (isWithActions) foundAdapter.cancelTxAction!(activeTx);\n };\n\n const handleSpeedUp = () => {\n if (isWithActions) 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={isWithActions ? handleSpeedUp : undefined}\n onCancel={isWithActions ? 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={isWithActions ? handleSpeedUp : undefined}\n onCancel={isWithActions ? 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuwaio/nova-transactions",
3
- "version": "1.0.0-fix-integrate-orbit-alpha.24.6471ec9",
3
+ "version": "1.0.0-fix-integrate-orbit-alpha.26.ece038b",
4
4
  "private": false,
5
5
  "author": "Oleksandr Tkach",
6
6
  "license": "Apache-2.0",
@@ -96,7 +96,7 @@
96
96
  "typescript": "~5.9.2",
97
97
  "tailwindcss": "^4.1.13",
98
98
  "zustand": "^5.0.8",
99
- "@tuwaio/nova-core": "^1.0.0-fix-integrate-orbit-alpha.24.6471ec9"
99
+ "@tuwaio/nova-core": "^1.0.0-fix-integrate-orbit-alpha.26.ece038b"
100
100
  },
101
101
  "scripts": {
102
102
  "build": "tsup && pnpm exec postcss ./src/styles/app.css -o ./dist/index.css"