@ic-pay/icpay-widget 1.2.57 → 1.2.59
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/styles.ts","../src/utils/sdk.ts","../src/components/ui/progress-bar.ts","../src/components/ui/transak-onramp-modal.ts","../src/components/premium-content.ts","../src/error-handling.ts","../src/components/ui/wallet-selector-modal.ts","../src/utils/balances.ts","../src/utils/format.ts","../src/components/ui/shared/pay-with.ts","../src/components/ui/wallet-balance-modal.ts","../src/utils/pnp.ts","../src/components/tip-jar.ts","../src/components/article-paywall.ts","../src/components/coffee-shop.ts","../src/components/donation-thermometer.ts","../src/components/pay-button.ts","../src/components/amount-input.ts"],"sourcesContent":["import { css } from 'lit';\nimport type { ThemeConfig } from './types';\n\nexport const baseStyles = css`\n :host {\n --icpay-primary: #f9fafb;\n --icpay-secondary: #e5e7eb;\n --icpay-accent: #9ca3af;\n --icpay-text: #f9fafb;\n --icpay-muted: #9ca3af;\n --icpay-surface: #1f2937;\n --icpay-surface-alt: #374151;\n --icpay-border: #4b5563;\n --icpay-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n display: block;\n font-family: var(--icpay-font);\n }\n\n .icpay-card {\n background: var(--icpay-surface);\n border: 1px solid var(--icpay-border);\n border-radius: 16px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.35);\n }\n\n .icpay-section {\n padding: 20px;\n }\n\n .pay-button {\n width: 100%;\n background: linear-gradient(135deg, var(--icpay-primary) 0%, var(--icpay-secondary) 100%);\n color: #111827;\n border: 1px solid #d1d5db;\n border-radius: 16px;\n padding: 16px;\n font-size: 16px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);\n }\n\n .pay-button:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);\n background: linear-gradient(135deg, #ffffff 0%, #f3f4f6 100%);\n }\n\n .pay-button.processing {\n background: #6b7280;\n color: #f9fafb;\n border-color: #6b7280;\n cursor: not-allowed;\n animation: pulse 2s infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n }\n`;\n\n\nexport function applyThemeVars(host: HTMLElement, theme?: ThemeConfig | null): void {\n if (!host || !theme) return;\n const primary = theme.primaryColor || undefined;\n const secondary = theme.secondaryColor || undefined;\n const set = (k: string, v?: string) => { if (v) host.style.setProperty(k, v); };\n set('--icpay-primary', primary);\n set('--icpay-secondary', secondary);\n\n const parseHex = (hex?: string) => {\n if (!hex) return null;\n const h = hex.replace('#', '');\n const full = h.length === 3 ? h.split('').map(c=>c+c).join('') : h;\n const bigint = parseInt(full, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n return { r, g, b };\n };\n const luminance = (hex?: string) => {\n const rgb = parseHex(hex);\n if (!rgb) return 0;\n const toLin = (c: number) => {\n const s = c / 255;\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);\n };\n return 0.2126 * toLin(rgb.r) + 0.7152 * toLin(rgb.g) + 0.0722 * toLin(rgb.b);\n };\n\n const basis = primary || secondary;\n const isLight = luminance(basis) > 0.6;\n const surface = theme.surfaceColor || (isLight ? '#f3f4f6' : '#1f2937');\n const surfaceAlt = theme.surfaceAltColor || (isLight ? '#e5e7eb' : '#374151');\n const border = theme.borderColor || (isLight ? '#d1d5db' : '#4b5563');\n const text = theme.textColor || (isLight ? '#111827' : '#f9fafb');\n const accent = theme.accentColor || secondary || primary || (isLight ? '#6b7280' : '#9ca3af');\n const muted = theme.mutedTextColor || (isLight ? '#6b7280' : '#9ca3af');\n\n set('--icpay-accent', accent);\n set('--icpay-text', text);\n set('--icpay-muted', muted);\n set('--icpay-surface', surface);\n set('--icpay-surface-alt', surfaceAlt);\n set('--icpay-border', border);\n}\n\n\n","import { Icpay, PriceCalculationResult, IcpayConfig } from '@ic-pay/icpay-sdk';\nimport type { CommonConfig } from '../types';\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// Debug logger utility for widget\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\nexport type WidgetSdk = {\n client: InstanceType<typeof Icpay>;\n quoteUsd(usdAmount: number, ledgerCanisterId: string): Promise<PriceCalculationResult>;\n sendUsd(usdAmount: number, ledgerCanisterId: string, metadata?: Record<string, any>): Promise<any>;\n startOnrampUsd(usdAmount: number, ledgerCanisterId: string, metadata?: Record<string, any>): Promise<any>;\n notifyIntentUntilComplete(paymentIntentId: string, intervalMs?: number, orderId?: string): { stop: () => void };\n};\n\nexport function createSdk(config: CommonConfig): WidgetSdk {\n if (!isBrowser) {\n // Return a mock SDK for SSR\n return {\n client: {} as any,\n quoteUsd: async () => ({ tokenAmountDecimals: '0' } as any),\n sendUsd: async () => ({ transactionId: '0', status: 'pending' } as any),\n startOnrampUsd: async () => ({ transactionId: '0', status: 'pending', metadata: { icpay_onramp: { sessionId: null } } } as any),\n notifyIntentUntilComplete: () => ({ stop: () => {} })\n };\n }\n\n debugLog(config.debug || false, 'Creating SDK with config:', config);\n\n // Filter out undefined values to avoid constructor errors\n const sdkConfig: IcpayConfig = {\n publishableKey: config.publishableKey,\n };\n // Default to enabling SDK events for the widget unless explicitly set in config\n if ((config as any).enableEvents !== undefined) {\n (sdkConfig as any).enableEvents = (config as any).enableEvents;\n } else {\n (sdkConfig as any).enableEvents = true;\n }\n\n if (config.apiUrl) sdkConfig.apiUrl = config.apiUrl;\n if (config.icHost) sdkConfig.icHost = config.icHost;\n if (config.actorProvider) sdkConfig.actorProvider = config.actorProvider;\n if (config.connectedWallet) sdkConfig.connectedWallet = config.connectedWallet;\n // Pass selected EVM provider from widget to SDK so signatures use the chosen wallet\n if ((config as any).evmProvider) (sdkConfig as any).evmProvider = (config as any).evmProvider;\n // Propagate kill switch to SDK (defaults to true inside SDK)\n if (config.onrampDisabled !== undefined) (sdkConfig as any).onrampDisabled = config.onrampDisabled;\n\n // Pass debug configuration to SDK if specified\n if (config.debug !== undefined) {\n sdkConfig.debug = config.debug;\n }\n\n debugLog(config.debug || false, 'Filtered SDK config:', sdkConfig);\n try {\n debugLog(config.debug || false, 'typeof Icpay:', typeof Icpay);\n const client = new Icpay(sdkConfig);\n\n // Re-emit SDK instance events on window so UI components can listen globally\n if (isBrowser) {\n const clientAny = client as any;\n const forward = (type: string) => {\n clientAny.addEventListener(type, (e: any) => {\n window.dispatchEvent(new CustomEvent(type, { detail: e?.detail ?? e }));\n });\n };\n [\n 'icpay-sdk-error',\n 'icpay-sdk-transaction-created',\n 'icpay-sdk-transaction-updated',\n 'icpay-sdk-transaction-completed',\n 'icpay-sdk-transaction-failed',\n 'icpay-sdk-method-start',\n 'icpay-sdk-method-success',\n 'icpay-sdk-method-error'\n ].forEach(forward);\n }\n\n async function quoteUsd(usdAmount: number, tokenShortcode?: string, ledgerCanisterId?: string) {\n // Preferred path: tokenShortcode; fallback: ledgerCanisterId\n if (typeof tokenShortcode === 'string' && tokenShortcode.trim().length > 0) {\n return (client as any).calculateTokenAmountFromUSD({ usdAmount, tokenShortcode: tokenShortcode.toLowerCase() });\n }\n if (typeof ledgerCanisterId === 'string' && ledgerCanisterId.trim().length > 0) {\n return client.calculateTokenAmountFromUSD({ usdAmount, ledgerCanisterId });\n }\n throw new Error('quoteUsd requires tokenShortcode or ledgerCanisterId');\n }\n\n async function sendUsd(usdAmount: number, tokenShortcode?: string, metadata?: Record<string, any>, ledgerCanisterId?: string) {\n // Merge global config.metadata with call-specific metadata\n const mergedMeta = { ...(config as any).metadata, ...(metadata || {}) } as Record<string, any>;\n // Description passed through to intent (components decide X402 vs wallet flow before calling us)\n const fallbackDesc = `Pay ${usdAmount} with crypto`;\n const description =\n (config as any).description ||\n (mergedMeta as any).__description ||\n (mergedMeta as any).description ||\n fallbackDesc;\n const payload: any = {\n usdAmount,\n metadata: mergedMeta,\n description,\n };\n if (typeof tokenShortcode === 'string' && tokenShortcode.trim().length > 0) {\n payload.tokenShortcode = tokenShortcode.toLowerCase();\n }\n if (typeof ledgerCanisterId === 'string' && ledgerCanisterId.trim().length > 0) {\n payload.ledgerCanisterId = ledgerCanisterId;\n }\n if (!payload.tokenShortcode && !payload.ledgerCanisterId) {\n throw new Error('sendUsd requires tokenShortcode or ledgerCanisterId');\n }\n debugLog(Boolean(config.debug), 'Calling createPaymentUsd (flow decision handled by components)', payload);\n return (client as any).createPaymentUsd(payload);\n }\n\n async function startOnrampUsd(usdAmount: number, ledgerCanisterId: string, metadata?: Record<string, any>) {\n // Trigger onramp flow through SDK; SDK returns onramp data in metadata.onramp\n const mergedMeta = { ...(config as any).metadata, ...(metadata || {}) } as Record<string, any>;\n const fallbackDesc = `Pay ${usdAmount} with crypto`;\n const description =\n (config as any).description ||\n (mergedMeta as any).__description ||\n (mergedMeta as any).description ||\n fallbackDesc;\n debugLog(Boolean(config.debug), 'Calling onramp createPaymentUsd', {\n usdAmount,\n ledgerCanisterId,\n description,\n });\n return (client as any).createPaymentUsd({ usdAmount, ledgerCanisterId, metadata: mergedMeta, onrampPayment: true, description });\n }\n\n\n function notifyIntentUntilComplete(paymentIntentId: string, intervalMs?: number, orderId?: string) {\n return (client as any).notifyPaymentIntentOnRamp({ paymentIntentId, intervalMs, orderId });\n }\n\n return { client, quoteUsd, sendUsd, startOnrampUsd, notifyIntentUntilComplete };\n } catch (error) {\n debugLog(config.debug || false, 'Error creating SDK:', error);\n throw error;\n }\n}\n\n\n","import { LitElement, html, css } from 'lit';\nimport { applyThemeVars } from '../../styles';\nimport { customElement, property, state } from 'lit/decorators.js';\n\n// Debug logger utility (mirrors other widgets)\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n}\n\ntype StepStatus = 'pending' | 'loading' | 'completed' | 'error';\n\ntype Step = {\n key: string;\n label: string;\n tooltip: string;\n status: StepStatus;\n timestamp?: string;\n errorMessage?: string;\n};\n\nconst DEFAULT_STEPS: Step[] = [\n {\n key: 'wallet',\n label: 'Connect wallet',\n tooltip: 'Awaiting wallet connection',\n status: 'pending'\n },\n {\n key: 'await',\n label: 'Awaiting confirmation',\n tooltip: 'Awaiting wallet signature',\n status: 'pending'\n },\n {\n key: 'transfer',\n label: 'Transferring funds',\n tooltip: 'Awaiting transfer to merchant',\n status: 'pending'\n },\n {\n key: 'verify',\n label: 'Verifying payment',\n tooltip: 'Please wait while we verify',\n status: 'pending'\n }\n];\n\n\n@customElement('icpay-progress-bar')\nexport class ICPayProgressBar extends LitElement {\n static styles = css`\n :host {\n display: block;\n font-family: var(--icpay-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);\n color: var(--icpay-text-primary, #ffffff);\n\n /* Theme variables for better composability */\n --icpay-bg-primary: #1f2937;\n --icpay-bg-secondary: rgba(255, 255, 255, 0.05);\n --icpay-bg-secondary-hover: rgba(255, 255, 255, 0.08);\n --icpay-bg-success: rgba(16, 185, 129, 0.1);\n --icpay-bg-error: rgba(239, 68, 68, 0.1);\n\n --icpay-text-primary: #ffffff;\n --icpay-text-secondary: #9ca3af;\n --icpay-text-muted: #6b7280;\n\n --icpay-border-primary: rgba(255, 255, 255, 0.1);\n --icpay-border-secondary: rgba(255, 255, 255, 0.2);\n --icpay-border-success: rgba(16, 185, 129, 0.3);\n --icpay-border-error: rgba(239, 68, 68, 0.3);\n\n --icpay-accent-primary: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);\n --icpay-accent-success: linear-gradient(135deg, #10b981 0%, #059669 100%);\n --icpay-accent-error: #ef4444;\n\n --icpay-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --icpay-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);\n --icpay-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);\n --icpay-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);\n\n --icpay-radius-sm: 6px;\n --icpay-radius-md: 8px;\n --icpay-radius-lg: 12px;\n --icpay-radius-xl: 16px;\n\n --icpay-spacing-xs: 4px;\n --icpay-spacing-sm: 8px;\n --icpay-spacing-md: 12px;\n --icpay-spacing-lg: 16px;\n --icpay-spacing-xl: 24px;\n }\n\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(8px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .modal-content {\n transition: opacity 0.4s ease, transform 0.4s ease;\n opacity: 1;\n transform: translateY(0);\n flex: 1;\n }\n\n .modal-content.transitioning {\n opacity: 0;\n transform: translateY(20px);\n }\n\n .wallet-selector-container {\n width: 100%;\n }\n\n .wallet-selector-title {\n color: var(--icpay-text-primary);\n margin: 0 48px var(--icpay-spacing-lg) 0;\n font-size: 18px;\n font-weight: 600;\n }\n\n .wallet-options {\n display: flex;\n flex-direction: column;\n gap: var(--icpay-spacing-sm);\n }\n\n .wallet-option {\n width: 100%;\n padding: 12px 16px;\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.3s ease;\n box-sizing: border-box;\n }\n\n .wallet-option:hover {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.2);\n }\n\n .wallet-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .wallet-icon img {\n width: 40px;\n height: 40px;\n object-fit: cover;\n border-radius: 12px;\n }\n\n .wallet-icon-placeholder {\n color: #ffffff;\n font-size: 12px;\n font-weight: bold;\n }\n\n .wallet-label {\n font-weight: 500;\n font-size: 14px;\n color: #ffffff;\n }\n\n .modal-overlay.active {\n opacity: 1;\n visibility: visible;\n }\n\n .modal-container {\n background: #1a1a1a;\n border: 1px solid #333;\n border-radius: 24px;\n padding: 24px;\n max-width: 420px;\n width: 100%;\n height: 460px;\n box-shadow: var(--icpay-shadow-xl);\n transform: translateY(20px);\n transition: transform 0.3s ease;\n position: relative;\n display: flex;\n flex-direction: column;\n }\n\n .modal-overlay.active .modal-container {\n transform: translateY(0);\n }\n\n .close-button {\n position: absolute;\n top: var(--icpay-spacing-lg);\n right: var(--icpay-spacing-lg);\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--icpay-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n font-size: 20px;\n transition: all 0.2s;\n z-index: 10;\n }\n\n .close-button:hover {\n color: var(--icpay-text-primary);\n }\n\n .progress-header {\n display:flex;\n align-items:center;\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid #333;\n flex-shrink: 0;\n }\n .progress-title {\n font-size: 20px;\n font-weight: 600;\n margin: 0;\n color: #ffffff;\n flex: 1;\n text-align: center;\n margin-right: 40px;\n }\n .progress-spacer { width:24px; display:inline-block; margin-right:16px; }\n .progress-subtitle { color: var(--icpay-text-secondary); font-size: 14px; }\n .progress-steps {\n margin-bottom: var(--icpay-spacing-xl);\n display: flex;\n flex-direction: column;\n gap: 24px;\n overflow-y: auto;\n flex: 1;\n }\n .step {\n width: 100%;\n padding: 16px;\n background: #252525;\n border: none;\n border-radius: 12px;\n display: flex;\n align-items: flex-start;\n gap: 16px;\n transition: all 0.3s ease;\n cursor: default;\n box-sizing: border-box;\n }\n .step.active {\n background: #2a2a2a;\n }\n .step.completed {\n opacity: 1;\n background: #252525;\n }\n\n .step.error {\n opacity: 1;\n background: rgba(239, 68, 68, 0.1);\n border-color: rgba(239, 68, 68, 0.3);\n }\n .step-icon {\n width: 40px;\n height: 40px;\n border-radius: 0;\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.3s ease;\n position: relative;\n flex-shrink: 0;\n }\n .step.active .step-icon { }\n .step.completed .step-icon { }\n\n .step.error .step-icon { background: transparent; }\n .step-icon svg {\n width: 20px;\n height: 20px;\n stroke: var(--icpay-text-primary);\n transition: stroke 0.3s ease;\n }\n .step-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 0;\n }\n .step-title {\n font-weight: 500;\n font-size: 16px;\n color: #ffffff;\n transition: color 0.3s ease;\n margin: 0;\n }\n .step-description {\n font-size: 14px;\n color: #888;\n margin: 0;\n }\n\n .step-error-message {\n font-size: 11px;\n color: #fca5a5;\n margin-top: 4px;\n padding: 4px 8px;\n background: rgba(239, 68, 68, 0.1);\n border-radius: 4px;\n border-left: 3px solid #ef4444;\n }\n /* Spinner exactly like in design: wrapper + ::before ring */\n .spinner {\n width: 40px;\n height: 40px;\n margin-right: 0;\n position: relative;\n flex-shrink: 0;\n }\n .spinner::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid #333;\n border-top: 3px solid #0066ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n box-sizing: border-box;\n }\n /* Completed: replace ring with filled green circle + tick */\n .step.completed .spinner::before { display: none; }\n .step.completed .spinner::after {\n content: '✓';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: #10b981;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n font-size: 24px;\n font-weight: bold;\n box-sizing: border-box;\n }\n\n /* Error icon (pastel red) like success's green circle */\n .error-x {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background-color: #f87171; /* pastel red */\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n font-size: 20px;\n font-weight: bold;\n box-sizing: border-box;\n }\n\n /* Completed icon to match design proportions */\n .complete-icon {\n width: 40px;\n height: 40px;\n position: relative;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .complete-icon::before {\n content: '';\n position: absolute;\n inset: 0;\n border: 3px solid #333;\n border-radius: 50%;\n background: #252525;\n box-sizing: border-box;\n }\n .complete-icon svg {\n position: relative;\n width: 20px;\n height: 20px;\n stroke: #ffffff;\n display: block;\n }\n\n .error-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n }\n\n .error-icon-large {\n width: 64px;\n height: 64px;\n margin: 0 auto var(--icpay-spacing-lg);\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n border-radius: var(--icpay-radius-xl);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .error-icon-large svg {\n width: 32px;\n height: 32px;\n stroke: var(--icpay-text-primary);\n stroke-width: 2;\n }\n\n .error-title {\n font-size: 20px;\n font-weight: 600;\n margin-bottom: var(--icpay-spacing-sm);\n color: var(--icpay-text-primary);\n }\n\n .error-message-text {\n color: var(--icpay-text-secondary);\n margin-bottom: var(--icpay-spacing-xl);\n font-size: 14px;\n }\n\n .error-details {\n background: rgba(239, 68, 68, 0.1);\n border: 1px solid rgba(239, 68, 68, 0.3);\n border-radius: var(--icpay-radius-md);\n padding: var(--icpay-spacing-lg);\n margin-bottom: var(--icpay-spacing-xl);\n text-align: left;\n }\n\n .error-detail-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--icpay-spacing-sm);\n }\n\n .error-detail-item:last-child {\n margin-bottom: 0;\n }\n\n .error-detail-label {\n font-size: 14px;\n color: var(--icpay-text-secondary);\n font-weight: 500;\n }\n\n .error-detail-value {\n font-size: 14px;\n color: var(--icpay-text-primary);\n font-weight: 600;\n }\n\n .error-actions {\n display: flex;\n gap: var(--icpay-spacing-sm);\n justify-content: center;\n }\n\n .insufficient-funds-container {\n width: 100%;\n }\n\n .payment-summary {\n background: rgba(255, 255, 255, 0.1);\n border-radius: var(--icpay-radius-md);\n padding: var(--icpay-spacing-lg);\n margin-bottom: var(--icpay-spacing-lg);\n text-align: center;\n }\n\n .payment-amount {\n font-size: 16px;\n font-weight: 600;\n color: var(--icpay-text-primary);\n }\n\n .error-notification {\n background: rgba(255, 255, 255, 0.05);\n border: 1px solid #f59e0b;\n border-radius: var(--icpay-radius-md);\n padding: var(--icpay-spacing-lg);\n margin-bottom: var(--icpay-spacing-xl);\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--icpay-spacing-lg);\n }\n\n .error-content {\n display: flex;\n align-items: center;\n gap: var(--icpay-spacing-md);\n flex: 1;\n }\n\n .error-icon-small {\n width: 20px;\n height: 20px;\n color: #f59e0b;\n flex-shrink: 0;\n }\n\n .error-icon-small svg {\n width: 100%;\n height: 100%;\n }\n\n .error-text {\n font-size: 14px;\n font-weight: 500;\n color: #f59e0b;\n }\n\n .add-funds-btn {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: var(--icpay-radius-sm);\n padding: 8px 16px;\n color: var(--icpay-text-primary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.3s ease;\n flex-shrink: 0;\n }\n\n .add-funds-btn:hover {\n background: rgba(255, 255, 255, 0.15);\n border-color: rgba(255, 255, 255, 0.3);\n }\n\n .error-message {\n display: flex;\n align-items: flex-start;\n gap: var(--icpay-spacing-md);\n padding: var(--icpay-spacing-lg);\n background: var(--icpay-bg-error);\n border: 1px solid var(--icpay-border-error);\n border-radius: var(--icpay-radius-md);\n margin-top: var(--icpay-spacing-sm);\n }\n\n .error-icon {\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n background: var(--icpay-accent-error);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--icpay-text-primary);\n font-size: 12px;\n font-weight: bold;\n }\n\n .error-content h4 {\n margin: 0 0 4px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--icpay-text-primary);\n }\n\n .error-content p {\n margin: 0;\n font-size: 12px;\n color: #fca5a5;\n line-height: 1.4;\n }\n\n .success-container { text-align: center; }\n .success-center {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .success-icon {\n width: 64px;\n height: 64px;\n margin: 0 auto var(--icpay-spacing-lg);\n background: var(--icpay-accent-success);\n border-radius: var(--icpay-radius-xl);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .success-icon svg {\n width: 32px;\n height: 32px;\n stroke: var(--icpay-text-primary);\n stroke-width: 2;\n }\n .success-title {\n font-size: 20px;\n font-weight: 600;\n margin-bottom: var(--icpay-spacing-sm);\n color: var(--icpay-text-primary);\n }\n .success-message {\n color: var(--icpay-text-secondary);\n margin-bottom: 20px;\n font-size: 14px;\n }\n .success-actions {\n display: flex;\n gap: var(--icpay-spacing-sm);\n justify-content: center;\n }\n .btn {\n padding: 10px 20px;\n border-radius: var(--icpay-radius-md);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.3s ease;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: var(--icpay-spacing-sm);\n }\n .btn-primary {\n background: var(--icpay-accent-primary);\n color: var(--icpay-text-primary);\n border: none;\n }\n .btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);\n }\n .btn-secondary {\n background: transparent;\n color: var(--icpay-text-secondary);\n border: 1px solid var(--icpay-border-primary);\n }\n .btn-secondary:hover {\n background: var(--icpay-bg-secondary);\n border-color: var(--icpay-border-secondary);\n color: var(--icpay-text-primary);\n }\n\n .confetti {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1001;\n }\n\n .confetti-piece {\n position: absolute;\n width: 8px;\n height: 8px;\n background: #0066FF;\n animation: confetti-fall 3s linear forwards;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n /* legacy spinner removed; unified spinner defined above to match design */\n\n @keyframes confetti-fall {\n 0% {\n transform: translateY(-100vh) rotate(0deg);\n opacity: 1;\n }\n 100% {\n transform: translateY(100vh) rotate(720deg);\n opacity: 0;\n }\n }\n `;\n\n @property({ type: Boolean }) open = false;\n @property({ type: Boolean }) suspended = false;\n @property({ type: Array }) steps: Step[] = DEFAULT_STEPS;\n @property({ type: Number }) amount = 0;\n @property({ type: String }) currency = '';\n @property({ type: String }) ledgerSymbol = '';\n @property({ type: Boolean }) debug = false;\n @state() private activeIndex = 0;\n @state() private completed = false;\n @state() private failed = false;\n @state() private errorMessage: string | null = null;\n @state() private showSuccess = false;\n @state() private showConfetti = false;\n @state() private currentSteps: Step[] = [];\n @state() private currentAmount = 0;\n @state() private currentCurrency = '';\n @state() private currentLedgerSymbol = '';\n @state() private confirmLoadingStartedAt: number | null = null;\n private progressionTimer: number | null = null;\n @state() private currentWalletType: string | null = null;\n @state() private showWalletSelector = false;\n @state() private isTransitioning = false;\n\n @property({ type: Object }) theme?: { primaryColor?: string; secondaryColor?: string };\n\n connectedCallback(): void {\n super.connectedCallback();\n try { applyThemeVars(this, this.theme as any); } catch {}\n this.currentSteps = [...this.steps];\n\n // Initialize dynamic values from properties\n this.currentAmount = this.amount;\n this.currentCurrency = this.currency;\n this.currentLedgerSymbol = this.ledgerSymbol;\n\n // Attach global listeners for ICPay SDK events\n this.attachSDKEventListeners();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.detachSDKEventListeners();\n this.stopAutomaticProgression();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('theme')) {\n try { applyThemeVars(this, this.theme as any); } catch {}\n }\n }\n\n private attachSDKEventListeners() {\n // Core payment flow events\n window.addEventListener('icpay-sdk-method-start', this.onMethodStart as EventListener);\n window.addEventListener('icpay-sdk-method-success', this.onMethodSuccess as EventListener);\n window.addEventListener('icpay-sdk-method-error', this.onMethodError as EventListener);\n window.addEventListener('icpay-sdk-wallet-cancelled', this.onWalletCancelled as EventListener);\n window.addEventListener('icpay-sdk-wallet-error', this.onWalletError as EventListener);\n\n // Transaction lifecycle events\n window.addEventListener('icpay-sdk-transaction-created', this.onTransactionCreated as EventListener);\n window.addEventListener('icpay-sdk-transaction-updated', this.onTransactionUpdated as EventListener);\n window.addEventListener('icpay-sdk-transaction-completed', this.onTransactionCompleted as EventListener);\n window.addEventListener('icpay-sdk-transaction-failed', this.onTransactionFailed as EventListener);\n window.addEventListener('icpay-sdk-transaction-mismatched', this.onTransactionMismatched as EventListener);\n\n // Additional SDK events\n window.addEventListener('icpay-sdk-error', this.onSDKError as EventListener);\n window.addEventListener('icpay-sdk-wallet-connected', this.onWalletConnected as EventListener);\n window.addEventListener('icpay-sdk-wallet-disconnected', this.onWalletDisconnected as EventListener);\n window.addEventListener('icpay-sdk-balance-check', this.onBalanceCheck as EventListener);\n window.addEventListener('icpay-sdk-ledger-verified', this.onLedgerVerified as EventListener);\n\n // Custom widget events for better integration\n window.addEventListener('icpay-pay', this.onWidgetPayment as EventListener);\n window.addEventListener('icpay-error', this.onWidgetError as EventListener);\n window.addEventListener('icpay-unlock', this.onWidgetUnlock as EventListener);\n window.addEventListener('icpay-tip', this.onWidgetTip as EventListener);\n window.addEventListener('icpay-donation', this.onWidgetDonation as EventListener);\n window.addEventListener('icpay-coffee', this.onWidgetCoffee as EventListener);\n }\n\n private detachSDKEventListeners() {\n // Core payment flow events\n window.removeEventListener('icpay-sdk-method-start', this.onMethodStart as EventListener);\n window.removeEventListener('icpay-sdk-method-success', this.onMethodSuccess as EventListener);\n window.removeEventListener('icpay-sdk-method-error', this.onMethodError as EventListener);\n window.removeEventListener('icpay-sdk-wallet-cancelled', this.onWalletCancelled as EventListener);\n window.removeEventListener('icpay-sdk-wallet-error', this.onWalletError as EventListener);\n\n // Transaction lifecycle events\n window.removeEventListener('icpay-sdk-transaction-created', this.onTransactionCreated as EventListener);\n window.removeEventListener('icpay-sdk-transaction-updated', this.onTransactionUpdated as EventListener);\n window.removeEventListener('icpay-sdk-transaction-completed', this.onTransactionCompleted as EventListener);\n window.removeEventListener('icpay-sdk-transaction-failed', this.onTransactionFailed as EventListener);\n window.removeEventListener('icpay-sdk-transaction-mismatched', this.onTransactionMismatched as EventListener);\n\n // Additional SDK events\n window.removeEventListener('icpay-sdk-error', this.onSDKError as EventListener);\n window.removeEventListener('icpay-sdk-wallet-connected', this.onWalletConnected as EventListener);\n window.removeEventListener('icpay-sdk-wallet-disconnected', this.onWalletDisconnected as EventListener);\n window.removeEventListener('icpay-sdk-balance-check', this.onBalanceCheck as EventListener);\n window.removeEventListener('icpay-sdk-ledger-verified', this.onLedgerVerified as EventListener);\n\n // Custom widget events\n window.removeEventListener('icpay-pay', this.onWidgetPayment as EventListener);\n window.removeEventListener('icpay-error', this.onWidgetError as EventListener);\n window.removeEventListener('icpay-unlock', this.onWidgetUnlock as EventListener);\n window.removeEventListener('icpay-tip', this.onWidgetTip as EventListener);\n window.removeEventListener('icpay-donation', this.onWidgetDonation as EventListener);\n window.removeEventListener('icpay-coffee', this.onWidgetCoffee as EventListener);\n }\n\n private onMethodStart = (e: any) => {\n const methodName = e?.detail?.name || '';\n const methodType = e?.detail?.type || '';\n\n debugLog(this.debug, 'ICPay Progress: Method start event received:', e.detail);\n\n // Handle different payment methods (top-level starts)\n if (methodName === 'createPayment' || methodName === 'createPaymentUsd' ||\n methodName === 'sendUsd' || methodName === 'pay' ||\n methodName === 'unlock' || methodName === 'tip' ||\n methodName === 'donate' || methodName === 'order') {\n\n this.open = true;\n this.activeIndex = 0;\n this.completed = false;\n this.failed = false;\n this.errorMessage = null;\n this.showSuccess = false;\n this.showConfetti = false;\n\n // Do not show an internal wallet selector; parent widgets handle wallet modal\n this.showWalletSelector = false;\n this.isTransitioning = false;\n\n // Reset all steps to pending\n this.currentSteps = this.currentSteps.map(step => ({ ...step, status: 'pending' as StepStatus }));\n\n // Step 0: Wallet connect loading (rename if onramp)\n if (methodType === 'onramp') {\n // Update wallet step copy for onramp flow\n const idx = this.getStepIndexByKey('wallet');\n if (idx >= 0) {\n this.currentSteps[idx] = {\n ...this.currentSteps[idx],\n label: 'Transak Started',\n tooltip: 'Awaiting Transak information',\n } as any;\n }\n }\n this.setLoadingByKey('wallet');\n\n // Update amount and currency if provided in event\n if (e?.detail?.amount !== undefined) {\n this.currentAmount = e.detail.amount;\n this.amount = e.detail.amount;\n debugLog(this.debug, 'ICPay Progress: Amount updated to:', e.detail.amount);\n }\n if (e?.detail?.currency) {\n this.currentCurrency = e.detail.currency;\n this.currency = e.detail.currency;\n debugLog(this.debug, 'ICPay Progress: Currency updated to:', e.detail.currency);\n }\n if (e?.detail?.ledgerSymbol) {\n this.currentLedgerSymbol = e.detail.ledgerSymbol;\n this.ledgerSymbol = e.detail.ledgerSymbol;\n debugLog(this.debug, 'ICPay Progress: Current state after method start:', {\n activeIndex: this.activeIndex,\n currentAmount: this.currentAmount,\n currentCurrency: this.currentCurrency,\n currentLedgerSymbol: this.currentLedgerSymbol\n });\n }\n\n // Waiting for wallet confirmation event to proceed\n debugLog(this.debug, 'ICPay Progress: Waiting for wallet confirmation before starting progression');\n\n this.requestUpdate();\n }\n\n // Mid-flow granular starts for internal SDK steps (independent of top-level starts)\n if (!this.failed && !this.completed) {\n if (methodName === 'createPaymentX402Usd') {\n // X402 signature step: awaiting confirmation\n this.completeByKey('wallet');\n this.setLoadingByKey('await');\n } else if (methodName === 'sendFundsToLedger') {\n // Regular transfer step (IC or EVM tx): move to transfer\n this.completeByKey('wallet');\n this.completeByKey('await');\n this.setLoadingByKey('transfer');\n } else if (methodName === 'notifyLedgerTransaction') {\n // Start of post-send verification. In X402 this is called after signature (settle start).\n // Ensure we've advanced past await, move to transfer while settlement is being kicked off.\n this.completeByKey('wallet');\n this.completeByKey('await');\n this.setLoadingByKey('transfer');\n }\n }\n };\n\n private startAutomaticProgression() {\n // Clear any existing progression timer\n if (this.progressionTimer) {\n clearInterval(this.progressionTimer);\n }\n\n // Start from step 1 (second step) since step 0 is already completed\n this.activeIndex = 1;\n this.updateStepStatus(this.activeIndex, 'loading');\n\n debugLog(this.debug, 'ICPay Progress: Starting automatic progression from step:', this.activeIndex);\n\n // Progress through steps every 3 seconds\n this.progressionTimer = setInterval(() => {\n if (this.failed || this.completed) {\n this.stopAutomaticProgression();\n return;\n }\n\n debugLog(this.debug, 'ICPay Progress: Processing step:', this.activeIndex);\n\n // Complete current step\n this.updateStepStatus(this.activeIndex, 'completed');\n\n // Move to next step if available\n if (this.activeIndex < this.currentSteps.length - 1) {\n this.activeIndex++;\n this.updateStepStatus(this.activeIndex, 'loading');\n debugLog(this.debug, 'ICPay Progress: Auto-progressed to step:', this.activeIndex);\n } else {\n // All steps completed, stop progression and wait for transaction completion\n this.stopAutomaticProgression();\n debugLog(this.debug, 'ICPay Progress: All steps completed, waiting for transaction completion');\n }\n\n this.requestUpdate();\n }, 3000);\n }\n\n private stopAutomaticProgression() {\n if (this.progressionTimer) {\n clearInterval(this.progressionTimer);\n this.progressionTimer = null;\n }\n }\n\n private onMethodSuccess = (e: any) => {\n const methodName = e?.detail?.name || '';\n if (methodName === 'createPayment' || methodName === 'createPaymentUsd' ||\n methodName === 'sendUsd' || methodName === 'pay' ||\n methodName === 'unlock' || methodName === 'tip' ||\n methodName === 'donate' || methodName === 'order') {\n\n // Dispatch method success event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-method-success', {\n detail: { methodName, step: this.activeIndex },\n bubbles: true\n }));\n }\n\n // Map SDK method successes to step completions (mid-flow methods)\n if (!this.failed && !this.completed) {\n if (methodName === 'getLedgerBalance') {\n this.completeByKey('wallet');\n this.setLoadingByKey('await');\n } else if (methodName === 'sendFundsToLedger') {\n this.completeByKey('wallet');\n this.completeByKey('await');\n this.completeByKey('transfer');\n this.setLoadingByKey('verify');\n } else if (methodName === 'notifyLedgerTransaction') {\n this.completeByKey('wallet');\n this.completeByKey('await');\n this.completeByKey('transfer');\n // Keep verify loading until completion\n this.setLoadingByKey('verify');\n }\n }\n };\n\n private onTransactionCreated = (e: any) => {\n const transactionId = e?.detail?.transactionId || e?.detail?.id;\n\n debugLog(this.debug, 'ICPay Progress: Transaction created event received:', e.detail);\n\n // Await -> completed on intent created; start transfer loading\n if (!this.failed && !this.completed) {\n this.completeByKey('wallet');\n this.completeByKey('await');\n this.setLoadingByKey('transfer');\n }\n\n // Dispatch transaction created event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-transaction-created', {\n detail: { transactionId, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onTransactionUpdated = (e: any) => {\n const status = e?.detail?.status || 'pending';\n const transactionId = e?.detail?.transactionId || e?.detail?.id;\n\n debugLog(this.debug, 'ICPay Progress: Transaction updated event received:', e.detail);\n\n // When pending turns to confirmed, we will complete progression in onTransactionCompleted\n if (!this.failed && !this.completed && status === 'pending') {\n // Keep current step loading\n }\n\n // Dispatch transaction updated event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-transaction-updated', {\n detail: { status, transactionId, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onTransactionCompleted = (e: any) => {\n const transactionId = e?.detail?.transactionId || e?.detail?.id;\n const status = e?.detail?.status || 'completed';\n\n debugLog(this.debug, 'ICPay Progress: Transaction completed event received:', e.detail);\n debugLog(this.debug, 'ICPay Progress: Current state when transaction completed:', {\n activeIndex: this.activeIndex,\n completed: this.completed,\n failed: this.failed,\n showSuccess: this.showSuccess\n });\n\n // Ensure remaining steps are completed in sequence before final success\n this.completeByKey('transfer');\n this.completeByKey('await');\n this.completeByKey('verify');\n this.completed = true;\n this.showSuccess = true;\n this.showConfetti = true;\n\n // Dispatch completion event\n this.dispatchEvent(new CustomEvent('icpay-progress-completed', {\n detail: {\n transactionId,\n status,\n amount: this.currentAmount || this.amount,\n currency: this.currentCurrency || this.currency,\n ledgerSymbol: this.currentLedgerSymbol || this.ledgerSymbol\n },\n bubbles: true\n }));\n\n // Auto-close after 2 seconds if user hasn't closed it manually\n /*setTimeout(() => {\n if (this.open && this.showSuccess && !this.failed) {\n this.open = false;\n }\n }, 2000);*/\n\n // Only hide confetti after 3 seconds\n setTimeout(() => {\n this.showConfetti = false;\n }, 3000);\n };\n\n private onTransactionFailed = (e: any) => {\n const errorMessage = e?.detail?.message || e?.detail?.error?.message || 'Transaction failed';\n const errorCode = e?.detail?.error?.code || e?.detail?.code || 'UNKNOWN_ERROR';\n const transactionId = e?.detail?.transactionId || e?.detail?.id;\n\n debugLog(this.debug, 'ICPay Progress: Transaction failed event received:', e.detail);\n\n // Mark as failed and keep modal open with error message\n this.failed = true;\n this.errorMessage = this.transformErrorMessage(errorMessage);\n this.showSuccess = false;\n this.updateStepStatus(this.activeIndex, 'error', errorMessage);\n this.stopAutomaticProgression();\n this.open = true;\n\n // Dispatch transaction failed event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-failed', {\n detail: { errorMessage, errorCode, transactionId, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onTransactionMismatched = (e: any) => {\n const requestedAmount = e?.detail?.requestedAmount;\n const paidAmount = e?.detail?.paidAmount;\n const transactionId = e?.detail?.transactionId || e?.detail?.id;\n\n //debugLog(this.debug, 'ICPay Progress: Transaction mismatched event received:', e.detail);\n\n // Treat as failure with specific message\n this.failed = true;\n const requested = requestedAmount != null ? String(requestedAmount) : 'unknown';\n const paid = paidAmount != null ? String(paidAmount) : 'unknown';\n this.errorMessage = `Amount mismatch. Requested ${requested}, paid ${paid}.`;\n this.showSuccess = false;\n this.updateStepStatus(this.activeIndex, 'error', this.errorMessage);\n this.stopAutomaticProgression();\n this.open = true;\n\n // Dispatch failed event with mismatch context\n this.dispatchEvent(new CustomEvent('icpay-progress-failed', {\n detail: { errorMessage: this.errorMessage, errorCode: 'MISMATCHED_AMOUNT', transactionId, step: this.activeIndex, requestedAmount, paidAmount },\n bubbles: true\n }));\n };\n\n private onMethodError = (e: any) => {\n const methodName = e?.detail?.name || '';\n const errorMessage = e?.detail?.error?.message || e?.detail?.message || 'An error occurred';\n const errorCode = e?.detail?.error?.code || e?.detail?.code || 'METHOD_ERROR';\n\n debugLog(this.debug, 'ICPay Progress: Method error event received:', e.detail);\n\n if (methodName?.startsWith('createPayment') || methodName === 'sendUsd' ||\n methodName === 'pay' || methodName === 'unlock' ||\n methodName === 'tip' || methodName === 'donate' ||\n methodName === 'order') {\n // Mark as failed and keep modal open with error message\n this.failed = true;\n this.errorMessage = this.transformErrorMessage(errorMessage);\n this.showSuccess = false;\n this.updateStepStatus(this.activeIndex, 'error', errorMessage);\n this.stopAutomaticProgression();\n this.open = true;\n\n // Dispatch method error event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-error', {\n detail: { methodName, errorMessage, errorCode, step: this.activeIndex },\n bubbles: true\n }));\n }\n };\n\n private onSDKError = (e: any) => {\n const errorMessage = e?.detail?.message || 'SDK error occurred';\n const errorCode = e?.detail?.code || 'SDK_ERROR';\n\n debugLog(this.debug, 'ICPay Progress: SDK error event received:', e.detail);\n\n // Mark as failed and keep modal open with error message\n this.failed = true;\n this.errorMessage = this.transformErrorMessage(errorMessage);\n this.showSuccess = false;\n this.updateStepStatus(this.activeIndex, 'error', errorMessage);\n this.stopAutomaticProgression();\n this.open = true;\n\n // Dispatch SDK error event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-sdk-error', {\n detail: { errorMessage, errorCode, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onWalletConnected = (e: any) => {\n const walletType = e?.detail?.walletType || 'unknown';\n\n debugLog(this.debug, 'ICPay Progress: Wallet connected event received:', e.detail);\n\n // Complete wallet step and set awaiting confirmation to loading\n this.completeByKey('wallet');\n this.setLoadingByKey('await');\n\n // Start transition from wallet selector to progress bar\n this.startTransitionToProgress();\n\n // Dispatch wallet connected event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-wallet-connected', {\n detail: { walletType, step: this.activeIndex },\n bubbles: true\n }));\n this.currentWalletType = walletType;\n };\n\n private onWalletDisconnected = (e: any) => {\n const walletType = e?.detail?.walletType || 'unknown';\n\n debugLog(this.debug, 'ICPay Progress: Wallet disconnected event received:', e.detail);\n\n // Dispatch wallet disconnected event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-wallet-disconnected', {\n detail: { walletType, step: this.activeIndex },\n bubbles: true\n }));\n this.currentWalletType = null;\n };\n\n private onBalanceCheck = (e: any) => {\n const hasBalance = e?.detail?.hasBalance || false;\n const balance = e?.detail?.balance || 0;\n\n debugLog(this.debug, 'ICPay Progress: Balance check event received:', e.detail);\n\n // Handle insufficient balance error\n if (!hasBalance) {\n this.failed = true;\n this.errorMessage = 'Insufficient balance for transaction';\n this.updateStepStatus(this.activeIndex, 'error', 'Insufficient balance for transaction');\n this.stopAutomaticProgression();\n this.showWalletSelector = false; // Ensure we're in progress view for error\n\n // Dispatch insufficient balance event\n this.dispatchEvent(new CustomEvent('icpay-progress-insufficient-balance', {\n detail: { balance, required: this.currentAmount || this.amount, step: this.activeIndex },\n bubbles: true\n }));\n }\n };\n\n private onLedgerVerified = (e: any) => {\n const ledgerId = e?.detail?.ledgerId || e?.detail?.canisterId;\n const symbol = e?.detail?.symbol || 'unknown';\n\n debugLog(this.debug, 'ICPay Progress: Ledger verified event received:', e.detail);\n\n // Update ledger symbol if provided\n if (symbol && symbol !== 'unknown') {\n this.currentLedgerSymbol = symbol;\n this.ledgerSymbol = symbol;\n }\n\n // Dispatch ledger verified event\n this.dispatchEvent(new CustomEvent('icpay-progress-ledger-verified', {\n detail: { ledgerId, symbol, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n // Widget-specific event handlers for better integration\n private onWidgetPayment = (e: any) => {\n const amount = e?.detail?.amount;\n const currency = e?.detail?.currency;\n const ledgerSymbol = e?.detail?.ledgerSymbol;\n\n debugLog(this.debug, 'ICPay Progress: Widget payment event received:', e.detail);\n\n // Update dynamic values if provided\n if (amount !== undefined) {\n this.currentAmount = amount;\n this.amount = amount;\n }\n if (currency) {\n this.currentCurrency = currency;\n this.currency = currency;\n }\n if (ledgerSymbol) {\n this.currentLedgerSymbol = ledgerSymbol;\n this.ledgerSymbol = ledgerSymbol;\n }\n\n // Advance steps to success state (event-driven, no auto progression)\n if (!this.failed) {\n for (let i = this.activeIndex; i < this.currentSteps.length; i++) {\n this.updateStepStatus(i, 'completed');\n }\n this.activeIndex = this.currentSteps.length - 1;\n this.completed = true;\n this.showSuccess = true;\n this.showConfetti = true;\n }\n\n // Dispatch widget payment event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-widget-payment', {\n detail: { amount, currency, ledgerSymbol, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onWidgetError = (e: any) => {\n const errorMessage = e?.detail?.message || 'Widget error occurred';\n const errorCode = e?.detail?.code || 'WIDGET_ERROR';\n\n debugLog(this.debug, 'ICPay Progress: Widget error event received:', e.detail);\n\n // Mark as failed and keep modal open with error message\n this.failed = true;\n this.errorMessage = this.transformErrorMessage(errorMessage);\n this.showSuccess = false;\n this.updateStepStatus(this.activeIndex, 'error', errorMessage);\n this.stopAutomaticProgression();\n this.open = true;\n\n // Dispatch widget error event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-widget-error', {\n detail: { errorMessage, errorCode, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onWidgetUnlock = (e: any) => {\n const amount = e?.detail?.amount;\n const currency = e?.detail?.currency;\n\n debugLog(this.debug, 'ICPay Progress: Widget unlock event received:', e.detail);\n\n // Complete steps and show success\n if (!this.failed) {\n for (let i = this.activeIndex; i < this.currentSteps.length; i++) {\n this.updateStepStatus(i, 'completed');\n }\n this.activeIndex = this.currentSteps.length - 1;\n this.completed = true;\n this.showSuccess = true;\n this.showConfetti = true;\n }\n\n // Dispatch widget unlock event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-widget-unlock', {\n detail: { amount, currency, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onWidgetTip = (e: any) => {\n const amount = e?.detail?.amount;\n const currency = e?.detail?.currency;\n\n debugLog(this.debug, 'ICPay Progress: Widget tip event received:', e.detail);\n\n // Complete steps and show success\n if (!this.failed) {\n for (let i = this.activeIndex; i < this.currentSteps.length; i++) {\n this.updateStepStatus(i, 'completed');\n }\n this.activeIndex = this.currentSteps.length - 1;\n this.completed = true;\n this.showSuccess = true;\n this.showConfetti = true;\n }\n\n // Dispatch widget tip event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-widget-tip', {\n detail: { amount, currency, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onWidgetDonation = (e: any) => {\n const amount = e?.detail?.amount;\n const currency = e?.detail?.currency;\n\n debugLog(this.debug, 'ICPay Progress: Widget donation event received:', e.detail);\n\n // Complete steps and show success\n if (!this.failed) {\n for (let i = this.activeIndex; i < this.currentSteps.length; i++) {\n this.updateStepStatus(i, 'completed');\n }\n this.activeIndex = this.currentSteps.length - 1;\n this.completed = true;\n this.showSuccess = true;\n this.showConfetti = true;\n }\n\n // Dispatch widget donation event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-widget-donation', {\n detail: { amount, currency, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private onWidgetCoffee = (e: any) => {\n const amount = e?.detail?.amount;\n const currency = e?.detail?.currency;\n\n debugLog(this.debug, 'ICPay Progress: Widget coffee event received:', e.detail);\n\n // Complete steps and show success\n if (!this.failed) {\n for (let i = this.activeIndex; i < this.currentSteps.length; i++) {\n this.updateStepStatus(i, 'completed');\n }\n this.activeIndex = this.currentSteps.length - 1;\n this.completed = true;\n this.showSuccess = true;\n this.showConfetti = true;\n }\n\n // Dispatch widget coffee event for external listeners\n this.dispatchEvent(new CustomEvent('icpay-progress-widget-coffee', {\n detail: { amount, currency, step: this.activeIndex },\n bubbles: true\n }));\n };\n\n private updateStepStatus(stepIndex: number, status: StepStatus, errorMessage?: string | null) {\n if (stepIndex >= 0 && stepIndex < this.currentSteps.length) {\n const step = this.currentSteps[stepIndex];\n const oldStatus = step.status;\n\n step.status = status;\n if (status === 'completed') {\n step.timestamp = this.getCurrentTime();\n }\n if (status === 'error' && errorMessage) {\n step.errorMessage = this.transformErrorMessage(errorMessage);\n }\n\n if (oldStatus !== status) {\n debugLog(this.debug, `ICPay Progress: Step ${stepIndex} (${step.label}) status changed from ${oldStatus} to ${status}`);\n }\n\n this.requestUpdate();\n }\n }\n\n private getCurrentTime() {\n const now = new Date();\n return now.toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n\n private getStepIcon(step: Step): string | any {\n if (step.status === 'error') {\n return html`<div class=\"error-x\">✕</div>`;\n }\n return html`<div class=\"spinner\"></div>`;\n }\n\n private getStepIndexByKey(key: string): number {\n return this.currentSteps.findIndex(s => s.key === key);\n }\n\n private setLoadingByKey(key: string) {\n const idx = this.getStepIndexByKey(key);\n if (idx >= 0) {\n this.activeIndex = idx;\n this.updateStepStatus(idx, 'loading');\n // Track start time for long verification tip\n if (key === 'verify') {\n this.confirmLoadingStartedAt = Date.now();\n }\n }\n }\n\n private completeByKey(key: string) {\n const idx = this.getStepIndexByKey(key);\n if (idx >= 0) {\n this.updateStepStatus(idx, 'completed');\n this.activeIndex = idx;\n }\n }\n\n // Normalize specific error messages to friendlier text\n private transformErrorMessage(message: string): string {\n const msg = String(message || '').toLowerCase();\n if (msg.includes('user rejected')) return 'User have rejected the transfer';\n if (msg.includes('user cancelled') || msg.includes('user canceled')) return 'User have rejected the transfer';\n if (msg.includes('signature rejected')) return 'User have rejected the transfer';\n return message;\n }\n\n private renderConfetti() {\n if (!this.showConfetti) return '';\n\n const confettiPieces = Array.from({ length: 50 }, (_, i) => i);\n const colors = ['#0066FF', '#ef4444', '#10b981', '#f59e0b', '#8b5cf6'];\n\n return html`\n <div class=\"confetti\">\n ${confettiPieces.map((piece) => html`\n <div\n class=\"confetti-piece\"\n style=\"\n left: ${Math.random() * 100}%;\n top: ${Math.random() * 100}%;\n background-color: ${colors[Math.floor(Math.random() * colors.length)]};\n animation-delay: ${Math.random() * 2}s;\n animation-duration: ${2 + Math.random() * 2}s;\n \"\n ></div>\n `)}\n </div>\n `;\n }\n\n private renderSuccessState() {\n const displayAmount = this.currentAmount || this.amount;\n\n debugLog(this.debug, 'ICPay Progress: Rendering success state with:', {\n displayAmount,\n currentAmount: this.currentAmount,\n amount: this.amount,\n currentCurrency: this.currentCurrency,\n currency: this.currency,\n currentLedgerSymbol: this.currentLedgerSymbol,\n ledgerSymbol: this.ledgerSymbol\n });\n\n return html`\n <div class=\"success-center\">\n <div class=\"success-container\">\n <div class=\"success-icon\">\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <h2 class=\"success-title\">Payment Complete!</h2>\n <p class=\"success-message\">Your payment of ${displayAmount} USD has been successfully processed.</p>\n <div class=\"success-actions\">\n <button class=\"btn btn-primary\" @click=${() => { this.open = false; }}>Close</button>\n </div>\n </div>\n </div>\n `;\n }\n\n private renderErrorState() {\n const isInsufficientFunds = this.errorMessage?.includes('Insufficient balance') || false;\n\n if (isInsufficientFunds) {\n return this.renderInsufficientFundsError();\n }\n\n return this.renderGenericError();\n }\n\n private renderInsufficientFundsError() {\n const displayAmount = this.currentAmount || this.amount;\n\n return html`\n <div class=\"insufficient-funds-container\">\n <div class=\"payment-summary\">\n <div class=\"payment-amount\">Pay $${displayAmount} with crypto</div>\n </div>\n\n <div class=\"error-notification\">\n <div class=\"error-content\">\n <div class=\"error-icon-small\">\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.732-.833-2.5 0L4.268 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n </div>\n <div class=\"error-text\">Insufficient balance for this transaction</div>\n </div>\n </div>\n\n <div class=\"error-actions\">\n <button class=\"btn btn-secondary\" @click=${() => this.requestSwitchAccount()} title=\"Switch to a different account\">\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style=\"width: 16px; height: 16px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4\" />\n </svg>\n Switch Account\n </button>\n <button class=\"btn btn-primary\" @click=${() => { this.open = false; }}>\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style=\"width: 16px; height: 16px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n Close\n </button>\n </div>\n </div>\n `;\n }\n\n private renderGenericError() {\n return html`\n <div class=\"error-container\">\n <div class=\"error-icon-large\">\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n <h2 class=\"error-title\">Transaction Failed</h2>\n <p class=\"error-message-text\">${this.errorMessage}</p>\n <div class=\"error-actions\">\n <button class=\"btn btn-secondary\" @click=${() => this.requestSwitchAccount()} title=\"Switch to a different account\">\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style=\"width: 16px; height: 16px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4\" />\n </svg>\n Switch Account\n </button>\n <button class=\"btn btn-primary\" @click=${() => { this.open = false; }}>\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style=\"width: 16px; height: 16px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n Close\n </button>\n </div>\n </div>\n `;\n }\n\n private requestSwitchAccount() {\n try {\n // Close the progress modal so the wallet selector can be used\n this.open = false;\n const walletType = this.currentWalletType || 'unknown';\n window.dispatchEvent(new CustomEvent('icpay-switch-account', { detail: { walletType } } as any));\n } catch {}\n }\n\n private handleAddFunds() {\n try {\n // Dispatch add funds event for external handling\n window.dispatchEvent(new CustomEvent('icpay-add-funds', {\n detail: {\n amount: this.currentAmount || this.amount,\n currency: this.currentLedgerSymbol || this.currentCurrency || this.currency\n }\n }));\n\n // Close the modal to allow external handling\n this.open = false;\n } catch (error) {\n console.error('Error handling add funds:', error);\n }\n }\n\n private startTransitionToProgress() {\n this.isTransitioning = true;\n this.requestUpdate();\n\n // After transition animation completes, switch to progress view\n setTimeout(() => {\n this.showWalletSelector = false;\n this.isTransitioning = false;\n this.requestUpdate();\n }, 400);\n }\n\n private renderProgressContent() {\n if (this.showSuccess) {\n return this.renderSuccessState();\n }\n\n if (this.failed) {\n return this.renderErrorState();\n }\n\n return html`\n <div class=\"progress-container\">\n <div class=\"progress-header\">\n <span class=\"progress-spacer\"></span>\n <h3 class=\"progress-title\">Processing</h3>\n </div>\n ${this.renderConfirmTip()}\n <div class=\"progress-steps\">\n ${this.currentSteps.map((step, index) => html`\n <div class=\"step ${index === this.activeIndex ? 'active' : ''} ${step.status === 'completed' ? 'completed' : ''} ${step.status === 'error' ? 'error' : ''}\">\n <div class=\"step-icon\">\n ${this.getStepIcon(step)}\n </div>\n <div class=\"step-content\">\n <div class=\"step-title\">${step.label}</div>\n <div class=\"step-description\">${step.tooltip}</div>\n ${step.status === 'error' && step.errorMessage ? html`\n <div class=\"step-error-message\">${step.errorMessage}</div>\n ` : ''}\n </div>\n </div>\n `)}\n </div>\n </div>\n `;\n }\n\n private onWalletCancelled = (e: any) => {\n try {\n // Ensure the progress modal is visible if it was initiated\n this.open = true;\n // Mark the wallet step as error with cancelled tooltip\n const idx = this.getStepIndexByKey('wallet');\n if (idx >= 0) {\n this.activeIndex = idx;\n // Update tooltip and status\n this.currentSteps[idx] = {\n ...this.currentSteps[idx],\n tooltip: 'Wallet connection cancelled',\n status: 'error'\n } as Step;\n this.requestUpdate();\n }\n } catch {}\n };\n\n private onWalletError = (e: any) => {\n try {\n const rawMessage = e?.detail?.message || 'Wallet error';\n const errorMessage = this.transformErrorMessage(rawMessage);\n this.open = true;\n const idx = this.getStepIndexByKey('wallet');\n if (idx >= 0) {\n this.activeIndex = idx;\n // Update step to error with friendly tooltip and message\n this.currentSteps[idx] = {\n ...this.currentSteps[idx],\n tooltip: 'Wallet connection failed',\n status: 'error',\n errorMessage\n } as Step;\n this.requestUpdate();\n }\n } catch {}\n };\n\n private renderConfirmTip() {\n try {\n const verifyIdx = this.getStepIndexByKey('verify');\n if (verifyIdx < 0) return null as any;\n const isVerifyLoading = this.activeIndex === verifyIdx && this.currentSteps[verifyIdx]?.status === 'loading';\n if (!isVerifyLoading) return null as any;\n const started = this.confirmLoadingStartedAt || 0;\n const elapsed = started ? (Date.now() - started) : 0;\n if (elapsed < 30000) return null as any;\n return html`<p class=\"progress-subtitle\" style=\"margin-top:8px;color:#60a5fa\">Verification can take from 30 seconds up to 10 minutes depending on the amount. Please wait…</p>`;\n } catch {\n return null as any;\n }\n }\n\n private retryTransaction() {\n // Reset state but preserve dynamic values\n this.activeIndex = 0;\n this.completed = false;\n this.failed = false;\n this.errorMessage = null;\n this.showSuccess = false;\n this.showConfetti = false;\n\n // Preserve dynamic values from the current transaction\n // Don't reset currentAmount, currentCurrency, currentLedgerSymbol\n\n // Reset all steps to pending\n this.currentSteps = this.currentSteps.map(step => ({ ...step, status: 'pending' as StepStatus }));\n\n // Update first step to loading\n this.updateStepStatus(0, 'loading');\n\n // Start automatic progression again\n this.startAutomaticProgression();\n\n this.requestUpdate();\n }\n\n private closeProgress() {\n this.open = false;\n this.showWalletSelector = false;\n this.isTransitioning = false;\n }\n\n private renderStep(step: Step, index: number) {\n return html`\n <div class=\"step-item ${step.status}\">\n <div class=\"step-icon\">\n ${this.getStepIcon(step)}\n </div>\n <div class=\"step-content\">\n <div class=\"step-title\">\n ${step.status === 'completed' ? 'COMPLETED' : step.label}\n </div>\n ${step.status === 'completed' ? html`\n <div class=\"step-subtitle\">\n ${step.timestamp} - ${step.tooltip}\n </div>\n ` : step.status === 'error' && step.errorMessage ? html`\n <div class=\"step-error\">${step.errorMessage}</div>\n ` : html`\n <div class=\"step-subtitle\">${step.tooltip}</div>\n `}\n </div>\n </div>\n `;\n }\n\n private get isWalletConnectLoading(): boolean {\n try {\n const idx = this.currentSteps.findIndex(s => (s as any).key === 'wallet');\n if (idx < 0) return false;\n return this.currentSteps[idx].status === 'loading' && !this.failed && !this.showSuccess;\n } catch {\n return false;\n }\n }\n\n render() {\n if (this.suspended) {\n return null as any;\n }\n return html`\n ${this.open ? html`\n ${this.renderConfetti()}\n <div class=\"modal-overlay active\">\n <div class=\"modal-container\">\n ${!this.showSuccess ? html`<button class=\"close-button\" @click=${() => this.closeProgress()} aria-label=\"Close\" title=\"Close\">✕</button>` : null}\n <div class=\"modal-content ${this.isTransitioning ? 'transitioning' : ''}\">\n ${this.renderProgressContent()}\n </div>\n </div>\n </div>\n ` : null}\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-progress-bar': ICPayProgressBar } }\n\n\n\n","import { html, TemplateResult } from 'lit';\n\ntype Environment = 'STAGING' | 'PRODUCTION';\n\nexport type TransakOnrampOptions = {\n\tvisible: boolean;\n\t/** If provided, will embed Transak directly with session id */\n\tsessionId?: string | null;\n\t/** Optional error message to show when sessionId is missing */\n\terrorMessage?: string | null;\n\t/** Transak apiKey (public key). Required if using double-iframe helper */\n\tapiKey?: string | null;\n\t/** Controls staging vs production */\n\tenvironment?: Environment;\n\t/** Optional width/height for inner iframe */\n\twidth?: number | string;\n\theight?: number | string;\n\t/** Called when user closes modal */\n\tonClose: () => void;\n /** Called when user clicks to go back to wallet selector */\n onBack?: () => void;\n};\n\n/**\n * Renders a modal containing Transak onramp widget.\n * - If sessionId is present, we embed Transak directly using the session flow URL.\n * - Otherwise, we fall back to Transak's double-iframe helper page that loads an inner iframe\n * pointing to global-stg/global with the provided apiKey.\n *\n * Reference: https://docs.transak.com/docs/double-embed-iframe-webapp\n */\nexport function renderTransakOnrampModal(opts: TransakOnrampOptions): TemplateResult | null {\n\tif (!opts.visible) return null as any;\n\tconst environment: Environment = opts.environment ?? 'STAGING';\n\tconst width = opts.width ?? 420;\n\tconst height = opts.height ?? 680;\n\n\t// Build iframe src\n\tlet iframeSrc = '';\n\tif (opts.sessionId) {\n\t\t// Direct session embed per Transak session flow.\n\t\t// For production: https://global.transak.com?sessionId=...\n\t\t// For staging: https://global-stg.transak.com?sessionId=...\n\t\tconst base = environment === 'PRODUCTION' ? 'https://global.transak.com' : 'https://global-stg.transak.com';\n\t\tiframeSrc = `${base}?sessionId=${encodeURIComponent(opts.sessionId)}`;\n\t}\n\n\treturn html`\n\t\t<div style=\"position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.85);backdrop-filter:blur(10px);z-index:10000\">\n\t\t\t<div style=\"position:relative;background:#0f1115;border:1px solid rgba(255,255,255,0.1);border-radius:16px;padding:16px;box-shadow:0 20px 60px rgba(0,0,0,0.5)\">\n\t\t\t\t<button @click=${opts.onClose} aria-label=\"Close\" title=\"Close\"\n\t\t\t\t\tstyle=\"position:absolute;top:10px;right:10px;background:transparent;border:none;color:#9ca3af;cursor:pointer;font-size:20px\">✕</button>\n\t\t\t\t${opts.sessionId ? html`\n\t\t\t\t\t<iframe\n id=\"transak-iframe\"\n\t\t\t\t\t\tstyle=\"border:none;border-radius:12px;background:#111\"\n\t\t\t\t\t\twidth=\"${String(width)}\"\n\t\t\t\t\t\theight=\"${String(height)}\"\n\t\t\t\t\t\tsrc=\"${iframeSrc}\"\n\t\t\t\t\t\tallow=\"camera;microphone;payment\"\n\t\t\t\t\t></iframe>\n\t\t\t\t` : html`\n\t\t\t\t\t<div style=\"width:${String(width)}px;max-width:90vw;padding:12px\">\n\t\t\t\t\t\t<div style=\"background:#1a1f2e;border:1px solid rgba(255,255,255,0.1);border-radius:12px;padding:24px;color:#e5e7eb;text-align:center\">\n\t\t\t\t\t\t\t<div style=\"font-size:18px;font-weight:600;margin-bottom:8px\">Service unavailable</div>\n\t\t\t\t\t\t\t<div style=\"font-size:14px;opacity:0.85;margin-bottom:16px\">${opts.errorMessage || 'The service is currently unavailable, please try again later.'}</div>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t@click=${() => { if (opts.onBack) opts.onBack(); else opts.onClose(); }}\n\t\t\t\t\t\t\t\tstyle=\"padding:10px 16px;border-radius:10px;border:1px solid rgba(255,255,255,0.15);background:linear-gradient(135deg,#3b82f6 0%,#10b981 100%);color:#fff;cursor:pointer;font-weight:600\">\n\t\t\t\t\t\t\t\tGo back to wallet selection\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t`}\n\t\t\t</div>\n\t\t</div>\n\t`;\n}\n\n\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport type { PremiumContentConfig } from '../types';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport './ui/progress-bar';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\nimport { getWalletBalanceEntries, buildWalletEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport type { WalletBalanceEntry } from '../utils/balances';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// Plug N Play will be imported dynamically when needed\nlet WalletSelect: any = null;\n\n// Debug logger utility for widget components\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-premium-content')\nexport class ICPayPremiumContent extends LitElement {\n static styles = [baseStyles, css`\n .image-container {\n position: relative;\n border-radius: 16px;\n overflow: hidden;\n margin-bottom: 16px;\n background: #111827;\n border: 1px solid var(--icpay-border);\n aspect-ratio: 16/10;\n }\n .locked-image {\n width: 100%;\n height: 100%;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n filter: blur(8px) grayscale(1);\n transition: all 0.6s ease;\n min-height: 200px;\n }\n .locked-image.unlocked { filter: blur(0px) grayscale(1); }\n .lock-overlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }\n .pricing { text-align: center; margin: 16px 0; }\n .price { font-size: 28px; font-weight: 800; color: var(--icpay-text); }\n .label { color: var(--icpay-muted); font-size: 14px; }\n .crypto-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 12px 0 16px; }\n .crypto-option { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px 8px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; font-size: 12px; }\n .crypto-option.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n\n .error-message {\n border: 1px solid;\n font-weight: 500;\n }\n\n .error-message.info {\n background: rgba(59, 130, 246, 0.1);\n border-color: rgba(59, 130, 246, 0.3);\n color: #3b82f6;\n }\n\n .error-message.warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: rgba(245, 158, 11, 0.3);\n color: #f59e0b;\n }\n\n .error-message.error {\n background: rgba(239, 68, 68, 0.1);\n border-color: rgba(239, 68, 68, 0.3);\n color: #ef4444;\n }\n `];\n\n @property({ type: Object }) config!: PremiumContentConfig;\n @state() private selectedSymbol: string | null = null;\n @state() private unlocked = false;\n @state() private succeeded = false;\n @state() private processing = false;\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'pay' | null = null;\n @state() private showWalletModal = false;\n @state() private oisyReadyToPay: boolean = false;\n @state() private lastWalletId: string | null = null;\n private pnp: any | null = null;\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n private transakMessageHandlerBound: any | null = null;\n private onrampPollTimer: number | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n // Post-connect token selection\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: WalletBalanceEntry[] = [];\n private sdk: WidgetSdk | null = null;\n private async tryAutoConnectPNP() {\n try {\n if (!this.config || this.config?.useOwnWallet) return;\n const raw = localStorage.getItem('icpay:pnp');\n if (!raw) return;\n const saved = JSON.parse(raw);\n if (!saved?.provider || !saved?.principal) return;\n if (!WalletSelect) {\n const module = await import('../wallet-select');\n WalletSelect = module.WalletSelect;\n }\n const _cfg1: any = { ...(this.config?.plugNPlay || {}) };\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg1.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n const pnp = new WalletSelect(_cfg1);\n // Hydrate saved principal for UI/history; require connect on pay\n this.walletConnected = false;\n this.config = {\n ...this.config,\n connectedWallet: { owner: saved.principal, principal: saved.principal, connected: false } as any\n };\n } catch {}\n }\n\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return; // Skip in SSR\n\n debugLog(this.config?.debug || false, 'Premium content connected', { config: this.config });\n this.tryAutoConnectPNP();\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // Close wallet/balance modals when SDK intent is created\n try {\n window.addEventListener('icpay-sdk-transaction-created', (() => {\n this.showWalletModal = false;\n this.showBalanceModal = false;\n this.requestUpdate();\n }) as EventListener);\n } catch {}\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config') && this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction;\n this.pendingAction = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n setTimeout(() => { if (action === 'pay') this.onPay(); }, 0);\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n this.pendingAction = 'pay';\n this.showWalletModal = true;\n this.requestUpdate();\n try {\n const amount = Number(this.config?.priceUsd || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'pay', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n\n\n private async onPay() {\n if (!isBrowser) return; // Skip in SSR\n\n if (this.processing || this.unlocked) return;\n\n debugLog(this.config?.debug || false, 'Premium content payment started', {\n priceUsd: this.config.priceUsd,\n selectedSymbol: this.selectedSymbol,\n useOwnWallet: this.config.useOwnWallet\n });\n\n // Clear previous errors\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'pay', type: 'sendUsd', amount: this.config.priceUsd, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Check wallet connection status first\n if (this.config.useOwnWallet) {\n if (!this.config.actorProvider) {\n this.pendingAction = 'pay';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return;\n }\n } else {\n // Built-in wallet handling - connect directly with Plug N Play\n if (!this.walletConnected) {\n debugLog(this.config?.debug || false, 'Connecting to wallet via Plug N Play');\n try {\n if (!WalletSelect) { const module = await import('../wallet-select'); WalletSelect = module.WalletSelect; }\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _cfg2: any = wantsOisyTab ? applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) }) : ({ ...(this.config?.plugNPlay || {}) });\n if ((this.config as any)?.chainTypes) _cfg2.chainTypes = (this.config as any).chainTypes;\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg2.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg2);\n try {\n const principal = await detectOisySessionViaAdapter(this.pnp);\n if (principal) {\n this.walletConnected = true;\n const normalized = normalizeConnectedWallet(this.pnp, { owner: principal, principal, connected: true });\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'oisy' } })); } catch {}\n // Proceed directly\n this.onPay();\n return;\n }\n } catch {}\n const availableWallets = this.pnp.getEnabledWallets();\n debugLog(this.config?.debug || false, 'Available wallets', availableWallets);\n if (!availableWallets?.length) throw new Error('No wallets available');\n this.pendingAction = 'pay';\n this.showWalletModal = true;\n return;\n } catch (error) {\n debugLog(this.config?.debug || false, 'Wallet connection error:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return;\n }\n }\n }\n\n // Wallet is connected; proceed to token selection to initiate payment via selection handler\n // Ensure wallet selector is closed before opening balances\n this.showWalletModal = false;\n await this.fetchAndShowBalances('pay');\n return;\n } catch (e) {\n // Handle errors using the new error handling system\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n\n // Update UI error state if error should be shown to user\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n this.showOnrampModal = false;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnramp() {\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const sdk = createSdk(this.config);\n const symbol = this.selectedSymbol || 'ICP';\n const resp = await (sdk as any).startOnrampUsd(this.config.priceUsd, symbol, { context: 'premium:onramp' });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.onrampErrorMessage = null;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n this.onrampSessionId = null;\n this.onrampErrorMessage = errorMessage || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n } catch (e) {\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n const sdk = createSdk(this.config);\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n try { window.addEventListener('icpay-sdk-transaction-completed', (() => handleComplete()) as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = (sdk as any).notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n this.onrampPollTimer = 1 as any;\n }\n\n private select(symbol: string) {\n this.selectedSymbol = symbol;\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n const isOisy = this.lastWalletId === 'oisy';\n if (isOisy) {\n this.oisyReadyToPay = true;\n } else {\n this.showWalletModal = false;\n this.fetchAndShowBalances('pay');\n }\n }).catch((error: any) => {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances(action: 'pay') {\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.showBalanceModal = true;\n const sdk = createSdk(this.config);\n const { balances } = await getWalletBalanceEntries({ sdk, lastWalletId: this.lastWalletId, connectedWallet: (this.config as any)?.connectedWallet, amountUsd: Number(this.config?.priceUsd ?? 0) });\n this.walletBalances = balances as WalletBalanceEntry[];\n this.pendingAction = action;\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = (shortcode: string) => {\n const sel0 = (this.walletBalances || []).find(b => (b as any)?.tokenShortcode === shortcode);\n if (sel0?.ledgerSymbol) this.selectedSymbol = sel0.ledgerSymbol;\n if (isEvmWalletId(this.lastWalletId)) {\n const sel = (this.walletBalances || []).find(b => (b as any)?.tokenShortcode === shortcode);\n const targetChain = sel?.chainId;\n // Close modals immediately on selection to reveal progress UI\n this.showBalanceModal = false;\n this.showWalletModal = false;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.config?.priceUsd ?? 0);\n if (sel?.x402Accepts) {\n try {\n await (sdk.client as any).createPaymentX402Usd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'premium:x402'\n }\n });\n return;\n } catch { /* fallback */ }\n }\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n });\n return;\n }\n this.showBalanceModal = false;\n this.showWalletModal = false;\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'pay') setTimeout(() => this.onPay(), 0);\n };\n\n render() {\n if (!this.config) {\n return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n }\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\">\n ${this.config?.progressBar?.enabled !== false ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.config?.priceUsd || 0)}\n .ledgerSymbol=${this.selectedSymbol || 'ICP'}\n ></icpay-progress-bar>\n ` : null}\n <div class=\"image-container\">\n <div class=\"locked-image ${this.unlocked ? 'unlocked' : ''}\" style=\"background-image:url('${this.config.imageUrl || ''}')\"></div>\n ${this.unlocked ? null : html`<div class=\"lock-overlay\">🔒</div>`}\n </div>\n\n <div class=\"pricing\">\n <div class=\"price\">$${Number(this.config?.priceUsd ?? 0).toFixed(2)}</div>\n <div class=\"label\">One-time unlock</div>\n </div>\n\n\n\n <button class=\"pay-button ${this.processing ? 'processing' : ''}\" ?disabled=${this.processing || this.unlocked || (this.config?.disablePaymentButton === true) || (this.succeeded && this.config?.disableAfterSuccess === true)} @click=${() => this.onPay()}>\n ${this.unlocked ? 'Unlocked' : (this.processing ? 'Processing…' : (\n (this.config?.buttonLabel || 'Pay ${amount} with crypto')\n .replace('{amount}', `${Number(this.config?.priceUsd ?? 0).toFixed(2)}`)\n .replace('{symbol}', (this.selectedSymbol || 'ICP'))\n ))}\n </button>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`\n <button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">\n ${this.errorAction}\n </button>\n ` : ''}\n </div>\n ` : ''}\n ${(() => {\n const walletsRaw = (this as any).pnp?.getEnabledWallets?.() || [];\n const wallets = buildWalletEntries(walletsRaw);\n return renderWalletSelectorModal({\n visible: !!(this.showWalletModal && this.pnp),\n wallets,\n isConnecting: false,\n onSwitchAccount: () => this.onSwitchAccount(null),\n onSelect: (walletId: string) => this.connectWithWallet(walletId),\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true)) ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: (this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true),\n creditCardTooltip: (() => {\n const min = 5; const amt = Number(this.config?.priceUsd || 0); if (amt > 0 && amt < min && ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true))) { const d = (min - amt).toFixed(2); return `Note: Minimum card amount is $${min}. You will pay about $${d} more.`; } return null;\n })(),\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => { this.showWalletModal = false; this.oisyReadyToPay = false; this.onPay(); }\n });\n })()}\n\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-premium-content': ICPayPremiumContent } }\n\n\n","import { IcpayError } from '@ic-pay/icpay-sdk';\n\n// Define error codes locally to avoid SSR issues\nconst ERROR_CODES = {\n WALLET_NOT_CONNECTED: 'WALLET_NOT_CONNECTED',\n WALLET_USER_CANCELLED: 'WALLET_USER_CANCELLED',\n WALLET_SIGNATURE_REJECTED: 'WALLET_SIGNATURE_REJECTED',\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n NETWORK_ERROR: 'NETWORK_ERROR',\n API_ERROR: 'API_ERROR',\n LEDGER_NOT_FOUND: 'LEDGER_NOT_FOUND',\n TRANSACTION_FAILED: 'TRANSACTION_FAILED',\n TRANSACTION_TIMEOUT: 'TRANSACTION_TIMEOUT',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR'\n} as const;\n\n// Widget-specific error handling utilities\nexport interface WidgetErrorHandler {\n onError: (error: IcpayError) => void;\n onUserCancelled?: () => void;\n onInsufficientBalance?: (error: IcpayError) => void;\n onWalletError?: (error: IcpayError) => void;\n onNetworkError?: (error: IcpayError) => void;\n}\n\n// Default error handler that logs errors to console\nexport const defaultErrorHandler: WidgetErrorHandler = {\n onError: (error: IcpayError) => {\n console.error('[ICPay Widget] Error:', error);\n },\n onUserCancelled: () => {\n console.log('[ICPay Widget] User cancelled the action');\n },\n onInsufficientBalance: (error: IcpayError) => {\n console.warn('[ICPay Widget] Insufficient balance:', error.message);\n },\n onWalletError: (error: IcpayError) => {\n console.warn('[ICPay Widget] Wallet error:', error.message);\n },\n onNetworkError: (error: IcpayError) => {\n console.error('[ICPay Widget] Network error:', error.message);\n }\n};\n\n// Error handling function for widget components\nexport function handleWidgetError(error: unknown, errorHandler: WidgetErrorHandler = defaultErrorHandler): void {\n if (error instanceof IcpayError) {\n // Call the general error handler\n errorHandler.onError(error);\n\n // Call specific handlers based on error type\n if (error.isUserCancelled()) {\n errorHandler.onUserCancelled?.();\n } else if (error.isBalanceError()) {\n errorHandler.onInsufficientBalance?.(error);\n } else if (error.isWalletError()) {\n errorHandler.onWalletError?.(error);\n } else if (error.isNetworkError()) {\n errorHandler.onNetworkError?.(error);\n }\n } else {\n // Handle non-IcpayError errors\n console.error('[ICPay Widget] Unknown error:', error);\n errorHandler.onError(new IcpayError({\n code: ERROR_CODES.UNKNOWN_ERROR,\n message: error instanceof Error ? error.message : 'An unknown error occurred',\n details: error\n }));\n }\n}\n\n// Error message templates for common scenarios\nexport const ERROR_MESSAGES = {\n [ERROR_CODES.WALLET_NOT_CONNECTED]: 'Please connect your wallet to continue',\n [ERROR_CODES.WALLET_USER_CANCELLED]: 'User have rejected the transfer',\n [ERROR_CODES.WALLET_SIGNATURE_REJECTED]: 'User have rejected the transfer',\n [ERROR_CODES.INSUFFICIENT_BALANCE]: 'Insufficient balance for this transaction',\n [ERROR_CODES.NETWORK_ERROR]: 'Network error. Please try again',\n [ERROR_CODES.API_ERROR]: 'Service temporarily unavailable',\n [ERROR_CODES.LEDGER_NOT_FOUND]: 'Selected token is not supported',\n [ERROR_CODES.TRANSACTION_FAILED]: 'Transaction failed. Please try again',\n [ERROR_CODES.TRANSACTION_TIMEOUT]: 'Transaction timed out. Please try again',\n [ERROR_CODES.UNKNOWN_ERROR]: 'Something went wrong. Please try again'\n} as const;\n\n// Get user-friendly error message\nexport function getErrorMessage(error: IcpayError): string {\n return ERROR_MESSAGES[error.code] || error.message || 'An error occurred';\n}\n\n// Check if error should be shown to user (vs logged only)\nexport function shouldShowErrorToUser(error: IcpayError): boolean {\n // Don't show user-cancelled actions as errors\n if (error.isUserCancelled()) {\n return false;\n }\n\n // Show all other errors to user\n return true;\n}\n\n// Get appropriate UI action for error\nexport function getErrorAction(error: IcpayError): string | null {\n // Disable for now\n return null;\n /*\n if (error.userAction) {\n return error.userAction;\n }\n\n switch (error.code) {\n case ERROR_CODES.WALLET_NOT_CONNECTED:\n return 'Connect Wallet';\n case ERROR_CODES.INSUFFICIENT_BALANCE:\n return 'Add Funds';\n case ERROR_CODES.NETWORK_ERROR:\n case ERROR_CODES.API_ERROR:\n return 'Try Again';\n default:\n return null;\n }\n */\n}\n\n// Error severity levels for UI styling\nexport enum ErrorSeverity {\n INFO = 'info',\n WARNING = 'warning',\n ERROR = 'error'\n}\n\nexport function getErrorSeverity(error: IcpayError): ErrorSeverity {\n if (error.isUserCancelled()) {\n return ErrorSeverity.INFO;\n }\n\n if (error.isBalanceError() || error.isWalletError()) {\n return ErrorSeverity.WARNING;\n }\n\n return ErrorSeverity.ERROR;\n}\n","import { html, TemplateResult } from 'lit';\nimport type { WalletBalanceEntry } from '../../utils/balances';\nimport { isEvmWalletId } from '../../utils/balances';\nimport { formatTokenAmountThirdwebStyle } from '../../utils/format';\nimport { renderPayWithStyles, renderPayWithContent } from './shared/pay-with';\n\n// Embedded icon for NFID provider (data URL)\n\nfunction sanitizeDataUrl(url: string): string {\n if (!url) return url;\n if (!url.startsWith('data:')) return url;\n // Remove any whitespace that might have slipped in (spaces, newlines, tabs)\n return url.replace(/\\s+/g, '');\n}\n\nfunction getWalletFriendlyName(id: string, fallback?: string): string {\n const lower = (id || '').toLowerCase();\n if (lower === 'ii') return 'Internet Identity';\n if (lower === 'nfid') return 'NFID';\n if (lower === 'plug') return 'Plug';\n if (lower === 'oisy') return 'Oisy';\n if (fallback && fallback.trim()) return fallback;\n return id ? id.charAt(0).toUpperCase() + id.slice(1) : 'Wallet';\n}\n\nexport type WalletEntry = { id: string; label: string; icon?: string | null };\n\ntype Options = {\n visible: boolean;\n wallets: WalletEntry[];\n isConnecting?: boolean;\n onSelect: (walletId: string) => void;\n onClose: () => void;\n onSwitchAccount?: () => void;\n // Optional onramp (credit card) entry at the end\n onCreditCard?: () => void;\n creditCardLabel?: string;\n showCreditCard?: boolean;\n creditCardTooltip?: string | null;\n // Two-step support: balances step after connect\n step?: 'connect' | 'balances';\n balances?: WalletBalanceEntry[];\n balancesLoading?: boolean;\n balancesError?: string | null;\n onSelectBalance?: (symbol: string) => void;\n onBack?: () => void;\n};\n\nexport function renderWalletSelectorModal(opts: Options & { oisyReadyToPay?: boolean; onOisyPay?: () => void }): TemplateResult | null {\n if (!opts.visible) return null as any;\n const { wallets, onSelect, onClose, isConnecting } = opts;\n const formatTokenAmount = (val: string | number): string => formatTokenAmountThirdwebStyle(val);\n const toUsd = (b: WalletBalanceEntry): number => {\n const amt = parseFloat(String(b.formattedBalance || '0'));\n const price = Number((b as any).currentPrice ?? 0);\n const usd = (isFinite(amt) ? amt : 0) * (isFinite(price) ? price : 0);\n return isFinite(usd) ? usd : 0;\n };\n const byUsdDesc = (a: WalletBalanceEntry, b: WalletBalanceEntry) => toUsd(b) - toUsd(a);\n const normalizedWallets = wallets.map(w => {\n const id = (w.id || '').toLowerCase();\n return {\n ...w,\n // Force NFID to use embedded icon; others keep provided icon\n icon: w.icon ?? null,\n };\n });\n return html`\n <div style=\"position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.5);z-index:10000\">\n <style>\n .icpay-w-8 { width: 2rem; }\n .icpay-h-8 { height: 2rem; }\n /* New design styles (scoped) */\n .modal { background-color:#1a1a1a; border-radius:24px; width:100%; max-width:420px; padding:24px; color:#fff; display:flex; flex-direction:column; border:1px solid #333; height:460px; }\n .header { display:flex; align-items:center; margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid #333; flex-shrink:0; }\n .back-button { background:none; border:none; color:#fff; font-size:24px; cursor:pointer; padding:0; margin-right:16px; }\n .title { font-size:20px; font-weight:600; flex:1; text-align:center; margin-right:40px; }\n .wallet-list { display:flex; flex-direction:column; gap:0; overflow-y:auto; flex:1; padding-right:8px; scrollbar-gutter: stable; }\n .wallet-item { display:flex; align-items:center; padding:16px 12px; cursor:pointer; transition:background-color 0.2s; border-radius:12px; }\n .wallet-item:hover { background-color:#2a2a2a; }\n .wallet-icon { width:48px; height:48px; border-radius:12px; margin-right:16px; display:flex; align-items:center; justify-content:center; font-size:24px; overflow:hidden; }\n .oisy-icon { background-color:#0066ff; }\n .plug-icon { background:linear-gradient(135deg,#667eea 0%, #764ba2 100%); }\n .wallet-info { flex:1; }\n .wallet-name { font-size:16px; font-weight:500; margin-bottom:4px; }\n .wallet-status { font-size:14px; color:#888; }\n .divider { height:0; border-top:1px solid #444; margin:8px 0; border-radius:1px; width:100%; }\n .footer { display:flex; justify-content:space-between; align-items:center; margin-top:16px; padding-top:16px; flex-shrink:0; }\n .need-wallet { font-size:14px; color:#888; }\n .get-started { font-size:14px; color:#0066ff; background:none; border:none; cursor:pointer; font-weight:500; }\n .get-started:hover { text-decoration:underline; }\n </style>\n ${renderPayWithStyles()}\n <div class=\"modal\">\n ${opts.step === 'balances' ? html`\n ${renderPayWithContent({\n isLoading: !!opts.balancesLoading,\n error: opts.balancesError,\n balances: opts.balances,\n onBack: () => opts.onBack && opts.onBack(),\n onSelect: (symbol: string) => opts.onSelectBalance && opts.onSelectBalance(symbol)\n })}\n ` : html`\n <div class=\"header\">\n <button class=\"back-button\" @click=${() => { try { onClose(); } catch {} }}>‹</button>\n <h1 class=\"title\">Connect</h1>\n </div>\n <div class=\"wallet-list\">\n ${(() => {\n const items: TemplateResult[] = [];\n let dividerInserted = false;\n let lastWasEvm: boolean | null = null;\n normalizedWallets.forEach((w) => {\n const id = (w.id || '').toLowerCase();\n const displayName = getWalletFriendlyName(w.id, w.label);\n const isEvm = isEvmWalletId(id);\n // Insert a divider when transitioning from EVM wallets to non-EVM wallets (once)\n if (lastWasEvm === null) {\n lastWasEvm = isEvm;\n } else if (!dividerInserted && lastWasEvm === true && isEvm === false) {\n items.push(html`<div class=\"divider\"></div>`);\n dividerInserted = true;\n }\n const chainLabel = (id === 'oisy' || id === 'plug' || id === 'nfid' || id === 'ii')\n ? 'Internet Computer'\n : (isEvm ? 'Ethereum-compatible' : '');\n items.push(html`\n <div class=\"wallet-item\" style=\"opacity:${isConnecting?0.6:1}\" @click=${() => onSelect(w.id)}>\n <div class=\"wallet-icon\">\n ${w.icon\n ? html`<img src=\"${sanitizeDataUrl(w.icon)}\" alt=\"${displayName} logo\" class=\"icpay-w-8 icpay-h-8\" style=\"object-fit:contain\" />`\n : html`<span>${displayName.charAt(0)}</span>`}\n </div>\n <div class=\"wallet-info\">\n <div class=\"wallet-name\">${displayName}</div>\n ${chainLabel ? html`<div class=\"wallet-status\">${chainLabel}</div>` : null}\n </div>\n </div>\n `);\n lastWasEvm = isEvm;\n });\n return items;\n })()}\n </div>\n <div class=\"footer\">\n <span class=\"need-wallet\">Need a wallet?</span>\n <button class=\"get-started\" @click=${() => { try { window.open('https://metamask.io/en-GB/download','_blank','noopener,noreferrer'); } catch {} }}>Get started</button>\n </div>\n `}\n </div>\n </div>\n `;\n}\n\n\n\n","export type WalletBalanceEntry = {\n ledgerId: string;\n ledgerName: string;\n ledgerSymbol: string;\n tokenShortcode?: string | null;\n canisterId: string;\n // Whether this ledger supports x402/EIP-3009 flow (if provided by API)\n eip3009Version?: string | null;\n x402Accepts?: boolean;\n balance: string;\n formattedBalance: string;\n decimals: number;\n currentPrice?: number;\n lastPriceUpdate?: Date;\n lastUpdated: Date;\n chainId?: string; // EVM chain id as string (e.g., '1', '137')\n chainName?: string;\n rpcUrlPublic?: string;\n chainUuid?: string; // UUID of chains table row\n requiredAmount?: string;\n requiredAmountFormatted?: string;\n hasSufficientBalance?: boolean;\n logoUrl?: string | null;\n};\n\nconst EVM_WALLET_IDS = new Set(['metamask', 'walletconnect', 'coinbase', 'brave', 'rainbow', 'rabby', 'phantom', 'okx']);\n\nexport function isEvmWalletId(walletId?: string | null): boolean {\n if (!walletId) return false;\n return EVM_WALLET_IDS.has(String(walletId).toLowerCase());\n}\n\nexport type WalletRaw = { id?: string; provider?: string; key?: string; label?: string; name?: string; title?: string; icon?: string; logo?: string; image?: string } & Record<string, any>;\nexport type WalletEntry = { id: string; label: string; icon?: string | null };\n\nexport function getWalletId(w: WalletRaw): string {\n return (w && (w.id || w.provider || w.key)) || '';\n}\n\nexport function getWalletLabel(w: WalletRaw): string {\n return (w && (w.label || w.name || w.title || w.id)) || 'Wallet';\n}\n\nexport function getWalletIcon(w: WalletRaw): string | null {\n return (w && (w.icon || w.logo || w.image)) || null;\n}\n\nexport function buildWalletEntries(raw: WalletRaw[]): WalletEntry[] {\n return (raw || []).map((w) => ({ id: getWalletId(w), label: getWalletLabel(w), icon: getWalletIcon(w) }));\n}\n\ndeclare global {\n interface Window { ethereum?: any }\n}\n\nexport async function ensureEvmChain(\n targetChainId?: number | string,\n opts?: { provider?: any; chainName?: string; rpcUrlPublic?: string; nativeSymbol?: string; decimals?: number }\n): Promise<boolean> {\n try {\n const provider: any = (opts as any)?.provider || (typeof window !== 'undefined' ? (window as any).ethereum : null);\n if (!provider || targetChainId === undefined || targetChainId === null) return true;\n const desiredDec = typeof targetChainId === 'number'\n ? targetChainId\n : (String(targetChainId).startsWith('0x') ? parseInt(String(targetChainId), 16) : parseInt(String(targetChainId), 10));\n if (!Number.isFinite(desiredDec)) return true;\n const currentHex: string = await provider.request({ method: 'eth_chainId' });\n const current = parseInt(currentHex, 16);\n if (current === desiredDec) return true;\n const hex = '0x' + desiredDec.toString(16);\n await provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: hex }] });\n return true;\n } catch (e) {\n // Try addEthereumChain fallback using provided chain metadata\n try {\n const provider: any = (opts as any)?.provider || (typeof window !== 'undefined' ? (window as any).ethereum : null);\n if (!provider || targetChainId === undefined || targetChainId === null) return false;\n const desiredDec = typeof targetChainId === 'number'\n ? targetChainId\n : (String(targetChainId).startsWith('0x') ? parseInt(String(targetChainId), 16) : parseInt(String(targetChainId), 10));\n const hex = '0x' + desiredDec.toString(16);\n const chainName = opts?.chainName || `Network ${desiredDec}`;\n const rpcUrls = (opts?.rpcUrlPublic ? [opts.rpcUrlPublic] : []).filter(Boolean) as string[];\n const nativeCurrency = {\n name: opts?.nativeSymbol || 'ETH',\n symbol: opts?.nativeSymbol || 'ETH',\n decimals: (typeof opts?.decimals === 'number' && isFinite(opts.decimals) ? opts.decimals : 18)\n } as any;\n await provider.request({ method: 'wallet_addEthereumChain', params: [{ chainId: hex, chainName, rpcUrls, nativeCurrency }] });\n return true;\n } catch {\n return false;\n }\n }\n}\n\nexport async function getWalletBalanceEntries(params: {\n sdk: any;\n lastWalletId?: string | null;\n connectedWallet?: { owner?: string; principal?: string } | any;\n amountUsd?: number;\n chainShortcodes?: string[];\n tokenShortcodes?: string[];\n}): Promise<{ balances: WalletBalanceEntry[]; totalBalancesUSD?: number; lastUpdated: Date }>\n{\n const { sdk, lastWalletId, connectedWallet, amountUsd, chainShortcodes, tokenShortcodes } = params;\n let response: any;\n const lowerId = (lastWalletId || '').toLowerCase();\n const addrOrPrincipal = (connectedWallet?.owner || connectedWallet?.principal || '').toString();\n try {\n if (lowerId && EVM_WALLET_IDS.has(lowerId)) {\n response = await (sdk?.client as any)?.getExternalWalletBalances?.({ network: 'evm', address: addrOrPrincipal, amountUsd, chainShortcodes, tokenShortcodes });\n } else {\n // Prefer API for IC balances too for uniform behavior\n response = await (sdk?.client as any)?.getExternalWalletBalances?.({ network: 'ic', principal: addrOrPrincipal, amountUsd, chainShortcodes, tokenShortcodes });\n }\n } catch {\n // Fallbacks: for IC wallets use client method; for EVM wallets, return empty set\n response = { balances: [], totalBalancesUSD: 0, lastUpdated: new Date() };\n }\n\n const balances: WalletBalanceEntry[] = (response?.balances || []).map((b: any) => ({\n ledgerId: b.ledgerId,\n ledgerName: b.ledgerName,\n ledgerSymbol: b.ledgerSymbol,\n tokenShortcode: b.tokenShortcode ?? b.shortcode ?? null,\n canisterId: b.canisterId,\n eip3009Version: b?.eip3009Version ?? null,\n x402Accepts: b?.x402Accepts != null ? Boolean(b.x402Accepts) : undefined,\n balance: b.balance,\n formattedBalance: b.formattedBalance,\n decimals: b.decimals,\n currentPrice: b.currentPrice,\n lastPriceUpdate: b.lastPriceUpdate ? new Date(b.lastPriceUpdate) : undefined,\n lastUpdated: b.lastUpdated ? new Date(b.lastUpdated) : new Date(),\n chainId: typeof b.chainId === 'string' ? b.chainId : (typeof b.chainId === 'number' ? String(b.chainId) : undefined),\n // Accept multiple API shapes: chainName, chain.name, networkName, etc.\n chainName: b.chainName || (b.chain && (b.chain.name || b.chain.chainName)) || b.networkName || undefined,\n rpcUrlPublic: b.rpcUrlPublic,\n chainUuid: b.chainUuid,\n requiredAmount: b.requiredAmount,\n requiredAmountFormatted: b.requiredAmountFormatted,\n hasSufficientBalance: b.hasSufficientBalance,\n logoUrl: b.logoUrl ?? null,\n }));\n\n return {\n balances,\n totalBalancesUSD: response?.totalBalancesUSD,\n lastUpdated: response?.lastUpdated ? new Date(response.lastUpdated) : new Date(),\n };\n}\n\n\n","export function formatTokenAmountThirdwebStyle(value: string | number): string {\n const n = Number(value);\n if (!isFinite(n) || n === 0) return '0';\n const abs = Math.abs(n);\n // Threshold at 1e-5 → show compact lower-than indicator\n if (abs < 1e-5) return '< 0.00001';\n // Truncate (not round) to 5 decimal places, then trim trailing zeros\n const factor = 1e5;\n const truncated = Math.trunc(n * factor) / factor;\n const fixed = truncated.toFixed(5);\n return fixed.replace(/\\.0+$/, '').replace(/(\\.[0-9]*?)0+$/, '$1');\n}\n\n\n","import { html, TemplateResult } from 'lit';\nimport type { WalletBalanceEntry } from '../../../utils/balances';\nimport { formatTokenAmountThirdwebStyle } from '../../../utils/format';\n\nexport type PayWithOptions = {\n isLoading: boolean;\n error?: string | null;\n balances: WalletBalanceEntry[] | undefined;\n onBack: () => void;\n onSelect: (symbol: string) => void;\n};\n\nfunction toUsd(b: WalletBalanceEntry): number {\n const amt = parseFloat(String(b.formattedBalance || '0'));\n const price = Number((b as any).currentPrice ?? 0);\n const usd = (isFinite(amt) ? amt : 0) * (isFinite(price) ? price : 0);\n return isFinite(usd) ? usd : 0;\n}\n\nconst byUsdDesc = (a: WalletBalanceEntry, b: WalletBalanceEntry) => toUsd(b) - toUsd(a);\n\nexport function renderPayWithStyles(): TemplateResult {\n return html`<style>\n .modal { background-color:#1a1a1a; border-radius:24px; width:100%; max-width:420px; padding:24px; color:#fff; display:flex; flex-direction:column; border:1px solid #333; height:460px; }\n .header { display:flex; align-items:center; margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid #333; flex-shrink:0; }\n .back-button { background:none; border:none; color:#fff; font-size:24px; cursor:pointer; padding:0; margin-right:16px; }\n .title { font-size:20px; font-weight:600; flex:1; text-align:center; margin-right:40px; }\n .currency-list { display:flex; flex-direction:column; gap:0; overflow-y:auto; flex:1; margin-bottom:0; }\n .currency-item { display:flex; align-items:center; padding:16px 12px; cursor:pointer; transition:background-color 0.2s; border-radius:12px; }\n .currency-item:hover { background-color:#2a2a2a; }\n .currency-item[disabled] { opacity:0.6; cursor:not-allowed; }\n .currency-icon { width:48px; height:48px; border-radius:50%; margin-right:16px; display:flex; align-items:center; justify-content:center; font-size:28px; flex-shrink:0; overflow:hidden; }\n .eth-icon { background:linear-gradient(135deg,#627eea 0%, #8a9bff 100%); }\n .usdc-icon { background:linear-gradient(135deg,#2775ca 0%, #4da4ff 100%); }\n .usdt-icon { background:linear-gradient(135deg,#26a17b 0%, #50af95 100%); }\n .currency-info { flex:1; }\n .currency-name { font-size:16px; font-weight:500; margin-bottom:4px; }\n .currency-network { font-size:14px; color:#888; }\n .currency-balance { text-align:right; }\n .balance-amount { font-size:16px; font-weight:500; margin-bottom:4px; }\n .balance-available { font-size:14px; color:#888; }\n .footer { display:flex; justify-content:space-between; align-items:center; margin-top:16px; padding-top:16px; border-top:1px solid #333; flex-shrink:0; }\n .need-wallet { font-size:14px; color:#888; }\n .get-started { font-size:14px; color:#0066ff; background:none; border:none; cursor:pointer; font-weight:500; }\n .get-started:hover { text-decoration:underline; }\n .muted { color:#9ca3af; }\n </style>`;\n}\n\nexport function renderPayWithContent(opts: PayWithOptions): TemplateResult {\n const formatTokenAmount = (val: string | number): string => formatTokenAmountThirdwebStyle(val);\n return html`\n <div class=\"header\">\n <button class=\"back-button\" @click=${opts.onBack}>‹</button>\n <h1 class=\"title\">Pay with</h1>\n </div>\n ${opts.isLoading ? html`\n <div class=\"muted\">Loading your balances…</div>\n ` : (opts.error ? html`\n <div style=\"color:#fca5a5\">${opts.error}</div>\n ` : html`\n <div class=\"currency-list\">\n ${(() => {\n const sufficient = (opts.balances || [])\n .filter(b => b.hasSufficientBalance === true || b.hasSufficientBalance === undefined)\n .sort(byUsdDesc);\n return sufficient.length > 0 ? html`\n ${sufficient.map((b) => {\n const sym = (b.ledgerSymbol || '').toUpperCase();\n const iconClass = b.logoUrl ? '' : (sym === 'ETH' ? 'eth-icon' : (sym === 'USDC' ? 'usdc-icon' : (sym === 'USDT' ? 'usdt-icon' : '')));\n return html`\n <div class=\"currency-item\" @click=${() => opts.onSelect((b as any).tokenShortcode || b.ledgerSymbol)}>\n <div class=\"currency-icon ${iconClass}\">\n ${b.logoUrl\n ? html`<img src=\"${b.logoUrl}\" alt=\"${sym} logo\" style=\"width:100%;height:100%;object-fit:fill\" />`\n : html`<span>${sym.slice(0,1)}</span>`}\n </div>\n <div class=\"currency-info\">\n <div class=\"currency-name\">${b.ledgerName}</div>\n <div class=\"currency-network\">${b.chainName || ''}</div>\n </div>\n <div class=\"currency-balance\">\n <div class=\"balance-amount\">${formatTokenAmount(b.formattedBalance)} ${sym}</div>\n <div class=\"balance-available\">$${toUsd(b).toFixed(2)}</div>\n </div>\n </div>\n `;\n })}\n ` : html`<div class=\"muted\" style=\"margin-bottom:8px\">You have no balances on verified tokens.</div>`;\n })()}\n\n ${(() => {\n const insufficient = (opts.balances || [])\n .filter(b => b.hasSufficientBalance === false)\n .sort(byUsdDesc);\n return insufficient.length > 0 ? html`\n ${insufficient.map((b) => {\n const sym = (b.ledgerSymbol || '').toUpperCase();\n const iconClass = b.logoUrl ? '' : (sym === 'ETH' ? 'eth-icon' : (sym === 'USDC' ? 'usdc-icon' : (sym === 'USDT' ? 'usdt-icon' : '')));\n return html`\n <div class=\"currency-item\" disabled title=\"Insufficient balance\">\n <div class=\"currency-icon ${iconClass}\">\n ${b.logoUrl\n ? html`<img src=\"${b.logoUrl}\" alt=\"${sym} logo\" style=\"width:100%;height:100%;object-fit:fill\" />`\n : html`<span>${sym.slice(0,1)}</span>`}\n </div>\n <div class=\"currency-info\">\n <div class=\"currency-name\">${b.ledgerName}</div>\n <div class=\"currency-network\">${b.chainName || ''}</div>\n </div>\n <div class=\"currency-balance\">\n <div class=\"balance-amount\">need ${b.requiredAmountFormatted || '--'}</div>\n <div class=\"balance-available\">${formatTokenAmount(b.formattedBalance)} ${sym} available</div>\n </div>\n </div>\n `;\n })}\n ` : null;\n })()}\n </div>\n `)}\n <div class=\"footer\">\n <span class=\"need-wallet\">Need a wallet?</span>\n <button class=\"get-started\" @click=${() => { try { window.open('https://internetcomputer.org/wallets','_blank','noopener,noreferrer'); } catch {} }}>Get started</button>\n </div>\n `;\n}\n\n\n","import { html, TemplateResult } from 'lit';\nimport type { WalletBalanceEntry } from '../../utils/balances';\nimport { renderPayWithStyles, renderPayWithContent } from './shared/pay-with';\n\ntype Options = {\n visible: boolean;\n isLoading: boolean;\n error?: string | null;\n balances: WalletBalanceEntry[];\n onSelect: (symbol: string) => void;\n onClose: () => void;\n};\n\nexport function renderWalletBalanceModal(opts: Options): TemplateResult | null {\n if (!opts.visible) return null as any;\n\n return html`\n <div style=\"position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0, 0, 0, 0.5);z-index:10001\">\n ${renderPayWithStyles()}\n <div class=\"modal\">\n ${renderPayWithContent({\n isLoading: opts.isLoading,\n error: opts.error,\n balances: opts.balances,\n onBack: opts.onClose,\n onSelect: opts.onSelect\n })}\n </div>\n </div>\n `;\n}\n\n\n\n","export function hidePnPDefaultModal(): void {\n try {\n if (typeof document === 'undefined') return;\n const hideNow = () => {\n // Scoped and global overlays\n const selectors = [\n '.icpay-widget-base .modal-overlay',\n '.modal-overlay',\n // legacy roots/selectors\n '.plug-n-play-modal',\n '.pnp-modal',\n '#plug-n-play-root',\n '#pnp-root',\n '[data-pnp-root]',\n '[data-pnp-modal]'\n ];\n document.querySelectorAll(selectors.join(',')).forEach((el) => {\n const overlay = el as HTMLElement;\n try {\n const hasWalletSelector = !!overlay.querySelector?.('.wallet-selector-container');\n if (overlay.classList?.contains('modal-overlay')) {\n if (hasWalletSelector) overlay.style.display = 'none';\n } else {\n overlay.style.display = 'none';\n }\n } catch {}\n });\n };\n\n hideNow();\n\n // Briefly observe DOM mutations to hide overlays that appear after async connects\n try {\n const Observer = (window as any).MutationObserver || (window as any).WebKitMutationObserver;\n if (Observer) {\n const observer = new Observer((mutations: any[]) => {\n for (const m of mutations) {\n if (!m.addedNodes) continue;\n for (const node of m.addedNodes) {\n if (!(node instanceof HTMLElement)) continue;\n if (node.matches?.('.modal-overlay') || node.querySelector?.('.wallet-selector-container')) {\n hideNow();\n }\n }\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n setTimeout(() => { try { observer.disconnect(); } catch {} }, 3000);\n }\n } catch {}\n } catch {}\n}\n\n\n// Force Oisy to open in a browser tab (not a sized popup) by clearing window features\n// This relies on @windoge98/plug-n-play honoring adapter.config.transport.windowOpenerFeatures\n// When features string is empty, most browsers open a new tab instead of a popup window\nexport function applyOisyNewTabConfig(cfg: any): any {\n try {\n const next = cfg || {};\n next.adapters = next.adapters || {};\n const oisy = next.adapters.oisy || {};\n const oisyConfig = oisy.config || {};\n const transport = {\n ...(oisyConfig.transport || {}),\n windowOpenerFeatures: '',\n // Allow establishing channel even if not in the same click stack (Oisy signer requirement is strict)\n detectNonClickEstablishment: false\n };\n next.adapters.oisy = { ...oisy, config: { ...oisyConfig, transport } };\n return next;\n } catch {\n return cfg;\n }\n}\n\n// Normalize the connected wallet object to the shape expected by icpay-sdk\n// Ensures there is an `owner` (principal string) available for intent creation\nexport function normalizeConnectedWallet(pnp: any, connectResult: any): any {\n try {\n const fromResult = (connectResult && (connectResult.owner || connectResult.principal)) || null;\n const fromAccount = (pnp && pnp.account && (pnp.account.owner || pnp.account.principal)) || null;\n const toStringSafe = (v: any) => (typeof v === 'string' ? v : (v && typeof v.toString === 'function' ? v.toString() : null));\n const principal = toStringSafe(fromResult) || toStringSafe(fromAccount) || null;\n if (principal) {\n return { owner: principal, principal };\n }\n // Fallback to raw result to maintain other data, but SDK will still require owner\n return connectResult || { owner: null };\n } catch {\n return connectResult || { owner: null };\n }\n}\n\n// Read saved Plug N Play session (provider/principal) from localStorage\n// Try to detect existing Oisy session via adapter APIs (no localStorage/cookies)\n// Returns principal string if an active session is detected, else null\nexport async function detectOisySessionViaAdapter(pnp: any): Promise<string | null> {\n try {\n // Support both external PNP and internal wallet-select implementation\n const getEnabled = typeof pnp?.getEnabledWallets === 'function' ? pnp.getEnabledWallets.bind(pnp) : null;\n if (!getEnabled) return null;\n const enabled = getEnabled() || [];\n const oisyCfg = enabled.find((w: any) => (w?.id || '').toLowerCase() === 'oisy');\n if (!oisyCfg || !oisyCfg.adapter) return null;\n const AdapterCtor = oisyCfg.adapter;\n const adapterInstance = new AdapterCtor({ config: (pnp as any)?.config || {} });\n const connected: boolean = await adapterInstance.isConnected();\n if (!connected) return null;\n const principal: string | null = await adapterInstance.getPrincipal();\n if (principal && principal !== '2vxsx-fae') return principal;\n return null;\n } catch {\n return null;\n }\n}\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport { buildWalletEntries } from '../utils/balances';\nimport type { TipJarConfig } from '../types';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport './ui/progress-bar';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\nimport { getWalletBalanceEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// wallet will be imported dynamically when needed\nlet WalletSelect: any = null;\n\n// Debug logger utility for widget components\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-tip-jar')\nexport class ICPayTipJar extends LitElement {\n static styles = [baseStyles, css`\n .jar { width: 120px; height: 160px; margin: 0 auto 12px; position: relative; background: linear-gradient(135deg, #374151 0%, #4b5563 100%); border-radius: 0 0 60px 60px; border: 3px solid #6b7280; border-top: 8px solid #6b7280; overflow: hidden; }\n .fill { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(135deg, #d1d5db 0%, #9ca3af 100%); transition: height 0.8s ease; height: 0%; }\n .amounts { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; margin: 12px 0; }\n .chip { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; }\n .chip.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n .crypto-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 12px 0 16px; }\n .crypto-option { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px 8px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; font-size: 12px; }\n .crypto-option.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n\n .error-message {\n border: 1px solid;\n font-weight: 500;\n }\n\n .error-message.info {\n background: rgba(59, 130, 246, 0.1);\n border-color: rgba(59, 130, 246, 0.3);\n color: #3b82f6;\n }\n\n .error-message.warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: rgba(245, 158, 11, 0.3);\n color: #f59e0b;\n }\n\n .error-message.error {\n background: rgba(239, 68, 68, 0.1);\n border-color: rgba(239, 68, 68, 0.3);\n color: #ef4444;\n }\n `];\n\n @property({ type: Object }) config!: TipJarConfig;\n @state() private selectedAmount = 1;\n @state() private selectedSymbol: string | null = null;\n @state() private total = 0;\n @state() private processing = false;\n @state() private succeeded = false;\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'tip' | null = null;\n @state() private showWalletModal = false;\n @state() private oisyReadyToPay: boolean = false;\n @state() private lastWalletId: string | null = null;\n private pnp: any | null = null;\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n private transakMessageHandlerBound: any | null = null;\n private onrampPollTimer: number | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n private sdk: WidgetSdk | null = null;\n // Integrated balances\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: any[] = [];\n private async tryAutoConnectPNP() {\n try {\n if (!this.config || this.config?.useOwnWallet) return;\n const raw = localStorage.getItem('icpay:pnp');\n if (!raw) return;\n const saved = JSON.parse(raw);\n if (!saved?.provider || !saved?.principal) return;\n if (!WalletSelect) {\n const module = await import('../wallet-select');\n WalletSelect = module.WalletSelect;\n }\n const _cfg1: any = applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) });\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg1.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n const pnp = new WalletSelect(_cfg1);\n // Do not call connect here; just hydrate saved principal for UI/history.\n // Keep walletConnected false so pressing pay triggers real connect.\n this.walletConnected = false;\n this.config = {\n ...this.config,\n connectedWallet: { owner: saved.principal, principal: saved.principal, connected: false } as any\n };\n } catch {}\n }\n\n private get amounts(): number[] {\n return this.config?.amountsUsd || [1, 5, 10];\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return; // Skip in SSR\n\n debugLog(this.config?.debug || false, 'Tip jar connected', { config: this.config });\n\n if (this.config && this.config.defaultAmountUsd) this.selectedAmount = this.config.defaultAmountUsd;\n this.tryAutoConnectPNP();\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // Close wallet modal after SDK transaction creation\n try {\n window.addEventListener('icpay-sdk-transaction-created', (() => {\n this.showWalletModal = false;\n this.requestUpdate();\n }) as EventListener);\n } catch {}\n // No ledger preload; balances flow handles token availability\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config') && this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction;\n this.pendingAction = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n // Resume the original action after external wallet connected\n setTimeout(() => { if (action === 'tip') this.tip(); }, 0);\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n this.pendingAction = 'tip';\n this.showWalletModal = true;\n this.requestUpdate();\n try {\n const amount = Number(this.selectedAmount || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'tip', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n // Removed ledger preload\n\n private selectAmount(v: number) { this.selectedAmount = v; }\n private selectSymbol(s: string) { this.selectedSymbol = s; }\n\n private get fillPercentage() {\n const max = 50; // visual cap\n return Math.min((this.total / max) * 100, 100);\n }\n\n private async tip() {\n if (!isBrowser) return; // Skip in SSR\n\n debugLog(this.config?.debug || false, 'Tip button clicked!', { config: this.config, processing: this.processing });\n if (this.processing) return;\n\n // Clear previous errors\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'tip', type: 'sendUsd', amount: this.selectedAmount, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Check wallet connection status first\n if (this.config.useOwnWallet) {\n // External wallet handling - always require explicit connect before pay\n if (!this.config.actorProvider) {\n this.pendingAction = 'tip';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return;\n }\n } else {\n // Built-in wallet handling - connect directly with wallet\n if (!this.walletConnected) {\n debugLog(this.config?.debug || false, 'Connecting to wallet via wallet');\n try {\n if (!WalletSelect) { const module = await import('../wallet-select'); WalletSelect = module.WalletSelect; }\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _cfg2: any = wantsOisyTab ? applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) }) : ({ ...(this.config?.plugNPlay || {}) });\n if ((this.config as any)?.chainTypes) _cfg2.chainTypes = (this.config as any).chainTypes;\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg2.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg2);\n try {\n const principal = await detectOisySessionViaAdapter(this.pnp);\n if (principal) {\n this.walletConnected = true;\n const normalized = normalizeConnectedWallet(this.pnp, { owner: principal, principal, connected: true });\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'oisy' } })); } catch {}\n this.tip();\n return;\n }\n } catch {}\n const availableWallets = this.pnp.getEnabledWallets();\n debugLog(this.config?.debug || false, 'Available wallets', availableWallets);\n if (!availableWallets?.length) throw new Error('No wallets available');\n this.pendingAction = 'tip';\n this.showWalletModal = true;\n return;\n } catch (error) {\n debugLog(this.config?.debug || false, 'Wallet connection error:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return;\n }\n }\n }\n\n // Wallet is connected; proceed to token selection to initiate payment via selection handler\n this.showWalletModal = true;\n await this.fetchAndShowBalances();\n return;\n } catch (e) {\n // Handle errors using the new error handling system\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n\n // Update UI error state if error should be shown to user\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n this.showOnrampModal = false;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnramp() {\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const sdk = createSdk(this.config);\n const symbol = this.selectedSymbol || 'ICP';\n const resp = await (sdk as any).startOnrampUsd(this.selectedAmount, symbol, { context: 'tip:onramp' });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.onrampErrorMessage = null;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n this.onrampSessionId = null;\n this.onrampErrorMessage = errorMessage || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n } catch (e) {\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n const sdk = createSdk(this.config);\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n try { window.addEventListener('icpay-sdk-transaction-completed', (() => handleComplete()) as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = (sdk as any).notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n this.onrampPollTimer = 1 as any;\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n const isOisy = this.lastWalletId === 'oisy';\n if (isOisy) {\n this.oisyReadyToPay = true;\n } else {\n this.showWalletModal = false;\n this.fetchAndShowBalances();\n }\n }).catch((error: any) => {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances() {\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.showBalanceModal = true;\n const sdk = createSdk(this.config);\n const { balances } = await getWalletBalanceEntries({\n sdk,\n lastWalletId: this.lastWalletId,\n connectedWallet: (this.config as any)?.connectedWallet,\n amountUsd: Number(this.selectedAmount || 0),\n chainShortcodes: (this.config as any)?.chainShortcodes,\n tokenShortcodes: (this.config as any)?.tokenShortcodes,\n });\n this.walletBalances = balances as any[];\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = async (shortcode: string) => {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n if (sel?.ledgerSymbol) this.selectedSymbol = sel.ledgerSymbol;\n if (isEvmWalletId(this.lastWalletId)) {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const targetChain = sel?.chainId;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.selectedAmount || 0);\n if (sel?.x402Accepts) {\n try {\n await (sdk.client as any).createPaymentX402Usd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'tip:x402'\n }\n });\n this.showBalanceModal = false;\n return;\n } catch {}\n }\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n this.showBalanceModal = false;\n });\n return;\n }\n this.showBalanceModal = false;\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'tip') {\n // IC flow: send using tokenShortcode same as EVM\n try {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.selectedAmount || 0);\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'ic',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n }\n };\n\n render() {\n if (!this.config) {\n return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n }\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\" style=\"text-align:center;\">\n ${this.config?.progressBar?.enabled !== false ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.selectedAmount || 0)}\n .ledgerSymbol=${this.selectedSymbol || 'ICP'}\n ></icpay-progress-bar>\n ` : null}\n <div class=\"jar\"><div class=\"fill\" style=\"height:${this.fillPercentage}%\"></div></div>\n <div class=\"label\">Total Tips: $${this.total}</div>\n\n <div class=\"amounts\">\n ${this.amounts.map(a => html`<div class=\"chip ${this.selectedAmount===a?'selected':''}\" @click=${() => this.selectAmount(a)}>$${a}</div>`)}\n </div>\n\n\n\n <button class=\"pay-button ${this.processing?'processing':''}\"\n ?disabled=${this.processing || (this.config?.disablePaymentButton === true) || (this.succeeded && this.config?.disableAfterSuccess === true)}\n @click=${() => this.tip()}>\n ${this.succeeded && this.config?.disableAfterSuccess ? 'Paid' : (this.processing ? 'Processing…' : (this.config?.buttonLabel\n ? this.config.buttonLabel.replace('{amount}', String(this.selectedAmount)).replace('{symbol}', (this.selectedSymbol || 'ICP'))\n : `Tip $${this.selectedAmount} with crypto`))}\n </button>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`\n <button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">\n ${this.errorAction}\n </button>\n ` : ''}\n </div>\n ` : ''}\n ${(() => {\n const walletsRaw = (this as any).pnp?.getEnabledWallets?.() || [];\n const wallets = (buildWalletEntries as any)(walletsRaw);\n return renderWalletSelectorModal({\n visible: !!(this.showWalletModal && this.pnp),\n wallets,\n isConnecting: false,\n onSwitchAccount: () => this.onSwitchAccount(null),\n onSelect: (walletId: string) => this.connectWithWallet(walletId),\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: (this.config?.onramp?.enabled !== false) ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: (this.config?.onramp?.enabled !== false),\n creditCardTooltip: (() => {\n const min = 5; const amt = Number(this.selectedAmount || this.config?.defaultAmountUsd || 0); if (amt > 0 && amt < min && (this.config?.onramp?.enabled !== false)) { const d = (min - amt).toFixed(2); return `Note: Minimum card amount is $${min}. You will pay about $${d} more.`; } return null;\n })(),\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => { this.showWalletModal = false; this.oisyReadyToPay = false; this.tip(); }\n });\n })()}\n\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances as any,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-tip-jar': ICPayTipJar } }\n\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport type { ArticlePaywallConfig } from '../types';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport './ui/progress-bar';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\nimport type { WalletBalanceEntry } from '../utils/balances';\nimport { getWalletBalanceEntries, buildWalletEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// Plug N Play will be imported dynamically when needed\nlet WalletSelect: any = null;\n\n// Debug logger utility for widget components\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-article-paywall')\nexport class ICPayArticlePaywall extends LitElement {\n static styles = [baseStyles, css`\n .container { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); border-radius: 16px; padding: 16px; margin-bottom: 16px; }\n .title { color: var(--icpay-text); font-weight: 700; margin-bottom: 8px; }\n .preview { color: var(--icpay-muted); margin-bottom: 12px; line-height: 1.6; }\n .locked { filter: blur(3px); color: #6b7280; margin-bottom: 12px; }\n .unlocked { filter: blur(0); color: var(--icpay-text); }\n .crypto-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 12px 0 16px; }\n .crypto-option { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px 8px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; font-size: 12px; }\n .crypto-option.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n\n .error-message {\n border: 1px solid;\n font-weight: 500;\n }\n\n .error-message.info {\n background: rgba(59, 130, 246, 0.1);\n border-color: rgba(59, 130, 246, 0.3);\n color: #3b82f6;\n }\n\n .error-message.warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: rgba(245, 158, 11, 0.3);\n color: #f59e0b;\n }\n\n .error-message.error {\n background: rgba(239, 68, 68, 0.1);\n border-color: rgba(239, 68, 68, 0.3);\n color: #ef4444;\n }\n `];\n\n @property({ type: Object }) config!: ArticlePaywallConfig;\n @property({ type: String }) title: string = 'Article Title';\n @property({ type: String }) preview: string = '';\n @property({ type: String }) lockedContent: string = '';\n private get obfuscatedLockedContent(): string {\n try {\n const s = this.lockedContent || '';\n // Replace all non-whitespace characters with 'x' to avoid leaking content\n return s.replace(/[^\\s]/g, 'x');\n } catch {\n return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';\n }\n }\n @state() private selectedSymbol: string | null = null;\n @state() private unlocked = false;\n @state() private succeeded = false;\n @state() private processing = false;\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'unlock' | null = null;\n @state() private showWalletModal = false;\n @state() private oisyReadyToPay: boolean = false;\n @state() private lastWalletId: string | null = null;\n private pnp: any | null = null;\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n private transakMessageHandlerBound: any | null = null;\n private onrampPollTimer: number | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n // Post-connect token selection\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: WalletBalanceEntry[] = [];\n private sdk: WidgetSdk | null = null;\n private async tryAutoConnectPNP() {\n try {\n if (!this.config || this.config?.useOwnWallet) return;\n const raw = localStorage.getItem('icpay:pnp');\n if (!raw) return;\n const saved = JSON.parse(raw);\n if (!saved?.provider || !saved?.principal) return;\n if (!WalletSelect) {\n const module = await import('../wallet-select');\n WalletSelect = module.WalletSelect;\n }\n const _cfg1: any = { ...(this.config?.plugNPlay || {}) };\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg1.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n const pnp = new WalletSelect(_cfg1);\n // Hydrate saved principal for UI/history; require connect on pay\n this.walletConnected = false;\n this.config = {\n ...this.config,\n connectedWallet: { owner: saved.principal, principal: saved.principal, connected: false } as any\n };\n } catch {}\n }\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n this.showOnrampModal = false;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnramp() {\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const sdk = createSdk(this.config);\n const symbol = this.selectedSymbol || 'ICP';\n const resp = await (sdk as any).startOnrampUsd(this.config.priceUsd, symbol, { context: 'article:onramp' });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.onrampErrorMessage = null;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n this.onrampSessionId = null;\n this.onrampErrorMessage = errorMessage || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n } catch (e) {\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n const sdk = createSdk(this.config);\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n try { window.addEventListener('icpay-sdk-transaction-completed', (() => handleComplete()) as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = (sdk as any).notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n this.onrampPollTimer = 1 as any;\n }\n\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return; // Skip in SSR\n\n debugLog(this.config?.debug || false, 'Article paywall connected', { config: this.config });\n\n // Apply config-driven content if provided\n if (this.config) {\n if (typeof (this.config as any).title === 'string') this.title = (this.config as any).title;\n if (typeof (this.config as any).preview === 'string') this.preview = (this.config as any).preview;\n if (typeof (this.config as any).lockedContent === 'string') this.lockedContent = (this.config as any).lockedContent;\n }\n\n this.tryAutoConnectPNP();\n // Listen for switch-account request\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // No ledger preload; balances flow handles token availability\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config')) {\n // Re-apply content on config update\n if (this.config) {\n if (typeof (this.config as any).title === 'string') this.title = (this.config as any).title;\n if (typeof (this.config as any).preview === 'string') this.preview = (this.config as any).preview;\n if (typeof (this.config as any).lockedContent === 'string') this.lockedContent = (this.config as any).lockedContent;\n }\n }\n if (changed.has('config') && this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction;\n this.pendingAction = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n setTimeout(() => { if (action === 'unlock') this.unlock(); }, 0);\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n // Prepare to restart flow after reconnect\n this.pendingAction = 'unlock';\n this.showWalletModal = true;\n this.requestUpdate();\n // Restart progress from step 0 for unlock\n try {\n const amount = Number(this.config?.priceUsd || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'unlock', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n // Removed ledger preload; relying on balances flow instead\n\n private selectSymbol(s: string) { this.selectedSymbol = s; }\n\n private async unlock() {\n if (!isBrowser) return; // Skip in SSR\n\n if (this.processing || this.unlocked) return;\n\n debugLog(this.config?.debug || false, 'Article paywall unlock started', {\n priceUsd: this.config.priceUsd,\n selectedSymbol: this.selectedSymbol,\n useOwnWallet: this.config.useOwnWallet\n });\n\n // Clear previous errors\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'unlock', type: 'sendUsd', amount: this.config.priceUsd, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Check wallet connection status first\n if (this.config.useOwnWallet) {\n if (!this.config.actorProvider) {\n this.pendingAction = 'unlock';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return;\n }\n } else {\n // Built-in wallet handling - connect directly with Plug N Play\n if (!this.walletConnected) {\n debugLog(this.config?.debug || false, 'Connecting to wallet via Plug N Play');\n try {\n if (!WalletSelect) { const module = await import('../wallet-select'); WalletSelect = module.WalletSelect; }\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _cfg2: any = wantsOisyTab ? applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) }) : ({ ...(this.config?.plugNPlay || {}) });\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg2.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg2);\n try {\n const principal = await detectOisySessionViaAdapter(this.pnp);\n if (principal) {\n this.walletConnected = true;\n const normalized = normalizeConnectedWallet(this.pnp, { owner: principal, principal, connected: true });\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'oisy' } })); } catch {}\n this.unlock();\n return;\n }\n } catch {}\n const availableWallets = this.pnp.getEnabledWallets();\n debugLog(this.config?.debug || false, 'Available wallets', availableWallets);\n if (!availableWallets?.length) throw new Error('No wallets available');\n this.pendingAction = 'unlock';\n this.showWalletModal = true;\n return;\n } catch (error) {\n debugLog(this.config?.debug || false, 'Wallet connection error:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return;\n }\n }\n }\n\n // Wallet is connected; proceed to token selection to initiate payment via selection handler\n // Ensure wallet selector is closed before opening balances\n this.showWalletModal = false;\n await this.fetchAndShowBalances();\n return;\n } catch (e) {\n // Handle errors using the new error handling system\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n\n // Update UI error state if error should be shown to user\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n const isOisy = this.lastWalletId === 'oisy';\n if (isOisy) {\n this.oisyReadyToPay = true;\n } else {\n this.showWalletModal = false;\n // After any successful wallet connect, open token-balance picker\n this.fetchAndShowBalances();\n }\n }).catch((error: any) => {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances() {\n // Opens modal with balances; falls back to showing all verified ledgers if balance fetch fails\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.showBalanceModal = true;\n const sdk = createSdk(this.config);\n const { balances } = await getWalletBalanceEntries({\n sdk,\n lastWalletId: this.lastWalletId,\n connectedWallet: (this.config as any)?.connectedWallet,\n amountUsd: Number(this.config?.priceUsd ?? 0),\n chainShortcodes: (this.config as any)?.chainShortcodes,\n tokenShortcodes: (this.config as any)?.tokenShortcodes,\n });\n this.walletBalances = balances;\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = async (shortcode: string) => {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n if (sel?.ledgerSymbol) this.selectedSymbol = sel.ledgerSymbol;\n if (isEvmWalletId(this.lastWalletId)) {\n const sel = (this.walletBalances || []).find(b => (b as any)?.tokenShortcode === shortcode);\n const targetChain = sel?.chainId;\n // Close modals immediately on selection to reveal progress UI\n this.showBalanceModal = false;\n this.showWalletModal = false;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.config?.priceUsd ?? 0);\n if (sel?.x402Accepts) {\n try {\n await (sdk.client as any).createPaymentX402Usd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'article:x402'\n }\n });\n return;\n } catch { /* fallback to normal flow */ }\n }\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n });\n return;\n }\n this.showBalanceModal = false;\n this.showWalletModal = false;\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'unlock') {\n // IC flow: send using tokenShortcode same as EVM\n try {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.config?.priceUsd ?? 0);\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'ic',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n }\n };\n\n render() {\n if (!this.config) {\n return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n }\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\">\n ${this.config?.progressBar?.enabled !== false ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.config?.priceUsd || 0)}\n .ledgerSymbol=${this.selectedSymbol || 'ICP'}\n ></icpay-progress-bar>\n ` : null}\n <div class=\"container\">\n <div class=\"title\">${this.title}</div>\n <div class=\"preview\">${this.preview}</div>\n <div class=\"${this.unlocked ? 'unlocked' : 'locked'}\">${this.unlocked ? this.lockedContent : this.obfuscatedLockedContent}</div>\n </div>\n\n <button class=\"pay-button ${this.processing?'processing':''}\" ?disabled=${this.processing||this.unlocked || (this.config?.disablePaymentButton === true) || (this.succeeded && this.config?.disableAfterSuccess === true)} @click=${() => this.unlock()}>\n ${this.unlocked ? 'Unlocked' : (this.processing ? 'Processing…' : (\n (this.config?.buttonLabel || 'Pay ${amount} with crypto')\n .replace('{amount}', `${Number(this.config?.priceUsd ?? 0).toFixed(2)}`)\n .replace('{symbol}', (this.selectedSymbol || 'ICP'))\n ))}\n </button>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`\n <button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">\n ${this.errorAction}\n </button>\n ` : ''}\n </div>\n ` : ''}\n ${(() => {\n const walletsRaw = (this as any).pnp?.getEnabledWallets?.() || [];\n const wallets = buildWalletEntries(walletsRaw);\n return renderWalletSelectorModal({\n visible: !!(this.showWalletModal && this.pnp),\n wallets,\n isConnecting: false,\n onSelect: (walletId: string) => this.connectWithWallet(walletId),\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true)) ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: (this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true),\n creditCardTooltip: (() => {\n const min = 5; const amt = Number(this.config?.priceUsd || 0); if (amt > 0 && amt < min && ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true))) { const d = (min - amt).toFixed(2); return `Note: Minimum card amount is $${min}. You will pay about $${d} more.`; } return null;\n })(),\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => { this.showWalletModal = false; this.oisyReadyToPay = false; this.unlock(); }\n });\n })()}\n\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-article-paywall': ICPayArticlePaywall } }\n\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport type { CoffeeShopConfig } from '../types';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport './ui/progress-bar';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\nimport { buildWalletEntries, getWalletBalanceEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// Plug N Play will be imported dynamically when needed\nlet WalletSelect: any = null;\n\n// Debug logger utility for widget components\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-coffee-shop')\nexport class ICPayCoffeeShop extends LitElement {\n static styles = [baseStyles, css`\n .menu { display: grid; gap: 8px; margin-bottom: 12px; }\n .item { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 16px; display:flex; justify-content: space-between; align-items:center; cursor: pointer; color: var(--icpay-text); font-weight: 600; }\n .item.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n .total { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); border-radius: 12px; padding: 12px; text-align: center; margin-bottom: 12px; color: var(--icpay-text); }\n .crypto-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 12px 0 16px; }\n .crypto-option { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px 8px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; font-size: 12px; }\n .crypto-option.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n\n .error-message {\n border: 1px solid;\n font-weight: 500;\n }\n\n .error-message.info {\n background: rgba(59, 130, 246, 0.1);\n border-color: rgba(59, 130, 246, 0.3);\n color: #3b82f6;\n }\n\n .error-message.warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: rgba(245, 158, 11, 0.3);\n color: #f59e0b;\n }\n\n .error-message.error {\n background: rgba(239, 68, 68, 0.1);\n border-color: rgba(239, 68, 68, 0.3);\n color: #ef4444;\n }\n `];\n\n @property({ type: Object }) config!: CoffeeShopConfig;\n @state() private selectedIndex = 0;\n @state() private selectedSymbol: string | null = null;\n @state() private processing = false;\n // Ledger options removed; token selection comes from balances modal\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'order' | null = null;\n @state() private showWalletModal = false;\n @state() private oisyReadyToPay: boolean = false;\n @state() private lastWalletId: string | null = null;\n private pnp: any | null = null;\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n private transakMessageHandlerBound: any | null = null;\n private onrampPollTimer: number | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n private sdk: WidgetSdk | null = null;\n // Integrated balances\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: any[] = [];\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return; // Skip in SSR\n\n debugLog(this.config?.debug || false, 'Coffee shop connected', { config: this.config });\n\n if (this.config && typeof this.config.defaultItemIndex === 'number') this.selectedIndex = this.config.defaultItemIndex;\n // No ledger preload; balances flow handles token availability\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // Close wallet/balance modals once SDK transaction is created\n try {\n window.addEventListener('icpay-sdk-transaction-created', (() => {\n this.showWalletModal = false;\n this.requestUpdate();\n }) as EventListener);\n } catch {}\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config') && this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction;\n this.pendingAction = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n setTimeout(() => { if (action === 'order') this.order(); }, 0);\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n this.pendingAction = 'order';\n this.showWalletModal = true;\n this.requestUpdate();\n try {\n const amount = Number(this.selectedItem?.priceUsd || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'order', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n // Removed ledger preload\n\n private selectItem(i: number) { this.selectedIndex = i; }\n private selectSymbol(s: string) { this.selectedSymbol = s; }\n\n private get selectedItem() { return this.config?.items?.[this.selectedIndex] || { name: 'Loading...', priceUsd: 0 }; }\n\n private async order() {\n if (!isBrowser) return; // Skip in SSR\n\n if (this.processing) return;\n\n debugLog(this.config?.debug || false, 'Coffee order started', {\n selectedItem: this.selectedItem,\n selectedSymbol: this.selectedSymbol,\n useOwnWallet: this.config.useOwnWallet\n });\n\n // Clear previous errors\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'order', type: 'sendUsd', amount: this.selectedItem.priceUsd, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Check wallet connection status first\n if (this.config.useOwnWallet) {\n if (!this.config.actorProvider) {\n this.pendingAction = 'order';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return;\n }\n } else {\n // Built-in wallet handling - connect directly with Plug N Play\n if (!this.walletConnected) {\n debugLog(this.config?.debug || false, 'Connecting to wallet via Plug N Play');\n try {\n if (!WalletSelect) { const module = await import('../wallet-select'); WalletSelect = module.WalletSelect; }\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _cfg: any = wantsOisyTab ? applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) }) : ({ ...(this.config?.plugNPlay || {}) });\n if ((this.config as any)?.chainTypes) _cfg.chainTypes = (this.config as any).chainTypes;\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg);\n try {\n const principal = await detectOisySessionViaAdapter(this.pnp);\n if (principal) {\n this.walletConnected = true;\n const normalized = normalizeConnectedWallet(this.pnp, { owner: principal, principal, connected: true });\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'oisy' } })); } catch {}\n this.order();\n return;\n }\n } catch {}\n const availableWallets = this.pnp.getEnabledWallets();\n debugLog(this.config?.debug || false, 'Available wallets', availableWallets);\n if (!availableWallets?.length) throw new Error('No wallets available');\n this.pendingAction = 'order';\n this.showWalletModal = true;\n return;\n } catch (error) {\n debugLog(this.config?.debug || false, 'Wallet connection error:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return;\n }\n }\n }\n\n // Wallet is connected; proceed to token selection to initiate payment via selection handler\n this.pendingAction = 'order';\n this.showWalletModal = true;\n await this.fetchAndShowBalances();\n return;\n } catch (e) {\n // Handle errors using the new error handling system\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n\n // Update UI error state if error should be shown to user\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n this.showOnrampModal = false;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnramp() {\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const sdk = createSdk(this.config);\n const symbol = this.selectedSymbol || 'ICP';\n const resp = await (sdk as any).startOnrampUsd(this.selectedItem.priceUsd, symbol, { context: 'coffee:onramp', item: this.selectedItem.name });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.onrampErrorMessage = null;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n this.onrampSessionId = null;\n this.onrampErrorMessage = errorMessage || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n } catch (e) {\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n const sdk = createSdk(this.config);\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n try { window.addEventListener('icpay-sdk-transaction-completed', (() => handleComplete()) as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = (sdk as any).notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n this.onrampPollTimer = 1 as any;\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n const isOisy = this.lastWalletId === 'oisy';\n if (isOisy) {\n this.oisyReadyToPay = true;\n } else {\n this.showWalletModal = false;\n // Open token-balance picker after any successful wallet connect\n this.fetchAndShowBalances();\n }\n }).catch((error: any) => {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances() {\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.showBalanceModal = true;\n const sdk = createSdk(this.config);\n const { balances } = await getWalletBalanceEntries({\n sdk,\n lastWalletId: this.lastWalletId,\n connectedWallet: (this.config as any)?.connectedWallet,\n amountUsd: Number(this.selectedItem?.priceUsd ?? 0),\n chainShortcodes: (this.config as any)?.chainShortcodes,\n tokenShortcodes: (this.config as any)?.tokenShortcodes,\n });\n this.walletBalances = balances as any[];\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = async (shortcode: string) => {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n if (sel?.ledgerSymbol) this.selectedSymbol = sel.ledgerSymbol;\n if (isEvmWalletId(this.lastWalletId)) {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const targetChain = sel?.chainId;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.selectedItem?.priceUsd || 0);\n if (sel?.x402Accepts) {\n try {\n await (sdk.client as any).createPaymentX402Usd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'coffee:x402',\n item: this.selectedItem?.name\n }\n });\n this.showBalanceModal = false;\n return;\n } catch {}\n }\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n item: this.selectedItem?.name\n }\n });\n } catch {}\n this.showBalanceModal = false;\n });\n return;\n }\n this.showBalanceModal = false;\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'order') {\n // IC flow: send using tokenShortcode same as EVM\n try {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.selectedItem?.priceUsd || 0);\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'ic',\n icpay_ledger_id: sel?.ledgerId,\n item: this.selectedItem?.name\n }\n });\n } catch {}\n }\n };\n\n render() {\n if (!this.config) {\n return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n }\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\">\n ${this.config?.progressBar?.enabled !== false ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.selectedItem?.priceUsd || 0)}\n .ledgerSymbol=${this.selectedSymbol || 'ICP'}\n ></icpay-progress-bar>\n ` : null}\n <div class=\"menu\">\n ${this.config.items.map((it, i) => html`\n <div class=\"item ${this.selectedIndex===i?'selected':''}\" @click=${() => this.selectItem(i)}>\n <span>${it.name}</span>\n <span>$${Number(it?.priceUsd ?? 0).toFixed(2)}</span>\n </div>\n `)}\n </div>\n\n <div class=\"total\">Order Total: $${Number(this.selectedItem?.priceUsd ?? 0).toFixed(2)}</div>\n\n\n\n <button class=\"pay-button ${this.processing?'processing':''}\" ?disabled=${this.processing} @click=${() => this.order()}>\n ${this.processing ? 'Processing…' : `Order ${this.selectedItem.name}`}\n </button>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`\n <button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">\n ${this.errorAction}\n </button>\n ` : ''}\n </div>\n ` : ''}\n ${(() => {\n const walletsRaw = (this as any).pnp?.getEnabledWallets?.() || [];\n const wallets = (buildWalletEntries as any)(walletsRaw);\n return renderWalletSelectorModal({\n visible: !!(this.showWalletModal && this.pnp),\n wallets,\n isConnecting: false,\n onSwitchAccount: () => this.onSwitchAccount(null),\n onSelect: (walletId: string) => this.connectWithWallet(walletId),\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true)) ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: (this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true),\n creditCardTooltip: (() => {\n const min = 5; const i = this.config?.defaultItemIndex ?? 0; const amt = Number((this.config?.items?.[i]?.priceUsd) || 0); if (amt > 0 && amt < min && ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true))) { const d = (min - amt).toFixed(2); return `Note: Minimum card amount is $${min}. You will pay about $${d} more.`; } return null;\n })(),\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => { this.showWalletModal = false; this.oisyReadyToPay = false; this.order(); }\n });\n })()}\n\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances as any,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-coffee-shop': ICPayCoffeeShop } }\n\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport { buildWalletEntries } from '../utils/balances';\nimport type { DonationThermometerConfig } from '../types';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport './ui/progress-bar';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\nimport { getWalletBalanceEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== 'undefined';\n\n// Plug N Play will be imported dynamically when needed\nlet WalletSelect: any = null;\n\n// Debug logger utility for widget components\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-donation-thermometer')\nexport class ICPayDonationThermometer extends LitElement {\n static styles = [baseStyles, css`\n .thermo { width: 60px; height: 200px; background: var(--icpay-surface-alt); border: 3px solid #6b7280; border-radius: 30px; margin: 0 auto 12px; position: relative; overflow: hidden; }\n .fill { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(135deg, #d1d5db 0%, #9ca3af 100%); transition: height 0.8s ease; height: 0%; border-radius: 0 0 27px 27px; }\n .amounts { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; margin: 12px 0; }\n .chip { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; }\n .chip.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n .crypto-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 12px 0 16px; }\n .crypto-option { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px 8px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; font-size: 12px; }\n .crypto-option.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }\n\n .error-message {\n border: 1px solid;\n font-weight: 500;\n }\n\n .error-message.info {\n background: rgba(59, 130, 246, 0.1);\n border-color: rgba(59, 130, 246, 0.3);\n color: #3b82f6;\n }\n\n .error-message.warning {\n background: rgba(245, 158, 11, 0.1);\n border-color: rgba(245, 158, 11, 0.3);\n color: #f59e0b;\n }\n\n .error-message.error {\n background: rgba(239, 68, 68, 0.1);\n border-color: rgba(239, 68, 68, 0.3);\n color: #ef4444;\n }\n `];\n\n @property({ type: Object }) config!: DonationThermometerConfig;\n @state() private selectedAmount = 10;\n @state() private selectedSymbol: string | null = null;\n @state() private raised = 0;\n @state() private processing = false;\n @state() private succeeded = false;\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'donate' | null = null;\n @state() private showWalletModal = false;\n @state() private oisyReadyToPay: boolean = false;\n @state() private lastWalletId: string | null = null;\n private pnp: any | null = null;\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n private transakMessageHandlerBound: any | null = null;\n private onrampPollTimer: number | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n private sdk: WidgetSdk | null = null;\n // Integrated balances\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: any[] = [];\n private async tryAutoConnectPNP() {\n try {\n if (!this.config || this.config?.useOwnWallet) return;\n const raw = localStorage.getItem('icpay:pnp');\n if (!raw) return;\n const saved = JSON.parse(raw);\n if (!saved?.provider || !saved?.principal) return;\n if (!WalletSelect) {\n const module = await import('../wallet-select');\n WalletSelect = module.WalletSelect;\n }\n const _cfg1: any = applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) });\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg1.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n const pnp = new WalletSelect(_cfg1);\n // Hydrate saved principal for UI/history; require connect on pay\n this.walletConnected = false;\n this.config = {\n ...this.config,\n connectedWallet: { owner: saved.principal, principal: saved.principal, connected: false } as any\n };\n } catch {}\n }\n\n private get amounts(): number[] {\n return this.config?.amountsUsd || [10, 25, 50, 100, 250, 500];\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return; // Skip in SSR\n\n debugLog(this.config?.debug || false, 'Donation thermometer connected', { config: this.config });\n\n if (this.config && typeof this.config.defaultAmountUsd === 'number') this.selectedAmount = this.config.defaultAmountUsd;\n this.tryAutoConnectPNP();\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // Close wallet modal after SDK transaction created\n try {\n window.addEventListener('icpay-sdk-transaction-created', (() => {\n this.showWalletModal = false;\n this.requestUpdate();\n }) as EventListener);\n } catch {}\n // No ledger preload; balances flow handles token availability\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config') && this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction;\n this.pendingAction = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n setTimeout(() => { if (action === 'donate') this.donate(); }, 0);\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n this.pendingAction = 'donate';\n this.showWalletModal = true;\n this.requestUpdate();\n try {\n const amount = Number(this.selectedAmount || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'donate', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n // Removed ledger preload\n\n private selectAmount(v: number) { this.selectedAmount = v; }\n private selectSymbol(s: string) { this.selectedSymbol = s; }\n\n private get fillPercentage() {\n const goal = Number(this.config?.goalUsd ?? 1000);\n const denom = goal > 0 ? goal : 1000;\n return Math.min((this.raised / denom) * 100, 100);\n }\n\n private async donate() {\n if (!isBrowser) return; // Skip in SSR\n\n if (this.processing) return;\n\n debugLog(this.config?.debug || false, 'Donation started', {\n amount: this.selectedAmount,\n selectedSymbol: this.selectedSymbol,\n useOwnWallet: this.config.useOwnWallet\n });\n\n // Clear previous errors\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'donate', type: 'sendUsd', amount: this.selectedAmount, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Check wallet connection status first\n if (this.config.useOwnWallet) {\n if (!this.config.actorProvider) {\n this.pendingAction = 'donate';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return;\n }\n } else {\n // Built-in wallet handling - connect directly with Plug N Play\n if (!this.walletConnected) {\n debugLog(this.config?.debug || false, 'Connecting to wallet via Plug N Play');\n try {\n if (!WalletSelect) { const module = await import('../wallet-select'); WalletSelect = module.WalletSelect; }\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _cfg2: any = wantsOisyTab ? applyOisyNewTabConfig({ ...(this.config?.plugNPlay || {}) }) : ({ ...(this.config?.plugNPlay || {}) });\n if ((this.config as any)?.chainTypes) _cfg2.chainTypes = (this.config as any).chainTypes;\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg2.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg2);\n try {\n const principal = await detectOisySessionViaAdapter(this.pnp);\n if (principal) {\n this.walletConnected = true;\n const normalized = normalizeConnectedWallet(this.pnp, { owner: principal, principal, connected: true });\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'oisy' } })); } catch {}\n this.donate();\n return;\n }\n } catch {}\n const availableWallets = this.pnp.getEnabledWallets();\n debugLog(this.config?.debug || false, 'Available wallets', availableWallets);\n if (!availableWallets?.length) throw new Error('No wallets available');\n this.pendingAction = 'donate';\n this.showWalletModal = true;\n return;\n } catch (error) {\n debugLog(this.config?.debug || false, 'Wallet connection error:', error);\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return;\n }\n }\n }\n\n // Wallet is connected; proceed to token selection to initiate payment via selection handler\n this.showWalletModal = true;\n await this.fetchAndShowBalances();\n return;\n } catch (e) {\n // Handle errors using the new error handling system\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n\n // Update UI error state if error should be shown to user\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n this.showOnrampModal = false;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnramp() {\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const sdk = createSdk(this.config);\n const symbol = this.selectedSymbol || 'ICP';\n const resp = await (sdk as any).startOnrampUsd(this.selectedAmount, symbol, { context: 'donation:onramp' });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.onrampErrorMessage = null;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n this.onrampSessionId = null;\n this.onrampErrorMessage = errorMessage || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n } catch (e) {\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n const sdk = createSdk(this.config);\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n try { window.addEventListener('icpay-sdk-transaction-completed', (() => handleComplete()) as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = (sdk as any).notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n this.onrampPollTimer = 1 as any;\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n const isOisy = this.lastWalletId === 'oisy';\n if (isOisy) {\n this.oisyReadyToPay = true;\n } else {\n this.showWalletModal = false;\n this.fetchAndShowBalances();\n }\n }).catch((error: any) => {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances() {\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.showBalanceModal = true;\n const sdk = createSdk(this.config);\n const { balances } = await getWalletBalanceEntries({\n sdk,\n lastWalletId: this.lastWalletId,\n connectedWallet: (this.config as any)?.connectedWallet,\n amountUsd: Number(this.selectedAmount || 0),\n chainShortcodes: (this.config as any)?.chainShortcodes,\n tokenShortcodes: (this.config as any)?.tokenShortcodes,\n });\n this.walletBalances = balances as any[];\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = async (shortcode: string) => {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n if (sel?.ledgerSymbol) this.selectedSymbol = sel.ledgerSymbol;\n if (isEvmWalletId(this.lastWalletId)) {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const targetChain = sel?.chainId;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.selectedAmount || 0);\n if (sel?.x402Accepts) {\n try {\n await (sdk.client as any).createPaymentX402Usd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'donation:x402'\n }\n });\n this.showBalanceModal = false;\n return;\n } catch {}\n }\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n this.showBalanceModal = false;\n });\n return;\n }\n this.showBalanceModal = false;\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'donate') {\n // IC flow: send using tokenShortcode same as EVM\n try {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.selectedAmount || 0);\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'ic',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n }\n };\n\n render() {\n if (!this.config) {\n return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n }\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\" style=\"text-align:center;\">\n ${this.config?.progressBar?.enabled !== false ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.selectedAmount || 0)}\n .ledgerSymbol=${this.selectedSymbol || 'ICP'}\n ></icpay-progress-bar>\n ` : null}\n <div class=\"thermo\"><div class=\"fill\" style=\"height:${this.fillPercentage}%\"></div></div>\n <div class=\"total\">$${Number(this.raised).toFixed(0)} / $${Number(this.config?.goalUsd ?? 0).toFixed(2)}</div>\n\n <div class=\"amounts\">\n ${this.amounts.map(a => html`<div class=\"chip ${this.selectedAmount===a?'selected':''}\" @click=${() => this.selectAmount(a)}>$${a}</div>`)}\n </div>\n\n\n\n <button class=\"pay-button ${this.processing?'processing':''}\"\n ?disabled=${this.processing || (this.config?.disablePaymentButton === true) || (this.succeeded && this.config?.disableAfterSuccess === true)}\n @click=${() => this.donate()}>\n ${this.succeeded && this.config?.disableAfterSuccess ? 'Donated' : (this.processing ? 'Processing…' : (\n (this.config?.buttonLabel || 'Donate {amount} with crypto')\n .replace('{amount}', `${this.selectedAmount}`)\n .replace('{symbol}', (this.selectedSymbol || 'ICP'))\n ))}\n </button>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`\n <button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">\n ${this.errorAction}\n </button>\n ` : ''}\n </div>\n ` : ''}\n ${(() => {\n const walletsRaw = (this as any).pnp?.getEnabledWallets?.() || [];\n const wallets = (buildWalletEntries as any)(walletsRaw);\n return renderWalletSelectorModal({\n visible: !!(this.showWalletModal && this.pnp),\n wallets,\n isConnecting: false,\n onSwitchAccount: () => this.onSwitchAccount(null),\n onSelect: (walletId: string) => this.connectWithWallet(walletId),\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: (this.config?.onramp?.enabled !== false) ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: (this.config?.onramp?.enabled !== false),\n creditCardTooltip: (() => {\n const min = 5; const amt = Number(this.selectedAmount || this.config?.defaultAmountUsd || 0); if (amt > 0 && amt < min && (this.config?.onramp?.enabled !== false)) { const d = (min - amt).toFixed(2); return `Note: Minimum card amount is $${min}. You will pay about $${d} more.`; } return null;\n })(),\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => { this.showWalletModal = false; this.oisyReadyToPay = false; this.donate(); }\n });\n })()}\n\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances as any,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-donation-thermometer': ICPayDonationThermometer } }\n\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport type { PayButtonConfig } from '../types';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport './ui/progress-bar';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { getWalletBalanceEntries, buildWalletEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport type { WalletBalanceEntry } from '../utils/balances';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\nimport { clientSupportsX402 } from '../utils/x402';\n\nconst isBrowser = typeof window !== 'undefined';\nlet WalletSelect: any = null;\n\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-pay-button')\nexport class ICPayPayButton extends LitElement {\n static styles = [baseStyles, css`\n .row { display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: center; }\n .row.single { grid-template-columns: 1fr; }\n select { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; }\n .error-message { border: 1px solid; font-weight: 500; }\n .error-message.info { background: rgba(59,130,246,0.1); border-color: rgba(59,130,246,0.3); color: #3b82f6; }\n .error-message.warning { background: rgba(245,158,11,0.1); border-color: rgba(245,158,11,0.3); color: #f59e0b; }\n .error-message.error { background: rgba(239,68,68,0.1); border-color: rgba(239,68,68,0.3); color: #ef4444; }\n `];\n\n @property({ type: Object }) config!: PayButtonConfig;\n @state() private selectedSymbol: string | null = null;\n @state() private processing = false;\n @state() private succeeded = false;\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'pay' | null = null;\n @state() private showWalletModal = false;\n @state() private walletModalStep: 'connect' | 'balances' = 'connect';\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n @state() private oisyReadyToPay: boolean = false;\n @state() private oisySignerPreopened: boolean = false;\n @state() private skipDisconnectOnce: boolean = false;\n @state() private lastWalletId: string | null = null;\n // Post-connect token selection\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: WalletBalanceEntry[] = [];\n private onrampPollTimer: number | null = null;\n private transakMessageHandlerBound: any | null = null;\n private pnp: any | null = null;\n private oisyConnectRetriedNewTab: boolean = false;\n private sdk: WidgetSdk | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n\n private getSdk(): WidgetSdk {\n if (!this.sdk) {\n this.sdk = createSdk(this.config);\n }\n return this.sdk;\n }\n\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return;\n debugLog(this.config?.debug || false, 'Pay button connected', { config: this.config });\n // No ledger preload; balances flow handles token availability\n // selectedSymbol will be set from balance selection flow\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // Observe SDK intent creation event: ensure balance/wallet modals close so progress is visible\n try {\n window.addEventListener('icpay-sdk-transaction-created', ((e: any) => {\n debugLog(this.config?.debug || false, 'SDK transaction created', { detail: e?.detail });\n this.showWalletModal = false;\n this.showBalanceModal = false;\n this.requestUpdate();\n }) as EventListener);\n } catch {}\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config') && this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction as 'pay';\n // Always emit wallet-connected for progress bar\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n // Do NOT auto-continue to pay if we're in balances step (waiting for user to pick a token)\n // or if Oisy single-CTA mode is active. Defer until user confirms.\n if (this.walletModalStep !== 'balances' && !this.oisyReadyToPay) {\n this.pendingAction = null;\n setTimeout(() => { if (action === 'pay') this.pay(); }, 0);\n }\n }\n // No longer pull sessionId from config; it is obtained from SDK response\n if (changed.has('config')) {\n // Recreate SDK on config changes\n this.sdk = null;\n // selectedSymbol kept until user picks a token\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n this.pendingAction = 'pay';\n this.walletModalStep = 'connect';\n this.showWalletModal = true;\n this.oisyReadyToPay = false;\n this.lastWalletId = null;\n this.requestUpdate();\n try {\n const amount = Number(this.config?.amountUsd || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'pay', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n // Removed ledger preload\n\n private selectSymbol(symbol: string) { this.selectedSymbol = symbol; }\n\n private async ensureWallet(): Promise<boolean> {\n if (this.config.useOwnWallet) {\n if (!this.config.actorProvider) {\n this.pendingAction = 'pay';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return false;\n }\n return true;\n }\n\n if (this.walletConnected) return true;\n try {\n if (!WalletSelect) {\n const module = await import('../wallet-select');\n WalletSelect = module.WalletSelect;\n }\n // Optional: open Oisy in a new tab if explicitly enabled\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _rawCfg: any = { ...(this.config?.plugNPlay || {}) };\n // Pass chainTypes to wallet selector to filter wallets\n if ((this.config as any)?.chainTypes) _rawCfg.chainTypes = (this.config as any).chainTypes;\n const _cfg: any = wantsOisyTab ? applyOisyNewTabConfig(_rawCfg) : _rawCfg;\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg);\n const availableWallets = this.pnp.getEnabledWallets();\n debugLog(this.config?.debug || false, 'Available wallets', availableWallets);\n if (!availableWallets?.length) throw new Error('No wallets available');\n // Show chooser modal and resume later\n this.pendingAction = 'pay';\n this.showWalletModal = true;\n return false;\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return false;\n }\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n if (this.lastWalletId === 'oisy') this.oisyConnectRetriedNewTab = false;\n // Minimal: connect immediately within click (no pre-open or detection)\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n debugLog(this.config?.debug || false, 'Wallet connect result', result);\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n // Keep wallet modal open; advance to balances step and load balances inside it\n this.walletModalStep = 'balances';\n this.fetchAndShowBalances('pay');\n }).catch((error: any) => {\n debugLog(this.config?.debug || false, 'Wallet connection error', error);\n const isOisy = (walletId || '').toLowerCase() === 'oisy';\n const message = (error && (error.message || String(error))) || '';\n const blocked = isOisy && (!this.oisyConnectRetriedNewTab) && (message.includes('Signer window could not be opened') || message.includes('Communication channel could not be established'));\n if (blocked) {\n // Retry Oisy connect by forcing new-tab transport\n this.oisyConnectRetriedNewTab = true;\n (async () => {\n try {\n if (!WalletSelect) { const module = await import('../wallet-select'); WalletSelect = module.WalletSelect; }\n const raw: any = { ...(this.config?.plugNPlay || {}) };\n if ((this.config as any)?.chainTypes) raw.chainTypes = (this.config as any).chainTypes;\n const cfg: any = applyOisyNewTabConfig(raw);\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n cfg.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(cfg);\n const retry = this.pnp.connect('oisy');\n retry.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'oisy' } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n // Advance directly to balances like Plug (IC)\n this.walletModalStep = 'balances';\n this.fetchAndShowBalances('pay');\n }).catch((err2: any) => {\n debugLog(this.config?.debug || false, 'Oisy retry connect (new tab) failed', err2);\n this.errorMessage = err2 instanceof Error ? err2.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (initErr) {\n debugLog(this.config?.debug || false, 'Oisy new-tab init failed', initErr);\n this.errorMessage = initErr instanceof Error ? initErr.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n })();\n return;\n }\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n debugLog(this.config?.debug || false, 'Wallet connection error (sync)', error);\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances(action: 'pay') {\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.walletModalStep = 'balances';\n this.showBalanceModal = false; // integrated flow uses wallet modal\n const sdk = this.getSdk();\n const { balances } = await getWalletBalanceEntries({\n sdk,\n lastWalletId: this.lastWalletId,\n connectedWallet: (this.config as any)?.connectedWallet,\n amountUsd: Number(this.config?.amountUsd ?? 0),\n chainShortcodes: (this.config as any)?.chainShortcodes,\n tokenShortcodes: (this.config as any)?.tokenShortcodes,\n });\n this.walletBalances = balances as WalletBalanceEntry[];\n this.pendingAction = action;\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = async (shortcode: string) => {\n // Resolve selection by tokenShortcode; set selectedSymbol from entry for UI\n const sel = (this.walletBalances || []).find(b => (b as any)?.tokenShortcode === shortcode);\n if (sel?.ledgerSymbol) this.selectedSymbol = sel.ledgerSymbol;\n\n // Close wallet modal before starting progress to reveal progress bar\n this.showBalanceModal = false;\n this.showWalletModal = false;\n\n // If EVM wallet, ensure correct network first, then emit EVM payment start\n if (isEvmWalletId(this.lastWalletId)) {\n debugLog(this.config?.debug || false, 'EVM selection made', {\n selectedSymbol: this.selectedSymbol,\n selPresent: !!sel,\n selSnapshot: sel ? {\n ledgerId: (sel as any)?.ledgerId,\n ledgerSymbol: (sel as any)?.ledgerSymbol,\n ledgerName: (sel as any)?.ledgerName,\n chainUuid: (sel as any)?.chainUuid,\n chainId: (sel as any)?.chainId,\n chainName: (sel as any)?.chainName,\n x402Accepts: (sel as any)?.x402Accepts,\n requiredAmount: (sel as any)?.requiredAmount,\n hasSufficientBalance: (sel as any)?.hasSufficientBalance,\n } : null,\n });\n const targetChain = sel?.chainId;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = this.getSdk();\n const amountUsd = Number(this.config?.amountUsd ?? 0);\n const symbolNow = sel?.ledgerSymbol;\n const tryX402 = Boolean(sel && sel.x402Accepts);\n debugLog(this.config?.debug || false, 'EVM post-ensure chain snapshot', {\n targetChain,\n amountUsd,\n symbolNow,\n tryX402,\n x402Accepts: sel?.x402Accepts,\n });\n if (tryX402) {\n try {\n const metadata = {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'pay-button:x402'\n };\n debugLog(this.config?.debug || false, 'Attempting X402 flow (EVM selection)', { amountUsd, tokenShortcode: sel?.tokenShortcode, x402Accepts: sel?.x402Accepts });\n await (sdk.client as any).createPaymentX402Usd({ usdAmount: amountUsd, tokenShortcode: (sel as any)?.tokenShortcode, metadata });\n return;\n } catch (x402Err: any) {\n debugLog(this.config?.debug || false, 'X402 payment failed (EVM selection), falling back', {\n message: x402Err?.message, code: x402Err?.code, data: x402Err?.details || x402Err?.data\n });\n }\n } else {\n debugLog(this.config?.debug || false, 'Skipping X402 path', {\n reason: sel ? (sel.x402Accepts ? 'unknown' : 'x402Accepts false') : 'no selection',\n selPresent: !!sel,\n x402Accepts: sel?.x402Accepts,\n });\n }\n // Normal wallet flow (native or non-x402 token)\n debugLog(this.config?.debug || false, 'Falling back to normal EVM wallet flow', {\n amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n });\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n });\n return;\n }\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'pay') {\n // IC flow: send using tokenShortcode same as EVM\n try {\n const sel = (this.walletBalances || []).find(b => (b as any)?.tokenShortcode === shortcode);\n const sdk = this.getSdk();\n const amountUsd = Number(this.config?.amountUsd ?? 0);\n debugLog(this.config?.debug || false, 'IC selection made', {\n selectedSymbol: this.selectedSymbol,\n selPresent: !!sel,\n selSnapshot: sel ? {\n ledgerId: (sel as any)?.ledgerId,\n ledgerSymbol: (sel as any)?.ledgerSymbol,\n ledgerName: (sel as any)?.ledgerName,\n requiredAmount: (sel as any)?.requiredAmount,\n hasSufficientBalance: (sel as any)?.hasSufficientBalance,\n tokenShortcode: (sel as any)?.tokenShortcode,\n } : null,\n });\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'ic',\n icpay_ledger_id: (sel as any)?.ledgerId\n }\n });\n } catch {}\n }\n };\n\n private renderWalletModal() {\n if (!this.showWalletModal || !this.pnp) return null as any;\n const walletsRaw = this.pnp.getEnabledWallets() || [];\n const wallets = buildWalletEntries(walletsRaw);\n const onrampEnabled = (this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true);\n const minOnramp = 5;\n const amountUsd = Number(this.config?.amountUsd ?? 0);\n const showTooltip = onrampEnabled && amountUsd > 0 && amountUsd < minOnramp;\n const diff = Math.max(0, minOnramp - amountUsd);\n const tooltip = showTooltip ? `Note: Minimum card amount is $${minOnramp}. You will pay about $${diff.toFixed(2)} more.` : null;\n return renderWalletSelectorModal({\n visible: this.showWalletModal,\n wallets,\n isConnecting: false,\n onSwitchAccount: () => this.onSwitchAccount(null),\n step: this.walletModalStep,\n balances: this.walletModalStep === 'balances' ? (this.walletBalances || []) : [],\n balancesLoading: this.walletModalStep === 'balances' ? this.balancesLoading : false,\n balancesError: this.walletModalStep === 'balances' ? this.balancesError : null,\n onSelectBalance: (s: string) => this.onSelectBalanceSymbol(s),\n onBack: () => { this.walletModalStep = 'connect'; },\n onSelect: (walletId: string) => {\n // Ensure any signer window/channel establishment happens directly in this click handler\n this.connectWithWallet(walletId);\n },\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: onrampEnabled ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: onrampEnabled,\n creditCardTooltip: tooltip,\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => {\n this.showWalletModal = false; // Close modal so progress bar can proceed\n this.skipDisconnectOnce = true;\n this.oisyReadyToPay = false;\n this.pay(); // Trigger pay within same user gesture\n }\n });\n }\n\n private startOnramp() {\n // Signal to progress bar that onramp flow is starting\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n // Kick off onramp intent creation through SDK and open Transak with returned sessionId\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const amountUsd = Number(this.config?.amountUsd ?? 0);\n const sdk = this.getSdk();\n if (!this.selectedSymbol) this.selectedSymbol = 'ICP';\n const symbol = this.selectedSymbol || 'ICP';\n const resp = await sdk.startOnrampUsd(amountUsd, symbol, { context: 'pay-button:onramp' });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampErrorMessage = errorMessage || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n // Open modal in friendly error state (sessionId missing)\n this.onrampSessionId = null;\n this.showOnrampModal = true;\n }\n } catch (e) {\n // Also show friendly error modal on any error\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || null;\n this.showOnrampModal = true;\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n }\n }\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n\n // Only react to Transak order success\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n // Prevent multiple pollers if provider emits duplicates\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n // Complete steps up to verify and set confirm to loading by emitting method success events the progress bar understands\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-success', { detail: { name: 'getLedgerBalance' } })); } catch {}\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-success', { detail: { name: 'sendFundsToLedger' } })); } catch {}\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-success', { detail: { name: 'notifyLedgerTransaction' } })); } catch {}\n\n // Close Transak modal upon success, continue with our own progress\n this.showOnrampModal = false;\n\n // Start polling our API for intent status\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n // Clear any previous polling\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n\n const sdk = this.getSdk();\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n // Also listen to completion event to tidy up\n const listener = (e: any) => { handleComplete(); };\n try { window.addEventListener('icpay-sdk-transaction-completed', listener as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = sdk.notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n // Store a no-op timer id placeholder so our cleanup path remains intact\n this.onrampPollTimer = 1 as any;\n }\n\n private async pay() {\n if (!isBrowser || this.processing) return;\n\n // Reset error state\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n // Emit method start to open progress modal and set first step\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'pay', type: 'sendUsd', amount: this.config?.amountUsd, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Disconnect current built-in wallet before new payment attempt unless we just connected\n if (!this.skipDisconnectOnce) {\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } else {\n this.skipDisconnectOnce = false;\n }\n const ready = await this.ensureWallet();\n if (!ready) return;\n\n const sdk = this.getSdk();\n // Debug: snapshot wallet state before resolving canister and sending\n try {\n const cw = (this.config as any)?.connectedWallet;\n const pnpAcct = (this as any)?.pnp?.account;\n debugLog(this.config?.debug || false, 'Wallet state before payment', {\n connectedWallet: cw,\n pnpAccount: pnpAcct,\n principal: (cw?.owner || cw?.principal || pnpAcct?.owner || pnpAcct?.principal || null)\n });\n } catch {}\n // Always proceed to balances selection modal; selection handler will create the payment\n this.walletModalStep = 'balances';\n this.showWalletModal = true;\n await this.fetchAndShowBalances('pay');\n return;\n } catch (e) {\n debugLog(this.config?.debug || false, 'Payment error', {\n message: (e as any)?.message,\n code: (e as any)?.code,\n details: (e as any)?.details,\n stack: (e as any)?.stack\n });\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n render() {\n if (!this.config) return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n\n const selectedSymbol = this.selectedSymbol || 'ICP';\n const amountPart = typeof this.config?.amountUsd === 'number' ? `${Number(this.config.amountUsd).toFixed(2)}` : '';\n const rawLabel = this.config?.buttonLabel || (typeof this.config?.amountUsd === 'number' ? 'Pay ${amount} with crypto' : 'Pay with {symbol}');\n const label = rawLabel.replace('{amount}', amountPart || '$0.00').replace('{symbol}', selectedSymbol);\n const progressEnabled = this.config?.progressBar?.enabled !== false;\n const showProgressBar = progressEnabled;\n const suspendProgress = this.showWalletModal || this.showBalanceModal;\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\">\n ${showProgressBar ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.config?.amountUsd || 0)}\n .ledgerSymbol=${selectedSymbol}\n .suspended=${suspendProgress}\n ></icpay-progress-bar>\n ` : null}\n\n <div class=\"row single\">\n <button class=\"pay-button ${this.processing?'processing':''}\"\n ?disabled=${this.processing || (this.config?.disablePaymentButton === true) || (this.succeeded && this.config?.disableAfterSuccess === true)}\n @click=${() => this.pay()}>\n ${this.succeeded && this.config?.disableAfterSuccess ? 'Paid' : (this.processing ? 'Processing…' : label)}\n </button>\n </div>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`<button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">${this.errorAction}</button>` : ''}\n </div>\n ` : ''}\n ${this.renderWalletModal()}\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n apiUrl: this.config?.apiUrl,\n paymentIntentId: this.onrampPaymentIntentId,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-pay-button': ICPayPayButton } }\n\n\n","import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { baseStyles } from '../styles';\nimport { handleWidgetError, getErrorMessage, shouldShowErrorToUser, getErrorAction, getErrorSeverity, ErrorSeverity } from '../error-handling';\nimport type { AmountInputConfig } from '../types';\nimport { createSdk } from '../utils/sdk';\nimport type { WidgetSdk } from '../utils/sdk';\nimport { buildWalletEntries } from '../utils/balances';\nimport './ui/progress-bar';\nimport { getWalletBalanceEntries, isEvmWalletId, ensureEvmChain } from '../utils/balances';\nimport { renderWalletBalanceModal } from './ui/wallet-balance-modal';\nimport { renderWalletSelectorModal } from './ui/wallet-selector-modal';\nimport { renderTransakOnrampModal, TransakOnrampOptions } from './ui/transak-onramp-modal';\nimport { applyOisyNewTabConfig, normalizeConnectedWallet, detectOisySessionViaAdapter } from '../utils/pnp';\nimport { clientSupportsX402 } from '../utils/x402';\n\nconst isBrowser = typeof window !== 'undefined';\nlet WalletSelect: any = null;\n\nfunction debugLog(debug: boolean, message: string, data?: any): void {\n if (debug) {\n if (data !== undefined) {\n console.log(`[ICPay Widget] ${message}`, data);\n } else {\n console.log(`[ICPay Widget] ${message}`);\n }\n }\n}\n\n@customElement('icpay-amount-input')\nexport class ICPayAmountInput extends LitElement {\n static styles = [baseStyles, css`\n .row { display: grid; grid-template-columns: 1fr; gap: 12px; align-items: stretch; }\n .top-row { display: grid; grid-template-columns: 1fr; gap: 10px; align-items: center; }\n .top-row.with-selector { grid-template-columns: 1fr 2fr; }\n icpay-token-selector { width: 100%; }\n .amount-field { position: relative; width: 100%; }\n .amount-field .currency-prefix { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--icpay-muted, #a3a3a3); font-weight: 600; pointer-events: none; z-index: 2; }\n .amount-field input[type=\"number\"] { padding-left: 32px; position: relative; z-index: 1; }\n input[type=\"number\"] { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; width: 100%; box-sizing: border-box; height: 54px; }\n select { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; }\n .pay-button { width: 100%; }\n .error-message { border: 1px solid; font-weight: 500; }\n .error-message.info { background: rgba(59,130,246,0.1); border-color: rgba(59,130,246,0.3); color: #3b82f6; }\n .error-message.warning { background: rgba(245,158,11,0.1); border-color: rgba(245,158,11,0.3); color: #f59e0b; }\n .error-message.error { background: rgba(239,68,68,0.1); border-color: rgba(239,68,68,0.3); color: #ef4444; }\n .hint { font-size: 12px; color: var(--icpay-muted); margin-top: 6px; }\n\n @media (max-width: 520px) {\n .top-row { grid-template-columns: 1fr; }\n }\n `];\n\n @property({ type: Object }) config!: AmountInputConfig;\n @state() private amountUsd: number = 0;\n @state() private hasUserAmount: boolean = false;\n @state() private selectedSymbol: string | null = null;\n @state() private processing = false;\n @state() private succeeded = false;\n @state() private errorMessage: string | null = null;\n @state() private errorSeverity: ErrorSeverity | null = null;\n @state() private errorAction: string | null = null;\n @state() private walletConnected = false;\n @state() private pendingAction: 'pay' | null = null;\n @state() private showWalletModal = false;\n @state() private showOnrampModal = false;\n @state() private onrampSessionId: string | null = null;\n @state() private onrampPaymentIntentId: string | null = null;\n @state() private onrampErrorMessage: string | null = null;\n @state() private oisyReadyToPay: boolean = false;\n @state() private lastWalletId: string | null = null;\n private pnp: any | null = null;\n private transakMessageHandlerBound: any | null = null;\n private onrampPollTimer: number | null = null;\n private onrampPollingActive: boolean = false;\n private onrampNotifyController: { stop: () => void } | null = null;\n // Integrated balances\n @state() private showBalanceModal = false;\n @state() private balancesLoading = false;\n @state() private balancesError: string | null = null;\n @state() private walletBalances: any[] = [];\n private sdk: WidgetSdk | null = null;\n\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!isBrowser) return;\n debugLog(this.config?.debug || false, 'Amount input connected', { config: this.config });\n this.amountUsd = Number(this.config?.defaultAmountUsd ?? 0);\n this.hasUserAmount = false;\n // No ledger preload; balances flow handles token availability\n // selectedSymbol will be set after balance selection\n try { window.addEventListener('icpay-switch-account', this.onSwitchAccount as EventListener); } catch {}\n // Close any wallet/balance modals once an SDK transaction is created\n try {\n window.addEventListener('icpay-sdk-transaction-created', (() => {\n this.showWalletModal = false;\n this.requestUpdate();\n }) as EventListener);\n } catch {}\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('config')) {\n // Apply defaults only if user hasn't edited the amount\n if (!this.hasUserAmount && typeof this.config?.defaultAmountUsd === 'number') {\n if (this.amountUsd === 0 || this.amountUsd == null || Number.isNaN(this.amountUsd)) {\n this.amountUsd = Number(this.config.defaultAmountUsd);\n }\n }\n // No ledger preload\n\n // If we were waiting on wallet connect, resume action\n if (this.pendingAction && this.config?.actorProvider) {\n const action = this.pendingAction;\n this.pendingAction = null;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: 'external' } })); } catch {}\n setTimeout(() => { if (action === 'pay') this.pay(); }, 0);\n }\n }\n }\n\n private onSwitchAccount = async (e: any) => {\n try {\n if (this.pnp) {\n try { await this.pnp.disconnect(); } catch {}\n }\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n this.pendingAction = 'pay';\n this.showWalletModal = true;\n this.requestUpdate();\n try {\n const amount = Number(this.amountUsd || 0);\n const curr = this.selectedSymbol || 'ICP';\n window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'pay', type: 'sendUsd', amount, currency: curr } }));\n } catch {}\n } catch {}\n };\n\n // Removed ledger preload\n\n private onInputChange(e: any) {\n const step = Number(this.config?.stepUsd ?? 0.5);\n const value = Math.max(0, Number(e.target.value || 0));\n const rounded = Math.round(value / step) * step;\n this.amountUsd = Number(rounded.toFixed(2));\n this.hasUserAmount = true;\n }\n\n private selectSymbol(symbol: string) { this.selectedSymbol = symbol; }\n\n private isValidAmount(): boolean {\n const min = Number(this.config?.minUsd ?? 0.5);\n const max = this.config?.maxUsd !== undefined ? Number(this.config.maxUsd) : Infinity;\n return this.amountUsd >= min && this.amountUsd <= max;\n }\n\n private async ensureWallet(): Promise<boolean> {\n if (this.config.useOwnWallet) {\n if (!this.config.actorProvider) {\n this.pendingAction = 'pay';\n this.dispatchEvent(new CustomEvent('icpay-connect-wallet', { bubbles: true }));\n return false;\n }\n return true;\n }\n\n if (this.walletConnected) return true;\n try {\n if (!WalletSelect) {\n const module = await import('../wallet-select');\n WalletSelect = module.WalletSelect;\n }\n const wantsOisyTab = !!((this.config as any)?.openOisyInNewTab || (this.config as any)?.plugNPlay?.openOisyInNewTab);\n const _rawCfg: any = { ...(this.config?.plugNPlay || {}) };\n if ((this.config as any)?.chainTypes) _rawCfg.chainTypes = (this.config as any).chainTypes;\n const _cfg: any = wantsOisyTab ? applyOisyNewTabConfig(_rawCfg) : _rawCfg;\n try {\n if (typeof window !== 'undefined') {\n const { resolveDerivationOrigin } = await import('../utils/origin');\n _cfg.derivationOrigin = this.config?.derivationOrigin || resolveDerivationOrigin();\n }\n } catch {}\n this.pnp = new WalletSelect(_cfg);\n const availableWallets = this.pnp.getEnabledWallets();\n if (!availableWallets?.length) throw new Error('No wallets available');\n this.pendingAction = 'pay';\n this.showWalletModal = true;\n return false;\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n return false;\n }\n }\n\n private getWalletId(w: any): string { return (w && (w.id || w.provider || w.key)) || ''; }\n private getWalletLabel(w: any): string { return (w && (w.label || w.name || w.title || w.id)) || 'Wallet'; }\n private getWalletIcon(w: any): string | null { return (w && (w.icon || w.logo || w.image)) || null; }\n\n\n private connectWithWallet(walletId: string) {\n if (!this.pnp) return;\n try {\n if (!walletId) throw new Error('No wallet ID provided');\n this.lastWalletId = (walletId || '').toLowerCase();\n const promise = this.pnp.connect(walletId);\n promise.then((result: any) => {\n const isConnected = !!(result && (result.connected === true || (result as any).principal || (result as any).owner || this.pnp?.account));\n if (!isConnected) throw new Error('Wallet connection was rejected');\n this.walletConnected = true;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-connected', { detail: { walletType: walletId } })); } catch {}\n const normalized = normalizeConnectedWallet(this.pnp, result);\n const evmProvider = (this.pnp as any)?.getEvmProvider?.();\n this.config = { ...this.config, connectedWallet: normalized, actorProvider: (canisterId: string, idl: any) => this.pnp!.getActor({ canisterId, idl, requiresSigning: true, anon: false }), ...(evmProvider ? { evmProvider } : {}) } as any;\n this.sdk = null;\n const isOisy = this.lastWalletId === 'oisy';\n if (isOisy) {\n // Keep modal open and show only the explicit CTA\n this.oisyReadyToPay = true;\n } else {\n this.showWalletModal = false;\n // After any successful wallet connect, open token-balance picker\n this.fetchAndShowBalances();\n }\n }).catch((error: any) => {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n });\n } catch (error) {\n this.errorMessage = error instanceof Error ? error.message : 'Wallet connection failed';\n this.errorSeverity = ErrorSeverity.ERROR;\n this.showWalletModal = false;\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-error', { detail: { message: this.errorMessage, code: 'WALLET_CONNECT_ERROR' } })); } catch {}\n }\n }\n\n private async fetchAndShowBalances() {\n try {\n this.balancesLoading = true;\n this.balancesError = null;\n this.showBalanceModal = true;\n const sdk = createSdk(this.config);\n const { balances } = await getWalletBalanceEntries({\n sdk,\n lastWalletId: this.lastWalletId,\n connectedWallet: (this.config as any)?.connectedWallet,\n amountUsd: Number(this.amountUsd ?? 0),\n chainShortcodes: (this.config as any)?.chainShortcodes,\n tokenShortcodes: (this.config as any)?.tokenShortcodes,\n });\n this.walletBalances = balances as any[];\n } catch (e: any) {\n this.walletBalances = [];\n this.balancesError = (e && (e.message || String(e))) || 'Failed to load balances';\n } finally {\n this.balancesLoading = false;\n }\n }\n\n private onSelectBalanceSymbol = async (shortcode: string) => {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n if (sel?.ledgerSymbol) this.selectedSymbol = sel.ledgerSymbol;\n if (isEvmWalletId(this.lastWalletId)) {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const targetChain = sel?.chainId;\n ensureEvmChain(targetChain, { provider: (this.pnp as any)?.getEvmProvider?.() || (this.config as any)?.evmProvider, chainName: sel?.chainName, rpcUrlPublic: (sel as any)?.rpcUrlPublic, nativeSymbol: sel?.ledgerSymbol, decimals: sel?.decimals }).then(async () => {\n try {\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.amountUsd || 0);\n // Attempt X402 flow first if accepted\n if (sel?.x402Accepts) {\n try {\n await (sdk.client as any).createPaymentX402Usd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId,\n icpay_context: 'amount-input:x402'\n }\n });\n this.showBalanceModal = false;\n return;\n } catch {\n // fall back to normal flow\n }\n }\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'evm',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n this.showBalanceModal = false;\n });\n return;\n }\n this.showBalanceModal = false;\n const action = this.pendingAction; this.pendingAction = null;\n if (action === 'pay') {\n // IC flow: send using tokenShortcode same as EVM\n try {\n const sel = (this.walletBalances || []).find((b: any) => (b as any)?.tokenShortcode === shortcode);\n const sdk = createSdk(this.config);\n const amountUsd = Number(this.amountUsd || 0);\n await (sdk.client as any).createPaymentUsd({\n usdAmount: amountUsd,\n tokenShortcode: (sel as any)?.tokenShortcode,\n metadata: {\n ...(this.config as any)?.metadata,\n icpay_network: 'ic',\n icpay_ledger_id: sel?.ledgerId\n }\n });\n } catch {}\n }\n };\n\n private attachTransakMessageListener() {\n if (this.transakMessageHandlerBound) return;\n this.transakMessageHandlerBound = (event: MessageEvent) => this.onTransakMessage(event);\n try { window.addEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n }\n\n private detachTransakMessageListener() {\n if (this.transakMessageHandlerBound) {\n try { window.removeEventListener('message', this.transakMessageHandlerBound as any); } catch {}\n this.transakMessageHandlerBound = null;\n }\n }\n\n private onTransakMessage(event: MessageEvent) {\n const data: any = event?.data;\n const eventId: string | undefined = data?.event_id || data?.eventId || data?.id;\n if (!eventId || typeof eventId !== 'string') return;\n\n if (eventId === 'TRANSAK_ORDER_SUCCESSFUL') {\n this.detachTransakMessageListener();\n if (this.onrampPollingActive) return;\n // Close modal and start our own flow\n this.showOnrampModal = false;\n const orderId = (data?.data?.id) || (data?.id) || (data?.webhookData?.id) || null;\n this.startOnrampPolling(orderId || undefined);\n }\n }\n\n private startOnramp() {\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'createPaymentUsd', type: 'onramp' } })); } catch {}\n this.showWalletModal = false;\n setTimeout(() => this.createOnrampIntent(), 0);\n }\n\n private async createOnrampIntent() {\n try {\n const sdk = createSdk(this.config);\n const symbol = this.selectedSymbol || 'ICP';\n const amountUsd = Number(this.amountUsd);\n const resp = await (sdk as any).startOnrampUsd(amountUsd, symbol, { context: 'amount-input:onramp' });\n const sessionId = resp?.metadata?.icpay_onramp?.sessionId || resp?.metadata?.icpay_onramp?.session_id || resp?.metadata?.onramp?.sessionId || resp?.metadata?.onramp?.session_id || null;\n const paymentIntentId = resp?.metadata?.icpay_payment_intent_id || resp?.metadata?.paymentIntentId || resp?.paymentIntentId || null;\n const errorMessage = resp?.metadata?.icpay_onramp?.errorMessage || resp?.metadata?.onramp?.errorMessage || null;\n this.onrampPaymentIntentId = paymentIntentId;\n if (sessionId) {\n this.onrampSessionId = sessionId;\n this.onrampErrorMessage = null;\n this.showOnrampModal = true;\n this.attachTransakMessageListener();\n } else {\n this.onrampSessionId = null;\n this.onrampErrorMessage = errorMessage || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n } catch (e) {\n this.onrampSessionId = null;\n this.onrampErrorMessage = (e as any)?.message || 'Failed to obtain onramp sessionId';\n this.showOnrampModal = true;\n }\n }\n\n private startOnrampPolling(orderId?: string) {\n if (this.onrampPollTimer) { try { clearInterval(this.onrampPollTimer); } catch {}; this.onrampPollTimer = null; }\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {}; this.onrampNotifyController = null; }\n\n const paymentIntentId = this.onrampPaymentIntentId;\n if (!paymentIntentId) return;\n\n const sdk = createSdk(this.config);\n const handleComplete = () => {\n this.detachTransakMessageListener();\n if (this.onrampNotifyController) { try { this.onrampNotifyController.stop(); } catch {} }\n this.onrampNotifyController = null;\n this.onrampPollingActive = false;\n };\n try { window.addEventListener('icpay-sdk-transaction-completed', (() => handleComplete()) as any, { once: true } as any); } catch {}\n this.onrampPollingActive = true;\n this.onrampNotifyController = (sdk as any).notifyIntentUntilComplete(paymentIntentId, 5000, orderId);\n this.onrampPollTimer = 1 as any;\n }\n\n private async pay() {\n if (!isBrowser || this.processing) return;\n\n // Reset error state\n this.errorMessage = null;\n this.errorSeverity = null;\n this.errorAction = null;\n\n if (!this.isValidAmount()) {\n this.errorMessage = 'Please enter a valid amount';\n this.errorSeverity = ErrorSeverity.WARNING;\n return;\n }\n\n try { window.dispatchEvent(new CustomEvent('icpay-sdk-method-start', { detail: { name: 'pay', type: 'sendUsd', amount: this.amountUsd, currency: this.selectedSymbol || 'ICP' } })); } catch {}\n\n this.processing = true;\n try {\n // Do not attempt x402 here; x402 is decided after token selection in the balance modal (EVM branch).\n const ready = await this.ensureWallet();\n if (!ready) return;\n\n // Wallet is connected; proceed to token selection to initiate payment via selection handler\n this.showWalletModal = true;\n await this.fetchAndShowBalances();\n return;\n } catch (e) {\n handleWidgetError(e, {\n onError: (error) => {\n this.dispatchEvent(new CustomEvent('icpay-error', { detail: error, bubbles: true }));\n if (shouldShowErrorToUser(error)) {\n this.errorMessage = getErrorMessage(error);\n this.errorSeverity = getErrorSeverity(error);\n this.errorAction = getErrorAction(error);\n }\n }\n });\n // On failure, disconnect so next attempt triggers wallet selection again\n try {\n if (!this.config.useOwnWallet && this.pnp) {\n await this.pnp.disconnect?.();\n this.walletConnected = false;\n this.config = { ...this.config, actorProvider: undefined as any, connectedWallet: undefined } as any;\n }\n } catch {}\n } finally {\n this.processing = false;\n }\n }\n\n render() {\n if (!this.config) return html`<div class=\"icpay-card icpay-section\">Loading...</div>`;\n const placeholder = this.config?.placeholder || 'Enter amount in USD';\n const payLabelRaw = this.config?.buttonLabel || 'Pay ${amount} with crypto';\n const payLabel = payLabelRaw\n .replace('{amount}', this.amountUsd ? `${Number(this.amountUsd).toFixed(2)}` : '$0.00')\n .replace('{symbol}', this.selectedSymbol || 'ICP');\n const selectedLabel = this.selectedSymbol || 'ICP';\n const progressEnabled = this.config?.progressBar?.enabled !== false;\n const showProgressBar = progressEnabled;\n\n return html`\n <div class=\"icpay-card icpay-section icpay-widget-base\">\n ${showProgressBar ? html`\n <icpay-progress-bar\n .debug=${!!this.config?.debug}\n .theme=${this.config?.theme}\n .amount=${Number(this.amountUsd || 0)}\n .ledgerSymbol=${this.selectedSymbol || 'ICP'}\n ></icpay-progress-bar>\n ` : null}\n\n <div class=\"row\">\n <div class=\"top-row\">\n <div class=\"amount-field\">\n <span class=\"currency-prefix\">$</span>\n <input type=\"number\" min=\"0\" step=\"${Number(this.config?.stepUsd ?? 0.5)}\" .value=${String(this.amountUsd || '')} placeholder=\"${placeholder}\" @input=${(e: any) => this.onInputChange(e)} />\n </div>\n ${null}\n </div>\n <button class=\"pay-button ${this.processing?'processing':''}\"\n ?disabled=${this.processing || (this.config?.disablePaymentButton === true) || (this.succeeded && this.config?.disableAfterSuccess === true)}\n @click=${() => this.pay()}>\n ${this.succeeded && this.config?.disableAfterSuccess ? 'Paid' : (this.processing ? 'Processing…' : payLabel)}\n </button>\n </div>\n <div class=\"hint\">Min: $${Number(this.config?.minUsd ?? 0.5).toFixed(2)}${this.config?.maxUsd ? `, Max: $${Number(this.config.maxUsd).toFixed(2)}` : ''}</div>\n\n ${this.errorMessage ? html`\n <div class=\"error-message ${this.errorSeverity}\" style=\"margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;\">\n ${this.errorMessage}\n ${this.errorAction ? html`<button style=\"margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;\">${this.errorAction}</button>` : ''}\n </div>\n ` : ''}\n ${(() => {\n const walletsRaw = (this as any).pnp?.getEnabledWallets?.() || [];\n const wallets = (buildWalletEntries as any)(walletsRaw);\n return renderWalletSelectorModal({\n visible: !!(this.showWalletModal && this.pnp),\n wallets,\n isConnecting: false,\n onSwitchAccount: () => this.onSwitchAccount(null),\n onSelect: (walletId: string) => this.connectWithWallet(walletId),\n onClose: () => { this.showWalletModal = false; this.oisyReadyToPay = false; try { window.dispatchEvent(new CustomEvent('icpay-sdk-wallet-cancelled', { detail: { reason: 'user_cancelled' } })); } catch {} },\n onCreditCard: ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true)) ? () => this.startOnramp() : undefined,\n creditCardLabel: this.config?.onramp?.creditCardLabel || 'Pay with credit card',\n showCreditCard: (this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true),\n creditCardTooltip: (() => {\n const min = 5; const amt = Number(this.amountUsd || 0); if (amt > 0 && amt < min && ((this.config?.onramp?.enabled !== false) && (this.config?.onrampDisabled !== true))) { const d = (min - amt).toFixed(2); return `Note: Minimum card amount is $${min}. You will pay about $${d} more.`; } return null;\n })(),\n oisyReadyToPay: this.oisyReadyToPay,\n onOisyPay: () => { this.showWalletModal = false; this.oisyReadyToPay = false; this.pay(); }\n });\n })()}\n\n ${renderWalletBalanceModal({\n visible: this.showBalanceModal,\n isLoading: this.balancesLoading,\n error: this.balancesError,\n balances: this.walletBalances as any,\n onSelect: (s: string) => this.onSelectBalanceSymbol(s),\n onClose: () => { this.showBalanceModal = false; },\n })}\n\n ${this.showOnrampModal ? renderTransakOnrampModal({\n visible: this.showOnrampModal,\n sessionId: this.onrampSessionId,\n errorMessage: this.onrampErrorMessage,\n apiKey: this.config?.onramp?.apiKey,\n environment: (this.config?.onramp?.environment || 'STAGING') as any,\n width: this.config?.onramp?.width,\n height: this.config?.onramp?.height,\n onClose: () => { this.showOnrampModal = false; },\n onBack: () => { this.showOnrampModal = false; this.showWalletModal = true; }\n } as TransakOnrampOptions) : null}\n </div>\n `;\n }\n}\n\ndeclare global { interface HTMLElementTagNameMap { 'icpay-amount-input': ICPayAmountInput } }\n\n\n"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["css","baseStyles","applyThemeVars","host","theme","primary","secondary","set","k","v","parseHex","hex","h","full","c","bigint","r","g","b","isLight","rgb","toLin","s","surface","surfaceAlt","border","text","accent","muted","Icpay","isBrowser","debugLog","debug","message","data","createSdk","config","sdkConfig","notifyIntentUntilComplete","paymentIntentId","intervalMs","orderId","client","clientAny","forward","type","e","quoteUsd","usdAmount","tokenShortcode","ledgerCanisterId","sendUsd","metadata","mergedMeta","fallbackDesc","description","payload","startOnrampUsd","error","LitElement","html","css","customElement","property","state","debugLog","debug","message","data","DEFAULT_STEPS","ICPayProgressBar","LitElement","methodName","methodType","step","idx","transactionId","status","errorMessage","errorCode","requestedAmount","paidAmount","requested","paid","walletType","hasBalance","balance","ledgerId","symbol","amount","currency","ledgerSymbol","i","rawMessage","applyThemeVars","changed","stepIndex","oldStatus","html","key","s","msg","confettiPieces","_","colors","piece","displayAmount","error","index","verifyIdx","started","css","__decorateClass","property","state","customElement","html","renderTransakOnrampModal","opts","environment","width","height","iframeSrc","LitElement","html","css","customElement","property","state","IcpayError","ERROR_CODES","defaultErrorHandler","error","handleWidgetError","errorHandler","ERROR_MESSAGES","getErrorMessage","shouldShowErrorToUser","getErrorAction","getErrorSeverity","error","html","EVM_WALLET_IDS","isEvmWalletId","walletId","getWalletId","w","getWalletLabel","getWalletIcon","buildWalletEntries","raw","ensureEvmChain","targetChainId","opts","provider","desiredDec","currentHex","hex","chainName","rpcUrls","nativeCurrency","getWalletBalanceEntries","params","sdk","lastWalletId","connectedWallet","amountUsd","chainShortcodes","tokenShortcodes","response","lowerId","addrOrPrincipal","b","formatTokenAmountThirdwebStyle","value","n","factor","html","toUsd","b","amt","price","usd","byUsdDesc","a","renderPayWithStyles","html","renderPayWithContent","opts","formatTokenAmount","val","formatTokenAmountThirdwebStyle","sufficient","sym","iconClass","insufficient","sanitizeDataUrl","url","getWalletFriendlyName","id","fallback","lower","renderWalletSelectorModal","opts","wallets","onSelect","onClose","isConnecting","formatTokenAmount","val","formatTokenAmountThirdwebStyle","toUsd","b","amt","price","usd","byUsdDesc","a","normalizedWallets","w","html","renderPayWithStyles","renderPayWithContent","symbol","items","dividerInserted","lastWasEvm","displayName","isEvm","isEvmWalletId","chainLabel","html","renderWalletBalanceModal","opts","html","renderPayWithStyles","renderPayWithContent","applyOisyNewTabConfig","cfg","next","oisy","oisyConfig","transport","normalizeConnectedWallet","pnp","connectResult","fromResult","fromAccount","toStringSafe","v","principal","detectOisySessionViaAdapter","getEnabled","oisyCfg","w","AdapterCtor","adapterInstance","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayPremiumContent","LitElement","amount","curr","shortcode","sel0","b","isEvmWalletId","sel","targetChain","ensureEvmChain","sdk","createSdk","amountUsd","action","raw","saved","_cfg1","resolveDerivationOrigin","pnp","changed","_cfg2","applyOisyNewTabConfig","principal","detectOisySessionViaAdapter","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","availableWallets","error","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","event","eventId","orderId","symbol","resp","sessionId","paymentIntentId","errorMessage","handleComplete","w","walletId","result","balances","getWalletBalanceEntries","e","html","walletsRaw","wallets","buildWalletEntries","renderWalletSelectorModal","amt","renderWalletBalanceModal","s","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement","LitElement","html","css","customElement","property","state","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayTipJar","LitElement","amount","curr","shortcode","sel","b","isEvmWalletId","targetChain","ensureEvmChain","sdk","createSdk","amountUsd","action","raw","saved","_cfg1","applyOisyNewTabConfig","resolveDerivationOrigin","pnp","changed","v","s","_cfg2","principal","detectOisySessionViaAdapter","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","availableWallets","error","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","event","eventId","orderId","symbol","resp","sessionId","paymentIntentId","errorMessage","handleComplete","w","walletId","result","balances","getWalletBalanceEntries","html","a","walletsRaw","wallets","buildWalletEntries","renderWalletSelectorModal","amt","renderWalletBalanceModal","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement","LitElement","html","css","customElement","property","state","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayArticlePaywall","LitElement","amount","curr","shortcode","sel","b","isEvmWalletId","targetChain","ensureEvmChain","sdk","createSdk","amountUsd","action","raw","saved","_cfg1","resolveDerivationOrigin","pnp","event","eventId","orderId","symbol","resp","sessionId","paymentIntentId","errorMessage","handleComplete","changed","s","_cfg2","applyOisyNewTabConfig","principal","detectOisySessionViaAdapter","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","availableWallets","error","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","w","walletId","result","balances","getWalletBalanceEntries","html","walletsRaw","wallets","buildWalletEntries","renderWalletSelectorModal","amt","renderWalletBalanceModal","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement","LitElement","html","css","customElement","property","state","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayCoffeeShop","LitElement","amount","curr","shortcode","sel","b","isEvmWalletId","targetChain","ensureEvmChain","sdk","createSdk","amountUsd","action","changed","i","s","_cfg","applyOisyNewTabConfig","resolveDerivationOrigin","principal","detectOisySessionViaAdapter","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","availableWallets","error","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","event","eventId","orderId","symbol","resp","sessionId","paymentIntentId","errorMessage","handleComplete","w","walletId","result","balances","getWalletBalanceEntries","html","it","walletsRaw","wallets","buildWalletEntries","renderWalletSelectorModal","amt","renderWalletBalanceModal","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement","LitElement","html","css","customElement","property","state","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayDonationThermometer","LitElement","amount","curr","shortcode","sel","b","isEvmWalletId","targetChain","ensureEvmChain","sdk","createSdk","amountUsd","action","raw","saved","_cfg1","applyOisyNewTabConfig","resolveDerivationOrigin","pnp","changed","v","s","goal","denom","_cfg2","principal","detectOisySessionViaAdapter","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","availableWallets","error","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","event","eventId","orderId","symbol","resp","sessionId","paymentIntentId","errorMessage","handleComplete","w","walletId","result","balances","getWalletBalanceEntries","html","a","walletsRaw","wallets","buildWalletEntries","renderWalletSelectorModal","amt","renderWalletBalanceModal","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement","LitElement","html","css","customElement","property","state","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayPayButton","LitElement","amount","curr","shortcode","sel","b","isEvmWalletId","targetChain","ensureEvmChain","sdk","amountUsd","symbolNow","tryX402","metadata","x402Err","action","createSdk","changed","symbol","wantsOisyTab","_rawCfg","_cfg","applyOisyNewTabConfig","resolveDerivationOrigin","availableWallets","error","w","walletId","result","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","isOisy","raw","cfg","err2","initErr","balances","getWalletBalanceEntries","e","walletsRaw","wallets","buildWalletEntries","onrampEnabled","minOnramp","showTooltip","diff","tooltip","renderWalletSelectorModal","s","resp","sessionId","errorMessage","paymentIntentId","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","event","eventId","orderId","handleComplete","listener","cw","pnpAcct","html","selectedSymbol","amountPart","label","showProgressBar","suspendProgress","renderWalletBalanceModal","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement","LitElement","html","css","customElement","property","state","isBrowser","WalletSelect","debugLog","debug","message","data","ICPayAmountInput","LitElement","amount","curr","shortcode","sel","b","isEvmWalletId","targetChain","ensureEvmChain","sdk","createSdk","amountUsd","action","changed","step","value","rounded","symbol","min","max","wantsOisyTab","_rawCfg","_cfg","applyOisyNewTabConfig","resolveDerivationOrigin","error","w","walletId","result","normalized","normalizeConnectedWallet","evmProvider","canisterId","idl","balances","getWalletBalanceEntries","event","eventId","orderId","resp","sessionId","paymentIntentId","errorMessage","handleComplete","handleWidgetError","shouldShowErrorToUser","getErrorMessage","getErrorSeverity","getErrorAction","html","placeholder","payLabel","selectedLabel","showProgressBar","e","walletsRaw","wallets","buildWalletEntries","renderWalletSelectorModal","amt","renderWalletBalanceModal","s","renderTransakOnrampModal","baseStyles","css","__decorateClass","property","state","customElement"]}
|