@tuwaio/nova-connect 0.1.4 → 0.1.6

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/providers/ErrorsProvider.tsx","../src/providers/NovaConnectLabelsProvider.tsx","../src/components/ConnectModal/ConnectModal.tsx","../src/providers/NovaConnectProvider.tsx","../src/index.ts"],"names":["DefaultToastError","title","rawError","onCopyComplete","errorType","isConnected","props","jsx","ToastError","DefaultContainer","labels","useNovaConnectLabels","ToastContainer","defaultShowErrorHandler","originalHandler","params","defaultDismissErrorHandler","defaultCopyCompleteHandler","success","defaultErrorTitleGenerator","defaultTitle","defaultErrorHashGenerator","defaultHash","ErrorsProvider","containerId","position","autoClose","draggable","customization","switchNetworkError","useSatelliteConnectStore","store","activeWallet","walletConnectionError","CustomToastError","Container","customShowErrorHandler","customDismissErrorHandler","customCopyCompleteHandler","customErrorTitleGenerator","customErrorHashGenerator","displayedErrorsRef","useRef","currentToastIdRef","errorState","useMemo","hasWalletError","hasSwitchError","defaultErrorTitle","errorTitle","defaultErrorHash","errorHash","dismissCurrentToast","useCallback","toast","handleCopyComplete","originalErrorHandler","t","r","k","defaultToastOptions","customToastOptions","toastOptions","error","showErrorToast","errorKey","useEffect","hasAnyError","primaryError","containerClasses","defaultContainerProps","ToastCloseButton","Bounce","containerProps","NovaConnectLabelsProvider","children","memoizedLabels","missingLabels","key","NovaConnectLabelsContext","getConnectorName","connectors","activeConnector","connector","c","formatWalletName","DefaultModalContainer","forwardRef","className","modalData","ref","cn","DefaultModalHeader","DialogHeader","DefaultInfoButton","onClick","InformationCircleIcon","DefaultTitle","DialogTitle","DefaultCloseButton","DialogClose","CloseIcon","DefaultMainContent","DefaultFooter","DefaultBackButton","standardButtonClasses","DefaultActionButton","disabled","loading","buttonConfig","DefaultActionDescription","DefaultEmptyState","_modalData","restProps","ConnectModal","memo","appChains","solanaRPCUrls","withImpersonated","isConnectModalOpen","setIsConnectModalOpen","setConnectModalContentType","setActiveConnector","setImpersonatedAddress","setIsConnected","connectModalContentType","selectedAdapter","setSelectedAdapter","impersonatedAddress","useNovaConnect","getConnectors","connect","useContext","SatelliteStoreContext","filteredConnectors","getFilteredConnectors","normalizedError","components","classNames","handlers","config","childComponents","ModalContainer","ModalHeader","InfoButton","Title","CloseButton","MainContent","Footer","BackButton","ActionButton","ActionDescription","CustomEmptyState","CustomDialog","Dialog","CustomDialogContent","DialogContent","CustomMotionDiv","motion","getTitle","goBackContentType","handleOpenChange","open","handleBack","handleInfoClick","handleConnect","walletType","adapter","getConnectChainId","waitFor","modalCloseTime","isConnectedTimer","delay","handleNetworkClick","handleConnectorClick","renderMainContent","NetworkSelections","jsxs","Fragment","NetworkTabs","ConnectorsSelections","AboutWallets","GetWallet","Connecting","ImpersonateForm","bottomButtonConfig","networksLinks","trimmedAddress","isAddress","impersonatedHelpers","OrbitAdapter","getWalletTypeFromConnectorName","getActionDescription","DefaultLabelsProvider","DefaultErrorsProvider","defaultLabelsMerge","defaultLabels","userLabels","deepMerge","defaultLabelsTransform","mergedLabels","defaultContextValueTransform","defaultValue","defaultProviderTreeRenderer","defaultTree","context","NovaConnectProvider","transactionPool","pulsarAdapter","withBalance","withChain","LabelsProvider","CustomErrorsProvider","customLabelsMerge","customLabelsTransform","customContextValueTransform","customProviderTreeRenderer","useState","isConnectedModalOpen","setIsConnectedModalOpen","isChainsListOpen","setIsChainsListOpen","isChainsListOpenMobile","setIsChainsListOpenMobile","connectedButtonStatus","setConnectedButtonStatus","connectedModalContentType","setConnectedModalContentType","providerContext","finalLabels","contextValue","errorsProviderElement","labelsProviderElement","connectModalElement","connectedModalElement","ConnectedModal","mainContentElement","NovaConnectProviderContext","defaultProviderTree","finalProviderTree","getBlockchainUtilities","getAllAdaptersStatus","checkEvmUtils","checkSolanaUtils","getEvmUtils","getSolanaUtils","initializeBlockchainSupport","results","preloadChainAdapters","errorMsg","isAdapterSupported"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @file This file contains the `ErrorsProvider` component, a customizable error toast provider with full styling control.\n */\n\nimport { ToastCloseButton } from '@tuwaio/nova-core';\nimport { ComponentPropsWithoutRef, ComponentType, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Bounce, toast, ToastContainer, type ToastPosition, type ToastTransition } from 'react-toastify';\n\nimport { ToastError, ToastErrorCustomization } from '../components';\nimport { useNovaConnectLabels } from '../hooks/useNovaConnectLabels';\nimport { useSatelliteConnectStore } from '../satellite';\n\n// --- Types for Customization ---\ntype CustomToastErrorProps = {\n title: string;\n rawError: string;\n onCopyComplete?: (success: boolean) => void;\n errorType: 'wallet' | 'switch' | null;\n isConnected: boolean;\n};\n\ntype CustomContainerProps = ComponentPropsWithoutRef<typeof ToastContainer>;\n\n/**\n * Customization options for ErrorsProvider component\n */\nexport type ErrorsProviderCustomization = {\n /** Override ToastContainer element props */\n containerProps?: Partial<ComponentPropsWithoutRef<typeof ToastContainer>>;\n /** Custom components */\n components?: {\n /** Custom ToastError component */\n ToastError?: ComponentType<CustomToastErrorProps>;\n /** Custom ToastContainer component */\n Container?: ComponentType<CustomContainerProps>;\n };\n /** Default ToastError customization (only used with default ToastError component) */\n toastErrorCustomization?: ToastErrorCustomization;\n /** Custom class name generators */\n classNames?: {\n /** Function to generate container classes */\n container?: (params: { hasErrors: boolean; errorType: 'wallet' | 'switch' | null }) => string;\n };\n /** Custom toast options generators */\n toastOptions?: {\n /** Function to generate toast options */\n error?: (params: {\n title: string;\n rawError: string;\n errorType: 'wallet' | 'switch' | null;\n isConnected: boolean;\n }) => Partial<Parameters<typeof toast.error>[1]>;\n };\n /** Custom logic handlers */\n handlers?: {\n /** Custom error display logic */\n showError?: (\n originalHandler: (title: string, rawError: string, errorKey: string) => void,\n params: { title: string; rawError: string; errorKey: string; errorType: 'wallet' | 'switch' | null },\n ) => void;\n /** Custom error dismissal logic */\n dismissError?: (originalHandler: () => void) => void;\n /** Custom copy complete handler */\n onCopyComplete?: (success: boolean, rawError: string, errorType: 'wallet' | 'switch' | null) => void;\n };\n /** Custom error title generator - does NOT customize labels, just allows title modification */\n errorTitle?: (defaultTitle: string, params: { errorType: 'wallet' | 'switch' | null }) => string;\n /** Custom error hash generator for deduplication */\n errorHash?: (\n defaultHash: string | null,\n params: { primaryError: string | null; errorType: 'wallet' | 'switch' | null },\n ) => string | null;\n};\n\nexport interface ErrorsProviderProps {\n /** Custom container ID for toast notifications */\n containerId?: string;\n /** Custom position for toast notifications */\n position?: ToastPosition;\n /** Auto close delay in milliseconds */\n autoClose?: number | false;\n /** Whether to enable drag to dismiss */\n draggable?: boolean;\n /** Customization options */\n customization?: ErrorsProviderCustomization;\n}\n\n// --- Default Sub-Components ---\nconst DefaultToastError = ({\n title,\n rawError,\n onCopyComplete,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errorType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isConnected,\n ...props\n}: CustomToastErrorProps & { customization?: ToastErrorCustomization }) => {\n return (\n <ToastError title={title} rawError={rawError} onCopyComplete={onCopyComplete} customization={props.customization} />\n );\n};\n\nconst DefaultContainer = (props: CustomContainerProps) => {\n const labels = useNovaConnectLabels();\n return <ToastContainer {...props} role=\"alert\" aria-live=\"assertive\" aria-label={labels.somethingWentWrong} />;\n};\n\n// --- Default Handlers ---\nconst defaultShowErrorHandler = (\n originalHandler: (title: string, rawError: string, errorKey: string) => void,\n params: { title: string; rawError: string; errorKey: string },\n) => {\n originalHandler(params.title, params.rawError, params.errorKey);\n};\n\nconst defaultDismissErrorHandler = (originalHandler: () => void) => {\n originalHandler();\n};\n\nconst defaultCopyCompleteHandler = (success: boolean, rawError: string) => {\n if (success && process.env.NODE_ENV === 'development') {\n console.log('Error copied to clipboard:', rawError.substring(0, 100));\n }\n};\n\nconst defaultErrorTitleGenerator = (defaultTitle: string) => defaultTitle;\n\nconst defaultErrorHashGenerator = (defaultHash: string | null) => defaultHash;\n\n/**\n * A highly customizable error toast provider with extensive styling options and component replacement capabilities.\n * Provides comprehensive customization for appearance, behavior, and error handling logic while maintaining accessibility.\n */\nexport function ErrorsProvider({\n containerId = 'nova-connect-errors',\n position = 'top-center',\n autoClose = 7000,\n draggable = false,\n customization,\n}: ErrorsProviderProps) {\n const labels = useNovaConnectLabels();\n\n const switchNetworkError = useSatelliteConnectStore((store) => store.switchNetworkError);\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n const walletConnectionError = useSatelliteConnectStore((store) => store.walletConnectionError);\n\n // Extract custom components and handlers\n const { ToastError: CustomToastError = DefaultToastError, Container = DefaultContainer } =\n customization?.components ?? {};\n\n const {\n showError: customShowErrorHandler = defaultShowErrorHandler,\n dismissError: customDismissErrorHandler = defaultDismissErrorHandler,\n onCopyComplete: customCopyCompleteHandler = defaultCopyCompleteHandler,\n } = customization?.handlers ?? {};\n\n const {\n errorTitle: customErrorTitleGenerator = defaultErrorTitleGenerator,\n errorHash: customErrorHashGenerator = defaultErrorHashGenerator,\n } = customization ?? {};\n\n // Track displayed errors to prevent duplicates\n const displayedErrorsRef = useRef<Set<string>>(new Set());\n const currentToastIdRef = useRef<string | null>(null);\n\n // Memoize error state\n const errorState = useMemo(() => {\n const hasWalletError = Boolean(walletConnectionError);\n const hasSwitchError = Boolean(switchNetworkError);\n const isConnected = Boolean(activeWallet?.isConnected);\n\n return {\n hasWalletError,\n hasSwitchError,\n isConnected,\n hasAnyError: hasWalletError || hasSwitchError,\n primaryError: walletConnectionError || switchNetworkError || null,\n errorType: (hasWalletError ? 'wallet' : hasSwitchError ? 'switch' : null) as 'wallet' | 'switch' | null,\n };\n }, [walletConnectionError, switchNetworkError, activeWallet?.isConnected]);\n\n // Memoize default error title based on type (using labels, NOT customizing them)\n const defaultErrorTitle = useMemo(() => {\n switch (errorState.errorType) {\n case 'wallet':\n return labels.walletConnectionError;\n case 'switch':\n return labels.errorWhenChainSwitching;\n default:\n return labels.somethingWentWrong;\n }\n }, [errorState.errorType, labels]);\n\n // Generate custom error title (allows modification but NOT labels customization)\n const errorTitle = useMemo(() => {\n return customErrorTitleGenerator(defaultErrorTitle, { errorType: errorState.errorType });\n }, [customErrorTitleGenerator, defaultErrorTitle, errorState.errorType]);\n\n // Generate default error hash for deduplication\n const defaultErrorHash = useMemo(() => {\n if (!errorState.primaryError) return null;\n return `${errorState.errorType}-${errorState.primaryError.substring(0, 50)}`;\n }, [errorState.primaryError, errorState.errorType]);\n\n // Generate custom error hash\n const errorHash = useMemo(() => {\n return customErrorHashGenerator(defaultErrorHash, {\n primaryError: errorState.primaryError,\n errorType: errorState.errorType,\n });\n }, [customErrorHashGenerator, defaultErrorHash, errorState.primaryError, errorState.errorType]);\n\n // Dismiss current toast\n const dismissCurrentToast = useCallback(() => {\n const originalHandler = () => {\n if (currentToastIdRef.current) {\n toast.dismiss(currentToastIdRef.current);\n currentToastIdRef.current = null;\n }\n toast.dismiss({ containerId });\n };\n customDismissErrorHandler(originalHandler);\n }, [containerId, customDismissErrorHandler]);\n\n // Handle copy complete\n const handleCopyComplete = useCallback(\n (success: boolean, rawError: string) => {\n customCopyCompleteHandler(success, rawError, errorState.errorType);\n },\n [customCopyCompleteHandler, errorState.errorType],\n );\n\n // Original handler for error display - using full customization object in dependencies\n const originalErrorHandler = useCallback(\n (t: string, r: string, k: string) => {\n // Dismiss previous toast first\n dismissCurrentToast();\n\n // Check if this error was already displayed\n if (displayedErrorsRef.current.has(k)) {\n return;\n }\n\n try {\n // Generate custom toast options\n const defaultToastOptions = {\n containerId,\n toastId: k,\n onClose: () => {\n displayedErrorsRef.current.delete(k);\n currentToastIdRef.current = null;\n },\n };\n\n const customToastOptions = customization?.toastOptions?.error?.({\n title: t,\n rawError: r,\n errorType: errorState.errorType,\n isConnected: errorState.isConnected,\n });\n\n const toastOptions = { ...defaultToastOptions, ...customToastOptions };\n\n // Use toast.error and capture the result properly\n toast.error(\n <CustomToastError\n title={t}\n rawError={r}\n errorType={errorState.errorType}\n isConnected={errorState.isConnected}\n onCopyComplete={(success) => handleCopyComplete(success, r)}\n customization={customization?.toastErrorCustomization}\n />,\n toastOptions,\n );\n\n displayedErrorsRef.current.add(k);\n currentToastIdRef.current = k;\n } catch (error) {\n console.error('Failed to show error toast:', error);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n dismissCurrentToast,\n containerId,\n customization?.toastOptions?.error,\n customization?.toastErrorCustomization,\n CustomToastError,\n errorState.errorType,\n errorState.isConnected,\n handleCopyComplete,\n ],\n );\n\n // Show error toast\n const showErrorToast = useCallback(\n (title: string, rawError: string, errorKey: string) => {\n customShowErrorHandler(originalErrorHandler, { title, rawError, errorKey, errorType: errorState.errorType });\n },\n [originalErrorHandler, customShowErrorHandler, errorState.errorType],\n );\n\n // Main effect to handle error display logic\n useEffect(() => {\n const { hasAnyError, isConnected, primaryError } = errorState;\n\n // Clear all errors when connected successfully\n if (isConnected && !hasAnyError) {\n dismissCurrentToast();\n displayedErrorsRef.current.clear();\n return;\n }\n\n // Show error if present and not already displayed\n if (hasAnyError && primaryError && errorHash) {\n // For connected state, only show switch network errors\n if (isConnected && errorState.errorType !== 'switch') {\n return;\n }\n\n showErrorToast(errorTitle, primaryError, errorHash);\n }\n }, [errorState, errorTitle, errorHash, showErrorToast, dismissCurrentToast]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n dismissCurrentToast();\n // eslint-disable-next-line\n displayedErrorsRef.current.clear();\n };\n }, [dismissCurrentToast]);\n\n // Generate container classes\n const containerClasses = useMemo(() => {\n if (customization?.classNames?.container) {\n return customization.classNames.container({\n hasErrors: errorState.hasAnyError,\n errorType: errorState.errorType,\n });\n }\n\n return 'novacon:p-0 novacon:bg-transparent';\n }, [customization, errorState.hasAnyError, errorState.errorType]);\n\n // Memoize default container props\n const defaultContainerProps = useMemo(\n () => ({\n containerId,\n position,\n closeOnClick: false,\n icon: false as const,\n closeButton: ToastCloseButton,\n autoClose,\n hideProgressBar: false,\n newestOnTop: false,\n pauseOnFocusLoss: false,\n draggable,\n pauseOnHover: true,\n theme: 'light' as const,\n transition: Bounce as ToastTransition,\n }),\n [containerId, position, autoClose, draggable],\n );\n\n // Merge container props (NO labels passed to custom components!)\n const containerProps = useMemo(\n () => ({\n ...defaultContainerProps,\n ...customization?.containerProps,\n className: containerClasses,\n }),\n [defaultContainerProps, customization?.containerProps, containerClasses],\n );\n\n return <Container {...containerProps} />;\n}\n\n// Add display name for better debugging\nErrorsProvider.displayName = 'ErrorsProvider';\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 { ReactNode, useMemo } from 'react';\n\nimport { NovaConnectLabelsContext } from '../hooks/useNovaConnectLabels';\nimport { NovaConnectLabels } from '../i18n';\n\ninterface NovaConnectLabelsProviderProps {\n /** An object containing the custom labels */\n labels: NovaConnectLabels;\n /** The child components to render */\n children: ReactNode;\n}\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 * The provider uses React.memo optimization and validates labels in development mode.\n *\n * @example\n * ```typescript\n * import { NovaConnectLabelsProvider } from './NovaConnectLabelsProvider';\n *\n * function App() {\n * const customLabels = {\n * connectWallet: 'Подключить кошелек',\n * disconnect: 'Отключиться',\n * };\n *\n * return (\n * <NovaConnectLabelsProvider labels={customLabels}>\n * <YourApp />\n * </NovaConnectLabelsProvider>\n * );\n * }\n * ```\n */\nexport function NovaConnectLabelsProvider({ labels, children }: NovaConnectLabelsProviderProps) {\n // Memoize labels to prevent unnecessary re-renders\n const memoizedLabels = useMemo(() => labels, [labels]);\n\n // Development-only validation\n if (process.env.NODE_ENV === 'development') {\n // Validate that labels object is provided\n if (!labels || typeof labels !== 'object') {\n console.warn('NovaConnectLabelsProvider: labels prop should be an object');\n }\n\n // Check for missing required labels (basic validation)\n const requiredLabels = ['connectWallet', 'disconnect', 'connecting', 'connected', 'error', 'success'] as const;\n\n const missingLabels = requiredLabels.filter((key) => !(key in labels));\n if (missingLabels.length > 0) {\n console.warn(`NovaConnectLabelsProvider: Missing required labels: ${missingLabels.join(', ')}`);\n }\n }\n\n return <NovaConnectLabelsContext.Provider value={memoizedLabels}>{children}</NovaConnectLabelsContext.Provider>;\n}\n\n// Add display name for better debugging\nNovaConnectLabelsProvider.displayName = 'NovaConnectLabelsProvider';\n","import { InformationCircleIcon } from '@heroicons/react/24/outline';\nimport {\n CloseIcon,\n cn,\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n standardButtonClasses,\n} from '@tuwaio/nova-core';\nimport {\n delay,\n formatWalletName,\n getWalletTypeFromConnectorName,\n impersonatedHelpers,\n OrbitAdapter,\n waitFor,\n WalletType,\n} from '@tuwaio/orbit-core';\nimport { motion } from 'framer-motion';\nimport { isAddress } from 'gill';\nimport React, {\n ComponentPropsWithoutRef,\n ComponentType,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from 'react';\n\nimport { ConnectContentType, NovaConnectProviderProps, useNovaConnect, useNovaConnectLabels } from '../../hooks';\nimport { Connector, SatelliteStoreContext, useSatelliteConnectStore } from '../../satellite';\nimport { InitialChains } from '../../types';\nimport { getConnectChainId, getFilteredConnectors, networksLinks } from '../../utils';\nimport { AboutWallets, AboutWalletsCustomization } from './AboutWallets';\nimport { Connecting, ConnectingCustomization } from './Connecting';\nimport { ConnectorsSelections, ConnectorsSelectionsCustomization } from './ConnectorsSelections';\nimport { GetWallet, GetWalletCustomization } from './GetWallet';\nimport { ImpersonateForm, ImpersonateFormCustomization } from './ImpersonatedForm';\nimport { NetworkSelections, NetworkSelectionsCustomization } from './NetworkSelections';\nimport { NetworkTabs, NetworkTabsCustomization } from './NetworkTabs';\n\n/**\n * Interface for grouped wallet connectors\n */\nexport interface GroupedConnector {\n /** Name of the wallet connector */\n name: string;\n /** Optional icon for the wallet */\n icon?: string;\n /** Array of supported network adapters */\n adapters: OrbitAdapter[];\n /** Array of connectors with their associated adapters */\n connectors: (Connector & { adapter: OrbitAdapter })[];\n}\n\n/**\n * Connect modal data for customization context\n */\nexport interface ConnectModalData {\n /** Current content type being displayed */\n contentType: ConnectContentType;\n /** Selected network adapter */\n selectedAdapter: OrbitAdapter | undefined;\n /** Active connector name */\n activeConnector: string | undefined;\n /** Impersonated address */\n impersonatedAddress: string;\n /** Whether connection is established */\n isConnected: boolean;\n /** Whether modal is open */\n isOpen: boolean;\n /** Connection error if any */\n error: Error | string | null | undefined;\n /** Available connectors */\n connectors: Record<string, Connector[]>;\n /** Filtered connectors for current adapter */\n filteredConnectors: GroupedConnector[];\n /** Current labels from i18n */\n labels: ReturnType<typeof useNovaConnectLabels>;\n}\n\n/**\n * Bottom button configuration\n */\nexport interface BottomButtonConfig {\n /** Button title text */\n title: string;\n /** Button click handler */\n onClick: () => void | Promise<void>;\n /** Whether button is disabled */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n}\n\n// --- Component Props Types ---\ntype ModalContainerProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype ModalHeaderProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype InfoButtonProps = {\n className?: string;\n onClick: () => void;\n 'aria-label'?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype TitleProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype CloseButtonProps = {\n className?: string;\n onClick: () => void;\n 'aria-label'?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype MainContentProps = {\n className?: string;\n children: React.ReactNode;\n role?: string;\n id?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype FooterProps = {\n className?: string;\n children: React.ReactNode;\n role?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype BackButtonProps = {\n className?: string;\n onClick: () => void;\n 'aria-label'?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype ActionButtonProps = {\n className?: string;\n onClick: () => void | Promise<void>;\n 'aria-describedby'?: string;\n children: React.ReactNode;\n disabled?: boolean;\n loading?: boolean;\n modalData: ConnectModalData;\n buttonConfig: BottomButtonConfig;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype ActionDescriptionProps = {\n id?: string;\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLSpanElement>;\n\ntype ModalEmptyProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\n/**\n * Customization options for ConnectModal component\n */\nexport type ConnectModalCustomization = {\n /** Custom components */\n components?: {\n /** Custom modal container */\n ModalContainer?: ComponentType<ModalContainerProps>;\n /** Custom modal header */\n ModalHeader?: ComponentType<ModalHeaderProps>;\n /** Custom info button */\n InfoButton?: ComponentType<InfoButtonProps>;\n /** Custom title */\n Title?: ComponentType<TitleProps>;\n /** Custom close button */\n CloseButton?: ComponentType<CloseButtonProps>;\n /** Custom main content wrapper */\n MainContent?: ComponentType<MainContentProps>;\n /** Custom footer */\n Footer?: ComponentType<FooterProps>;\n /** Custom back button */\n BackButton?: ComponentType<BackButtonProps>;\n /** Custom action button */\n ActionButton?: ComponentType<ActionButtonProps>;\n /** Custom action description */\n ActionDescription?: ComponentType<ActionDescriptionProps>;\n /** Custom dialog */\n Dialog?: ComponentType<ComponentPropsWithoutRef<typeof Dialog>>;\n /** Custom dialog content */\n DialogContent?: ComponentType<ComponentPropsWithoutRef<typeof DialogContent>>;\n /** Custom motion wrapper */\n MotionDiv?: ComponentType<ComponentPropsWithoutRef<typeof motion.div>>;\n /** Custom empty state */\n EmptyState?: ComponentType<ModalEmptyProps>;\n };\n /** Custom class name generators */\n classNames?: {\n /** Function to generate modal container classes */\n modalContainer?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate header classes */\n header?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate info button classes */\n infoButton?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate title classes */\n title?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate close button classes */\n closeButton?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate main content classes */\n mainContent?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate footer classes */\n footer?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate back button classes */\n backButton?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate action button classes */\n actionButton?: (params: { modalData: ConnectModalData; buttonConfig: BottomButtonConfig }) => string;\n /** Function to generate action description classes */\n actionDescription?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate action description classes */\n emptyConnectors?: (params: { modalData: ConnectModalData }) => string;\n };\n /** Custom event handlers */\n handlers?: {\n /** Custom modal open/close handler */\n onOpenChange?: (open: boolean, modalData: ConnectModalData) => void;\n /** Custom back navigation handler */\n onBack?: (modalData: ConnectModalData, originalHandler: () => void) => void;\n /** Custom info button click handler */\n onInfoClick?: (modalData: ConnectModalData) => void;\n /** Custom action button handlers for different content types */\n onActionClick?: {\n connectors?: (modalData: ConnectModalData) => void;\n getWallet?: (modalData: ConnectModalData) => void;\n about?: (modalData: ConnectModalData) => void;\n impersonate?: (modalData: ConnectModalData) => Promise<void>;\n connecting?: (modalData: ConnectModalData) => Promise<void>;\n };\n };\n /** Configuration options */\n config?: {\n /** Custom ARIA labels */\n ariaLabels?: {\n modal?: (modalData: ConnectModalData) => string;\n infoButton?: (modalData: ConnectModalData) => string;\n closeButton?: (modalData: ConnectModalData) => string;\n backButton?: (modalData: ConnectModalData) => string;\n mainContent?: (modalData: ConnectModalData) => string;\n };\n /** Animation configuration */\n animation?: {\n /** Layout transition duration */\n layoutDuration?: number;\n /** Disable animations */\n disabled?: boolean;\n };\n };\n /** Child component customizations */\n childComponents?: {\n /** AboutWallets customization */\n aboutWallets?: AboutWalletsCustomization;\n /** Connecting customization */\n connecting?: ConnectingCustomization;\n /** ConnectorsSelections customization */\n connectorsSelections?: ConnectorsSelectionsCustomization;\n /** GetWallet customization */\n getWallet?: GetWalletCustomization;\n /** ImpersonateForm customization */\n impersonateForm?: ImpersonateFormCustomization;\n /** NetworkSelections customization */\n networkSelections?: NetworkSelectionsCustomization;\n /** NetworkTabs customization */\n networkTabs?: NetworkTabsCustomization;\n };\n};\n\n/**\n * Helper function to safely get connector name from array\n */\nfunction getConnectorName(\n connectors: Connector[] | undefined,\n activeConnector: string | undefined,\n): string | undefined {\n if (!connectors || !Array.isArray(connectors) || !activeConnector) {\n return undefined;\n }\n\n const connector = connectors.find((c) => {\n if (c && typeof c === 'object' && 'name' in c && typeof c.name === 'string') {\n return formatWalletName(c.name) === activeConnector;\n }\n return false;\n });\n\n return connector && typeof connector === 'object' && 'name' in connector && typeof connector.name === 'string'\n ? connector.name\n : undefined;\n}\n\n// --- Default Sub-Components ---\nconst DefaultModalContainer = forwardRef<HTMLDivElement, ModalContainerProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('novacon:relative novacon:flex novacon:w-full novacon:flex-col', className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nDefaultModalContainer.displayName = 'DefaultModalContainer';\n\nconst DefaultModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <DialogHeader>{children}</DialogHeader>\n </div>\n ),\n);\nDefaultModalHeader.displayName = 'DefaultModalHeader';\n\nconst DefaultInfoButton = forwardRef<HTMLButtonElement, InfoButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, modalData, ...props }, ref) => (\n <button\n ref={ref}\n className={cn(\n 'novacon:cursor-pointer novacon:text-[var(--tuwa-text-secondary)] novacon:transition novacon:duration-300 novacon:ease-in-out novacon:active:scale-75 novacon:hover:scale-110',\n className,\n )}\n type=\"button\"\n onClick={onClick}\n {...props}\n >\n <InformationCircleIcon width={20} height={20} className=\"novacon:mr-1\" aria-hidden=\"true\" />\n </button>\n ),\n);\nDefaultInfoButton.displayName = 'DefaultInfoButton';\n\nconst DefaultTitle = forwardRef<HTMLDivElement, TitleProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <DialogTitle ref={ref} className={cn('novacon:flex novacon:items-center', className)} {...props}>\n {children}\n </DialogTitle>\n ),\n);\nDefaultTitle.displayName = 'DefaultTitle';\n\nconst DefaultCloseButton = forwardRef<HTMLButtonElement, CloseButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, modalData, ...props }, ref) => (\n <DialogClose asChild>\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'novacon:cursor-pointer novacon:rounded-full novacon:p-1 novacon:text-[var(--tuwa-text-tertiary)] novacon:transition-colors novacon:hover:bg-[var(--tuwa-bg-muted)] novacon:hover:text-[var(--tuwa-text-primary)]',\n className,\n )}\n {...props}\n >\n <CloseIcon aria-hidden=\"true\" />\n </button>\n </DialogClose>\n ),\n);\nDefaultCloseButton.displayName = 'DefaultCloseButton';\n\nconst DefaultMainContent = forwardRef<HTMLDivElement, MainContentProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <main\n ref={ref}\n className={cn('novacon:flex novacon:flex-col novacon:gap-4 novacon:p-4', className)}\n id=\"connect-modal-content\"\n role=\"main\"\n {...props}\n >\n {children}\n </main>\n ),\n);\nDefaultMainContent.displayName = 'DefaultMainContent';\n\nconst DefaultFooter = forwardRef<HTMLDivElement, FooterProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <footer\n ref={ref}\n className={cn(\n 'novacon:flex novacon:w-full novacon:items-center novacon:justify-between novacon:border-t novacon:border-[var(--tuwa-border-primary)] novacon:p-4',\n className,\n )}\n role=\"contentinfo\"\n {...props}\n >\n {children}\n </footer>\n ),\n);\nDefaultFooter.displayName = 'DefaultFooter';\n\nconst DefaultBackButton = forwardRef<HTMLButtonElement, BackButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, children, modalData, ...props }, ref) => (\n <button ref={ref} type=\"button\" onClick={onClick} className={cn(standardButtonClasses, className)} {...props}>\n {children}\n </button>\n ),\n);\nDefaultBackButton.displayName = 'DefaultBackButton';\n\nconst DefaultActionButton = forwardRef<HTMLButtonElement, ActionButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, children, disabled, loading, buttonConfig, modalData, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled || loading}\n className={cn(standardButtonClasses, className)}\n {...props}\n >\n {loading ? 'Loading...' : children}\n </button>\n ),\n);\nDefaultActionButton.displayName = 'DefaultActionButton';\n\nconst DefaultActionDescription = forwardRef<HTMLSpanElement, ActionDescriptionProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <span ref={ref} className={cn('novacon:sr-only', className)} {...props}>\n {children}\n </span>\n ),\n);\nDefaultActionDescription.displayName = 'DefaultActionDescription';\n\nconst DefaultEmptyState = forwardRef<HTMLDivElement, ModalEmptyProps>(({ children, className, ...props }, ref) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { modalData: _modalData, ...restProps } = props;\n return (\n <div ref={ref} className={className} {...restProps}>\n {children}\n </div>\n );\n});\nDefaultEmptyState.displayName = 'DefaultEmptyState';\n\n/**\n * Props for the ConnectModal component\n */\nexport interface ConnectModalProps extends InitialChains, Pick<NovaConnectProviderProps, 'withImpersonated'> {\n /** Customization options */\n customization?: ConnectModalCustomization;\n}\n\n/**\n * ConnectModal component - Main modal dialog for wallet connection workflow\n *\n * This component provides a comprehensive wallet connection interface with:\n * - Multi-step connection flow with different content types\n * - Network selection and adapter filtering\n * - Support for regular wallets and impersonated wallets\n * - Educational content about wallets and networks\n * - Error handling and retry mechanisms\n * - Full accessibility support with ARIA labels\n * - Keyboard navigation and screen reader compatibility\n *\n * Modal content types:\n * - 'connectors': Main wallet selection screen with network tabs\n * - 'network': Network selection for multi-network wallets\n * - 'connecting': Connection progress and status display\n * - 'about': Educational content about wallets\n * - 'getWallet': Onboarding flow for users without wallets\n * - 'impersonate': Form for wallet address impersonation\n *\n * Visual features:\n * - Responsive design adapting to different screen sizes\n * - Smooth transitions between different content states\n * - Loading states and progress indicators\n * - Clear navigation with back/forward buttons\n * - Contextual action buttons in footer\n *\n * Accessibility features:\n * - Proper ARIA labels and roles for screen readers\n * - Keyboard navigation support with focus management\n * - Semantic HTML structure for better navigation\n * - Screen reader announcements for state changes\n * - High contrast compatible styling\n *\n * @param appChains - Configuration for supported blockchain networks\n * @param solanaRPCUrls - RPC URLs configuration for Solana network\n * @param store - Wallet store instance\n * @param withImpersonated - Whether to show impersonated wallet option\n * @param customization - Customization options for the component\n * @returns JSX element representing the connection modal dialog\n *\n * @example\n * ```tsx\n * <ConnectModal\n * appChains={{\n * [OrbitAdapter.EVM]: [1, 137, 56], // Ethereum, Polygon, BSC\n * [OrbitAdapter.SOLANA]: ['devnet', 'mainnet-beta']\n * }}\n * solanaRPCUrls={{\n * 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n * 'devnet': 'https://api.devnet.solana.com'\n * }}\n * store={walletStore}\n * withImpersonated\n * customization={{\n * classNames: {\n * title: ({ modalData }) =>\n * modalData.contentType === 'about' ? 'custom-about-title' : ''\n * }\n * }}\n * />\n * ```\n *\n * @public\n */\nexport const ConnectModal = memo<ConnectModalProps>(\n ({ appChains, solanaRPCUrls, withImpersonated, customization = {} }) => {\n const {\n isConnectModalOpen,\n setIsConnectModalOpen,\n setConnectModalContentType,\n setActiveConnector,\n setImpersonatedAddress,\n setIsConnected,\n connectModalContentType,\n selectedAdapter,\n setSelectedAdapter,\n isConnected,\n activeConnector,\n impersonatedAddress,\n } = useNovaConnect();\n const walletConnectionError = useSatelliteConnectStore((store) => store.walletConnectionError);\n const getConnectors = useSatelliteConnectStore((store) => store.getConnectors);\n const connect = useSatelliteConnectStore((store) => store.connect);\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n\n const labels = useNovaConnectLabels();\n const store = useContext(SatelliteStoreContext);\n\n // Memoize connectors to avoid recalculation on every render\n const connectors = useMemo(() => {\n if (isConnectModalOpen) {\n return getConnectors();\n }\n }, [isConnectModalOpen, getConnectors]);\n\n const filteredConnectors = useMemo(\n () => getFilteredConnectors({ connectors: connectors!, selectedAdapter }),\n [connectors, selectedAdapter],\n );\n\n // Convert error to Error object if it's a string\n const normalizedError = useMemo(() => {\n if (!walletConnectionError) return null;\n if (typeof walletConnectionError === 'string') {\n return new Error(walletConnectionError);\n }\n return walletConnectionError;\n }, [walletConnectionError]);\n\n // Memoize modal data for customization context\n const modalData = useMemo<ConnectModalData>(\n () => ({\n contentType: connectModalContentType,\n selectedAdapter,\n activeConnector,\n impersonatedAddress,\n isConnected,\n isOpen: isConnectModalOpen,\n error: normalizedError,\n connectors: connectors!,\n filteredConnectors,\n labels,\n }),\n [\n connectModalContentType,\n selectedAdapter,\n activeConnector,\n impersonatedAddress,\n isConnected,\n isConnectModalOpen,\n normalizedError,\n connectors,\n filteredConnectors,\n labels,\n ],\n );\n\n // Reset modal state when opened\n useEffect(() => {\n if (isConnectModalOpen) {\n setConnectModalContentType('connectors');\n setSelectedAdapter(undefined);\n setActiveConnector(undefined);\n setImpersonatedAddress('');\n setIsConnected(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isConnectModalOpen]);\n\n // Extract customization options\n const { components = {}, classNames = {}, handlers = {}, config = {}, childComponents = {} } = customization;\n\n // Component selections with defaults\n const ModalContainer = components.ModalContainer || DefaultModalContainer;\n const ModalHeader = components.ModalHeader || DefaultModalHeader;\n const InfoButton = components.InfoButton || DefaultInfoButton;\n const Title = components.Title || DefaultTitle;\n const CloseButton = components.CloseButton || DefaultCloseButton;\n const MainContent = components.MainContent || DefaultMainContent;\n const Footer = components.Footer || DefaultFooter;\n const BackButton = components.BackButton || DefaultBackButton;\n const ActionButton = components.ActionButton || DefaultActionButton;\n const ActionDescription = components.ActionDescription || DefaultActionDescription;\n const CustomEmptyState = components.EmptyState || DefaultEmptyState;\n const CustomDialog = components.Dialog || Dialog;\n const CustomDialogContent = components.DialogContent || DialogContent;\n const CustomMotionDiv = components.MotionDiv || motion.div;\n\n /**\n * Gets the appropriate title for the current modal content\n */\n const getTitle = useCallback(() => {\n switch (connectModalContentType) {\n case 'about':\n return labels.aboutWallets;\n case 'getWallet':\n return labels.getWallet;\n case 'connecting':\n if (selectedAdapter && activeConnector && connectors) {\n const connectorName = getConnectorName(connectors[selectedAdapter], activeConnector);\n return connectorName || labels.connectingEllipsis;\n }\n return labels.connectingEllipsis;\n case 'impersonate':\n return labels.connectImpersonatedWallet;\n default:\n return labels.connectWallet;\n }\n }, [connectModalContentType, selectedAdapter, activeConnector, connectors, labels]);\n\n /**\n * Determines the content type to navigate back to\n */\n const goBackContentType = useCallback((): ConnectContentType => {\n switch (connectModalContentType) {\n default:\n return 'connectors';\n }\n }, [connectModalContentType]);\n\n /**\n * Handle modal open/close with custom handler\n */\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (handlers?.onOpenChange) {\n handlers.onOpenChange(open, modalData);\n } else {\n setIsConnectModalOpen(open);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [handlers?.onOpenChange, modalData, setIsConnectModalOpen],\n );\n\n /**\n * Handle back navigation with custom handler\n */\n const handleBack = useCallback(() => {\n const originalHandler = () => setConnectModalContentType(goBackContentType());\n\n if (handlers?.onBack) {\n handlers.onBack(modalData, originalHandler);\n } else {\n originalHandler();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [handlers?.onBack, modalData, setConnectModalContentType, goBackContentType]);\n\n /**\n * Handle info button click\n */\n const handleInfoClick = useCallback(() => {\n if (handlers?.onInfoClick) {\n handlers.onInfoClick(modalData);\n } else {\n setConnectModalContentType('about');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [handlers?.onInfoClick, modalData, setConnectModalContentType]);\n\n /**\n * Generic connection handler\n */\n const handleConnect = useCallback(\n async (walletType: WalletType, adapter: OrbitAdapter) => {\n await connect({\n walletType,\n chainId: getConnectChainId({ appChains, selectedAdapter: adapter, solanaRPCUrls }),\n });\n\n try {\n await waitFor(() => store?.getState().activeWallet?.isConnected);\n setIsConnected(true);\n const modalCloseTime = setTimeout(() => setIsConnectModalOpen(false), 400);\n const isConnectedTimer = setTimeout(() => setIsConnected(false), 500);\n await delay(null, 500);\n clearTimeout(modalCloseTime);\n clearTimeout(isConnectedTimer);\n } catch (error) {\n console.error(error);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [connect, appChains, selectedAdapter, solanaRPCUrls],\n );\n\n /**\n * Handle network selection click\n */\n const handleNetworkClick = useCallback(\n async (adapter: OrbitAdapter, walletType: WalletType) => {\n setSelectedAdapter(adapter);\n setConnectModalContentType('connecting');\n await handleConnect(walletType, adapter);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [handleConnect],\n );\n\n /**\n * Handle connector selection click\n */\n const handleConnectorClick = useCallback(\n (connector: GroupedConnector) => {\n setActiveConnector(formatWalletName(connector.name));\n if (connector.adapters.length === 1) {\n setSelectedAdapter(connector.adapters[0]);\n setConnectModalContentType(\n formatWalletName(connector.name) === 'impersonatedwallet' ? 'impersonate' : 'connecting',\n );\n } else if (selectedAdapter) {\n setConnectModalContentType(\n formatWalletName(connector.name) === 'impersonatedwallet' ? 'impersonate' : 'connecting',\n );\n } else if (formatWalletName(connector.name) === 'impersonatedwallet') {\n setConnectModalContentType('impersonate');\n } else {\n setConnectModalContentType('network');\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selectedAdapter],\n );\n\n /**\n * Renders the main content based on current modal state\n */\n const renderMainContent = useCallback(() => {\n switch (connectModalContentType) {\n case 'network':\n return (\n <NetworkSelections\n activeConnector={activeConnector}\n connectors={filteredConnectors}\n onClick={handleNetworkClick}\n customization={childComponents.networkSelections}\n />\n );\n case 'connectors':\n return connectors ? (\n <>\n <NetworkTabs\n networks={Object.keys(connectors) as OrbitAdapter[]}\n selectedAdapter={selectedAdapter}\n onSelect={(adapter) => setSelectedAdapter(adapter)}\n customization={childComponents.networkTabs}\n />\n\n <ConnectorsSelections\n isOnlyOneNetwork={Object.keys(connectors).length === 1}\n connectors={filteredConnectors}\n selectedAdapter={selectedAdapter}\n onClick={handleConnectorClick}\n setContentType={setConnectModalContentType}\n appChains={appChains}\n solanaRPCUrls={solanaRPCUrls}\n setIsConnected={setIsConnected}\n setIsOpen={setIsConnectModalOpen}\n withImpersonated={withImpersonated}\n customization={childComponents.connectorsSelections}\n />\n </>\n ) : (\n <CustomEmptyState className={classNames.emptyConnectors?.({ modalData })} modalData={modalData}>\n No connectors available\n </CustomEmptyState>\n );\n case 'about':\n return <AboutWallets customization={childComponents.aboutWallets} />;\n case 'getWallet':\n return <GetWallet customization={childComponents.getWallet} />;\n case 'connecting':\n return (\n <Connecting\n selectedAdapter={selectedAdapter}\n connectors={filteredConnectors}\n activeConnector={activeConnector}\n isConnected={isConnected}\n customization={childComponents.connecting}\n />\n );\n case 'impersonate':\n return (\n <ImpersonateForm\n impersonatedAddress={impersonatedAddress}\n setImpersonatedAddress={setImpersonatedAddress}\n customization={childComponents.impersonateForm}\n />\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n connectModalContentType,\n activeConnector,\n filteredConnectors,\n handleNetworkClick,\n childComponents,\n connectors,\n selectedAdapter,\n handleConnectorClick,\n isConnected,\n impersonatedAddress,\n ]);\n\n /**\n * Gets configuration for the bottom action button\n */\n const getBottomButtonConfig = useCallback((): BottomButtonConfig | undefined => {\n switch (connectModalContentType) {\n case 'connectors':\n return {\n title: labels.iDontHaveWallet,\n onClick: () => {\n if (handlers.onActionClick?.connectors) {\n handlers.onActionClick.connectors(modalData);\n } else {\n setConnectModalContentType('getWallet');\n }\n },\n };\n case 'getWallet':\n return {\n title: labels.choseWallet,\n onClick: () => {\n if (handlers.onActionClick?.getWallet) {\n handlers.onActionClick.getWallet(modalData);\n } else {\n window.open(\n networksLinks[selectedAdapter ?? (Object.keys(connectors!)[0] as OrbitAdapter)]?.choseWallet,\n '_blank',\n 'noopener,noreferrer',\n );\n }\n },\n };\n case 'about':\n return {\n title: labels.learnMore,\n onClick: () => {\n if (handlers.onActionClick?.about) {\n handlers.onActionClick.about(modalData);\n } else {\n window.open(\n networksLinks[selectedAdapter ?? (Object.keys(connectors!)[0] as OrbitAdapter)]?.about,\n '_blank',\n 'noopener,noreferrer',\n );\n }\n },\n };\n case 'impersonate':\n return {\n title: labels.connect,\n onClick: async () => {\n if (handlers.onActionClick?.impersonate) {\n await handlers.onActionClick.impersonate(modalData);\n } else {\n const trimmedAddress = impersonatedAddress.trim();\n if (\n walletConnectionError ||\n !trimmedAddress ||\n isAddress(trimmedAddress) ||\n !!activeWallet?.isConnected\n )\n return;\n\n impersonatedHelpers.setImpersonated(trimmedAddress);\n await handleConnect(\n `${selectedAdapter ?? OrbitAdapter.EVM}:impersonatedwallet` as WalletType,\n selectedAdapter ?? OrbitAdapter.EVM,\n );\n setConnectModalContentType('connecting');\n }\n },\n };\n case 'connecting':\n return walletConnectionError && selectedAdapter && activeConnector\n ? {\n title: labels.tryAgain,\n onClick: async () => {\n if (handlers.onActionClick?.connecting) {\n await handlers.onActionClick.connecting(modalData);\n } else {\n await handleConnect(\n getWalletTypeFromConnectorName(selectedAdapter, activeConnector) as WalletType,\n selectedAdapter,\n );\n }\n },\n }\n : undefined;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n connectModalContentType,\n labels,\n handlers,\n modalData,\n selectedAdapter,\n connectors,\n impersonatedAddress,\n walletConnectionError,\n handleConnect,\n activeConnector,\n ]);\n\n const bottomButtonConfig = getBottomButtonConfig();\n\n /**\n * Get action description text\n */\n const getActionDescription = useCallback(() => {\n switch (connectModalContentType) {\n case 'getWallet':\n return 'Opens external wallet selection page';\n case 'about':\n return 'Opens external documentation';\n case 'impersonate':\n return 'Connects with impersonated wallet address';\n case 'connecting':\n return 'Retries wallet connection';\n default:\n return '';\n }\n }, [connectModalContentType]);\n\n return (\n <CustomDialog open={isConnectModalOpen} onOpenChange={handleOpenChange}>\n <CustomDialogContent className={cn('novacon:w-full novacon:sm:max-w-md')}>\n <CustomMotionDiv\n layout\n transition={{\n layout: {\n duration: config.animation?.disabled ? 0 : (config.animation?.layoutDuration ?? 0.0001),\n },\n }}\n >\n <ModalContainer className={classNames.modalContainer?.({ modalData })} modalData={modalData}>\n <ModalHeader className={classNames.header?.({ modalData })} modalData={modalData}>\n <Title className={classNames.title?.({ modalData })} modalData={modalData}>\n {connectModalContentType === 'connectors' && (\n <InfoButton\n className={classNames.infoButton?.({ modalData })}\n onClick={handleInfoClick}\n aria-label={\n config.ariaLabels?.infoButton?.(modalData) || `${labels.learnMore} ${labels.aboutWallets}`\n }\n modalData={modalData}\n />\n )}\n {getTitle()}\n </Title>\n\n <CloseButton\n className={classNames.closeButton?.({ modalData })}\n onClick={() => handleOpenChange(false)}\n aria-label={config.ariaLabels?.closeButton?.(modalData) || labels.closeModal}\n modalData={modalData}\n />\n </ModalHeader>\n\n <MainContent className={classNames.mainContent?.({ modalData })} modalData={modalData}>\n {renderMainContent()}\n </MainContent>\n\n <Footer className={classNames.footer?.({ modalData })} modalData={modalData}>\n <div className=\"novacon:flex novacon:items-center novacon:gap-4\">\n {connectModalContentType !== 'connectors' && (\n <BackButton\n className={classNames.backButton?.({ modalData })}\n onClick={handleBack}\n aria-label={config.ariaLabels?.backButton?.(modalData) || `${labels.back} to previous step`}\n modalData={modalData}\n >\n {labels.back}\n </BackButton>\n )}\n </div>\n {bottomButtonConfig && (\n <div className=\"novacon:flex novacon:items-center novacon:gap-3\">\n <ActionButton\n className={classNames.actionButton?.({ modalData, buttonConfig: bottomButtonConfig })}\n onClick={bottomButtonConfig.onClick}\n disabled={bottomButtonConfig.disabled}\n loading={bottomButtonConfig.loading}\n aria-describedby=\"bottom-action-description\"\n modalData={modalData}\n buttonConfig={bottomButtonConfig}\n >\n {bottomButtonConfig.title}\n </ActionButton>\n <ActionDescription\n id=\"bottom-action-description\"\n className={classNames.actionDescription?.({ modalData })}\n modalData={modalData}\n >\n {getActionDescription()}\n </ActionDescription>\n </div>\n )}\n </Footer>\n </ModalContainer>\n </CustomMotionDiv>\n </CustomDialogContent>\n </CustomDialog>\n );\n },\n);\n\nConnectModal.displayName = 'ConnectModal';\n","/**\n * @file Main NovaConnect provider component with comprehensive customization capabilities.\n * @module NovaConnectProvider\n */\n\nimport { deepMerge } from '@tuwaio/nova-core';\nimport { OrbitAdapter } from '@tuwaio/orbit-core';\nimport { BaseWallet } from '@tuwaio/satellite-core';\nimport { ComponentType, ReactNode, useMemo, useState } from 'react';\n\nimport { ConnectedModal, ConnectedModalCustomization } from '../components/ConnectedModal/ConnectedModal';\nimport { ConnectModal, ConnectModalCustomization } from '../components/ConnectModal/ConnectModal';\nimport {\n ButtonTxStatus,\n ConnectContentType,\n ConnectedContentType,\n NovaConnectProviderContext,\n NovaConnectProviderProps,\n NovaConnectProviderType,\n} from '../hooks';\nimport { defaultLabels, NovaConnectLabels } from '../i18n';\nimport { useSatelliteConnectStore } from '../satellite';\nimport { ErrorsProvider, ErrorsProviderCustomization } from './ErrorsProvider';\nimport { NovaConnectLabelsProvider } from './NovaConnectLabelsProvider';\n\n// --- Customization Types ---\n\n/**\n * Props for custom NovaConnectLabelsProvider component\n */\ntype CustomLabelsProviderProps = {\n labels?: Partial<NovaConnectLabels>;\n children: ReactNode;\n};\n\n/**\n * Props for custom ErrorsProvider component\n */\ntype CustomErrorsProviderProps = {\n customization?: ErrorsProviderCustomization;\n};\n\n/**\n * Context data passed to custom provider components\n */\ntype ProviderContext = {\n /** Current wallet connection state */\n isConnected: boolean;\n /** Active wallet instance */\n activeWallet: BaseWallet | undefined;\n /** Current wallet connection error */\n walletConnectionError: string | undefined;\n /** All modal and UI states */\n modalStates: {\n isConnectModalOpen: boolean;\n isConnectedModalOpen: boolean;\n isChainsListOpen: boolean;\n isChainsListOpenMobile: boolean;\n };\n /** Current content types for modals */\n contentTypes: {\n connectModal: ConnectContentType;\n connectedModal: ConnectedContentType;\n };\n /** Button and transaction statuses */\n statuses: {\n connectedButton: ButtonTxStatus;\n };\n};\n\n/**\n * Comprehensive customization options for NovaConnectProvider\n */\nexport type NovaConnectProviderCustomization = {\n /** Custom components */\n components?: {\n /** Custom labels provider component */\n LabelsProvider?: ComponentType<CustomLabelsProviderProps>;\n /** Custom errors provider component */\n ErrorsProvider?: ComponentType<CustomErrorsProviderProps>;\n };\n /** Labels customization and merging strategy */\n labels?: {\n /** Custom labels merging function */\n merge?: (defaultLabels: NovaConnectLabels, userLabels: Partial<NovaConnectLabels>) => NovaConnectLabels;\n /** Transform final merged labels before use */\n transform?: (mergedLabels: NovaConnectLabels, context: ProviderContext) => NovaConnectLabels;\n };\n /** ErrorsProvider customization - passed through to ErrorsProvider */\n errors?: ErrorsProviderCustomization;\n /** Custom context value transformation */\n contextValue?: {\n /** Transform context value before providing to children */\n transform?: (defaultValue: NovaConnectProviderType, context: ProviderContext) => NovaConnectProviderType;\n };\n /** Custom rendering logic */\n rendering?: {\n /** Custom provider tree structure */\n providerTree?: (\n defaultTree: ReactNode,\n components: {\n ErrorsProvider: ReactNode;\n LabelsProvider: ReactNode;\n MainContent: ReactNode;\n ConnectModal: ReactNode;\n ConnectedModal: ReactNode;\n },\n context: ProviderContext,\n ) => ReactNode;\n };\n /** Modal customizations */\n modals?: {\n /** ConnectModal customization */\n connectModal?: ConnectModalCustomization;\n /** ConnectedModal customization */\n connectedModal?: ConnectedModalCustomization;\n };\n};\n\n/**\n * Extended props for NovaConnectProvider with full customization capabilities\n */\nexport interface NovaConnectProviderPropsWithCustomization extends NovaConnectProviderProps {\n /** Comprehensive customization options for the provider and its sub-components */\n customization?: NovaConnectProviderCustomization;\n}\n\n// --- Default Components ---\n\n/**\n * Default labels provider component\n */\nconst DefaultLabelsProvider = ({ labels, children }: CustomLabelsProviderProps) => {\n return <NovaConnectLabelsProvider labels={labels as NovaConnectLabels}>{children}</NovaConnectLabelsProvider>;\n};\n\n/**\n * Default errors provider component\n */\nconst DefaultErrorsProvider = ({ customization }: CustomErrorsProviderProps) => {\n return <ErrorsProvider customization={customization} />;\n};\n\n// --- Default Handlers ---\n\n/**\n * Default labels merging function\n */\nconst defaultLabelsMerge = (\n defaultLabels: NovaConnectLabels,\n userLabels: Partial<NovaConnectLabels>,\n): NovaConnectLabels => {\n return deepMerge(defaultLabels, userLabels || {});\n};\n\n/**\n * Default labels transform function (identity)\n */\nconst defaultLabelsTransform = (mergedLabels: NovaConnectLabels): NovaConnectLabels => mergedLabels;\n\n/**\n * Default context value transform function (identity)\n */\nconst defaultContextValueTransform = (defaultValue: NovaConnectProviderType): NovaConnectProviderType => defaultValue;\n\n/**\n * Default provider tree renderer\n */\nconst defaultProviderTreeRenderer = (\n defaultTree: ReactNode,\n // Unused but kept for API consistency\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n components: {\n ErrorsProvider: ReactNode;\n LabelsProvider: ReactNode;\n MainContent: ReactNode;\n ConnectModal: ReactNode;\n ConnectedModal: ReactNode;\n },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n context: ProviderContext,\n): ReactNode => {\n return defaultTree;\n};\n\n/**\n * Main NovaConnect provider component with comprehensive customization capabilities.\n *\n * This provider manages wallet connection state, error handling, internationalization,\n * modal states, and renders the modal components centrally while offering extensive\n * customization options for all sub-components and behaviors.\n *\n * Features:\n * - Complete wallet connection state management\n * - Centralized modal rendering and state management\n * - Customizable error handling through ErrorsProvider\n * - Flexible internationalization system\n * - Modal and UI state coordination\n * - Extensive customization API for all aspects\n * - Custom component replacement capabilities\n *\n * @example Basic usage\n * ```tsx\n * <NovaConnectProvider\n * store={store}\n * appChains={[mainnet, sepolia, polygon]} // Viem chains\n * solanaRPCUrls={{\n * 'mainnet': 'https://api.mainnet-beta.solana.com'\n * }}\n * >\n * <App />\n * </NovaConnectProvider>\n * ```\n *\n * @example With customization\n * ```tsx\n * <NovaConnectProvider\n * labels={customLabels}\n * appChains={appChains}\n * solanaRPCUrls={solanaRPCUrls}\n * transactionPool={txPool}\n * pulsarAdapter={adapters}\n * withImpersonated\n * withBalance\n * withChain\n * customization={{\n * errors: {\n * position: 'bottom-right',\n * autoClose: 5000,\n * },\n * modals: {\n * connectModal: {\n * classNames: {\n * container: () => 'custom-modal-style'\n * }\n * }\n * }\n * }}\n * >\n * <App />\n * </NovaConnectProvider>\n * ```\n *\n * @param props - Provider configuration and customization options\n */\nexport function NovaConnectProvider({\n labels,\n children,\n appChains,\n solanaRPCUrls,\n transactionPool,\n pulsarAdapter,\n withImpersonated,\n withBalance,\n withChain,\n customization,\n}: NovaConnectProviderPropsWithCustomization) {\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n const walletConnectionError = useSatelliteConnectStore((store) => store.walletConnectionError);\n\n // Extract custom components\n const { LabelsProvider = DefaultLabelsProvider, ErrorsProvider: CustomErrorsProvider = DefaultErrorsProvider } =\n customization?.components ?? {};\n\n // Extract custom handlers\n const { merge: customLabelsMerge = defaultLabelsMerge, transform: customLabelsTransform = defaultLabelsTransform } =\n customization?.labels ?? {};\n\n const { transform: customContextValueTransform = defaultContextValueTransform } = customization?.contextValue ?? {};\n\n const { providerTree: customProviderTreeRenderer = defaultProviderTreeRenderer } = customization?.rendering ?? {};\n\n // Merge labels using custom or default logic\n const mergedLabels = useMemo(() => {\n return customLabelsMerge(defaultLabels, labels || {});\n }, [labels, customLabelsMerge]);\n\n // State management - all existing state\n const [isConnectModalOpen, setIsConnectModalOpen] = useState(false);\n const [isConnectedModalOpen, setIsConnectedModalOpen] = useState(false);\n const [isChainsListOpen, setIsChainsListOpen] = useState(false);\n const [isChainsListOpenMobile, setIsChainsListOpenMobile] = useState(false);\n const [connectedButtonStatus, setConnectedButtonStatus] = useState<ButtonTxStatus>('idle');\n const [connectModalContentType, setConnectModalContentType] = useState<ConnectContentType>('connectors');\n const [selectedAdapter, setSelectedAdapter] = useState<OrbitAdapter | undefined>(undefined);\n const [activeConnector, setActiveConnector] = useState<string | undefined>(undefined);\n const [impersonatedAddress, setImpersonatedAddress] = useState('');\n const [isConnected, setIsConnected] = useState(false);\n const [connectedModalContentType, setConnectedModalContentType] = useState<ConnectedContentType>('main');\n\n // Create provider context for custom handlers\n const providerContext = useMemo(\n (): ProviderContext => ({\n isConnected,\n activeWallet,\n walletConnectionError,\n modalStates: {\n isConnectModalOpen,\n isConnectedModalOpen,\n isChainsListOpen,\n isChainsListOpenMobile,\n },\n contentTypes: {\n connectModal: connectModalContentType,\n connectedModal: connectedModalContentType,\n },\n statuses: {\n connectedButton: connectedButtonStatus,\n },\n }),\n [\n isConnected,\n activeWallet,\n walletConnectionError,\n isConnectModalOpen,\n isConnectedModalOpen,\n isChainsListOpen,\n isChainsListOpenMobile,\n connectModalContentType,\n connectedModalContentType,\n connectedButtonStatus,\n ],\n );\n\n // Transform labels using custom logic if provided\n const finalLabels = useMemo(() => {\n return customLabelsTransform(mergedLabels, providerContext);\n }, [mergedLabels, customLabelsTransform, providerContext]);\n\n // Create and transform context value using custom logic if provided - moved inside useMemo\n const contextValue = useMemo(() => {\n const defaultContextValue: NovaConnectProviderType = {\n appChains,\n solanaRPCUrls,\n withImpersonated,\n withBalance,\n withChain,\n isConnectModalOpen,\n setIsConnectModalOpen,\n isConnectedModalOpen,\n setIsConnectedModalOpen,\n isChainsListOpen,\n setIsChainsListOpen,\n isChainsListOpenMobile,\n setIsChainsListOpenMobile,\n connectedButtonStatus,\n setConnectedButtonStatus,\n connectedModalContentType,\n setConnectedModalContentType,\n connectModalContentType,\n setConnectModalContentType,\n selectedAdapter,\n setSelectedAdapter,\n activeConnector,\n setActiveConnector,\n impersonatedAddress,\n setImpersonatedAddress,\n isConnected,\n setIsConnected,\n };\n\n return customContextValueTransform(defaultContextValue, providerContext);\n }, [\n appChains,\n solanaRPCUrls,\n withImpersonated,\n withBalance,\n withChain,\n isConnectModalOpen,\n setIsConnectModalOpen,\n isConnectedModalOpen,\n setIsConnectedModalOpen,\n isChainsListOpen,\n setIsChainsListOpen,\n isChainsListOpenMobile,\n setIsChainsListOpenMobile,\n connectedButtonStatus,\n setConnectedButtonStatus,\n connectedModalContentType,\n setConnectedModalContentType,\n connectModalContentType,\n setConnectModalContentType,\n selectedAdapter,\n setSelectedAdapter,\n activeConnector,\n setActiveConnector,\n impersonatedAddress,\n setImpersonatedAddress,\n isConnected,\n setIsConnected,\n customContextValueTransform,\n providerContext,\n ]);\n\n // Create component tree elements\n const errorsProviderElement = <CustomErrorsProvider customization={customization?.errors} />;\n\n const labelsProviderElement = <LabelsProvider labels={finalLabels}>{children}</LabelsProvider>;\n\n // Create modal elements - only render if we have the required props\n const connectModalElement =\n appChains && solanaRPCUrls ? (\n <ConnectModal\n withImpersonated={withImpersonated}\n solanaRPCUrls={solanaRPCUrls}\n appChains={appChains}\n customization={customization?.modals?.connectModal}\n />\n ) : null;\n\n const connectedModalElement =\n appChains && solanaRPCUrls ? (\n <ConnectedModal\n solanaRPCUrls={solanaRPCUrls}\n appChains={appChains}\n transactionPool={transactionPool}\n pulsarAdapter={pulsarAdapter}\n customization={customization?.modals?.connectedModal}\n />\n ) : null;\n\n const mainContentElement = (\n <NovaConnectProviderContext.Provider value={contextValue}>\n {errorsProviderElement}\n {labelsProviderElement}\n {connectModalElement}\n {connectedModalElement}\n </NovaConnectProviderContext.Provider>\n );\n\n // Create default provider tree with modals\n const defaultProviderTree = (\n <NovaConnectProviderContext.Provider value={contextValue}>\n {errorsProviderElement}\n {labelsProviderElement}\n {connectModalElement}\n {connectedModalElement}\n </NovaConnectProviderContext.Provider>\n );\n\n // Use custom provider tree renderer if provided\n const finalProviderTree = customProviderTreeRenderer(\n defaultProviderTree,\n {\n ErrorsProvider: errorsProviderElement,\n LabelsProvider: labelsProviderElement,\n MainContent: mainContentElement,\n ConnectModal: connectModalElement || <></>,\n ConnectedModal: connectedModalElement || <></>,\n },\n providerContext,\n );\n\n return <>{finalProviderTree}</>;\n}\n\n// Add display name for better debugging\nNovaConnectProvider.displayName = 'NovaConnectProvider';\n","import { OrbitAdapter } from '@tuwaio/orbit-core';\n\n// Re-export core modules\nexport * from './providers';\nexport * from './types';\nexport * from './utils';\n\n// ========================================\n// Modern Conditional Export System\n// ========================================\n\n/**\n * Information about available blockchain-specific utilities and their status.\n *\n * @interface BlockchainUtilities\n * @since 1.0.0\n *\n * @example\n * ```typescript\n * const utilities = await getBlockchainUtilities();\n *\n * if (utilities.hasEvmUtils) {\n * console.log('EVM utilities are available');\n * }\n *\n * console.log('Adapter statuses:', utilities.adaptersStatus);\n * ```\n */\nexport interface BlockchainUtilities {\n /** Whether EVM utilities are available and loaded */\n hasEvmUtils: boolean;\n /** Whether Solana utilities are available and loaded */\n hasSolanaUtils: boolean;\n /** Current loading status of all registered adapters */\n adaptersStatus: Record<string, string>;\n}\n\n/**\n * Gets comprehensive information about available blockchain utilities and their loading status.\n * This function dynamically checks which blockchain adapters are available and their current state.\n *\n * @returns Promise resolving to blockchain utilities information\n *\n * @example\n * ```typescript\n * // Check what's available in your current setup\n * const info = await getBlockchainUtilities();\n *\n * if (info.hasEvmUtils && info.hasSolanaUtils) {\n * console.log('Full multi-chain support available');\n * } else {\n * console.log('Limited blockchain support:', info.adaptersStatus);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function getBlockchainUtilities(): Promise<BlockchainUtilities> {\n const { getAllAdaptersStatus } = await import('./utils/getChainsListByWalletType');\n\n return {\n hasEvmUtils: await checkEvmUtils(),\n hasSolanaUtils: await checkSolanaUtils(),\n adaptersStatus: getAllAdaptersStatus(),\n };\n}\n\n/**\n * Checks if EVM utilities are available by attempting to import them.\n * This function performs a dynamic import to determine availability without throwing errors.\n *\n * @internal\n * @returns Promise resolving to true if EVM utilities can be imported\n *\n * @since 1.0.0\n */\nasync function checkEvmUtils(): Promise<boolean> {\n try {\n await import('./evm/utils');\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if Solana utilities are available by attempting to import them.\n * This function performs a dynamic import to determine availability without throwing errors.\n *\n * @internal\n * @returns Promise resolving to true if Solana utilities can be imported\n *\n * @since 1.0.0\n */\nasync function checkSolanaUtils(): Promise<boolean> {\n try {\n await import('./solana/utils');\n return true;\n } catch {\n return false;\n }\n}\n\n// ========================================\n// Blockchain-Specific Utility Exports\n// ========================================\n\n/**\n * Result type for blockchain utility loading operations.\n *\n * @template T The type of utilities being loaded\n *\n * @since 1.0.0\n */\nexport type BlockchainUtilityResult<T = any> = ({ available: true } & T) | { available: false; error: string };\n\n/**\n * Dynamically loads EVM utilities if available in the current environment.\n * Returns the utilities along with their availability status.\n *\n * @returns Promise resolving to EVM utilities or error information\n *\n * @example\n * ```typescript\n * const evmUtils = await getEvmUtils();\n *\n * if (evmUtils.available) {\n * // Use EVM-specific functions\n * const chains = evmUtils.getEvmChains(appChains);\n * console.log('Available EVM chains:', chains);\n * } else {\n * console.warn('EVM not supported:', evmUtils.error);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function getEvmUtils(): Promise<BlockchainUtilityResult> {\n try {\n const evmModule = await import('./evm');\n return {\n available: true,\n ...evmModule,\n };\n } catch (error) {\n return {\n available: false,\n error: error instanceof Error ? error.message : 'EVM utilities not available',\n };\n }\n}\n\n/**\n * Dynamically loads Solana utilities if available in the current environment.\n * Returns the utilities along with their availability status.\n *\n * @returns Promise resolving to Solana utilities or error information\n *\n * @example\n * ```typescript\n * const solanaUtils = await getSolanaUtils();\n *\n * if (solanaUtils.available) {\n * // Use Solana-specific functions\n * const clusters = solanaUtils.getSolanaClusters(rpcUrls);\n * console.log('Available Solana clusters:', clusters);\n * } else {\n * console.warn('Solana not supported:', solanaUtils.error);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function getSolanaUtils(): Promise<BlockchainUtilityResult> {\n try {\n const solanaModule = await import('./solana');\n return {\n available: true,\n ...solanaModule,\n };\n } catch (error) {\n return {\n available: false,\n error: error instanceof Error ? error.message : 'Solana utilities not available',\n };\n }\n}\n\n// ========================================\n// Initialization and Preloading\n// ========================================\n\n/**\n * Result of blockchain support initialization.\n *\n * @interface InitializationResult\n * @since 1.0.0\n */\nexport interface InitializationResult {\n /** Whether EVM support was successfully initialized */\n evm: boolean;\n /** Whether Solana support was successfully initialized */\n solana: boolean;\n /** Array of error messages encountered during initialization */\n errors: string[];\n}\n\n/**\n * Preloads and initializes all available blockchain adapters.\n * This function should be called during application startup for optimal performance.\n * It attempts to load both EVM and Solana adapters and reports which ones are available.\n *\n * @returns Promise resolving to initialization results\n *\n * @example\n * ```typescript\n * // Call during app initialization\n * const initResult = await initializeBlockchainSupport();\n *\n * if (initResult.evm && initResult.solana) {\n * console.log('Full blockchain support initialized');\n * } else {\n * console.log('Partial support:', initResult);\n * if (initResult.errors.length > 0) {\n * console.warn('Initialization errors:', initResult.errors);\n * }\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function initializeBlockchainSupport(): Promise<InitializationResult> {\n const results: InitializationResult = {\n evm: false,\n solana: false,\n errors: [],\n };\n\n try {\n const { preloadChainAdapters } = await import('./utils/getChainsListByWalletType');\n await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n\n // Check what was successfully loaded\n results.evm = await checkEvmUtils();\n results.solana = await checkSolanaUtils();\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Unknown initialization error';\n results.errors.push(errorMsg);\n }\n\n return results;\n}\n\n// ========================================\n// Adapter Support Utilities\n// ========================================\n\n/**\n * Checks whether a specific blockchain adapter is supported in the current environment.\n * This function performs runtime checks to determine adapter availability.\n *\n * @param adapter The blockchain adapter to check for support\n * @returns Promise resolving to true if the adapter is supported\n *\n * @example\n * ```typescript\n * // Check individual adapter support\n * const evmSupported = await isAdapterSupported(OrbitAdapter.EVM);\n * const solanaSupported = await isAdapterSupported(OrbitAdapter.SOLANA);\n * const starknetSupported = await isAdapterSupported(OrbitAdapter.Starknet);\n *\n * console.log('Adapter support:', {\n * evm: evmSupported,\n * solana: solanaSupported,\n * starknet: starknetSupported, // Currently always false\n * });\n * ```\n *\n * @since 1.0.0\n */\nexport async function isAdapterSupported(adapter: OrbitAdapter): Promise<boolean> {\n switch (adapter) {\n case OrbitAdapter.EVM:\n return checkEvmUtils();\n case OrbitAdapter.SOLANA:\n return checkSolanaUtils();\n case OrbitAdapter.Starknet:\n return false; // Not yet implemented\n default:\n return false;\n }\n}\n\n// ========================================\n// Type Exports\n// ========================================\n\n/**\n * Re-export all blockchain-specific configuration types.\n * These types are enhanced through module augmentation when specific packages are installed.\n *\n * @since 1.0.0\n */\nexport type { AllChainConfigs, ChainIdentifierArray, InitialChains } from './types';\n"]}
1
+ {"version":3,"sources":["../src/providers/ErrorsProvider.tsx","../src/providers/NovaConnectLabelsProvider.tsx","../src/components/ConnectModal/ConnectModal.tsx","../src/providers/NovaConnectProvider.tsx","../src/index.ts"],"names":["DefaultToastError","title","rawError","onCopyComplete","errorType","isConnected","props","jsx","ToastError","DefaultContainer","labels","useNovaConnectLabels","ToastContainer","defaultShowErrorHandler","originalHandler","params","defaultDismissErrorHandler","defaultCopyCompleteHandler","success","defaultErrorTitleGenerator","defaultTitle","defaultErrorHashGenerator","defaultHash","ErrorsProvider","containerId","position","autoClose","draggable","customization","switchNetworkError","useSatelliteConnectStore","store","activeWallet","walletConnectionError","CustomToastError","Container","customShowErrorHandler","customDismissErrorHandler","customCopyCompleteHandler","customErrorTitleGenerator","customErrorHashGenerator","displayedErrorsRef","useRef","currentToastIdRef","errorState","useMemo","hasWalletError","hasSwitchError","defaultErrorTitle","errorTitle","defaultErrorHash","errorHash","dismissCurrentToast","useCallback","toast","handleCopyComplete","originalErrorHandler","t","r","k","defaultToastOptions","customToastOptions","toastOptions","error","showErrorToast","errorKey","useEffect","hasAnyError","primaryError","containerClasses","defaultContainerProps","ToastCloseButton","Bounce","containerProps","NovaConnectLabelsProvider","children","memoizedLabels","missingLabels","key","NovaConnectLabelsContext","getConnectorName","connectors","activeConnector","connector","c","formatWalletName","DefaultModalContainer","forwardRef","className","modalData","ref","cn","DefaultModalHeader","DialogHeader","DefaultInfoButton","onClick","InformationCircleIcon","DefaultTitle","DialogTitle","DefaultCloseButton","DialogClose","CloseIcon","DefaultMainContent","DefaultFooter","DefaultBackButton","standardButtonClasses","DefaultActionButton","disabled","loading","buttonConfig","DefaultActionDescription","DefaultEmptyState","_modalData","restProps","ConnectModal","memo","appChains","solanaRPCUrls","withImpersonated","isConnectModalOpen","setIsConnectModalOpen","setConnectModalContentType","setActiveConnector","setImpersonatedAddress","setIsConnected","connectModalContentType","selectedAdapter","setSelectedAdapter","impersonatedAddress","useNovaConnect","getConnectors","connect","useContext","SatelliteStoreContext","filteredConnectors","getFilteredConnectors","normalizedError","components","classNames","handlers","config","childComponents","ModalContainer","ModalHeader","InfoButton","Title","CloseButton","MainContent","Footer","BackButton","ActionButton","ActionDescription","CustomEmptyState","CustomDialog","Dialog","CustomDialogContent","DialogContent","CustomMotionDiv","motion","getTitle","goBackContentType","handleOpenChange","open","handleBack","handleInfoClick","handleConnect","walletType","adapter","getConnectChainId","waitFor","modalCloseTime","isConnectedTimer","delay","handleNetworkClick","handleConnectorClick","renderMainContent","NetworkSelections","jsxs","Fragment","NetworkTabs","ConnectorsSelections","AboutWallets","GetWallet","Connecting","ImpersonateForm","bottomButtonConfig","networksLinks","trimmedAddress","isAddress","impersonatedHelpers","OrbitAdapter","getWalletTypeFromConnectorName","getActionDescription","DefaultLabelsProvider","DefaultErrorsProvider","defaultLabelsMerge","defaultLabels","userLabels","deepMerge","defaultLabelsTransform","mergedLabels","defaultContextValueTransform","defaultValue","defaultProviderTreeRenderer","defaultTree","context","NovaConnectProvider","transactionPool","pulsarAdapter","withBalance","withChain","LabelsProvider","CustomErrorsProvider","customLabelsMerge","customLabelsTransform","customContextValueTransform","customProviderTreeRenderer","useState","isConnectedModalOpen","setIsConnectedModalOpen","isChainsListOpen","setIsChainsListOpen","isChainsListOpenMobile","setIsChainsListOpenMobile","connectedButtonStatus","setConnectedButtonStatus","connectedModalContentType","setConnectedModalContentType","providerContext","finalLabels","contextValue","errorsProviderElement","labelsProviderElement","connectModalElement","connectedModalElement","ConnectedModal","mainContentElement","NovaConnectProviderContext","defaultProviderTree","finalProviderTree","getBlockchainUtilities","getAllAdaptersStatus","checkEvmUtils","checkSolanaUtils","getEvmUtils","getSolanaUtils","initializeBlockchainSupport","results","preloadChainAdapters","errorMsg","isAdapterSupported"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @file This file contains the `ErrorsProvider` component, a customizable error toast provider with full styling control.\n */\n\nimport { ToastCloseButton } from '@tuwaio/nova-core';\nimport { ComponentPropsWithoutRef, ComponentType, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Bounce, toast, ToastContainer, type ToastPosition, type ToastTransition } from 'react-toastify';\n\nimport { ToastError, ToastErrorCustomization } from '../components';\nimport { useNovaConnectLabels } from '../hooks/useNovaConnectLabels';\nimport { useSatelliteConnectStore } from '../satellite';\n\n// --- Types for Customization ---\ntype CustomToastErrorProps = {\n title: string;\n rawError: string;\n onCopyComplete?: (success: boolean) => void;\n errorType: 'wallet' | 'switch' | null;\n isConnected: boolean;\n};\n\ntype CustomContainerProps = ComponentPropsWithoutRef<typeof ToastContainer>;\n\n/**\n * Customization options for ErrorsProvider component\n */\nexport type ErrorsProviderCustomization = {\n /** Override ToastContainer element props */\n containerProps?: Partial<ComponentPropsWithoutRef<typeof ToastContainer>>;\n /** Custom components */\n components?: {\n /** Custom ToastError component */\n ToastError?: ComponentType<CustomToastErrorProps>;\n /** Custom ToastContainer component */\n Container?: ComponentType<CustomContainerProps>;\n };\n /** Default ToastError customization (only used with default ToastError component) */\n toastErrorCustomization?: ToastErrorCustomization;\n /** Custom class name generators */\n classNames?: {\n /** Function to generate container classes */\n container?: (params: { hasErrors: boolean; errorType: 'wallet' | 'switch' | null }) => string;\n };\n /** Custom toast options generators */\n toastOptions?: {\n /** Function to generate toast options */\n error?: (params: {\n title: string;\n rawError: string;\n errorType: 'wallet' | 'switch' | null;\n isConnected: boolean;\n }) => Partial<Parameters<typeof toast.error>[1]>;\n };\n /** Custom logic handlers */\n handlers?: {\n /** Custom error display logic */\n showError?: (\n originalHandler: (title: string, rawError: string, errorKey: string) => void,\n params: { title: string; rawError: string; errorKey: string; errorType: 'wallet' | 'switch' | null },\n ) => void;\n /** Custom error dismissal logic */\n dismissError?: (originalHandler: () => void) => void;\n /** Custom copy complete handler */\n onCopyComplete?: (success: boolean, rawError: string, errorType: 'wallet' | 'switch' | null) => void;\n };\n /** Custom error title generator - does NOT customize labels, just allows title modification */\n errorTitle?: (defaultTitle: string, params: { errorType: 'wallet' | 'switch' | null }) => string;\n /** Custom error hash generator for deduplication */\n errorHash?: (\n defaultHash: string | null,\n params: { primaryError: string | null; errorType: 'wallet' | 'switch' | null },\n ) => string | null;\n};\n\nexport interface ErrorsProviderProps {\n /** Custom container ID for toast notifications */\n containerId?: string;\n /** Custom position for toast notifications */\n position?: ToastPosition;\n /** Auto close delay in milliseconds */\n autoClose?: number | false;\n /** Whether to enable drag to dismiss */\n draggable?: boolean;\n /** Customization options */\n customization?: ErrorsProviderCustomization;\n}\n\n// --- Default Sub-Components ---\nconst DefaultToastError = ({\n title,\n rawError,\n onCopyComplete,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errorType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isConnected,\n ...props\n}: CustomToastErrorProps & { customization?: ToastErrorCustomization }) => {\n return (\n <ToastError title={title} rawError={rawError} onCopyComplete={onCopyComplete} customization={props.customization} />\n );\n};\n\nconst DefaultContainer = (props: CustomContainerProps) => {\n const labels = useNovaConnectLabels();\n return <ToastContainer {...props} role=\"alert\" aria-live=\"assertive\" aria-label={labels.somethingWentWrong} />;\n};\n\n// --- Default Handlers ---\nconst defaultShowErrorHandler = (\n originalHandler: (title: string, rawError: string, errorKey: string) => void,\n params: { title: string; rawError: string; errorKey: string },\n) => {\n originalHandler(params.title, params.rawError, params.errorKey);\n};\n\nconst defaultDismissErrorHandler = (originalHandler: () => void) => {\n originalHandler();\n};\n\nconst defaultCopyCompleteHandler = (success: boolean, rawError: string) => {\n if (success && process.env.NODE_ENV === 'development') {\n console.log('Error copied to clipboard:', rawError.substring(0, 100));\n }\n};\n\nconst defaultErrorTitleGenerator = (defaultTitle: string) => defaultTitle;\n\nconst defaultErrorHashGenerator = (defaultHash: string | null) => defaultHash;\n\n/**\n * A highly customizable error toast provider with extensive styling options and component replacement capabilities.\n * Provides comprehensive customization for appearance, behavior, and error handling logic while maintaining accessibility.\n */\nexport function ErrorsProvider({\n containerId = 'nova-connect-errors',\n position = 'top-center',\n autoClose = 7000,\n draggable = false,\n customization,\n}: ErrorsProviderProps) {\n const labels = useNovaConnectLabels();\n\n const switchNetworkError = useSatelliteConnectStore((store) => store.switchNetworkError);\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n const walletConnectionError = useSatelliteConnectStore((store) => store.walletConnectionError);\n\n // Extract custom components and handlers\n const { ToastError: CustomToastError = DefaultToastError, Container = DefaultContainer } =\n customization?.components ?? {};\n\n const {\n showError: customShowErrorHandler = defaultShowErrorHandler,\n dismissError: customDismissErrorHandler = defaultDismissErrorHandler,\n onCopyComplete: customCopyCompleteHandler = defaultCopyCompleteHandler,\n } = customization?.handlers ?? {};\n\n const {\n errorTitle: customErrorTitleGenerator = defaultErrorTitleGenerator,\n errorHash: customErrorHashGenerator = defaultErrorHashGenerator,\n } = customization ?? {};\n\n // Track displayed errors to prevent duplicates\n const displayedErrorsRef = useRef<Set<string>>(new Set());\n const currentToastIdRef = useRef<string | null>(null);\n\n // Memoize error state\n const errorState = useMemo(() => {\n const hasWalletError = Boolean(walletConnectionError);\n const hasSwitchError = Boolean(switchNetworkError);\n const isConnected = Boolean(activeWallet?.isConnected);\n\n return {\n hasWalletError,\n hasSwitchError,\n isConnected,\n hasAnyError: hasWalletError || hasSwitchError,\n primaryError: walletConnectionError || switchNetworkError || null,\n errorType: (hasWalletError ? 'wallet' : hasSwitchError ? 'switch' : null) as 'wallet' | 'switch' | null,\n };\n }, [walletConnectionError, switchNetworkError, activeWallet?.isConnected]);\n\n // Memoize default error title based on type (using labels, NOT customizing them)\n const defaultErrorTitle = useMemo(() => {\n switch (errorState.errorType) {\n case 'wallet':\n return labels.walletConnectionError;\n case 'switch':\n return labels.errorWhenChainSwitching;\n default:\n return labels.somethingWentWrong;\n }\n }, [errorState.errorType, labels]);\n\n // Generate custom error title (allows modification but NOT labels customization)\n const errorTitle = useMemo(() => {\n return customErrorTitleGenerator(defaultErrorTitle, { errorType: errorState.errorType });\n }, [customErrorTitleGenerator, defaultErrorTitle, errorState.errorType]);\n\n // Generate default error hash for deduplication\n const defaultErrorHash = useMemo(() => {\n if (!errorState.primaryError) return null;\n return `${errorState.errorType}-${errorState.primaryError.substring(0, 50)}`;\n }, [errorState.primaryError, errorState.errorType]);\n\n // Generate custom error hash\n const errorHash = useMemo(() => {\n return customErrorHashGenerator(defaultErrorHash, {\n primaryError: errorState.primaryError,\n errorType: errorState.errorType,\n });\n }, [customErrorHashGenerator, defaultErrorHash, errorState.primaryError, errorState.errorType]);\n\n // Dismiss current toast\n const dismissCurrentToast = useCallback(() => {\n const originalHandler = () => {\n if (currentToastIdRef.current) {\n toast.dismiss(currentToastIdRef.current);\n currentToastIdRef.current = null;\n }\n toast.dismiss({ containerId });\n };\n customDismissErrorHandler(originalHandler);\n }, [containerId, customDismissErrorHandler]);\n\n // Handle copy complete\n const handleCopyComplete = useCallback(\n (success: boolean, rawError: string) => {\n customCopyCompleteHandler(success, rawError, errorState.errorType);\n },\n [customCopyCompleteHandler, errorState.errorType],\n );\n\n // Original handler for error display - using full customization object in dependencies\n const originalErrorHandler = useCallback(\n (t: string, r: string, k: string) => {\n // Dismiss previous toast first\n dismissCurrentToast();\n\n // Check if this error was already displayed\n if (displayedErrorsRef.current.has(k)) {\n return;\n }\n\n try {\n // Generate custom toast options\n const defaultToastOptions = {\n containerId,\n toastId: k,\n onClose: () => {\n displayedErrorsRef.current.delete(k);\n currentToastIdRef.current = null;\n },\n };\n\n const customToastOptions = customization?.toastOptions?.error?.({\n title: t,\n rawError: r,\n errorType: errorState.errorType,\n isConnected: errorState.isConnected,\n });\n\n const toastOptions = { ...defaultToastOptions, ...customToastOptions };\n\n // Use toast.error and capture the result properly\n toast.error(\n <CustomToastError\n title={t}\n rawError={r}\n errorType={errorState.errorType}\n isConnected={errorState.isConnected}\n onCopyComplete={(success) => handleCopyComplete(success, r)}\n customization={customization?.toastErrorCustomization}\n />,\n toastOptions,\n );\n\n displayedErrorsRef.current.add(k);\n currentToastIdRef.current = k;\n } catch (error) {\n console.error('Failed to show error toast:', error);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n dismissCurrentToast,\n containerId,\n customization?.toastOptions?.error,\n customization?.toastErrorCustomization,\n CustomToastError,\n errorState.errorType,\n errorState.isConnected,\n handleCopyComplete,\n ],\n );\n\n // Show error toast\n const showErrorToast = useCallback(\n (title: string, rawError: string, errorKey: string) => {\n customShowErrorHandler(originalErrorHandler, { title, rawError, errorKey, errorType: errorState.errorType });\n },\n [originalErrorHandler, customShowErrorHandler, errorState.errorType],\n );\n\n // Main effect to handle error display logic\n useEffect(() => {\n const { hasAnyError, isConnected, primaryError } = errorState;\n\n // Clear all errors when connected successfully\n if (isConnected && !hasAnyError) {\n dismissCurrentToast();\n displayedErrorsRef.current.clear();\n return;\n }\n\n // Show error if present and not already displayed\n if (hasAnyError && primaryError && errorHash) {\n // For connected state, only show switch network errors\n if (isConnected && errorState.errorType !== 'switch') {\n return;\n }\n\n showErrorToast(errorTitle, primaryError, errorHash);\n }\n }, [errorState, errorTitle, errorHash, showErrorToast, dismissCurrentToast]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n dismissCurrentToast();\n // eslint-disable-next-line\n displayedErrorsRef.current.clear();\n };\n }, [dismissCurrentToast]);\n\n // Generate container classes\n const containerClasses = useMemo(() => {\n if (customization?.classNames?.container) {\n return customization.classNames.container({\n hasErrors: errorState.hasAnyError,\n errorType: errorState.errorType,\n });\n }\n\n return 'novacon:p-0 novacon:bg-transparent';\n }, [customization, errorState.hasAnyError, errorState.errorType]);\n\n // Memoize default container props\n const defaultContainerProps = useMemo(\n () => ({\n containerId,\n position,\n closeOnClick: false,\n icon: false as const,\n closeButton: ToastCloseButton,\n autoClose,\n hideProgressBar: false,\n newestOnTop: false,\n pauseOnFocusLoss: false,\n draggable,\n pauseOnHover: true,\n theme: 'light' as const,\n transition: Bounce as ToastTransition,\n }),\n [containerId, position, autoClose, draggable],\n );\n\n // Merge container props (NO labels passed to custom components!)\n const containerProps = useMemo(\n () => ({\n ...defaultContainerProps,\n ...customization?.containerProps,\n className: containerClasses,\n }),\n [defaultContainerProps, customization?.containerProps, containerClasses],\n );\n\n return <Container {...containerProps} />;\n}\n\n// Add display name for better debugging\nErrorsProvider.displayName = 'ErrorsProvider';\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 { ReactNode, useMemo } from 'react';\n\nimport { NovaConnectLabelsContext } from '../hooks/useNovaConnectLabels';\nimport { NovaConnectLabels } from '../i18n';\n\ninterface NovaConnectLabelsProviderProps {\n /** An object containing the custom labels */\n labels: NovaConnectLabels;\n /** The child components to render */\n children: ReactNode;\n}\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 * The provider uses React.memo optimization and validates labels in development mode.\n *\n * @example\n * ```typescript\n * import { NovaConnectLabelsProvider } from './NovaConnectLabelsProvider';\n *\n * function App() {\n * const customLabels = {\n * connectWallet: 'Подключить кошелек',\n * disconnect: 'Отключиться',\n * };\n *\n * return (\n * <NovaConnectLabelsProvider labels={customLabels}>\n * <YourApp />\n * </NovaConnectLabelsProvider>\n * );\n * }\n * ```\n */\nexport function NovaConnectLabelsProvider({ labels, children }: NovaConnectLabelsProviderProps) {\n // Memoize labels to prevent unnecessary re-renders\n const memoizedLabels = useMemo(() => labels, [labels]);\n\n // Development-only validation\n if (process.env.NODE_ENV === 'development') {\n // Validate that labels object is provided\n if (!labels || typeof labels !== 'object') {\n console.warn('NovaConnectLabelsProvider: labels prop should be an object');\n }\n\n // Check for missing required labels (basic validation)\n const requiredLabels = ['connectWallet', 'disconnect', 'connecting', 'connected', 'error', 'success'] as const;\n\n const missingLabels = requiredLabels.filter((key) => !(key in labels));\n if (missingLabels.length > 0) {\n console.warn(`NovaConnectLabelsProvider: Missing required labels: ${missingLabels.join(', ')}`);\n }\n }\n\n return <NovaConnectLabelsContext.Provider value={memoizedLabels}>{children}</NovaConnectLabelsContext.Provider>;\n}\n\n// Add display name for better debugging\nNovaConnectLabelsProvider.displayName = 'NovaConnectLabelsProvider';\n","import { InformationCircleIcon } from '@heroicons/react/24/outline';\nimport {\n CloseIcon,\n cn,\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n standardButtonClasses,\n} from '@tuwaio/nova-core';\nimport {\n delay,\n formatWalletName,\n getWalletTypeFromConnectorName,\n impersonatedHelpers,\n OrbitAdapter,\n waitFor,\n WalletType,\n} from '@tuwaio/orbit-core';\nimport { motion } from 'framer-motion';\nimport { isAddress } from 'gill';\nimport React, {\n ComponentPropsWithoutRef,\n ComponentType,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from 'react';\n\nimport { ConnectContentType, NovaConnectProviderProps, useNovaConnect, useNovaConnectLabels } from '../../hooks';\nimport { Connector, SatelliteStoreContext, useSatelliteConnectStore } from '../../satellite';\nimport { InitialChains } from '../../types';\nimport { getConnectChainId, getFilteredConnectors, networksLinks } from '../../utils';\nimport { AboutWallets, AboutWalletsCustomization } from './AboutWallets';\nimport { Connecting, ConnectingCustomization } from './Connecting';\nimport { ConnectorsSelections, ConnectorsSelectionsCustomization } from './ConnectorsSelections';\nimport { GetWallet, GetWalletCustomization } from './GetWallet';\nimport { ImpersonateForm, ImpersonateFormCustomization } from './ImpersonatedForm';\nimport { NetworkSelections, NetworkSelectionsCustomization } from './NetworkSelections';\nimport { NetworkTabs, NetworkTabsCustomization } from './NetworkTabs';\n\n/**\n * Interface for grouped wallet connectors\n */\nexport interface GroupedConnector {\n /** Name of the wallet connector */\n name: string;\n /** Optional icon for the wallet */\n icon?: string;\n /** Array of supported network adapters */\n adapters: OrbitAdapter[];\n /** Array of connectors with their associated adapters */\n connectors: (Connector & { adapter: OrbitAdapter })[];\n}\n\n/**\n * Connect modal data for customization context\n */\nexport interface ConnectModalData {\n /** Current content type being displayed */\n contentType: ConnectContentType;\n /** Selected network adapter */\n selectedAdapter: OrbitAdapter | undefined;\n /** Active connector name */\n activeConnector: string | undefined;\n /** Impersonated address */\n impersonatedAddress: string;\n /** Whether connection is established */\n isConnected: boolean;\n /** Whether modal is open */\n isOpen: boolean;\n /** Connection error if any */\n error: Error | string | null | undefined;\n /** Available connectors */\n connectors: Record<string, Connector[]>;\n /** Filtered connectors for current adapter */\n filteredConnectors: GroupedConnector[];\n /** Current labels from i18n */\n labels: ReturnType<typeof useNovaConnectLabels>;\n}\n\n/**\n * Bottom button configuration\n */\nexport interface BottomButtonConfig {\n /** Button title text */\n title: string;\n /** Button click handler */\n onClick: () => void | Promise<void>;\n /** Whether button is disabled */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n}\n\n// --- Component Props Types ---\ntype ModalContainerProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype ModalHeaderProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype InfoButtonProps = {\n className?: string;\n onClick: () => void;\n 'aria-label'?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype TitleProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype CloseButtonProps = {\n className?: string;\n onClick: () => void;\n 'aria-label'?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype MainContentProps = {\n className?: string;\n children: React.ReactNode;\n role?: string;\n id?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype FooterProps = {\n className?: string;\n children: React.ReactNode;\n role?: string;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\ntype BackButtonProps = {\n className?: string;\n onClick: () => void;\n 'aria-label'?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype ActionButtonProps = {\n className?: string;\n onClick: () => void | Promise<void>;\n 'aria-describedby'?: string;\n children: React.ReactNode;\n disabled?: boolean;\n loading?: boolean;\n modalData: ConnectModalData;\n buttonConfig: BottomButtonConfig;\n} & React.RefAttributes<HTMLButtonElement>;\n\ntype ActionDescriptionProps = {\n id?: string;\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLSpanElement>;\n\ntype ModalEmptyProps = {\n className?: string;\n children: React.ReactNode;\n modalData: ConnectModalData;\n} & React.RefAttributes<HTMLDivElement>;\n\n/**\n * Customization options for ConnectModal component\n */\nexport type ConnectModalCustomization = {\n /** Custom components */\n components?: {\n /** Custom modal container */\n ModalContainer?: ComponentType<ModalContainerProps>;\n /** Custom modal header */\n ModalHeader?: ComponentType<ModalHeaderProps>;\n /** Custom info button */\n InfoButton?: ComponentType<InfoButtonProps>;\n /** Custom title */\n Title?: ComponentType<TitleProps>;\n /** Custom close button */\n CloseButton?: ComponentType<CloseButtonProps>;\n /** Custom main content wrapper */\n MainContent?: ComponentType<MainContentProps>;\n /** Custom footer */\n Footer?: ComponentType<FooterProps>;\n /** Custom back button */\n BackButton?: ComponentType<BackButtonProps>;\n /** Custom action button */\n ActionButton?: ComponentType<ActionButtonProps>;\n /** Custom action description */\n ActionDescription?: ComponentType<ActionDescriptionProps>;\n /** Custom dialog */\n Dialog?: ComponentType<ComponentPropsWithoutRef<typeof Dialog>>;\n /** Custom dialog content */\n DialogContent?: ComponentType<ComponentPropsWithoutRef<typeof DialogContent>>;\n /** Custom motion wrapper */\n MotionDiv?: ComponentType<ComponentPropsWithoutRef<typeof motion.div>>;\n /** Custom empty state */\n EmptyState?: ComponentType<ModalEmptyProps>;\n };\n /** Custom class name generators */\n classNames?: {\n /** Function to generate modal container classes */\n modalContainer?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate header classes */\n header?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate info button classes */\n infoButton?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate title classes */\n title?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate close button classes */\n closeButton?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate main content classes */\n mainContent?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate footer classes */\n footer?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate back button classes */\n backButton?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate action button classes */\n actionButton?: (params: { modalData: ConnectModalData; buttonConfig: BottomButtonConfig }) => string;\n /** Function to generate action description classes */\n actionDescription?: (params: { modalData: ConnectModalData }) => string;\n /** Function to generate action description classes */\n emptyConnectors?: (params: { modalData: ConnectModalData }) => string;\n };\n /** Custom event handlers */\n handlers?: {\n /** Custom modal open/close handler */\n onOpenChange?: (open: boolean, modalData: ConnectModalData) => void;\n /** Custom back navigation handler */\n onBack?: (modalData: ConnectModalData, originalHandler: () => void) => void;\n /** Custom info button click handler */\n onInfoClick?: (modalData: ConnectModalData) => void;\n /** Custom action button handlers for different content types */\n onActionClick?: {\n connectors?: (modalData: ConnectModalData) => void;\n getWallet?: (modalData: ConnectModalData) => void;\n about?: (modalData: ConnectModalData) => void;\n impersonate?: (modalData: ConnectModalData) => Promise<void>;\n connecting?: (modalData: ConnectModalData) => Promise<void>;\n };\n };\n /** Configuration options */\n config?: {\n /** Custom ARIA labels */\n ariaLabels?: {\n modal?: (modalData: ConnectModalData) => string;\n infoButton?: (modalData: ConnectModalData) => string;\n closeButton?: (modalData: ConnectModalData) => string;\n backButton?: (modalData: ConnectModalData) => string;\n mainContent?: (modalData: ConnectModalData) => string;\n };\n /** Animation configuration */\n animation?: {\n /** Layout transition duration */\n layoutDuration?: number;\n /** Disable animations */\n disabled?: boolean;\n };\n };\n /** Child component customizations */\n childComponents?: {\n /** AboutWallets customization */\n aboutWallets?: AboutWalletsCustomization;\n /** Connecting customization */\n connecting?: ConnectingCustomization;\n /** ConnectorsSelections customization */\n connectorsSelections?: ConnectorsSelectionsCustomization;\n /** GetWallet customization */\n getWallet?: GetWalletCustomization;\n /** ImpersonateForm customization */\n impersonateForm?: ImpersonateFormCustomization;\n /** NetworkSelections customization */\n networkSelections?: NetworkSelectionsCustomization;\n /** NetworkTabs customization */\n networkTabs?: NetworkTabsCustomization;\n };\n};\n\n/**\n * Helper function to safely get connector name from array\n */\nfunction getConnectorName(\n connectors: Connector[] | undefined,\n activeConnector: string | undefined,\n): string | undefined {\n if (!connectors || !Array.isArray(connectors) || !activeConnector) {\n return undefined;\n }\n\n const connector = connectors.find((c) => {\n if (c && typeof c === 'object' && 'name' in c && typeof c.name === 'string') {\n return formatWalletName(c.name) === activeConnector;\n }\n return false;\n });\n\n return connector && typeof connector === 'object' && 'name' in connector && typeof connector.name === 'string'\n ? connector.name\n : undefined;\n}\n\n// --- Default Sub-Components ---\nconst DefaultModalContainer = forwardRef<HTMLDivElement, ModalContainerProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('novacon:relative novacon:flex novacon:w-full novacon:flex-col', className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nDefaultModalContainer.displayName = 'DefaultModalContainer';\n\nconst DefaultModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <DialogHeader>{children}</DialogHeader>\n </div>\n ),\n);\nDefaultModalHeader.displayName = 'DefaultModalHeader';\n\nconst DefaultInfoButton = forwardRef<HTMLButtonElement, InfoButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, modalData, ...props }, ref) => (\n <button\n ref={ref}\n className={cn(\n 'novacon:cursor-pointer novacon:text-[var(--tuwa-text-secondary)] novacon:transition novacon:duration-300 novacon:ease-in-out novacon:active:scale-75 novacon:hover:scale-110',\n className,\n )}\n type=\"button\"\n onClick={onClick}\n {...props}\n >\n <InformationCircleIcon width={20} height={20} className=\"novacon:mr-1\" aria-hidden=\"true\" />\n </button>\n ),\n);\nDefaultInfoButton.displayName = 'DefaultInfoButton';\n\nconst DefaultTitle = forwardRef<HTMLDivElement, TitleProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <DialogTitle ref={ref} className={cn('novacon:flex novacon:items-center', className)} {...props}>\n {children}\n </DialogTitle>\n ),\n);\nDefaultTitle.displayName = 'DefaultTitle';\n\nconst DefaultCloseButton = forwardRef<HTMLButtonElement, CloseButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, modalData, ...props }, ref) => (\n <DialogClose asChild>\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'novacon:cursor-pointer novacon:rounded-full novacon:p-1 novacon:text-[var(--tuwa-text-tertiary)] novacon:transition-colors novacon:hover:bg-[var(--tuwa-bg-muted)] novacon:hover:text-[var(--tuwa-text-primary)]',\n className,\n )}\n {...props}\n >\n <CloseIcon aria-hidden=\"true\" />\n </button>\n </DialogClose>\n ),\n);\nDefaultCloseButton.displayName = 'DefaultCloseButton';\n\nconst DefaultMainContent = forwardRef<HTMLDivElement, MainContentProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <main\n ref={ref}\n className={cn('novacon:flex novacon:flex-col novacon:gap-4 novacon:p-4', className)}\n id=\"connect-modal-content\"\n role=\"main\"\n {...props}\n >\n {children}\n </main>\n ),\n);\nDefaultMainContent.displayName = 'DefaultMainContent';\n\nconst DefaultFooter = forwardRef<HTMLDivElement, FooterProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <footer\n ref={ref}\n className={cn(\n 'novacon:flex novacon:w-full novacon:items-center novacon:justify-between novacon:border-t novacon:border-[var(--tuwa-border-primary)] novacon:p-4',\n className,\n )}\n role=\"contentinfo\"\n {...props}\n >\n {children}\n </footer>\n ),\n);\nDefaultFooter.displayName = 'DefaultFooter';\n\nconst DefaultBackButton = forwardRef<HTMLButtonElement, BackButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, children, modalData, ...props }, ref) => (\n <button ref={ref} type=\"button\" onClick={onClick} className={cn(standardButtonClasses, className)} {...props}>\n {children}\n </button>\n ),\n);\nDefaultBackButton.displayName = 'DefaultBackButton';\n\nconst DefaultActionButton = forwardRef<HTMLButtonElement, ActionButtonProps>(\n // eslint-disable-next-line\n ({ className, onClick, children, disabled, loading, buttonConfig, modalData, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled || loading}\n className={cn(standardButtonClasses, className)}\n {...props}\n >\n {loading ? 'Loading...' : children}\n </button>\n ),\n);\nDefaultActionButton.displayName = 'DefaultActionButton';\n\nconst DefaultActionDescription = forwardRef<HTMLSpanElement, ActionDescriptionProps>(\n // eslint-disable-next-line\n ({ className, children, modalData, ...props }, ref) => (\n <span ref={ref} className={cn('novacon:sr-only', className)} {...props}>\n {children}\n </span>\n ),\n);\nDefaultActionDescription.displayName = 'DefaultActionDescription';\n\nconst DefaultEmptyState = forwardRef<HTMLDivElement, ModalEmptyProps>(({ children, className, ...props }, ref) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { modalData: _modalData, ...restProps } = props;\n return (\n <div ref={ref} className={className} {...restProps}>\n {children}\n </div>\n );\n});\nDefaultEmptyState.displayName = 'DefaultEmptyState';\n\n/**\n * Props for the ConnectModal component\n */\nexport interface ConnectModalProps extends InitialChains, Pick<NovaConnectProviderProps, 'withImpersonated'> {\n /** Customization options */\n customization?: ConnectModalCustomization;\n}\n\n/**\n * ConnectModal component - Main modal dialog for wallet connection workflow\n *\n * This component provides a comprehensive wallet connection interface with:\n * - Multi-step connection flow with different content types\n * - Network selection and adapter filtering\n * - Support for regular wallets and impersonated wallets\n * - Educational content about wallets and networks\n * - Error handling and retry mechanisms\n * - Full accessibility support with ARIA labels\n * - Keyboard navigation and screen reader compatibility\n *\n * Modal content types:\n * - 'connectors': Main wallet selection screen with network tabs\n * - 'network': Network selection for multi-network wallets\n * - 'connecting': Connection progress and status display\n * - 'about': Educational content about wallets\n * - 'getWallet': Onboarding flow for users without wallets\n * - 'impersonate': Form for wallet address impersonation\n *\n * Visual features:\n * - Responsive design adapting to different screen sizes\n * - Smooth transitions between different content states\n * - Loading states and progress indicators\n * - Clear navigation with back/forward buttons\n * - Contextual action buttons in footer\n *\n * Accessibility features:\n * - Proper ARIA labels and roles for screen readers\n * - Keyboard navigation support with focus management\n * - Semantic HTML structure for better navigation\n * - Screen reader announcements for state changes\n * - High contrast compatible styling\n *\n * @param appChains - Configuration for supported blockchain networks\n * @param solanaRPCUrls - RPC URLs configuration for Solana network\n * @param store - Wallet store instance\n * @param withImpersonated - Whether to show impersonated wallet option\n * @param customization - Customization options for the component\n * @returns JSX element representing the connection modal dialog\n *\n * @example\n * ```tsx\n * <ConnectModal\n * appChains={{\n * [OrbitAdapter.EVM]: [1, 137, 56], // Ethereum, Polygon, BSC\n * [OrbitAdapter.SOLANA]: ['devnet', 'mainnet-beta']\n * }}\n * solanaRPCUrls={{\n * 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n * 'devnet': 'https://api.devnet.solana.com'\n * }}\n * store={walletStore}\n * withImpersonated\n * customization={{\n * classNames: {\n * title: ({ modalData }) =>\n * modalData.contentType === 'about' ? 'custom-about-title' : ''\n * }\n * }}\n * />\n * ```\n *\n * @public\n */\nexport const ConnectModal = memo<ConnectModalProps>(\n ({ appChains, solanaRPCUrls, withImpersonated, customization = {} }) => {\n const {\n isConnectModalOpen,\n setIsConnectModalOpen,\n setConnectModalContentType,\n setActiveConnector,\n setImpersonatedAddress,\n setIsConnected,\n connectModalContentType,\n selectedAdapter,\n setSelectedAdapter,\n isConnected,\n activeConnector,\n impersonatedAddress,\n } = useNovaConnect();\n const walletConnectionError = useSatelliteConnectStore((store) => store.walletConnectionError);\n const getConnectors = useSatelliteConnectStore((store) => store.getConnectors);\n const connect = useSatelliteConnectStore((store) => store.connect);\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n\n const labels = useNovaConnectLabels();\n const store = useContext(SatelliteStoreContext);\n\n // Memoize connectors to avoid recalculation on every render\n const connectors = useMemo(() => {\n if (isConnectModalOpen) {\n return getConnectors();\n }\n }, [isConnectModalOpen, getConnectors]);\n\n const filteredConnectors = useMemo(\n () => getFilteredConnectors({ connectors: connectors!, selectedAdapter }),\n [connectors, selectedAdapter],\n );\n\n // Convert error to Error object if it's a string\n const normalizedError = useMemo(() => {\n if (!walletConnectionError) return null;\n if (typeof walletConnectionError === 'string') {\n return new Error(walletConnectionError);\n }\n return walletConnectionError;\n }, [walletConnectionError]);\n\n // Memoize modal data for customization context\n const modalData = useMemo<ConnectModalData>(\n () => ({\n contentType: connectModalContentType,\n selectedAdapter,\n activeConnector,\n impersonatedAddress,\n isConnected,\n isOpen: isConnectModalOpen,\n error: normalizedError,\n connectors: connectors!,\n filteredConnectors,\n labels,\n }),\n [\n connectModalContentType,\n selectedAdapter,\n activeConnector,\n impersonatedAddress,\n isConnected,\n isConnectModalOpen,\n normalizedError,\n connectors,\n filteredConnectors,\n labels,\n ],\n );\n\n // Reset modal state when opened\n useEffect(() => {\n if (isConnectModalOpen) {\n setConnectModalContentType('connectors');\n setSelectedAdapter(undefined);\n setActiveConnector(undefined);\n setImpersonatedAddress('');\n setIsConnected(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isConnectModalOpen]);\n\n // Extract customization options\n const { components = {}, classNames = {}, handlers = {}, config = {}, childComponents = {} } = customization;\n\n // Component selections with defaults\n const ModalContainer = components.ModalContainer || DefaultModalContainer;\n const ModalHeader = components.ModalHeader || DefaultModalHeader;\n const InfoButton = components.InfoButton || DefaultInfoButton;\n const Title = components.Title || DefaultTitle;\n const CloseButton = components.CloseButton || DefaultCloseButton;\n const MainContent = components.MainContent || DefaultMainContent;\n const Footer = components.Footer || DefaultFooter;\n const BackButton = components.BackButton || DefaultBackButton;\n const ActionButton = components.ActionButton || DefaultActionButton;\n const ActionDescription = components.ActionDescription || DefaultActionDescription;\n const CustomEmptyState = components.EmptyState || DefaultEmptyState;\n const CustomDialog = components.Dialog || Dialog;\n const CustomDialogContent = components.DialogContent || DialogContent;\n const CustomMotionDiv = components.MotionDiv || motion.div;\n\n /**\n * Gets the appropriate title for the current modal content\n */\n const getTitle = useCallback(() => {\n switch (connectModalContentType) {\n case 'about':\n return labels.aboutWallets;\n case 'getWallet':\n return labels.getWallet;\n case 'connecting':\n if (selectedAdapter && activeConnector && connectors) {\n const connectorName = getConnectorName(connectors[selectedAdapter], activeConnector);\n return connectorName || labels.connectingEllipsis;\n }\n return labels.connectingEllipsis;\n case 'impersonate':\n return labels.connectImpersonatedWallet;\n default:\n return labels.connectWallet;\n }\n }, [connectModalContentType, selectedAdapter, activeConnector, connectors, labels]);\n\n /**\n * Determines the content type to navigate back to\n */\n const goBackContentType = useCallback((): ConnectContentType => {\n switch (connectModalContentType) {\n default:\n return 'connectors';\n }\n }, [connectModalContentType]);\n\n /**\n * Handle modal open/close with custom handler\n */\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (handlers?.onOpenChange) {\n handlers.onOpenChange(open, modalData);\n } else {\n setIsConnectModalOpen(open);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [handlers?.onOpenChange, modalData, setIsConnectModalOpen],\n );\n\n /**\n * Handle back navigation with custom handler\n */\n const handleBack = useCallback(() => {\n const originalHandler = () => setConnectModalContentType(goBackContentType());\n\n if (handlers?.onBack) {\n handlers.onBack(modalData, originalHandler);\n } else {\n originalHandler();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [handlers?.onBack, modalData, setConnectModalContentType, goBackContentType]);\n\n /**\n * Handle info button click\n */\n const handleInfoClick = useCallback(() => {\n if (handlers?.onInfoClick) {\n handlers.onInfoClick(modalData);\n } else {\n setConnectModalContentType('about');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [handlers?.onInfoClick, modalData, setConnectModalContentType]);\n\n /**\n * Generic connection handler\n */\n const handleConnect = useCallback(\n async (walletType: WalletType, adapter: OrbitAdapter) => {\n await connect({\n walletType,\n chainId: getConnectChainId({ appChains, selectedAdapter: adapter, solanaRPCUrls }),\n });\n\n try {\n await waitFor(() => store?.getState().activeWallet?.isConnected);\n setIsConnected(true);\n const modalCloseTime = setTimeout(() => setIsConnectModalOpen(false), 400);\n const isConnectedTimer = setTimeout(() => setIsConnected(false), 500);\n await delay(null, 500);\n clearTimeout(modalCloseTime);\n clearTimeout(isConnectedTimer);\n } catch (error) {\n console.error(error);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [connect, appChains, selectedAdapter, solanaRPCUrls],\n );\n\n /**\n * Handle network selection click\n */\n const handleNetworkClick = useCallback(\n async (adapter: OrbitAdapter, walletType: WalletType) => {\n setSelectedAdapter(adapter);\n setConnectModalContentType('connecting');\n await handleConnect(walletType, adapter);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [handleConnect],\n );\n\n /**\n * Handle connector selection click\n */\n const handleConnectorClick = useCallback(\n (connector: GroupedConnector) => {\n setActiveConnector(formatWalletName(connector.name));\n if (connector.adapters.length === 1) {\n setSelectedAdapter(connector.adapters[0]);\n setConnectModalContentType(\n formatWalletName(connector.name) === 'impersonatedwallet' ? 'impersonate' : 'connecting',\n );\n } else if (selectedAdapter) {\n setConnectModalContentType(\n formatWalletName(connector.name) === 'impersonatedwallet' ? 'impersonate' : 'connecting',\n );\n } else if (formatWalletName(connector.name) === 'impersonatedwallet') {\n setConnectModalContentType('impersonate');\n } else {\n setConnectModalContentType('network');\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selectedAdapter],\n );\n\n /**\n * Renders the main content based on current modal state\n */\n const renderMainContent = useCallback(() => {\n switch (connectModalContentType) {\n case 'network':\n return (\n <NetworkSelections\n activeConnector={activeConnector}\n connectors={filteredConnectors}\n onClick={handleNetworkClick}\n customization={childComponents.networkSelections}\n />\n );\n case 'connectors':\n return connectors ? (\n <>\n <NetworkTabs\n networks={Object.keys(connectors) as OrbitAdapter[]}\n selectedAdapter={selectedAdapter}\n onSelect={(adapter) => setSelectedAdapter(adapter)}\n customization={childComponents.networkTabs}\n />\n\n <ConnectorsSelections\n isOnlyOneNetwork={Object.keys(connectors).length === 1}\n connectors={filteredConnectors}\n selectedAdapter={selectedAdapter}\n onClick={handleConnectorClick}\n setContentType={setConnectModalContentType}\n appChains={appChains}\n solanaRPCUrls={solanaRPCUrls}\n setIsConnected={setIsConnected}\n setIsOpen={setIsConnectModalOpen}\n withImpersonated={withImpersonated}\n customization={childComponents.connectorsSelections}\n />\n </>\n ) : (\n <CustomEmptyState className={classNames.emptyConnectors?.({ modalData })} modalData={modalData}>\n No connectors available\n </CustomEmptyState>\n );\n case 'about':\n return <AboutWallets customization={childComponents.aboutWallets} />;\n case 'getWallet':\n return <GetWallet customization={childComponents.getWallet} />;\n case 'connecting':\n return (\n <Connecting\n selectedAdapter={selectedAdapter}\n connectors={filteredConnectors}\n activeConnector={activeConnector}\n isConnected={isConnected}\n customization={childComponents.connecting}\n />\n );\n case 'impersonate':\n return (\n <ImpersonateForm\n impersonatedAddress={impersonatedAddress}\n setImpersonatedAddress={setImpersonatedAddress}\n customization={childComponents.impersonateForm}\n />\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n connectModalContentType,\n activeConnector,\n filteredConnectors,\n handleNetworkClick,\n childComponents,\n connectors,\n selectedAdapter,\n handleConnectorClick,\n isConnected,\n impersonatedAddress,\n ]);\n\n /**\n * Gets configuration for the bottom action button\n */\n const getBottomButtonConfig = useCallback((): BottomButtonConfig | undefined => {\n switch (connectModalContentType) {\n case 'connectors':\n return {\n title: labels.iDontHaveWallet,\n onClick: () => {\n if (handlers.onActionClick?.connectors) {\n handlers.onActionClick.connectors(modalData);\n } else {\n setConnectModalContentType('getWallet');\n }\n },\n };\n case 'getWallet':\n return {\n title: labels.choseWallet,\n onClick: () => {\n if (handlers.onActionClick?.getWallet) {\n handlers.onActionClick.getWallet(modalData);\n } else {\n window.open(\n networksLinks[selectedAdapter ?? (Object.keys(connectors!)[0] as OrbitAdapter)]?.choseWallet,\n '_blank',\n 'noopener,noreferrer',\n );\n }\n },\n };\n case 'about':\n return {\n title: labels.learnMore,\n onClick: () => {\n if (handlers.onActionClick?.about) {\n handlers.onActionClick.about(modalData);\n } else {\n window.open(\n networksLinks[selectedAdapter ?? (Object.keys(connectors!)[0] as OrbitAdapter)]?.about,\n '_blank',\n 'noopener,noreferrer',\n );\n }\n },\n };\n case 'impersonate':\n return {\n title: labels.connect,\n onClick: async () => {\n if (handlers.onActionClick?.impersonate) {\n await handlers.onActionClick.impersonate(modalData);\n } else {\n const trimmedAddress = impersonatedAddress.trim();\n if (\n walletConnectionError ||\n !trimmedAddress ||\n isAddress(trimmedAddress) ||\n !!activeWallet?.isConnected\n )\n return;\n\n impersonatedHelpers.setImpersonated(trimmedAddress);\n await handleConnect(\n `${selectedAdapter ?? OrbitAdapter.EVM}:impersonatedwallet` as WalletType,\n selectedAdapter ?? OrbitAdapter.EVM,\n );\n setConnectModalContentType('connecting');\n }\n },\n };\n case 'connecting':\n return walletConnectionError && selectedAdapter && activeConnector\n ? {\n title: labels.tryAgain,\n onClick: async () => {\n if (handlers.onActionClick?.connecting) {\n await handlers.onActionClick.connecting(modalData);\n } else {\n await handleConnect(\n getWalletTypeFromConnectorName(selectedAdapter, activeConnector) as WalletType,\n selectedAdapter,\n );\n }\n },\n }\n : undefined;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n connectModalContentType,\n labels,\n handlers,\n modalData,\n selectedAdapter,\n connectors,\n impersonatedAddress,\n walletConnectionError,\n handleConnect,\n activeConnector,\n ]);\n\n const bottomButtonConfig = getBottomButtonConfig();\n\n /**\n * Get action description text\n */\n const getActionDescription = useCallback(() => {\n switch (connectModalContentType) {\n case 'getWallet':\n return 'Opens external wallet selection page';\n case 'about':\n return 'Opens external documentation';\n case 'impersonate':\n return 'Connects with impersonated wallet address';\n case 'connecting':\n return 'Retries wallet connection';\n default:\n return '';\n }\n }, [connectModalContentType]);\n\n return (\n <CustomDialog open={isConnectModalOpen} onOpenChange={handleOpenChange}>\n <CustomDialogContent className={cn('novacon:w-full novacon:sm:max-w-md')}>\n <CustomMotionDiv\n layout\n transition={{\n layout: {\n duration: config.animation?.disabled ? 0 : (config.animation?.layoutDuration ?? 0.0001),\n },\n }}\n >\n <ModalContainer className={classNames.modalContainer?.({ modalData })} modalData={modalData}>\n <ModalHeader className={classNames.header?.({ modalData })} modalData={modalData}>\n <Title className={classNames.title?.({ modalData })} modalData={modalData}>\n {connectModalContentType === 'connectors' && (\n <InfoButton\n className={classNames.infoButton?.({ modalData })}\n onClick={handleInfoClick}\n aria-label={\n config.ariaLabels?.infoButton?.(modalData) || `${labels.learnMore} ${labels.aboutWallets}`\n }\n modalData={modalData}\n />\n )}\n {getTitle()}\n </Title>\n\n <CloseButton\n className={classNames.closeButton?.({ modalData })}\n onClick={() => handleOpenChange(false)}\n aria-label={config.ariaLabels?.closeButton?.(modalData) || labels.closeModal}\n modalData={modalData}\n />\n </ModalHeader>\n\n <MainContent className={classNames.mainContent?.({ modalData })} modalData={modalData}>\n {renderMainContent()}\n </MainContent>\n\n <Footer className={classNames.footer?.({ modalData })} modalData={modalData}>\n <div className=\"novacon:flex novacon:items-center novacon:gap-4\">\n {connectModalContentType !== 'connectors' && (\n <BackButton\n className={classNames.backButton?.({ modalData })}\n onClick={handleBack}\n aria-label={config.ariaLabels?.backButton?.(modalData) || `${labels.back} to previous step`}\n modalData={modalData}\n >\n {labels.back}\n </BackButton>\n )}\n </div>\n {bottomButtonConfig && (\n <div className=\"novacon:flex novacon:items-center novacon:gap-3\">\n <ActionButton\n className={classNames.actionButton?.({ modalData, buttonConfig: bottomButtonConfig })}\n onClick={bottomButtonConfig.onClick}\n disabled={bottomButtonConfig.disabled}\n loading={bottomButtonConfig.loading}\n aria-describedby=\"bottom-action-description\"\n modalData={modalData}\n buttonConfig={bottomButtonConfig}\n >\n {bottomButtonConfig.title}\n </ActionButton>\n <ActionDescription\n id=\"bottom-action-description\"\n className={classNames.actionDescription?.({ modalData })}\n modalData={modalData}\n >\n {getActionDescription()}\n </ActionDescription>\n </div>\n )}\n </Footer>\n </ModalContainer>\n </CustomMotionDiv>\n </CustomDialogContent>\n </CustomDialog>\n );\n },\n);\n\nConnectModal.displayName = 'ConnectModal';\n","/**\n * @file Main NovaConnect provider component with comprehensive customization capabilities.\n * @module NovaConnectProvider\n */\n\nimport { deepMerge } from '@tuwaio/nova-core';\nimport { OrbitAdapter } from '@tuwaio/orbit-core';\nimport { BaseWallet } from '@tuwaio/satellite-core';\nimport { ComponentType, ReactNode, useMemo, useState } from 'react';\n\nimport { ConnectedModal, ConnectedModalCustomization } from '../components/ConnectedModal/ConnectedModal';\nimport { ConnectModal, ConnectModalCustomization } from '../components/ConnectModal/ConnectModal';\nimport {\n ButtonTxStatus,\n ConnectContentType,\n ConnectedContentType,\n NovaConnectProviderContext,\n NovaConnectProviderProps,\n NovaConnectProviderType,\n} from '../hooks';\nimport { defaultLabels, NovaConnectLabels } from '../i18n';\nimport { useSatelliteConnectStore } from '../satellite';\nimport { ErrorsProvider, ErrorsProviderCustomization } from './ErrorsProvider';\nimport { NovaConnectLabelsProvider } from './NovaConnectLabelsProvider';\n\n// --- Customization Types ---\n\n/**\n * Props for custom NovaConnectLabelsProvider component\n */\ntype CustomLabelsProviderProps = {\n labels?: Partial<NovaConnectLabels>;\n children: ReactNode;\n};\n\n/**\n * Props for custom ErrorsProvider component\n */\ntype CustomErrorsProviderProps = {\n customization?: ErrorsProviderCustomization;\n};\n\n/**\n * Context data passed to custom provider components\n */\ntype ProviderContext = {\n /** Current wallet connection state */\n isConnected: boolean;\n /** Active wallet instance */\n activeWallet: BaseWallet | undefined;\n /** Current wallet connection error */\n walletConnectionError: string | undefined;\n /** All modal and UI states */\n modalStates: {\n isConnectModalOpen: boolean;\n isConnectedModalOpen: boolean;\n isChainsListOpen: boolean;\n isChainsListOpenMobile: boolean;\n };\n /** Current content types for modals */\n contentTypes: {\n connectModal: ConnectContentType;\n connectedModal: ConnectedContentType;\n };\n /** Button and transaction statuses */\n statuses: {\n connectedButton: ButtonTxStatus;\n };\n};\n\n/**\n * Comprehensive customization options for NovaConnectProvider\n */\nexport type NovaConnectProviderCustomization = {\n /** Custom components */\n components?: {\n /** Custom labels provider component */\n LabelsProvider?: ComponentType<CustomLabelsProviderProps>;\n /** Custom errors provider component */\n ErrorsProvider?: ComponentType<CustomErrorsProviderProps>;\n };\n /** Labels customization and merging strategy */\n labels?: {\n /** Custom labels merging function */\n merge?: (defaultLabels: NovaConnectLabels, userLabels: Partial<NovaConnectLabels>) => NovaConnectLabels;\n /** Transform final merged labels before use */\n transform?: (mergedLabels: NovaConnectLabels, context: ProviderContext) => NovaConnectLabels;\n };\n /** ErrorsProvider customization - passed through to ErrorsProvider */\n errors?: ErrorsProviderCustomization;\n /** Custom context value transformation */\n contextValue?: {\n /** Transform context value before providing to children */\n transform?: (defaultValue: NovaConnectProviderType, context: ProviderContext) => NovaConnectProviderType;\n };\n /** Custom rendering logic */\n rendering?: {\n /** Custom provider tree structure */\n providerTree?: (\n defaultTree: ReactNode,\n components: {\n ErrorsProvider: ReactNode;\n LabelsProvider: ReactNode;\n MainContent: ReactNode;\n ConnectModal: ReactNode;\n ConnectedModal: ReactNode;\n },\n context: ProviderContext,\n ) => ReactNode;\n };\n /** Modal customizations */\n modals?: {\n /** ConnectModal customization */\n connectModal?: ConnectModalCustomization;\n /** ConnectedModal customization */\n connectedModal?: ConnectedModalCustomization;\n };\n};\n\n/**\n * Extended props for NovaConnectProvider with full customization capabilities\n */\nexport interface NovaConnectProviderPropsWithCustomization extends NovaConnectProviderProps {\n /** Comprehensive customization options for the provider and its sub-components */\n customization?: NovaConnectProviderCustomization;\n}\n\n// --- Default Components ---\n\n/**\n * Default labels provider component\n */\nconst DefaultLabelsProvider = ({ labels, children }: CustomLabelsProviderProps) => {\n return <NovaConnectLabelsProvider labels={labels as NovaConnectLabels}>{children}</NovaConnectLabelsProvider>;\n};\n\n/**\n * Default errors provider component\n */\nconst DefaultErrorsProvider = ({ customization }: CustomErrorsProviderProps) => {\n return <ErrorsProvider customization={customization} />;\n};\n\n// --- Default Handlers ---\n\n/**\n * Default labels merging function\n */\nconst defaultLabelsMerge = (\n defaultLabels: NovaConnectLabels,\n userLabels: Partial<NovaConnectLabels>,\n): NovaConnectLabels => {\n return deepMerge(defaultLabels, userLabels || {});\n};\n\n/**\n * Default labels transform function (identity)\n */\nconst defaultLabelsTransform = (mergedLabels: NovaConnectLabels): NovaConnectLabels => mergedLabels;\n\n/**\n * Default context value transform function (identity)\n */\nconst defaultContextValueTransform = (defaultValue: NovaConnectProviderType): NovaConnectProviderType => defaultValue;\n\n/**\n * Default provider tree renderer\n */\nconst defaultProviderTreeRenderer = (\n defaultTree: ReactNode,\n // Unused but kept for API consistency\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n components: {\n ErrorsProvider: ReactNode;\n LabelsProvider: ReactNode;\n MainContent: ReactNode;\n ConnectModal: ReactNode;\n ConnectedModal: ReactNode;\n },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n context: ProviderContext,\n): ReactNode => {\n return defaultTree;\n};\n\n/**\n * Main NovaConnect provider component with comprehensive customization capabilities.\n *\n * This provider manages wallet connection state, error handling, internationalization,\n * modal states, and renders the modal components centrally while offering extensive\n * customization options for all sub-components and behaviors.\n *\n * Features:\n * - Complete wallet connection state management\n * - Centralized modal rendering and state management\n * - Customizable error handling through ErrorsProvider\n * - Flexible internationalization system\n * - Modal and UI state coordination\n * - Extensive customization API for all aspects\n * - Custom component replacement capabilities\n *\n * @example Basic usage\n * ```tsx\n * <NovaConnectProvider\n * store={store}\n * appChains={[mainnet, sepolia, polygon]} // Viem chains\n * solanaRPCUrls={{\n * 'mainnet': 'https://api.mainnet-beta.solana.com'\n * }}\n * >\n * <App />\n * </NovaConnectProvider>\n * ```\n *\n * @example With customization\n * ```tsx\n * <NovaConnectProvider\n * labels={customLabels}\n * appChains={appChains}\n * solanaRPCUrls={solanaRPCUrls}\n * transactionPool={txPool}\n * pulsarAdapter={adapters}\n * withImpersonated\n * withBalance\n * withChain\n * customization={{\n * errors: {\n * position: 'bottom-right',\n * autoClose: 5000,\n * },\n * modals: {\n * connectModal: {\n * classNames: {\n * container: () => 'custom-modal-style'\n * }\n * }\n * }\n * }}\n * >\n * <App />\n * </NovaConnectProvider>\n * ```\n *\n * @param props - Provider configuration and customization options\n */\nexport function NovaConnectProvider({\n labels,\n children,\n appChains,\n solanaRPCUrls,\n transactionPool,\n pulsarAdapter,\n withImpersonated,\n withBalance,\n withChain,\n customization,\n}: NovaConnectProviderPropsWithCustomization) {\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n const walletConnectionError = useSatelliteConnectStore((store) => store.walletConnectionError);\n\n // Extract custom components\n const { LabelsProvider = DefaultLabelsProvider, ErrorsProvider: CustomErrorsProvider = DefaultErrorsProvider } =\n customization?.components ?? {};\n\n // Extract custom handlers\n const { merge: customLabelsMerge = defaultLabelsMerge, transform: customLabelsTransform = defaultLabelsTransform } =\n customization?.labels ?? {};\n\n const { transform: customContextValueTransform = defaultContextValueTransform } = customization?.contextValue ?? {};\n\n const { providerTree: customProviderTreeRenderer = defaultProviderTreeRenderer } = customization?.rendering ?? {};\n\n // Merge labels using custom or default logic\n const mergedLabels = useMemo(() => {\n return customLabelsMerge(defaultLabels, labels || {});\n }, [labels, customLabelsMerge]);\n\n // State management - all existing state\n const [isConnectModalOpen, setIsConnectModalOpen] = useState(false);\n const [isConnectedModalOpen, setIsConnectedModalOpen] = useState(false);\n const [isChainsListOpen, setIsChainsListOpen] = useState(false);\n const [isChainsListOpenMobile, setIsChainsListOpenMobile] = useState(false);\n const [connectedButtonStatus, setConnectedButtonStatus] = useState<ButtonTxStatus>('idle');\n const [connectModalContentType, setConnectModalContentType] = useState<ConnectContentType>('connectors');\n const [selectedAdapter, setSelectedAdapter] = useState<OrbitAdapter | undefined>(undefined);\n const [activeConnector, setActiveConnector] = useState<string | undefined>(undefined);\n const [impersonatedAddress, setImpersonatedAddress] = useState('');\n const [isConnected, setIsConnected] = useState(false);\n const [connectedModalContentType, setConnectedModalContentType] = useState<ConnectedContentType>('main');\n\n // Create provider context for custom handlers\n const providerContext = useMemo(\n (): ProviderContext => ({\n isConnected,\n activeWallet,\n walletConnectionError,\n modalStates: {\n isConnectModalOpen,\n isConnectedModalOpen,\n isChainsListOpen,\n isChainsListOpenMobile,\n },\n contentTypes: {\n connectModal: connectModalContentType,\n connectedModal: connectedModalContentType,\n },\n statuses: {\n connectedButton: connectedButtonStatus,\n },\n }),\n [\n isConnected,\n activeWallet,\n walletConnectionError,\n isConnectModalOpen,\n isConnectedModalOpen,\n isChainsListOpen,\n isChainsListOpenMobile,\n connectModalContentType,\n connectedModalContentType,\n connectedButtonStatus,\n ],\n );\n\n // Transform labels using custom logic if provided\n const finalLabels = useMemo(() => {\n return customLabelsTransform(mergedLabels, providerContext);\n }, [mergedLabels, customLabelsTransform, providerContext]);\n\n // Create and transform context value using custom logic if provided - moved inside useMemo\n const contextValue = useMemo(() => {\n const defaultContextValue: NovaConnectProviderType = {\n appChains,\n solanaRPCUrls,\n withImpersonated,\n withBalance,\n withChain,\n isConnectModalOpen,\n setIsConnectModalOpen,\n isConnectedModalOpen,\n setIsConnectedModalOpen,\n isChainsListOpen,\n setIsChainsListOpen,\n isChainsListOpenMobile,\n setIsChainsListOpenMobile,\n connectedButtonStatus,\n setConnectedButtonStatus,\n connectedModalContentType,\n setConnectedModalContentType,\n connectModalContentType,\n setConnectModalContentType,\n selectedAdapter,\n setSelectedAdapter,\n activeConnector,\n setActiveConnector,\n impersonatedAddress,\n setImpersonatedAddress,\n isConnected,\n setIsConnected,\n };\n\n return customContextValueTransform(defaultContextValue, providerContext);\n }, [\n appChains,\n solanaRPCUrls,\n withImpersonated,\n withBalance,\n withChain,\n isConnectModalOpen,\n setIsConnectModalOpen,\n isConnectedModalOpen,\n setIsConnectedModalOpen,\n isChainsListOpen,\n setIsChainsListOpen,\n isChainsListOpenMobile,\n setIsChainsListOpenMobile,\n connectedButtonStatus,\n setConnectedButtonStatus,\n connectedModalContentType,\n setConnectedModalContentType,\n connectModalContentType,\n setConnectModalContentType,\n selectedAdapter,\n setSelectedAdapter,\n activeConnector,\n setActiveConnector,\n impersonatedAddress,\n setImpersonatedAddress,\n isConnected,\n setIsConnected,\n customContextValueTransform,\n providerContext,\n ]);\n\n // Create component tree elements\n const errorsProviderElement = <CustomErrorsProvider customization={customization?.errors} />;\n\n const labelsProviderElement = <LabelsProvider labels={finalLabels}>{children}</LabelsProvider>;\n\n // Create modal elements - only render if we have the required props\n const connectModalElement =\n appChains || solanaRPCUrls ? (\n <ConnectModal\n withImpersonated={withImpersonated}\n solanaRPCUrls={solanaRPCUrls}\n appChains={appChains}\n customization={customization?.modals?.connectModal}\n />\n ) : null;\n\n const connectedModalElement =\n appChains || solanaRPCUrls ? (\n <ConnectedModal\n solanaRPCUrls={solanaRPCUrls}\n appChains={appChains}\n transactionPool={transactionPool}\n pulsarAdapter={pulsarAdapter}\n customization={customization?.modals?.connectedModal}\n />\n ) : null;\n\n const mainContentElement = (\n <NovaConnectProviderContext.Provider value={contextValue}>\n {errorsProviderElement}\n {labelsProviderElement}\n {connectModalElement}\n {connectedModalElement}\n </NovaConnectProviderContext.Provider>\n );\n\n // Create default provider tree with modals\n const defaultProviderTree = (\n <NovaConnectProviderContext.Provider value={contextValue}>\n {errorsProviderElement}\n {labelsProviderElement}\n {connectModalElement}\n {connectedModalElement}\n </NovaConnectProviderContext.Provider>\n );\n\n // Use custom provider tree renderer if provided\n const finalProviderTree = customProviderTreeRenderer(\n defaultProviderTree,\n {\n ErrorsProvider: errorsProviderElement,\n LabelsProvider: labelsProviderElement,\n MainContent: mainContentElement,\n ConnectModal: connectModalElement || <></>,\n ConnectedModal: connectedModalElement || <></>,\n },\n providerContext,\n );\n\n return <>{finalProviderTree}</>;\n}\n\n// Add display name for better debugging\nNovaConnectProvider.displayName = 'NovaConnectProvider';\n","import { OrbitAdapter } from '@tuwaio/orbit-core';\n\n// Re-export core modules\nexport * from './providers';\nexport * from './types';\nexport * from './utils';\n\n// ========================================\n// Modern Conditional Export System\n// ========================================\n\n/**\n * Information about available blockchain-specific utilities and their status.\n *\n * @interface BlockchainUtilities\n * @since 1.0.0\n *\n * @example\n * ```typescript\n * const utilities = await getBlockchainUtilities();\n *\n * if (utilities.hasEvmUtils) {\n * console.log('EVM utilities are available');\n * }\n *\n * console.log('Adapter statuses:', utilities.adaptersStatus);\n * ```\n */\nexport interface BlockchainUtilities {\n /** Whether EVM utilities are available and loaded */\n hasEvmUtils: boolean;\n /** Whether Solana utilities are available and loaded */\n hasSolanaUtils: boolean;\n /** Current loading status of all registered adapters */\n adaptersStatus: Record<string, string>;\n}\n\n/**\n * Gets comprehensive information about available blockchain utilities and their loading status.\n * This function dynamically checks which blockchain adapters are available and their current state.\n *\n * @returns Promise resolving to blockchain utilities information\n *\n * @example\n * ```typescript\n * // Check what's available in your current setup\n * const info = await getBlockchainUtilities();\n *\n * if (info.hasEvmUtils && info.hasSolanaUtils) {\n * console.log('Full multi-chain support available');\n * } else {\n * console.log('Limited blockchain support:', info.adaptersStatus);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function getBlockchainUtilities(): Promise<BlockchainUtilities> {\n const { getAllAdaptersStatus } = await import('./utils/getChainsListByWalletType');\n\n return {\n hasEvmUtils: await checkEvmUtils(),\n hasSolanaUtils: await checkSolanaUtils(),\n adaptersStatus: getAllAdaptersStatus(),\n };\n}\n\n/**\n * Checks if EVM utilities are available by attempting to import them.\n * This function performs a dynamic import to determine availability without throwing errors.\n *\n * @internal\n * @returns Promise resolving to true if EVM utilities can be imported\n *\n * @since 1.0.0\n */\nasync function checkEvmUtils(): Promise<boolean> {\n try {\n await import('./evm/utils');\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if Solana utilities are available by attempting to import them.\n * This function performs a dynamic import to determine availability without throwing errors.\n *\n * @internal\n * @returns Promise resolving to true if Solana utilities can be imported\n *\n * @since 1.0.0\n */\nasync function checkSolanaUtils(): Promise<boolean> {\n try {\n await import('./solana/utils');\n return true;\n } catch {\n return false;\n }\n}\n\n// ========================================\n// Blockchain-Specific Utility Exports\n// ========================================\n\n/**\n * Result type for blockchain utility loading operations.\n *\n * @template T The type of utilities being loaded\n *\n * @since 1.0.0\n */\nexport type BlockchainUtilityResult<T = any> = ({ available: true } & T) | { available: false; error: string };\n\n/**\n * Dynamically loads EVM utilities if available in the current environment.\n * Returns the utilities along with their availability status.\n *\n * @returns Promise resolving to EVM utilities or error information\n *\n * @example\n * ```typescript\n * const evmUtils = await getEvmUtils();\n *\n * if (evmUtils.available) {\n * // Use EVM-specific functions\n * const chains = evmUtils.getEvmChains(appChains);\n * console.log('Available EVM chains:', chains);\n * } else {\n * console.warn('EVM not supported:', evmUtils.error);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function getEvmUtils(): Promise<BlockchainUtilityResult> {\n try {\n const evmModule = await import('./evm');\n return {\n available: true,\n ...evmModule,\n };\n } catch (error) {\n return {\n available: false,\n error: error instanceof Error ? error.message : 'EVM utilities not available',\n };\n }\n}\n\n/**\n * Dynamically loads Solana utilities if available in the current environment.\n * Returns the utilities along with their availability status.\n *\n * @returns Promise resolving to Solana utilities or error information\n *\n * @example\n * ```typescript\n * const solanaUtils = await getSolanaUtils();\n *\n * if (solanaUtils.available) {\n * // Use Solana-specific functions\n * const clusters = solanaUtils.getSolanaClusters(rpcUrls);\n * console.log('Available Solana clusters:', clusters);\n * } else {\n * console.warn('Solana not supported:', solanaUtils.error);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function getSolanaUtils(): Promise<BlockchainUtilityResult> {\n try {\n const solanaModule = await import('./solana');\n return {\n available: true,\n ...solanaModule,\n };\n } catch (error) {\n return {\n available: false,\n error: error instanceof Error ? error.message : 'Solana utilities not available',\n };\n }\n}\n\n// ========================================\n// Initialization and Preloading\n// ========================================\n\n/**\n * Result of blockchain support initialization.\n *\n * @interface InitializationResult\n * @since 1.0.0\n */\nexport interface InitializationResult {\n /** Whether EVM support was successfully initialized */\n evm: boolean;\n /** Whether Solana support was successfully initialized */\n solana: boolean;\n /** Array of error messages encountered during initialization */\n errors: string[];\n}\n\n/**\n * Preloads and initializes all available blockchain adapters.\n * This function should be called during application startup for optimal performance.\n * It attempts to load both EVM and Solana adapters and reports which ones are available.\n *\n * @returns Promise resolving to initialization results\n *\n * @example\n * ```typescript\n * // Call during app initialization\n * const initResult = await initializeBlockchainSupport();\n *\n * if (initResult.evm && initResult.solana) {\n * console.log('Full blockchain support initialized');\n * } else {\n * console.log('Partial support:', initResult);\n * if (initResult.errors.length > 0) {\n * console.warn('Initialization errors:', initResult.errors);\n * }\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function initializeBlockchainSupport(): Promise<InitializationResult> {\n const results: InitializationResult = {\n evm: false,\n solana: false,\n errors: [],\n };\n\n try {\n const { preloadChainAdapters } = await import('./utils/getChainsListByWalletType');\n await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n\n // Check what was successfully loaded\n results.evm = await checkEvmUtils();\n results.solana = await checkSolanaUtils();\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Unknown initialization error';\n results.errors.push(errorMsg);\n }\n\n return results;\n}\n\n// ========================================\n// Adapter Support Utilities\n// ========================================\n\n/**\n * Checks whether a specific blockchain adapter is supported in the current environment.\n * This function performs runtime checks to determine adapter availability.\n *\n * @param adapter The blockchain adapter to check for support\n * @returns Promise resolving to true if the adapter is supported\n *\n * @example\n * ```typescript\n * // Check individual adapter support\n * const evmSupported = await isAdapterSupported(OrbitAdapter.EVM);\n * const solanaSupported = await isAdapterSupported(OrbitAdapter.SOLANA);\n * const starknetSupported = await isAdapterSupported(OrbitAdapter.Starknet);\n *\n * console.log('Adapter support:', {\n * evm: evmSupported,\n * solana: solanaSupported,\n * starknet: starknetSupported, // Currently always false\n * });\n * ```\n *\n * @since 1.0.0\n */\nexport async function isAdapterSupported(adapter: OrbitAdapter): Promise<boolean> {\n switch (adapter) {\n case OrbitAdapter.EVM:\n return checkEvmUtils();\n case OrbitAdapter.SOLANA:\n return checkSolanaUtils();\n case OrbitAdapter.Starknet:\n return false; // Not yet implemented\n default:\n return false;\n }\n}\n\n// ========================================\n// Type Exports\n// ========================================\n\n/**\n * Re-export all blockchain-specific configuration types.\n * These types are enhanced through module augmentation when specific packages are installed.\n *\n * @since 1.0.0\n */\nexport type { AllChainConfigs, ChainIdentifierArray, InitialChains } from './types';\n"]}