@lukso/up-connector 0.4.0-dev.a8c9315

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +280 -0
  3. package/dist/account-modal.cjs +9 -0
  4. package/dist/account-modal.cjs.map +1 -0
  5. package/dist/account-modal.d.cts +16 -0
  6. package/dist/account-modal.d.ts +16 -0
  7. package/dist/account-modal.js +9 -0
  8. package/dist/account-modal.js.map +1 -0
  9. package/dist/auto-setup.cjs +17 -0
  10. package/dist/auto-setup.cjs.map +1 -0
  11. package/dist/auto-setup.d.cts +123 -0
  12. package/dist/auto-setup.d.ts +123 -0
  13. package/dist/auto-setup.js +17 -0
  14. package/dist/auto-setup.js.map +1 -0
  15. package/dist/avatar-CmUCtW_w.d.cts +205 -0
  16. package/dist/avatar-CmUCtW_w.d.ts +205 -0
  17. package/dist/avatar.cjs +12 -0
  18. package/dist/avatar.cjs.map +1 -0
  19. package/dist/avatar.d.cts +1 -0
  20. package/dist/avatar.d.ts +1 -0
  21. package/dist/avatar.js +12 -0
  22. package/dist/avatar.js.map +1 -0
  23. package/dist/backup-modal.cjs +9 -0
  24. package/dist/backup-modal.cjs.map +1 -0
  25. package/dist/backup-modal.d.cts +41 -0
  26. package/dist/backup-modal.d.ts +41 -0
  27. package/dist/backup-modal.js +9 -0
  28. package/dist/backup-modal.js.map +1 -0
  29. package/dist/chunk-3SGSPHOZ.js +595 -0
  30. package/dist/chunk-3SGSPHOZ.js.map +1 -0
  31. package/dist/chunk-6AYZOIFY.js +181 -0
  32. package/dist/chunk-6AYZOIFY.js.map +1 -0
  33. package/dist/chunk-6N35TCFT.js +852 -0
  34. package/dist/chunk-6N35TCFT.js.map +1 -0
  35. package/dist/chunk-7ETKG6KR.cjs +387 -0
  36. package/dist/chunk-7ETKG6KR.cjs.map +1 -0
  37. package/dist/chunk-EUXUH3YW.js +15 -0
  38. package/dist/chunk-EUXUH3YW.js.map +1 -0
  39. package/dist/chunk-GFVUWAG4.cjs +158 -0
  40. package/dist/chunk-GFVUWAG4.cjs.map +1 -0
  41. package/dist/chunk-IAKQFHFD.cjs +595 -0
  42. package/dist/chunk-IAKQFHFD.cjs.map +1 -0
  43. package/dist/chunk-MH7MP7XK.cjs +181 -0
  44. package/dist/chunk-MH7MP7XK.cjs.map +1 -0
  45. package/dist/chunk-NWCNJSG3.js +387 -0
  46. package/dist/chunk-NWCNJSG3.js.map +1 -0
  47. package/dist/chunk-NXU2DQAV.js +1128 -0
  48. package/dist/chunk-NXU2DQAV.js.map +1 -0
  49. package/dist/chunk-ORJK2YGG.cjs +852 -0
  50. package/dist/chunk-ORJK2YGG.cjs.map +1 -0
  51. package/dist/chunk-RFA6SEIS.cjs +1128 -0
  52. package/dist/chunk-RFA6SEIS.cjs.map +1 -0
  53. package/dist/chunk-XGIT7YUY.js +31 -0
  54. package/dist/chunk-XGIT7YUY.js.map +1 -0
  55. package/dist/chunk-XOKG3KIL.cjs +31 -0
  56. package/dist/chunk-XOKG3KIL.cjs.map +1 -0
  57. package/dist/chunk-YIWSPI4I.js +158 -0
  58. package/dist/chunk-YIWSPI4I.js.map +1 -0
  59. package/dist/chunk-ZBDE64SD.cjs +15 -0
  60. package/dist/chunk-ZBDE64SD.cjs.map +1 -0
  61. package/dist/connect-modal/index.cjs +20 -0
  62. package/dist/connect-modal/index.cjs.map +1 -0
  63. package/dist/connect-modal/index.d.cts +9 -0
  64. package/dist/connect-modal/index.d.ts +9 -0
  65. package/dist/connect-modal/index.js +20 -0
  66. package/dist/connect-modal/index.js.map +1 -0
  67. package/dist/index-D2orHGFi.d.cts +8 -0
  68. package/dist/index-D2orHGFi.d.ts +8 -0
  69. package/dist/index.cjs +793 -0
  70. package/dist/index.cjs.map +1 -0
  71. package/dist/index.d.cts +189 -0
  72. package/dist/index.d.ts +189 -0
  73. package/dist/index.js +793 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/restore-modal.cjs +9 -0
  76. package/dist/restore-modal.cjs.map +1 -0
  77. package/dist/restore-modal.d.cts +68 -0
  78. package/dist/restore-modal.d.ts +68 -0
  79. package/dist/restore-modal.js +9 -0
  80. package/dist/restore-modal.js.map +1 -0
  81. package/dist/wagmi-CVuDs_0h.d.cts +386 -0
  82. package/dist/wagmi-CVuDs_0h.d.ts +386 -0
  83. package/package.json +158 -0
  84. package/src/account-modal.ts +142 -0
  85. package/src/auto-setup.ts +362 -0
  86. package/src/avatar.ts +1135 -0
  87. package/src/backup-modal.ts +439 -0
  88. package/src/connect-modal/components/connection-view.ts +398 -0
  89. package/src/connect-modal/components/eoa-connection-view.ts +408 -0
  90. package/src/connect-modal/components/qr-code-view.ts +71 -0
  91. package/src/connect-modal/connect-modal.base.ts +18 -0
  92. package/src/connect-modal/connect-modal.config.ts +27 -0
  93. package/src/connect-modal/connect-modal.templates.ts +21 -0
  94. package/src/connect-modal/connect-modal.ts +270 -0
  95. package/src/connect-modal/connect-modal.types.ts +104 -0
  96. package/src/connect-modal/images/up-cube-glass.png +0 -0
  97. package/src/connect-modal/index.ts +23 -0
  98. package/src/connect-modal/services/wagmi.ts +266 -0
  99. package/src/connect-modal/styles/styles.css +1 -0
  100. package/src/connect-modal/utils/walletConnectDeepLinkUrl.ts +43 -0
  101. package/src/connector.ts +544 -0
  102. package/src/index.ts +62 -0
  103. package/src/popup-instance.ts +537 -0
  104. package/src/restore-modal.ts +702 -0
  105. package/src/styles/index.ts +28 -0
  106. package/src/styles/styles.css +1 -0
  107. package/src/types/css-raw.d.ts +4 -0
  108. package/src/types/images.d.ts +4 -0
  109. package/src/types.ts +168 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connector.ts","../src/popup-instance.ts"],"sourcesContent":["/**\n * UP Connector - Main class that orchestrates avatar and modal\n * Provides smooth avatar-to-modal animations and connection state management\n *\n * NOTE: This connector uses Lit-based modal components:\n * - <connect-modal> for wallet connection (configured via setupConnectModal())\n * - <account-modal> for account management (shows address, chain, disconnect)\n *\n * Current implementation status:\n * - ✅ Avatar integration (DraggableAvatar with IconView)\n * - ✅ Connection modal (Lit-based ConnectModal)\n * - ✅ Account management modal (Lit-based AccountModal)\n * - ✅ Wagmi synchronization\n *\n * The legacy ConnectorModal (vanilla JS) has been removed. The config.modal property\n * is deprecated and has no effect - use setupConnectModal() instead.\n *\n * Users can pre-place modal components in DOM for custom positioning:\n * - Place <connect-modal> or <account-modal> anywhere in your HTML\n * - The connector will find and reuse existing modals instead of creating new ones\n */\n\nimport { DraggableAvatar } from './avatar.js'\nimport './connect-modal/index.js' // Import for side-effect (registers custom element)\nimport './account-modal.js' // Import for side-effect (registers custom element)\nimport { setLuksoConfig } from '@lukso/transaction-view-headless'\nimport type { AccountModal } from './account-modal.js'\nimport type { ConnectModal, WalletConnector } from './connect-modal/index.js'\nimport {\n disconnectWagmi,\n getWagmiAccount,\n watchWagmiAccount,\n} from './connect-modal/index.js'\nimport type {\n ConnectionState,\n ConnectorConfig,\n WalletProvider,\n} from './types.js'\n\nconst DEFAULT_CONFIG: Required<\n Omit<ConnectorConfig, 'avatar' | 'modal' | 'onConnectionChange'>\n> = {\n autoConnect: false,\n persistConnection: true,\n storageKey: 'up-connector-state',\n chainId: 42, // LUKSO mainnet\n rpcUrl: 'https://rpc.lukso.network',\n}\n\nexport class UPConnector {\n private config: ConnectorConfig & typeof DEFAULT_CONFIG\n private avatar?: DraggableAvatar\n private connectModal?: ConnectModal\n private accountModal?: AccountModal\n private connectors: WalletConnector[] = []\n private connectionState: ConnectionState = 'disconnected'\n private connectedAddress?: string\n private connectedProvider?: any\n private connectedChainId?: number\n private wagmiUnsubscribe?: (() => void) | null\n\n constructor(config: ConnectorConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n\n // Initialize components\n this.init()\n }\n\n private async init(): Promise<void> {\n // Create avatar immediately\n await this.createAvatar()\n\n // Start watching wagmi (handles both initial state and changes)\n // This is async but non-blocking - connector works immediately\n this.startWagmiSync()\n\n // Try auto-connect if enabled (for non-wagmi connections)\n if (this.config.autoConnect && this.config.persistConnection) {\n await this.tryAutoConnect()\n }\n }\n\n /**\n * Start syncing with wagmi\n * Checks current state and subscribes to changes\n */\n /**\n * Update global Lukso config for address resolution\n */\n private updateLuksoConfig(chainId: number): void {\n try {\n if (chainId === 42) {\n // LUKSO Mainnet\n setLuksoConfig({\n chainId: 42,\n rpcUrl: 'https://rpc.lukso.network',\n })\n } else if (chainId === 4201) {\n // LUKSO Testnet\n setLuksoConfig({\n chainId: 4201,\n rpcUrl: 'https://rpc.testnet.lukso.network',\n })\n } else {\n // Other networks - default to mainnet config but with custom chainId\n setLuksoConfig({\n chainId,\n rpcUrl: this.config.rpcUrl,\n })\n }\n } catch (error) {\n console.warn('⚠️ [Connector] Failed to update Lukso config:', error)\n }\n }\n\n private async startWagmiSync(): Promise<void> {\n try {\n // Check initial state first\n const account = await getWagmiAccount()\n\n if (!account) {\n return\n }\n\n if (account.isConnected && account.address) {\n this.handleConnection(\n account.address,\n account.connector,\n account.chainId\n )\n }\n\n // Subscribe to wagmi account changes\n this.wagmiUnsubscribe = await watchWagmiAccount((account) => {\n if (account.isConnected && account.address) {\n // Connected\n if (\n this.connectedAddress !== account.address ||\n this.connectedChainId !== account.chainId\n ) {\n this.handleConnection(\n account.address,\n account.connector,\n account.chainId\n )\n }\n } else {\n // Disconnected\n if (this.connectionState === 'connected') {\n this.handleDisconnection()\n }\n }\n })\n } catch (error) {\n console.warn('⚠️ [Connector] Failed to sync with wagmi:', error)\n }\n }\n\n private async createAvatar(): Promise<void> {\n this.avatar = new DraggableAvatar({\n // Default avatar options\n avatarSize: 'medium',\n initialPosition: 'top-right',\n fallbackText: '👤',\n\n // Override with user config\n ...this.config.avatar,\n\n // Connection-specific callbacks\n onClick: (event, data) => {\n // Call user-defined onClick first\n this.config.avatar?.onClick?.(event, data)\n\n // Then handle connection logic\n this.handleAvatarClick(event)\n },\n\n onAddressClick: (event) => {\n // Call user-defined callback\n this.config.avatar?.onAddressClick?.(event)\n },\n })\n\n // Update avatar connected state\n this.updateAvatarState()\n }\n\n // TODO: Replace with Lit-based account management modal\n // Legacy createModal() method removed - was using deprecated ConnectorModal\n\n private handleAvatarClick(event: MouseEvent): void {\n if (this.connectionState === 'connected') {\n // Show account management modal\n this.showAccountModal()\n } else {\n // Show connection modal\n this.showConnectionModal()\n }\n }\n\n private showConnectionModal(): void {\n // First, check if user has placed a connect-modal in the DOM\n if (!this.connectModal) {\n this.connectModal = document.querySelector(\n 'connect-modal'\n ) as ConnectModal\n }\n\n // If still not found, create and append it\n if (!this.connectModal) {\n this.connectModal = document.createElement(\n 'connect-modal'\n ) as ConnectModal\n document.body.appendChild(this.connectModal as unknown as HTMLElement)\n\n // Handle connect event\n this.connectModal.addEventListener('connect', ((e: CustomEvent) => {\n const connector = e.detail.connector as WalletConnector\n // TODO: Handle actual connection logic\n // For now, this will be extended when wagmi/viem integration is added\n }) as EventListener)\n\n // Handle close event\n this.connectModal.addEventListener('close', (() => {\n // Modal closed\n }) as EventListener)\n }\n\n // Modal will load connectors automatically from global setup\n // Open the modal\n this.connectModal.open = true\n }\n\n private showAccountModal(): void {\n if (!this.connectedAddress) return\n\n // First, check if user has placed an account-modal in the DOM\n if (!this.accountModal) {\n this.accountModal = document.querySelector(\n 'account-modal'\n ) as AccountModal\n }\n\n // If still not found, create and append it\n if (!this.accountModal) {\n this.accountModal = document.createElement(\n 'account-modal'\n ) as AccountModal\n document.body.appendChild(this.accountModal)\n\n // Handle disconnect event\n this.accountModal.addEventListener('disconnect', () => {\n this.handleDisconnection()\n })\n }\n\n // Set properties and open\n this.accountModal.address = this.connectedAddress\n this.accountModal.chainId = this.connectedChainId\n this.accountModal.connectorName = this.connectedProvider?.name || 'Unknown'\n this.accountModal.open = true\n }\n\n private handleConnection(\n address: string,\n provider: any,\n chainId?: number\n ): void {\n this.connectedAddress = address\n this.connectedProvider = provider\n this.connectedChainId = chainId\n this.setConnectionState('connected')\n\n // Update global Lukso config for address resolution\n if (chainId) {\n this.updateLuksoConfig(chainId)\n }\n\n // Update avatar with connected address and chainId\n if (this.avatar) {\n this.avatar.updateAddress(address, undefined, chainId)\n this.avatar.setConnected(true)\n }\n\n // Persist connection if enabled\n if (this.config.persistConnection) {\n this.saveConnectionState()\n }\n\n // Hide connection modal if open\n if (this.connectModal) {\n this.connectModal.open = false\n }\n }\n\n private async handleDisconnection(): Promise<void> {\n // Disconnect from wagmi first to ensure state is clean\n await disconnectWagmi()\n\n this.connectedAddress = undefined\n this.connectedProvider = undefined\n this.connectedChainId = undefined\n this.setConnectionState('disconnected')\n\n // Update avatar - clear address and show disconnected state\n if (this.avatar) {\n this.avatar.setConnected(false)\n // Clear the address to show fallback/disconnected state\n this.avatar.updateAddress('')\n }\n\n // Clear persisted state\n if (this.config.persistConnection) {\n this.clearConnectionState()\n }\n\n // Hide connect modal if open\n if (this.connectModal) {\n this.connectModal.open = false\n }\n }\n\n private setConnectionState(state: ConnectionState): void {\n const prevState = this.connectionState\n this.connectionState = state\n\n // Update avatar state\n this.updateAvatarState()\n\n // Notify callback\n if (prevState !== state) {\n this.config.onConnectionChange?.(state, {\n address: this.connectedAddress,\n provider: this.connectedProvider,\n chainId: this.connectedChainId,\n })\n }\n }\n\n private updateAvatarState(): void {\n if (!this.avatar) return\n\n this.avatar.setConnected(this.connectionState === 'connected')\n\n // Update avatar address and chainId if connected\n if (this.connectionState === 'connected' && this.connectedAddress) {\n this.avatar.updateAddress(\n this.connectedAddress,\n undefined,\n this.connectedChainId\n )\n }\n }\n\n private async tryAutoConnect(): Promise<void> {\n const savedState = this.loadConnectionState()\n if (!savedState?.address) return\n\n this.setConnectionState('connecting')\n\n try {\n // Try to reconnect using saved provider info\n // This would typically involve checking if the provider is still available\n // and attempting to reconnect\n\n // For now, simulate auto-connection\n setTimeout(() => {\n if (savedState.address) {\n this.handleConnection(savedState.address, savedState.provider)\n } else {\n this.setConnectionState('disconnected')\n }\n }, 1000)\n } catch (error) {\n console.warn('Auto-connect failed:', error)\n this.setConnectionState('disconnected')\n }\n }\n\n private saveConnectionState(): void {\n if (typeof localStorage === 'undefined') return\n\n try {\n const state = {\n address: this.connectedAddress,\n provider: this.connectedProvider?.constructor?.name,\n timestamp: Date.now(),\n }\n localStorage.setItem(this.config.storageKey, JSON.stringify(state))\n } catch (error) {\n console.warn('Failed to save connection state:', error)\n }\n }\n\n private loadConnectionState(): any {\n if (typeof localStorage === 'undefined') return null\n\n try {\n const saved = localStorage.getItem(this.config.storageKey)\n if (!saved) return null\n\n const state = JSON.parse(saved)\n\n // Check if state is not too old (24 hours)\n const maxAge = 24 * 60 * 60 * 1000\n if (Date.now() - state.timestamp > maxAge) {\n this.clearConnectionState()\n return null\n }\n\n return state\n } catch (error) {\n console.warn('Failed to load connection state:', error)\n return null\n }\n }\n\n private clearConnectionState(): void {\n if (typeof localStorage === 'undefined') return\n\n try {\n localStorage.removeItem(this.config.storageKey)\n } catch (error) {\n console.warn('Failed to clear connection state:', error)\n }\n }\n\n // Public API\n public getAvatar(): DraggableAvatar | undefined {\n return this.avatar\n }\n\n /**\n * @deprecated Legacy modal removed. Use getConnectModal() or create account modal\n */\n public getModal(): undefined {\n console.warn('getModal() is deprecated - legacy ConnectorModal removed')\n return undefined\n }\n\n public getConnectModal(): ConnectModal | undefined {\n return this.connectModal\n }\n\n /**\n * @deprecated Use setupConnectModal() instead to configure wagmi connectors globally\n */\n public setConnectors(connectors: WalletConnector[]): void {\n this.connectors = connectors\n // Note: The ConnectModal now loads connectors automatically from global setup\n // Use setupConnectModal() to configure wagmi integration\n console.warn(\n 'setConnectors() is deprecated. Use setupConnectModal() instead.'\n )\n }\n\n public async connect(providerId?: string): Promise<void> {\n this.setConnectionState('connecting')\n\n if (providerId) {\n // Connect to specific provider\n // This would be implemented based on available providers\n } else {\n // Show connection modal\n this.showConnectionModal()\n }\n }\n\n public disconnect(): void {\n this.handleDisconnection()\n }\n\n public getConnectionState(): ConnectionState {\n return this.connectionState\n }\n\n public getConnectedAddress(): string | undefined {\n return this.connectedAddress\n }\n\n public getConnectedProvider(): any {\n return this.connectedProvider\n }\n\n public isConnected(): boolean {\n return this.connectionState === 'connected'\n }\n\n public showModal(): void {\n if (this.isConnected()) {\n this.showAccountModal()\n } else {\n this.showConnectionModal()\n }\n }\n\n public hideModal(): void {\n if (this.connectModal) {\n this.connectModal.open = false\n }\n }\n\n public updateConfig(config: Partial<ConnectorConfig>): void {\n this.config = { ...this.config, ...config }\n\n // Update avatar if config changed\n if (config.avatar && this.avatar) {\n // This would require implementing avatar config updates\n }\n }\n\n public destroy(): void {\n // Unsubscribe from wagmi changes\n if (this.wagmiUnsubscribe) {\n this.wagmiUnsubscribe()\n this.wagmiUnsubscribe = undefined\n }\n\n this.avatar?.destroy()\n\n // Clean up connect modal\n if (this.connectModal) {\n this.connectModal.open = false\n if (this.connectModal.parentNode) {\n this.connectModal.parentNode.removeChild(this.connectModal)\n }\n }\n\n this.avatar = undefined\n this.connectModal = undefined\n this.connectedAddress = undefined\n this.connectedProvider = undefined\n this.connectionState = 'disconnected'\n }\n}\n\n/**\n * Factory function for creating UP Connector instances\n */\nexport function createConnector(config: ConnectorConfig = {}): UPConnector {\n return new UPConnector(config)\n}\n\nexport default UPConnector\n","/**\n * Enhanced Popup System for UP Connector\n * Provides unified interface for both popup windows and modal dialogs\n */\n\nexport interface PopupRequest {\n mode: 'popup' | 'modal' // popup = window.open, modal = iframe in modal\n url?: string // If present = external, if not = local content\n size?: { width: number; height: number }\n position?: 'center' | 'top-right'\n allowedOrigins?: string[] // Security for message passing\n reuseExisting?: boolean // Whether to reuse existing popups (default: true)\n}\n\nexport interface PopupInstance {\n // Lifecycle Management\n show(): Promise<void> // Show the popup/modal - async for consistency\n hide(): void // Hide but preserve state\n close(): void // Actually destroy\n\n // Message Passing\n postMessage(data: any): void // Send to popup/iframe\n onMessage(handler: (data: any) => void): void // Receive from popup/iframe\n removeMessageHandler(handler: (data: any) => void): void // Remove handler\n\n // State Queries\n isVisible: boolean // Whether currently visible\n isClosed: boolean // Whether destroyed\n contentWindow?: Window // For advanced use\n\n // Events\n on(\n event: 'show' | 'hide' | 'close' | 'message',\n handler: (...args: any[]) => void\n ): void\n off(\n event: 'show' | 'hide' | 'close' | 'message',\n handler: (...args: any[]) => void\n ): void\n}\n\nexport interface UIDelegate {\n createPopup(request: PopupRequest): PopupInstance\n showPopup(request: PopupRequest): Promise<PopupInstance>\n closeAll(): void\n}\n\n// Internal event emitter for popup instances\nclass PopupEventEmitter {\n private handlers = new Map<string, Set<(...args: any[]) => void>>()\n\n on(event: string, handler: (...args: any[]) => void): void {\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Set())\n }\n this.handlers.get(event)!.add(handler)\n }\n\n off(event: string, handler: (...args: any[]) => void): void {\n this.handlers.get(event)?.delete(handler)\n }\n\n emit(event: string, ...args: any[]): void {\n this.handlers.get(event)?.forEach((handler) => {\n try {\n handler(...args)\n } catch (error) {\n console.error('Error in popup event handler:', error)\n }\n })\n }\n\n clear(): void {\n this.handlers.clear()\n }\n}\n\n/**\n * Base class for popup instances\n */\nabstract class BasePopupInstance implements PopupInstance {\n protected events = new PopupEventEmitter()\n protected messageHandlers = new Set<(data: any) => void>()\n protected _isClosed = false\n protected _isVisible = false\n\n constructor(protected request: PopupRequest) {}\n\n abstract show(): Promise<void>\n abstract hide(): void\n abstract close(): void\n abstract get contentWindow(): Window | undefined\n\n get isVisible(): boolean {\n return this._isVisible && !this._isClosed\n }\n get isClosed(): boolean {\n return this._isClosed\n }\n\n postMessage(data: any): void {\n if (!this._isClosed && this.contentWindow) {\n try {\n this.contentWindow.postMessage(data, '*')\n } catch (error) {\n console.error('Failed to post message to popup:', error)\n }\n }\n }\n\n onMessage(handler: (data: any) => void): void {\n this.messageHandlers.add(handler)\n }\n\n removeMessageHandler(handler: (data: any) => void): void {\n this.messageHandlers.delete(handler)\n }\n\n protected handleMessage(data: any): void {\n this.messageHandlers.forEach((handler) => {\n try {\n handler(data)\n } catch (error) {\n console.error('Error in popup message handler:', error)\n }\n })\n this.events.emit('message', data)\n }\n\n on(\n event: 'show' | 'hide' | 'close' | 'message',\n handler: (...args: any[]) => void\n ): void {\n this.events.on(event, handler)\n }\n\n off(\n event: 'show' | 'hide' | 'close' | 'message',\n handler: (...args: any[]) => void\n ): void {\n this.events.off(event, handler)\n }\n\n protected cleanup(): void {\n this.messageHandlers.clear()\n this.events.clear()\n }\n}\n\n/**\n * Modal popup implementation (iframe in modal dialog)\n */\nexport class ModalPopupInstance extends BasePopupInstance {\n private modalElement?: HTMLDivElement\n private iframeElement?: HTMLIFrameElement\n private messageListener?: (event: MessageEvent) => void\n\n async show(): Promise<void> {\n if (this._isClosed) {\n throw new Error('Popup is closed')\n }\n\n if (!this.modalElement) {\n await this.createElement()\n }\n\n return new Promise((resolve) => {\n if (!this.modalElement) {\n resolve()\n return\n }\n\n // Add to DOM if not already present\n if (!this.modalElement.parentNode) {\n document.body.appendChild(this.modalElement)\n }\n\n this._isVisible = true\n\n // Force reflow before adding visible class\n this.modalElement.offsetHeight\n this.modalElement.classList.add('visible')\n\n this.events.emit('show')\n\n // Wait for animation\n setTimeout(() => resolve(), 50)\n })\n }\n\n hide(): void {\n if (!this._isVisible || this._isClosed || !this.modalElement) return\n\n this._isVisible = false\n this.modalElement.classList.remove('visible')\n this.events.emit('hide')\n\n // Remove from DOM after animation\n setTimeout(() => {\n if (this.modalElement && this.modalElement.parentNode) {\n this.modalElement.parentNode.removeChild(this.modalElement)\n }\n }, 300)\n }\n\n close(): void {\n if (this._isClosed) return\n\n this._isClosed = true\n this._isVisible = false\n\n if (this.modalElement) {\n this.modalElement.classList.remove('visible')\n setTimeout(() => {\n if (this.modalElement && this.modalElement.parentNode) {\n this.modalElement.parentNode.removeChild(this.modalElement)\n }\n }, 300)\n }\n\n if (this.messageListener) {\n window.removeEventListener('message', this.messageListener)\n }\n\n this.events.emit('close')\n this.cleanup()\n }\n\n get contentWindow(): Window | undefined {\n return this.iframeElement?.contentWindow || undefined\n }\n\n private async createElement(): Promise<void> {\n if (typeof document === 'undefined') return\n\n await this.createStyles()\n\n // Create modal structure\n this.modalElement = document.createElement('div')\n this.modalElement.className = 'up-popup-modal'\n\n const { width = 480, height = 640 } = this.request.size || {}\n\n this.modalElement.innerHTML = `\n <div class=\"up-popup-modal-content\" style=\"width: ${width}px; height: ${height}px;\">\n <button class=\"up-popup-close\" type=\"button\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <iframe src=\"${this.request.url || 'about:blank'}\" allow=\"publickey-credentials-get; publickey-credentials-create\"></iframe>\n </div>\n `\n\n // Get references\n const closeButton = this.modalElement.querySelector(\n '.up-popup-close'\n ) as HTMLButtonElement\n this.iframeElement = this.modalElement.querySelector(\n 'iframe'\n ) as HTMLIFrameElement\n\n // Event listeners\n closeButton.addEventListener('click', () => this.hide())\n\n this.modalElement.addEventListener('click', (e) => {\n if (e.target === this.modalElement) {\n this.hide()\n }\n })\n\n // Message handling\n this.messageListener = (event: MessageEvent) => {\n // Only handle messages from our iframe\n if (event.source === this.iframeElement?.contentWindow) {\n this.handleMessage(event.data)\n }\n }\n window.addEventListener('message', this.messageListener)\n }\n\n private async createStyles(): Promise<void> {\n if (typeof document === 'undefined') return\n\n if (document.querySelector('#up-popup-modal-styles')) return\n\n const style = document.createElement('style')\n style.id = 'up-popup-modal-styles'\n style.textContent = `\n .up-popup-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(8px);\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n visibility: hidden;\n transition: all 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n padding: 16px;\n }\n\n .up-popup-modal.visible {\n opacity: 1;\n visibility: visible;\n }\n\n .up-popup-modal-content {\n background: white;\n border-radius: 12px;\n overflow: hidden;\n position: relative;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n transform: scale(0.95) translateY(20px);\n transition: all 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n }\n\n .up-popup-modal.visible .up-popup-modal-content {\n transform: scale(1) translateY(0);\n }\n\n .up-popup-close {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 10;\n background: rgba(255, 255, 255, 0.9);\n border: none;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #6b7280;\n transition: all 0.2s ease;\n }\n\n .up-popup-close:hover {\n background: rgba(255, 255, 255, 1);\n color: #374151;\n }\n\n .up-popup-modal iframe {\n width: 100%;\n height: 100%;\n border: none;\n border-radius: 12px;\n }\n\n @media (max-width: 640px) {\n .up-popup-modal {\n padding: 0;\n align-items: flex-end;\n }\n\n .up-popup-modal-content {\n width: 100% !important;\n height: 85vh !important;\n border-radius: 12px 12px 0 0;\n transform: translateY(100%);\n }\n\n .up-popup-modal.visible .up-popup-modal-content {\n transform: translateY(0);\n }\n\n .up-popup-modal iframe {\n border-radius: 12px 12px 0 0;\n }\n }\n\n @media (max-width: 480px) {\n .up-popup-modal {\n align-items: stretch;\n }\n\n .up-popup-modal-content {\n height: 100vh !important;\n border-radius: 0;\n }\n\n .up-popup-modal iframe {\n border-radius: 0;\n }\n }\n `\n document.head.appendChild(style)\n }\n}\n\n/**\n * Window popup implementation (actual popup window)\n */\nexport class WindowPopupInstance extends BasePopupInstance {\n private popupWindow: Window | null = null\n private messageListener?: (event: MessageEvent) => void\n\n async show(): Promise<void> {\n if (this._isClosed) {\n throw new Error('Popup is closed')\n }\n\n if (!this.popupWindow || this.popupWindow.closed) {\n await this.createPopupWindow()\n }\n\n if (this.popupWindow && !this.popupWindow.closed) {\n this.popupWindow.focus()\n this._isVisible = true\n this.events.emit('show')\n }\n }\n\n hide(): void {\n // For popup windows, hide typically means minimize or move to background\n // Since we can't directly minimize, we just blur it\n if (this.popupWindow && !this.popupWindow.closed) {\n this.popupWindow.blur()\n }\n this._isVisible = false\n this.events.emit('hide')\n }\n\n close(): void {\n if (this._isClosed) return\n\n this._isClosed = true\n this._isVisible = false\n\n if (this.popupWindow && !this.popupWindow.closed) {\n this.popupWindow.close()\n }\n this.popupWindow = null\n\n if (this.messageListener) {\n window.removeEventListener('message', this.messageListener)\n }\n\n this.events.emit('close')\n this.cleanup()\n }\n\n get contentWindow(): Window | undefined {\n return this.popupWindow && !this.popupWindow.closed\n ? this.popupWindow\n : undefined\n }\n\n get isVisible(): boolean {\n return !this._isClosed && !!(this.popupWindow && !this.popupWindow.closed)\n }\n\n private async createPopupWindow(): Promise<void> {\n if (!this.request.url) {\n throw new Error('URL required for popup windows')\n }\n\n const { width = 400, height = 600 } = this.request.size || {}\n const position = this.request.position || 'center'\n const features = [\n `width=${width}`,\n `height=${height}`,\n ...this.getPositionFeatures(position, width, height),\n 'scrollbars=yes',\n 'resizable=yes',\n 'status=no',\n 'location=no',\n 'toolbar=no',\n 'menubar=no',\n ].join(',')\n\n this.popupWindow = window.open(this.request.url, '_blank', features)\n\n if (!this.popupWindow) {\n throw new Error('Popup blocked or failed to open')\n }\n\n // Setup message listener\n this.messageListener = (event: MessageEvent) => {\n if (event.source === this.popupWindow) {\n this.handleMessage(event.data)\n }\n }\n window.addEventListener('message', this.messageListener)\n\n // Monitor popup close\n const checkClosed = () => {\n if (this.popupWindow?.closed && !this._isClosed) {\n this.close()\n } else if (!this._isClosed) {\n setTimeout(checkClosed, 1000)\n }\n }\n setTimeout(checkClosed, 1000)\n }\n\n private getPositionFeatures(\n position: string,\n width: number,\n height: number\n ): string[] {\n const screenLeft =\n window.screenLeft !== undefined ? window.screenLeft : window.screenX\n const screenTop =\n window.screenTop !== undefined ? window.screenTop : window.screenY\n const windowWidth =\n window.innerWidth || document.documentElement.clientWidth || screen.width\n const windowHeight =\n window.innerHeight ||\n document.documentElement.clientHeight ||\n screen.height\n\n let left: number\n let top: number\n\n switch (position) {\n case 'top-right':\n left = screenLeft + windowWidth - width - 20\n top = screenTop + 20\n break\n case 'center':\n default:\n left = screenLeft + (windowWidth - width) / 2\n top = screenTop + (windowHeight - height) / 2\n break\n }\n\n return [`left=${Math.max(0, left)}`, `top=${Math.max(0, top)}`]\n }\n}\n"],"mappings":"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","names":["account"]}
@@ -0,0 +1,9 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkIAKQFHFDcjs = require('./chunk-IAKQFHFD.cjs');
4
+ require('./chunk-XOKG3KIL.cjs');
5
+ require('./chunk-ZBDE64SD.cjs');
6
+
7
+
8
+ exports.RestoreModal = _chunkIAKQFHFDcjs.RestoreModal;
9
+ //# sourceMappingURL=restore-modal.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/restore-modal.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,sDAAC","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/restore-modal.cjs"}
@@ -0,0 +1,68 @@
1
+ import * as lit from 'lit';
2
+ import { PasskeyAuthProvider, WalletData } from '@lukso/passkey-auth';
3
+ import { C as CoreLitElement } from './index-D2orHGFi.cjs';
4
+
5
+ declare class RestoreModal extends CoreLitElement {
6
+ isOpen: boolean;
7
+ theme: 'light' | 'dark' | 'auto';
8
+ keyGenerator: PasskeyAuthProvider | null;
9
+ private currentStep;
10
+ private selectedFile;
11
+ private backupData;
12
+ private fileError;
13
+ private isDragging;
14
+ private password;
15
+ private passwordErrors;
16
+ private isRestoring;
17
+ private walletData;
18
+ private validationWarnings;
19
+ private validationInfo;
20
+ private controllers;
21
+ private restoredAddresses;
22
+ /**
23
+ * Public method for parent to set preview result
24
+ * Called after parent handles the 'preview' event
25
+ */
26
+ setPreviewResult(options: {
27
+ controllers: Array<{
28
+ address: string;
29
+ status: 'new' | 'existing';
30
+ }>;
31
+ warnings?: string[];
32
+ }): void;
33
+ /**
34
+ * Public method for parent to set validation result
35
+ * Called after parent handles the 'validate' event
36
+ */
37
+ setValidationResult(walletData: WalletData | null, options?: {
38
+ error?: string;
39
+ warnings?: string[];
40
+ info?: string[];
41
+ }): void;
42
+ render(): lit.TemplateResult<1>;
43
+ private renderStep;
44
+ private renderUploadStep;
45
+ private renderPasswordStep;
46
+ private renderPreviewStep;
47
+ private renderSuccessStep;
48
+ private getStepTitle;
49
+ private triggerFileInput;
50
+ private handleFileSelect;
51
+ private handleDragOver;
52
+ private handleDragLeave;
53
+ private handleDrop;
54
+ private handleFile;
55
+ private previewRestore;
56
+ private confirmRestore;
57
+ private goBack;
58
+ private goBackFromPreview;
59
+ private close;
60
+ private truncateAddress;
61
+ }
62
+ declare global {
63
+ interface HTMLElementTagNameMap {
64
+ 'restore-modal': RestoreModal;
65
+ }
66
+ }
67
+
68
+ export { RestoreModal };
@@ -0,0 +1,68 @@
1
+ import * as lit from 'lit';
2
+ import { PasskeyAuthProvider, WalletData } from '@lukso/passkey-auth';
3
+ import { C as CoreLitElement } from './index-D2orHGFi.js';
4
+
5
+ declare class RestoreModal extends CoreLitElement {
6
+ isOpen: boolean;
7
+ theme: 'light' | 'dark' | 'auto';
8
+ keyGenerator: PasskeyAuthProvider | null;
9
+ private currentStep;
10
+ private selectedFile;
11
+ private backupData;
12
+ private fileError;
13
+ private isDragging;
14
+ private password;
15
+ private passwordErrors;
16
+ private isRestoring;
17
+ private walletData;
18
+ private validationWarnings;
19
+ private validationInfo;
20
+ private controllers;
21
+ private restoredAddresses;
22
+ /**
23
+ * Public method for parent to set preview result
24
+ * Called after parent handles the 'preview' event
25
+ */
26
+ setPreviewResult(options: {
27
+ controllers: Array<{
28
+ address: string;
29
+ status: 'new' | 'existing';
30
+ }>;
31
+ warnings?: string[];
32
+ }): void;
33
+ /**
34
+ * Public method for parent to set validation result
35
+ * Called after parent handles the 'validate' event
36
+ */
37
+ setValidationResult(walletData: WalletData | null, options?: {
38
+ error?: string;
39
+ warnings?: string[];
40
+ info?: string[];
41
+ }): void;
42
+ render(): lit.TemplateResult<1>;
43
+ private renderStep;
44
+ private renderUploadStep;
45
+ private renderPasswordStep;
46
+ private renderPreviewStep;
47
+ private renderSuccessStep;
48
+ private getStepTitle;
49
+ private triggerFileInput;
50
+ private handleFileSelect;
51
+ private handleDragOver;
52
+ private handleDragLeave;
53
+ private handleDrop;
54
+ private handleFile;
55
+ private previewRestore;
56
+ private confirmRestore;
57
+ private goBack;
58
+ private goBackFromPreview;
59
+ private close;
60
+ private truncateAddress;
61
+ }
62
+ declare global {
63
+ interface HTMLElementTagNameMap {
64
+ 'restore-modal': RestoreModal;
65
+ }
66
+ }
67
+
68
+ export { RestoreModal };
@@ -0,0 +1,9 @@
1
+ import {
2
+ RestoreModal
3
+ } from "./chunk-3SGSPHOZ.js";
4
+ import "./chunk-XGIT7YUY.js";
5
+ import "./chunk-EUXUH3YW.js";
6
+ export {
7
+ RestoreModal
8
+ };
9
+ //# sourceMappingURL=restore-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,386 @@
1
+ import { TemplateResult } from 'lit';
2
+
3
+ interface WalletConnector {
4
+ id: string;
5
+ name?: string;
6
+ rdns?: string;
7
+ slug?: string;
8
+ type: 'embedded' | 'extension' | 'mobile' | 'injected' | 'walletconnect';
9
+ connect: () => Promise<void>;
10
+ getProvider?: () => Promise<any>;
11
+ }
12
+ interface ConnectModalSetup {
13
+ /**
14
+ * Wagmi config instance
15
+ */
16
+ wagmiConfig: any;
17
+ /**
18
+ * Optional chain ID to use for connections (defaults to first chain in config)
19
+ */
20
+ chainId?: number;
21
+ /**
22
+ * Optional embedded wallet ID (to identify it in wagmi connectors)
23
+ * If provided, this connector will be shown first as "Create Passkey Wallet"
24
+ * Example: 'dev.lukso.auth'
25
+ */
26
+ embeddedWalletId?: string;
27
+ }
28
+ interface WagmiConnector {
29
+ uid: string;
30
+ name: string;
31
+ id: string;
32
+ type: string;
33
+ icon?: string;
34
+ [key: string]: any;
35
+ }
36
+ type ConnectModalTheme = 'light' | 'dark' | 'auto';
37
+ type ConnectionModalView = 'up_connection' | 'qr_code' | 'eoa_connection';
38
+ type Wallet = {
39
+ id: string;
40
+ name: string;
41
+ slug: string;
42
+ description: string;
43
+ homepage: string;
44
+ chains: string[];
45
+ versions: string[];
46
+ sdks: string[];
47
+ app_type: string;
48
+ category: string;
49
+ image_id: string;
50
+ image_url: WalletImageUrl;
51
+ app: WalletApp;
52
+ rdns: string;
53
+ mobile: WalletMobile;
54
+ desktop: WalletDesktop;
55
+ isInstalled: boolean;
56
+ connector: WalletConnector | undefined;
57
+ };
58
+ type WalletImageUrl = {
59
+ sm: string;
60
+ md: string;
61
+ lg: string;
62
+ };
63
+ type WalletAppType = 'browser' | 'ios' | 'android' | 'mac' | 'windows' | 'linux' | 'chrome' | 'firefox' | 'safari' | 'edge' | 'opera';
64
+ type WalletApp = {
65
+ [key in WalletAppType]?: string;
66
+ };
67
+ interface WalletMobile {
68
+ native?: string;
69
+ universal?: string;
70
+ }
71
+ interface WalletDesktop {
72
+ native?: string;
73
+ universal?: string;
74
+ }
75
+
76
+ /**
77
+ * EOA Connection View - Lit Component
78
+ *
79
+ * Displays available EOA (Externally Owned Account) wallets for connection.
80
+ */
81
+
82
+ declare const EoaConnectionView_base: any;
83
+ declare class EoaConnectionView extends EoaConnectionView_base {
84
+ connectors: WalletConnector[];
85
+ private isConnecting;
86
+ private connectingRdns;
87
+ /**
88
+ * Get WalletConnect connector
89
+ */
90
+ private get walletConnectConnector();
91
+ /**
92
+ * Get EOA connectors
93
+ */
94
+ private get eoaConnectors();
95
+ /**
96
+ * Get supported wallet IDs based on device type
97
+ *
98
+ * @returns
99
+ */
100
+ private supportedWalletIds;
101
+ /**
102
+ * Task to fetch EOA wallets - handles loading/error states automatically
103
+ */
104
+ private walletsTask;
105
+ /**
106
+ * Get device type
107
+ */
108
+ private deviceType;
109
+ /**
110
+ * Close modal
111
+ */
112
+ private handleClose;
113
+ /**
114
+ * Back to initial screen
115
+ */
116
+ private handleBack;
117
+ /**
118
+ * Handle wallet connect click
119
+ *
120
+ * @param wallet
121
+ */
122
+ private handleConnect;
123
+ /**
124
+ * Connect to wallet on desktop using selected connector
125
+ *
126
+ * @param wallet
127
+ */
128
+ private connectDesktop;
129
+ /**
130
+ * Connect to wallet on mobile using WalletConnect
131
+ */
132
+ private connectMobile;
133
+ /**
134
+ * Render the list of EOA wallets
135
+ */
136
+ private renderWalletsList;
137
+ /**
138
+ * Main render method
139
+ */
140
+ render(): TemplateResult<1>;
141
+ }
142
+ declare global {
143
+ interface HTMLElementTagNameMap {
144
+ 'eoa-connection-view': EoaConnectionView;
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Connection View - Lit Component
150
+ *
151
+ * Main connection view displaying primary Lukso connectors and option to show EOA connectors.
152
+ */
153
+
154
+ declare const ConnectionView_base: any;
155
+ declare class ConnectionView extends ConnectionView_base {
156
+ isConnecting: boolean;
157
+ connectingRdns: string | undefined;
158
+ connectors: WalletConnector[];
159
+ /**
160
+ * Get WalletConnect connector
161
+ */
162
+ private get walletConnectConnector();
163
+ /**
164
+ * Universal Profile browser extension connector
165
+ */
166
+ private get upExtensionConnector();
167
+ /**
168
+ * Passkey / Embedded wallet connector
169
+ */
170
+ private get embeddedWalletConnector();
171
+ /**
172
+ * Get browser extension store info
173
+ */
174
+ private get extensionStore();
175
+ /**
176
+ * Check if browser supports extension installation
177
+ */
178
+ private get browserSupportExtension();
179
+ /**
180
+ * Handle connect via embedded wallet
181
+ */
182
+ private handleConnectEmbedded;
183
+ /**
184
+ * Handle connect via UP Extension
185
+ */
186
+ private handleConnectExtension;
187
+ /**
188
+ * Handle connect via UP Mobile (WalletConnect)
189
+ */
190
+ private handleConnectMobile;
191
+ /**
192
+ * Close modal
193
+ */
194
+ private handleClose;
195
+ /**
196
+ * Handle showing EOA connections
197
+ */
198
+ private handleShowEoaConnections;
199
+ /**
200
+ * Handle showing QR code
201
+ */
202
+ private handleShowQrCode;
203
+ /**
204
+ * Render connector button
205
+ *
206
+ * @param iconName
207
+ * @param label
208
+ * @param onClick
209
+ * @param isLoading
210
+ * @param isDisabled
211
+ */
212
+ private renderConnectorButton;
213
+ private renderConnectors;
214
+ /**
215
+ * Render divider with text
216
+ */
217
+ private renderDivider;
218
+ render(): TemplateResult<1>;
219
+ }
220
+ declare global {
221
+ interface HTMLElementTagNameMap {
222
+ 'connection-view': ConnectionView;
223
+ }
224
+ }
225
+
226
+ /**
227
+ * QR Code View - Lit Component
228
+ *
229
+ * Displays Wallet Connect QR code for mobile connection.
230
+ */
231
+
232
+ declare const QrCodeView_base: any;
233
+ declare class QrCodeView extends QrCodeView_base {
234
+ data: string | undefined;
235
+ /**
236
+ * Back to initial screen
237
+ */
238
+ private handleBack;
239
+ /**
240
+ * Close modal
241
+ */
242
+ private handleClose;
243
+ render(): TemplateResult<1>;
244
+ }
245
+ declare global {
246
+ interface HTMLElementTagNameMap {
247
+ 'qr-code-view': QrCodeView;
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Connect Modal - Lit Component
253
+ *
254
+ * Framework-agnostic connection modal for wallet/profile connections.
255
+ */
256
+
257
+ declare const ConnectModal_base: any;
258
+ declare class ConnectModal extends ConnectModal_base {
259
+ open: boolean;
260
+ theme: ConnectModalTheme;
261
+ private connectors;
262
+ private isDark;
263
+ private modalView;
264
+ private qrCodeData;
265
+ private mediaQueryList;
266
+ updated(changedProperties: Map<string, any>): void;
267
+ connectedCallback(): void;
268
+ disconnectedCallback(): void;
269
+ /**
270
+ * Handle system theme changes
271
+ *
272
+ * @param event
273
+ */
274
+ private handleMediaQueryChange;
275
+ /**
276
+ * Close modal
277
+ */
278
+ handleClose(): void;
279
+ /**
280
+ * Update isDark state based on theme property
281
+ */
282
+ private updateTheme;
283
+ private loadConnectors;
284
+ /**
285
+ * Successful connection handler
286
+ *
287
+ * @param connector
288
+ */
289
+ private handleOnConnectSuccess;
290
+ /**
291
+ * Error connection handler
292
+ *
293
+ * @param error
294
+ */
295
+ private handleOnConnectError;
296
+ private handleBackToConnectionView;
297
+ private handleShowEoaConnectionsView;
298
+ private handleShowQrCodeView;
299
+ /**
300
+ * Render modal content based on current view flag
301
+ */
302
+ private renderModalContent;
303
+ render(): TemplateResult<1>;
304
+ }
305
+ declare global {
306
+ interface HTMLElementTagNameMap {
307
+ 'connect-modal': ConnectModal;
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Wagmi Connector Adapter
313
+ * Converts wagmi/viem connectors to our WalletConnector format
314
+ */
315
+
316
+ /**
317
+ * Convert a wagmi connector to our WalletConnector format
318
+ * @param connector - Wagmi connector instance
319
+ * @param connectFn - Function to call connect (from wagmi's useConnect)
320
+ * @param chainId - Optional chain ID to use for connection
321
+ */
322
+ declare function fromWagmiConnector(connector: WagmiConnector, connectFn: (options: {
323
+ connector: WagmiConnector;
324
+ chainId?: number;
325
+ }) => Promise<any>, chainId?: number): WalletConnector;
326
+ /**
327
+ * Convert array of wagmi connectors to WalletConnector array
328
+ * @param connectors - Array of wagmi connectors
329
+ * @param connectFn - Function to call connect (from wagmi's useConnect)
330
+ * @param chainId - Optional chain ID to use for connection
331
+ * @param embeddedWalletId - Optional embedded wallet ID to identify it (e.g., 'dev.lukso.auth')
332
+ */
333
+ declare function fromWagmiConnectors(connectors: WagmiConnector[], connectFn: (options: {
334
+ connector: WagmiConnector;
335
+ chainId?: number;
336
+ }) => Promise<any>, chainId?: number, embeddedWalletId?: string): WalletConnector[];
337
+ /**
338
+ * Setup wagmi for connect modal
339
+ * Call this once from your app initialization with wagmi config
340
+ *
341
+ * @example
342
+ * ```typescript
343
+ * import { setupConnectModal } from '@lukso/up-connector'
344
+ * import { wagmiConfig } from './wagmi-config'
345
+ *
346
+ * setupConnectModal({
347
+ * wagmiConfig,
348
+ * chainId: 42, // Optional: LUKSO mainnet
349
+ * embeddedWalletConnect: async () => {
350
+ * // Your passkey wallet logic
351
+ * }
352
+ * })
353
+ * ```
354
+ */
355
+ declare function setupConnectModal(setup: ConnectModalSetup): void;
356
+ /**
357
+ * Get the current wagmi setup (for internal use by connector)
358
+ */
359
+ declare function getWagmiSetup(): ConnectModalSetup | null;
360
+ /**
361
+ * Get current wagmi account state
362
+ * Returns null if wagmi is not set up
363
+ */
364
+ declare function getWagmiAccount(): Promise<{
365
+ isConnected: boolean;
366
+ address?: string;
367
+ chainId?: number;
368
+ connector?: any;
369
+ } | null>;
370
+ /**
371
+ * Subscribe to wagmi account changes
372
+ * Returns unsubscribe function
373
+ */
374
+ declare function watchWagmiAccount(callback: (account: {
375
+ isConnected: boolean;
376
+ address?: string;
377
+ chainId?: number;
378
+ connector?: any;
379
+ }) => void): Promise<(() => void) | null>;
380
+ /**
381
+ * Disconnect from wagmi
382
+ * Returns true if disconnect was successful
383
+ */
384
+ declare function disconnectWagmi(): Promise<boolean>;
385
+
386
+ export { ConnectModal as C, type WalletConnector as W, type WagmiConnector as a, type ConnectionModalView as b, type ConnectModalSetup as c, type ConnectModalTheme as d, disconnectWagmi as e, getWagmiSetup as f, getWagmiAccount as g, fromWagmiConnector as h, fromWagmiConnectors as i, type Wallet as j, setupConnectModal as s, watchWagmiAccount as w };