@abstraxn/signer-react 1.0.0
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.
- package/README.md +114 -0
- package/dist/src/AbstraxnProvider.d.ts +9 -0
- package/dist/src/AbstraxnProvider.js +21 -0
- package/dist/src/AbstraxnProvider.js.map +1 -0
- package/dist/src/ConnectButton.css +217 -0
- package/dist/src/ConnectButton.d.ts +71 -0
- package/dist/src/ConnectButton.js +102 -0
- package/dist/src/ConnectButton.js.map +1 -0
- package/dist/src/ExternalWalletButtons.css +319 -0
- package/dist/src/ExternalWalletButtons.d.ts +56 -0
- package/dist/src/ExternalWalletButtons.js +272 -0
- package/dist/src/ExternalWalletButtons.js.map +1 -0
- package/dist/src/OnboardingUI.d.ts +63 -0
- package/dist/src/OnboardingUI.js +66 -0
- package/dist/src/OnboardingUI.js.map +1 -0
- package/dist/src/WalletModal.css +2319 -0
- package/dist/src/WalletModal.d.ts +7 -0
- package/dist/src/WalletModal.js +322 -0
- package/dist/src/WalletModal.js.map +1 -0
- package/dist/src/chains.d.ts +56 -0
- package/dist/src/chains.js +291 -0
- package/dist/src/chains.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProvider.d.ts +12 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProvider.js +146 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProvider.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.d.ts +25 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js +3086 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.d.ts +8 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.js +46 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.d.ts +8 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.js +12 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/context.d.ts +2 -0
- package/dist/src/components/AbstraxnProvider/context.js +6 -0
- package/dist/src/components/AbstraxnProvider/context.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/index.d.ts +6 -0
- package/dist/src/components/AbstraxnProvider/index.js +7 -0
- package/dist/src/components/AbstraxnProvider/index.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.d.ts +30 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js +49 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.d.ts +2 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.js +13 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.d.ts +22 -0
- package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.js +242 -0
- package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useWalletInitialization.d.ts +25 -0
- package/dist/src/components/AbstraxnProvider/useWalletInitialization.js +539 -0
- package/dist/src/components/AbstraxnProvider/useWalletInitialization.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/utils.d.ts +41 -0
- package/dist/src/components/AbstraxnProvider/utils.js +139 -0
- package/dist/src/components/AbstraxnProvider/utils.js.map +1 -0
- package/dist/src/components/OnboardingUI/OnboardingUI.css +1062 -0
- package/dist/src/components/OnboardingUI/OnboardingUIReact.d.ts +15 -0
- package/dist/src/components/OnboardingUI/OnboardingUIReact.js +318 -0
- package/dist/src/components/OnboardingUI/OnboardingUIReact.js.map +1 -0
- package/dist/src/components/OnboardingUI/OnboardingUIWeb.d.ts +265 -0
- package/dist/src/components/OnboardingUI/OnboardingUIWeb.js +3782 -0
- package/dist/src/components/OnboardingUI/OnboardingUIWeb.js.map +1 -0
- package/dist/src/components/OnboardingUI/components/EmailForm.d.ts +16 -0
- package/dist/src/components/OnboardingUI/components/EmailForm.js +27 -0
- package/dist/src/components/OnboardingUI/components/EmailForm.js.map +1 -0
- package/dist/src/components/OnboardingUI/components/Modal.d.ts +14 -0
- package/dist/src/components/OnboardingUI/components/Modal.js +61 -0
- package/dist/src/components/OnboardingUI/components/Modal.js.map +1 -0
- package/dist/src/components/OnboardingUI/components/OtpForm.d.ts +20 -0
- package/dist/src/components/OnboardingUI/components/OtpForm.js +72 -0
- package/dist/src/components/OnboardingUI/components/OtpForm.js.map +1 -0
- package/dist/src/components/OnboardingUI/components/PasskeyButton.d.ts +14 -0
- package/dist/src/components/OnboardingUI/components/PasskeyButton.js +22 -0
- package/dist/src/components/OnboardingUI/components/PasskeyButton.js.map +1 -0
- package/dist/src/components/OnboardingUI/components/SocialButtons.d.ts +15 -0
- package/dist/src/components/OnboardingUI/components/SocialButtons.js +20 -0
- package/dist/src/components/OnboardingUI/components/SocialButtons.js.map +1 -0
- package/dist/src/components/OnboardingUI/components/index.d.ts +13 -0
- package/dist/src/components/OnboardingUI/components/index.js +9 -0
- package/dist/src/components/OnboardingUI/components/index.js.map +1 -0
- package/dist/src/components/OnboardingUI/hooks/index.d.ts +7 -0
- package/dist/src/components/OnboardingUI/hooks/index.js +6 -0
- package/dist/src/components/OnboardingUI/hooks/index.js.map +1 -0
- package/dist/src/components/OnboardingUI/hooks/useAuthMethods.d.ts +11 -0
- package/dist/src/components/OnboardingUI/hooks/useAuthMethods.js +243 -0
- package/dist/src/components/OnboardingUI/hooks/useAuthMethods.js.map +1 -0
- package/dist/src/components/OnboardingUI/hooks/useOnboarding.d.ts +21 -0
- package/dist/src/components/OnboardingUI/hooks/useOnboarding.js +153 -0
- package/dist/src/components/OnboardingUI/hooks/useOnboarding.js.map +1 -0
- package/dist/src/components/OnboardingUI/index.d.ts +12 -0
- package/dist/src/components/OnboardingUI/index.js +15 -0
- package/dist/src/components/OnboardingUI/index.js.map +1 -0
- package/dist/src/components/QRCode.d.ts +13 -0
- package/dist/src/components/QRCode.js +6 -0
- package/dist/src/components/QRCode.js.map +1 -0
- package/dist/src/components/WalletModal/components/ChainSelector.css +327 -0
- package/dist/src/components/WalletModal/components/ChainSelector.d.ts +11 -0
- package/dist/src/components/WalletModal/components/ChainSelector.js +75 -0
- package/dist/src/components/WalletModal/components/ChainSelector.js.map +1 -0
- package/dist/src/components/WalletModal/components/ExportKeyModal.css +134 -0
- package/dist/src/components/WalletModal/components/ExportKeyModal.d.ts +14 -0
- package/dist/src/components/WalletModal/components/ExportKeyModal.js +26 -0
- package/dist/src/components/WalletModal/components/ExportKeyModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/ExportWarningModal.css +107 -0
- package/dist/src/components/WalletModal/components/ExportWarningModal.d.ts +17 -0
- package/dist/src/components/WalletModal/components/ExportWarningModal.js +20 -0
- package/dist/src/components/WalletModal/components/ExportWarningModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/ManageWalletModal.css +246 -0
- package/dist/src/components/WalletModal/components/ManageWalletModal.d.ts +12 -0
- package/dist/src/components/WalletModal/components/ManageWalletModal.js +36 -0
- package/dist/src/components/WalletModal/components/ManageWalletModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/PreviewTransactionModal.css +127 -0
- package/dist/src/components/WalletModal/components/PreviewTransactionModal.d.ts +17 -0
- package/dist/src/components/WalletModal/components/PreviewTransactionModal.js +10 -0
- package/dist/src/components/WalletModal/components/PreviewTransactionModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/ReceiveModal.css +136 -0
- package/dist/src/components/WalletModal/components/ReceiveModal.d.ts +8 -0
- package/dist/src/components/WalletModal/components/ReceiveModal.js +22 -0
- package/dist/src/components/WalletModal/components/ReceiveModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/SendModal.css +277 -0
- package/dist/src/components/WalletModal/components/SendModal.d.ts +16 -0
- package/dist/src/components/WalletModal/components/SendModal.js +219 -0
- package/dist/src/components/WalletModal/components/SendModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/SuccessModal.css +85 -0
- package/dist/src/components/WalletModal/components/SuccessModal.d.ts +13 -0
- package/dist/src/components/WalletModal/components/SuccessModal.js +8 -0
- package/dist/src/components/WalletModal/components/SuccessModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.css +240 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.d.ts +21 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.js +44 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/UserAvatar.d.ts +9 -0
- package/dist/src/components/WalletModal/components/UserAvatar.js +31 -0
- package/dist/src/components/WalletModal/components/UserAvatar.js.map +1 -0
- package/dist/src/components/WalletModal/components/index.d.ts +23 -0
- package/dist/src/components/WalletModal/components/index.js +14 -0
- package/dist/src/components/WalletModal/components/index.js.map +1 -0
- package/dist/src/components/WalletModal/hooks/index.d.ts +6 -0
- package/dist/src/components/WalletModal/hooks/index.js +7 -0
- package/dist/src/components/WalletModal/hooks/index.js.map +1 -0
- package/dist/src/components/WalletModal/hooks/useAddressValidation.d.ts +4 -0
- package/dist/src/components/WalletModal/hooks/useAddressValidation.js +17 -0
- package/dist/src/components/WalletModal/hooks/useAddressValidation.js.map +1 -0
- package/dist/src/components/WalletModal/hooks/useAmountValidation.d.ts +4 -0
- package/dist/src/components/WalletModal/hooks/useAmountValidation.js +29 -0
- package/dist/src/components/WalletModal/hooks/useAmountValidation.js.map +1 -0
- package/dist/src/components/WalletModal/hooks/useSendTransaction.d.ts +20 -0
- package/dist/src/components/WalletModal/hooks/useSendTransaction.js +55 -0
- package/dist/src/components/WalletModal/hooks/useSendTransaction.js.map +1 -0
- package/dist/src/components/WalletModal/index.d.ts +5 -0
- package/dist/src/components/WalletModal/index.js +7 -0
- package/dist/src/components/WalletModal/index.js.map +1 -0
- package/dist/src/components/WalletModal/utils/addressUtils.d.ts +19 -0
- package/dist/src/components/WalletModal/utils/addressUtils.js +62 -0
- package/dist/src/components/WalletModal/utils/addressUtils.js.map +1 -0
- package/dist/src/components/WalletModal/utils/formatUtils.d.ts +20 -0
- package/dist/src/components/WalletModal/utils/formatUtils.js +47 -0
- package/dist/src/components/WalletModal/utils/formatUtils.js.map +1 -0
- package/dist/src/components/WalletModal/utils/index.d.ts +5 -0
- package/dist/src/components/WalletModal/utils/index.js +6 -0
- package/dist/src/components/WalletModal/utils/index.js.map +1 -0
- package/dist/src/connectors.d.ts +27 -0
- package/dist/src/connectors.js +70 -0
- package/dist/src/connectors.js.map +1 -0
- package/dist/src/hooks.d.ts +13136 -0
- package/dist/src/hooks.js +1358 -0
- package/dist/src/hooks.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types.d.ts +224 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/wagmiConfig.d.ts +16 -0
- package/dist/src/wagmiConfig.js +103 -0
- package/dist/src/wagmiConfig.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OnboardingUI React Component
|
|
3
|
+
* Pure React implementation of OnboardingUI
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import type { OnboardingUIConfig } from "@abstraxn/signer-core";
|
|
7
|
+
import "./OnboardingUI.css";
|
|
8
|
+
export interface OnboardingUIReactProps {
|
|
9
|
+
config?: Partial<OnboardingUIConfig>;
|
|
10
|
+
modal?: boolean;
|
|
11
|
+
onClose?: () => void;
|
|
12
|
+
externalWalletsEnabled?: boolean;
|
|
13
|
+
availableConnectors?: any[];
|
|
14
|
+
}
|
|
15
|
+
export declare const OnboardingUIReact: React.FC<OnboardingUIReactProps>;
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* OnboardingUI React Component
|
|
4
|
+
* Pure React implementation of OnboardingUI
|
|
5
|
+
*/
|
|
6
|
+
import { useEffect, useState, useCallback, useRef } from "react";
|
|
7
|
+
import { useOnboarding } from "./hooks/useOnboarding";
|
|
8
|
+
import { useAuthMethods } from "./hooks/useAuthMethods";
|
|
9
|
+
import { EmailForm } from "./components/EmailForm";
|
|
10
|
+
import { OtpForm } from "./components/OtpForm";
|
|
11
|
+
import { SocialButtons } from "./components/SocialButtons";
|
|
12
|
+
import { PasskeyButton } from "./components/PasskeyButton";
|
|
13
|
+
import { Modal } from "./components/Modal";
|
|
14
|
+
import { ExternalWalletButtons } from "../../ExternalWalletButtons";
|
|
15
|
+
import { useAbstraxnWallet } from "../../hooks";
|
|
16
|
+
import "./OnboardingUI.css";
|
|
17
|
+
export const OnboardingUIReact = ({ config = {}, modal = false, onClose, externalWalletsEnabled = false, availableConnectors = [], }) => {
|
|
18
|
+
const theme = config.theme || "light";
|
|
19
|
+
const authMethods = config.authMethods || ["otp", "google"];
|
|
20
|
+
const onboarding = useOnboarding(config);
|
|
21
|
+
const authMethodsHook = useAuthMethods(config);
|
|
22
|
+
const { user, isConnected, whoami, loading: providerLoading, error: providerError, } = useAbstraxnWallet();
|
|
23
|
+
const [showExternalWallets, setShowExternalWallets] = useState(false);
|
|
24
|
+
const [oauthLoading, setOauthLoading] = useState(false);
|
|
25
|
+
const [oauthError, setOauthError] = useState(null);
|
|
26
|
+
// Use refs to track latest values for interval checking
|
|
27
|
+
const whoamiRef = useRef(whoami);
|
|
28
|
+
const userRef = useRef(user);
|
|
29
|
+
const isConnectedRef = useRef(isConnected);
|
|
30
|
+
const providerErrorRef = useRef(providerError);
|
|
31
|
+
// Update refs when values change
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
whoamiRef.current = whoami;
|
|
34
|
+
userRef.current = user;
|
|
35
|
+
isConnectedRef.current = isConnected;
|
|
36
|
+
providerErrorRef.current = providerError;
|
|
37
|
+
}, [whoami, user, isConnected, providerError]);
|
|
38
|
+
// Clear query params helper
|
|
39
|
+
const clearQueryParams = useCallback(() => {
|
|
40
|
+
if (typeof window !== "undefined") {
|
|
41
|
+
const newUrl = window.location.pathname;
|
|
42
|
+
window.history.replaceState({}, "", newUrl);
|
|
43
|
+
}
|
|
44
|
+
}, []);
|
|
45
|
+
// Helper to extract provider from accessToken JWT
|
|
46
|
+
const getAuthProviderFromToken = (token) => {
|
|
47
|
+
try {
|
|
48
|
+
const base64Url = token.split(".")[1];
|
|
49
|
+
const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
|
|
50
|
+
const jsonPayload = decodeURIComponent(window
|
|
51
|
+
.atob(base64)
|
|
52
|
+
.split("")
|
|
53
|
+
.map(function (c) {
|
|
54
|
+
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
|
|
55
|
+
})
|
|
56
|
+
.join(""));
|
|
57
|
+
const payload = JSON.parse(jsonPayload);
|
|
58
|
+
return (payload.authProvider || payload.provider || "").toLowerCase();
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// Handle URL parameters for social login callbacks (OAuth only, not OTP)
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (typeof window === "undefined")
|
|
67
|
+
return;
|
|
68
|
+
// Check if we initiated this OAuth flow
|
|
69
|
+
let oauthPending = null;
|
|
70
|
+
try {
|
|
71
|
+
oauthPending = localStorage.getItem('abstraxn_oauth_pending');
|
|
72
|
+
}
|
|
73
|
+
catch (e) { }
|
|
74
|
+
const params = new URLSearchParams(window.location.search);
|
|
75
|
+
const success = params.get("success");
|
|
76
|
+
const error = params.get("error");
|
|
77
|
+
const provider = params.get("provider") || params.get("authProvider");
|
|
78
|
+
const accessToken = params.get("accessToken");
|
|
79
|
+
// Extract provider from accessToken if not in URL params
|
|
80
|
+
let detectedProvider = provider;
|
|
81
|
+
if (!detectedProvider && accessToken) {
|
|
82
|
+
detectedProvider = getAuthProviderFromToken(accessToken);
|
|
83
|
+
}
|
|
84
|
+
// Only handle OAuth callbacks (Google, Discord, Twitter/X) - NOT OTP flow
|
|
85
|
+
// OAuth flows will have a provider parameter (in URL or accessToken) or accessToken itself
|
|
86
|
+
const isOAuthCallback = (detectedProvider &&
|
|
87
|
+
(detectedProvider === "google" ||
|
|
88
|
+
detectedProvider === "discord" ||
|
|
89
|
+
detectedProvider === "twitter" ||
|
|
90
|
+
detectedProvider === "x")) ||
|
|
91
|
+
(success === "true" && !!accessToken);
|
|
92
|
+
// Check if we're in OTP flow (email or otp steps only, not loading)
|
|
93
|
+
// The 'loading' step can be from OTP or OAuth, so we need to check provider to differentiate
|
|
94
|
+
const isInOtpFlow = onboarding.step === "email" || onboarding.step === "otp";
|
|
95
|
+
// If step is 'loading' but there's an OAuth provider, it's OAuth flow, not OTP
|
|
96
|
+
const isOtpLoadingStep = onboarding.step === "loading" && !isOAuthCallback;
|
|
97
|
+
// Don't set loading if user is already authenticated (prevents re-showing after state updates)
|
|
98
|
+
const hasWhoamiData = whoami && (whoami.userId || whoami.address || whoami.organizationId);
|
|
99
|
+
const hasUserData = user && (user.id || user.email);
|
|
100
|
+
const isAlreadyAuthenticated = hasWhoamiData || hasUserData || isConnected;
|
|
101
|
+
// Process OAuth callbacks - show loading modal for OAuth flows
|
|
102
|
+
if (isOAuthCallback && oauthPending) {
|
|
103
|
+
if (success === "true" && !isAlreadyAuthenticated) {
|
|
104
|
+
// Set OAuth loading modal for OAuth callbacks
|
|
105
|
+
setOauthLoading(true);
|
|
106
|
+
setOauthError(null);
|
|
107
|
+
}
|
|
108
|
+
else if (error) {
|
|
109
|
+
setOauthLoading(false);
|
|
110
|
+
setOauthError(decodeURIComponent(error));
|
|
111
|
+
}
|
|
112
|
+
else if (isAlreadyAuthenticated) {
|
|
113
|
+
// If already authenticated, clear loading and params immediately
|
|
114
|
+
setOauthLoading(false);
|
|
115
|
+
clearQueryParams();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else if ((isInOtpFlow || isOtpLoadingStep) && !oauthLoading) {
|
|
119
|
+
// If we're in OTP flow (including OTP loading step), ensure OAuth loading is cleared
|
|
120
|
+
setOauthLoading(false);
|
|
121
|
+
}
|
|
122
|
+
// Also handle config.handleUrlParams if provided (only for OAuth)
|
|
123
|
+
if (config.handleUrlParams && isOAuthCallback && oauthPending) {
|
|
124
|
+
if (success === "true" && !isAlreadyAuthenticated) {
|
|
125
|
+
onboarding.setLoading(true);
|
|
126
|
+
}
|
|
127
|
+
else if (error) {
|
|
128
|
+
onboarding.setError(decodeURIComponent(error));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}, [
|
|
132
|
+
config.handleUrlParams,
|
|
133
|
+
onboarding,
|
|
134
|
+
whoami,
|
|
135
|
+
user,
|
|
136
|
+
isConnected,
|
|
137
|
+
clearQueryParams,
|
|
138
|
+
]);
|
|
139
|
+
// Hide loading modal when whoami API responds (success or error)
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
if (!oauthLoading)
|
|
142
|
+
return undefined;
|
|
143
|
+
// Check if authentication completed - verify actual data exists
|
|
144
|
+
const hasWhoamiData = whoami && (whoami.userId || whoami.address || whoami.organizationId);
|
|
145
|
+
const hasUserData = user && (user.id || user.email);
|
|
146
|
+
// Close modal on success (whoami data, user data, or connected)
|
|
147
|
+
if (hasWhoamiData || hasUserData || isConnected) {
|
|
148
|
+
setOauthLoading(false);
|
|
149
|
+
clearQueryParams();
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
// Close modal on error (when provider loading stops and there's an error, or when provider error is set)
|
|
153
|
+
// This indicates whoami API failed
|
|
154
|
+
if (!providerLoading && providerError) {
|
|
155
|
+
setOauthLoading(false);
|
|
156
|
+
setOauthError(providerError.message || "Authentication failed");
|
|
157
|
+
clearQueryParams();
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
// Poll for state updates every 100ms (very aggressive checking)
|
|
161
|
+
const intervalId = setInterval(() => {
|
|
162
|
+
// Use refs to get latest values
|
|
163
|
+
const currentWhoami = whoamiRef.current;
|
|
164
|
+
const currentUser = userRef.current;
|
|
165
|
+
const currentIsConnected = isConnectedRef.current;
|
|
166
|
+
const hasCurrentWhoamiData = currentWhoami &&
|
|
167
|
+
(currentWhoami.userId ||
|
|
168
|
+
currentWhoami.address ||
|
|
169
|
+
currentWhoami.organizationId);
|
|
170
|
+
const hasCurrentUserData = currentUser && (currentUser.id || currentUser.email);
|
|
171
|
+
// Close on success
|
|
172
|
+
if (hasCurrentWhoamiData || hasCurrentUserData || currentIsConnected) {
|
|
173
|
+
setOauthLoading(false);
|
|
174
|
+
clearQueryParams();
|
|
175
|
+
}
|
|
176
|
+
}, 100);
|
|
177
|
+
// Also check when provider loading stops (whoami API completed)
|
|
178
|
+
if (!providerLoading) {
|
|
179
|
+
const timeoutId = setTimeout(() => {
|
|
180
|
+
const currentWhoami = whoamiRef.current;
|
|
181
|
+
const currentUser = userRef.current;
|
|
182
|
+
const currentIsConnected = isConnectedRef.current;
|
|
183
|
+
const currentError = providerErrorRef.current;
|
|
184
|
+
const hasCurrentWhoamiData = currentWhoami &&
|
|
185
|
+
(currentWhoami.userId ||
|
|
186
|
+
currentWhoami.address ||
|
|
187
|
+
currentWhoami.organizationId);
|
|
188
|
+
const hasCurrentUserData = currentUser && (currentUser.id || currentUser.email);
|
|
189
|
+
// Close on success
|
|
190
|
+
if (hasCurrentWhoamiData || hasCurrentUserData || currentIsConnected) {
|
|
191
|
+
setOauthLoading(false);
|
|
192
|
+
clearQueryParams();
|
|
193
|
+
}
|
|
194
|
+
// Close on error (whoami API failed)
|
|
195
|
+
else if (currentError) {
|
|
196
|
+
setOauthLoading(false);
|
|
197
|
+
setOauthError(currentError.message || "Authentication failed");
|
|
198
|
+
clearQueryParams();
|
|
199
|
+
}
|
|
200
|
+
}, 200);
|
|
201
|
+
return () => {
|
|
202
|
+
clearInterval(intervalId);
|
|
203
|
+
clearTimeout(timeoutId);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return () => clearInterval(intervalId);
|
|
207
|
+
}, [
|
|
208
|
+
oauthLoading,
|
|
209
|
+
user,
|
|
210
|
+
isConnected,
|
|
211
|
+
whoami,
|
|
212
|
+
providerLoading,
|
|
213
|
+
providerError,
|
|
214
|
+
clearQueryParams,
|
|
215
|
+
]);
|
|
216
|
+
// Fallback: Hide loading modal after timeout (safety net)
|
|
217
|
+
useEffect(() => {
|
|
218
|
+
if (!oauthLoading)
|
|
219
|
+
return undefined;
|
|
220
|
+
const timeoutId = setTimeout(() => {
|
|
221
|
+
// If still loading after 3 seconds, hide it anyway
|
|
222
|
+
// This prevents infinite loading if something goes wrong
|
|
223
|
+
setOauthLoading(false);
|
|
224
|
+
clearQueryParams();
|
|
225
|
+
}, 3000);
|
|
226
|
+
return () => clearTimeout(timeoutId);
|
|
227
|
+
}, [oauthLoading, clearQueryParams]);
|
|
228
|
+
// Close modal on OTP success (when step becomes 'loading' after OTP verification)
|
|
229
|
+
useEffect(() => {
|
|
230
|
+
// If step is 'loading' and we're in modal mode, and user is authenticated, close the modal
|
|
231
|
+
if (modal &&
|
|
232
|
+
onboarding.step === "loading" &&
|
|
233
|
+
(user || isConnected || whoami)) {
|
|
234
|
+
// Check if this is from OTP flow (no OAuth provider in URL)
|
|
235
|
+
const params = new URLSearchParams(window.location.search);
|
|
236
|
+
const provider = params.get("provider") || params.get("authProvider");
|
|
237
|
+
const isOAuthCallback = provider &&
|
|
238
|
+
(provider === "google" ||
|
|
239
|
+
provider === "discord" ||
|
|
240
|
+
provider === "twitter");
|
|
241
|
+
// Only close if it's OTP flow, not OAuth
|
|
242
|
+
if (!isOAuthCallback && onClose) {
|
|
243
|
+
// Small delay to ensure state is updated
|
|
244
|
+
setTimeout(() => {
|
|
245
|
+
onClose();
|
|
246
|
+
}, 100);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}, [modal, onboarding.step, user, isConnected, whoami, onClose]);
|
|
250
|
+
// Reset when modal closes
|
|
251
|
+
useEffect(() => {
|
|
252
|
+
if (!modal && onClose) {
|
|
253
|
+
const handleClose = () => {
|
|
254
|
+
onboarding.reset();
|
|
255
|
+
};
|
|
256
|
+
return handleClose;
|
|
257
|
+
}
|
|
258
|
+
return;
|
|
259
|
+
}, [modal, onClose, onboarding]);
|
|
260
|
+
const handleClose = () => {
|
|
261
|
+
onboarding.reset();
|
|
262
|
+
onClose?.();
|
|
263
|
+
};
|
|
264
|
+
// Helper to render modal content with header and footer
|
|
265
|
+
const renderModalContent = (children) => (_jsx("div", { className: `onboarding-container onboarding-theme-${theme} ${config.className || ""}`, children: _jsxs("div", { className: "onboarding-card", children: [_jsxs("div", { className: "onboarding-header", children: [config.logo && (_jsx("div", { className: "onboarding-logo-section", children: _jsx("div", { className: "onboarding-logo-container", children: _jsx("img", { src: config.logo, alt: "Logo", className: "onboarding-logo-img" }) }) })), _jsx("h1", { className: "onboarding-title", id: "onboarding-title", children: config.onboardTitle || "Sign In" })] }), children, config.showFooter !== false && (_jsx("div", { className: "onboarding-footer", children: _jsxs("p", { className: "onboarding-footer-text", children: ["Powered by", " ", _jsxs("a", { href: "https://abstraxn.com", target: "_blank", rel: "noopener noreferrer", className: "onboarding-footer-brand", style: {
|
|
266
|
+
display: "inline-flex",
|
|
267
|
+
alignItems: "center",
|
|
268
|
+
gap: "6px",
|
|
269
|
+
}, children: [_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 48 48", fill: "none", style: { display: "inline-block", verticalAlign: "middle" }, children: [_jsx("path", { d: "M47.9082 37.191L23.9541 23.553L0 9.91504L37.7436 -8.13502e-06L47.9082 37.191Z", fill: "url(#paint0_linear_1242_781)" }), _jsx("path", { d: "M13.5156 46.3594L10.1846 47.2344L8.99219 42.873L12.4365 42.4111L13.5156 46.3594ZM20.4268 44.5566L17.1152 45.4199L16.125 41.8818L19.5566 41.3721L20.4268 44.5566ZM26.9307 42.834L23.6152 43.6982L22.8438 40.9443L26.2744 40.4326L26.9307 42.834ZM33.5078 41.1074L30.1875 41.9727L29.6328 39.9951L33.0635 39.4844L33.5078 41.1074ZM39.998 39.4014L36.6729 40.2686L36.3359 39.0674L39.7656 38.5508L39.998 39.4014ZM10.1406 33.9434L11.6807 39.5762L8.15918 39.7568L6.46094 33.543L10.1406 33.9434ZM17.6582 34.5996L18.8916 39.1113L15.4199 39.3496L14.0078 34.3076L17.6582 34.5996ZM24.8779 35.332L25.8047 38.7227L22.3252 38.959L21.2266 35.0361L24.8779 35.332ZM32.0918 36.0723L32.7119 38.3398L29.2227 38.5723L28.4375 35.7656L32.0918 36.0723ZM43.2373 38.5488L43.1172 38.1172L47.7939 37.3516L43.2373 38.5488ZM39.3047 36.8096L39.6182 37.9561L36.1221 38.1846L35.6484 36.4961L39.3047 36.8096ZM47.7939 37.3516L43.0107 37.7939L42.8516 37.2236L47.7939 37.3516ZM47.8291 37.2988L42.7227 36.7529L42.5547 36.1523L47.8291 37.2988ZM47.8652 37.2412L42.3711 35.3486L42.2031 34.7471L47.8652 37.2412ZM38.748 34.8604L39.0664 36.0254L35.3369 35.4043L34.8594 33.6982L38.748 34.8604ZM31.0576 32.3994L31.6787 34.6709L27.959 34.0566L27.1719 31.2461L31.0576 32.3994ZM38.0811 32.6318L38.4092 33.8301L34.4893 32.3496L34.1543 31.1523C34.1005 30.9591 34.0322 30.7719 33.9531 30.5918L38.0811 32.6318ZM23.3682 29.9385L24.291 33.3164L20.5801 32.71L19.4844 28.7949L23.3682 29.9385ZM15.6641 27.4805L16.8896 31.9629L13.1875 31.3594L11.7812 26.3379L15.6641 27.4805ZM29.9463 28.4678L30.5693 30.748L26.6201 29.2812L25.8633 26.583C25.8534 26.5431 25.8417 26.5028 25.8281 26.4639L29.9463 28.4678ZM7.6875 25.0938L9.21484 30.6816L5.44727 29.959L3.75781 23.7793L7.6875 25.0938ZM21.5312 23.3623L22.4492 26.7227L18.5059 25.2627L17.4141 21.3643L21.5312 23.3623ZM13.6104 20.1602L14.8242 24.6006L10.8887 23.1387L9.49219 18.1553L13.6104 20.1602ZM5.2168 16.0654L6.72559 21.585L2.70703 19.9473L1.06055 13.8701L5.2168 16.0654Z", fill: "url(#paint1_linear_1242_781)" }), _jsxs("defs", { children: [_jsxs("linearGradient", { id: "paint0_linear_1242_781", x1: "7.03362", y1: "6.09543", x2: "47.2003", y2: "57.0656", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#F878D2" }), _jsx("stop", { offset: "0.393522", stopColor: "#FDCC81" }), _jsx("stop", { offset: "1", stopColor: "#F9A0D9" })] }), _jsxs("linearGradient", { id: "paint1_linear_1242_781", x1: "2.53739", y1: "21.5136", x2: "48.7969", y2: "38.5742", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#F878D2" }), _jsx("stop", { offset: "0.393522", stopColor: "#FDCC81" }), _jsx("stop", { offset: "1", stopColor: "#F9A0D9" })] })] })] }), _jsx("span", { children: "abstraxn" })] })] }) }))] }) }));
|
|
270
|
+
const showEmailForm = onboarding.step === "email" &&
|
|
271
|
+
authMethods.includes("otp") &&
|
|
272
|
+
!showExternalWallets;
|
|
273
|
+
const showOtpForm = onboarding.step === "otp" && authMethods.includes("otp");
|
|
274
|
+
const showSocialButtons = onboarding.step === "email" &&
|
|
275
|
+
!showExternalWallets &&
|
|
276
|
+
(authMethods.includes("google") ||
|
|
277
|
+
authMethods.includes("twitter") ||
|
|
278
|
+
authMethods.includes("discord"));
|
|
279
|
+
const showPasskey = onboarding.step === "email" &&
|
|
280
|
+
!showExternalWallets &&
|
|
281
|
+
authMethods.includes("passkey");
|
|
282
|
+
const showExternalWalletsSection = onboarding.step === "email" &&
|
|
283
|
+
externalWalletsEnabled &&
|
|
284
|
+
availableConnectors.length > 0;
|
|
285
|
+
const content = (_jsx("div", { className: `onboarding-container onboarding-theme-${theme} ${config.className || ""}`, children: _jsxs("div", { className: `onboarding-card ${showOtpForm ? "onboarding-card-otp" : ""}`, children: [!showOtpForm && (_jsxs("div", { className: "onboarding-header", children: [config.logo && (_jsx("div", { className: "onboarding-logo-section", children: _jsx("div", { className: "onboarding-logo-container", children: _jsx("img", { src: config.logo, alt: "Logo", className: "onboarding-logo-img" }) }) })), _jsx("h1", { className: "onboarding-title", id: "onboarding-title", children: config.onboardTitle || "Sign In" })] })), showEmailForm && (_jsx(EmailForm, { email: onboarding.email, onChange: onboarding.setEmail, onSubmit: onboarding.handleEmailSubmit, loading: onboarding.loading, error: onboarding.error, config: config })), showOtpForm && (_jsx(OtpForm, { email: onboarding.email, otp: onboarding.otp, onChange: onboarding.setOtp, onSubmit: onboarding.handleOtpSubmit, onResend: onboarding.handleResendOtp, onBack: onboarding.reset, loading: onboarding.loading, error: onboarding.error, resendCooldown: onboarding.resendCooldown, config: config })), onboarding.step === "error" && onboarding.error && (_jsxs("div", { className: "onboarding-error-container", children: [_jsx("div", { className: "onboarding-error", role: "alert", children: onboarding.error.startsWith("{") &&
|
|
286
|
+
onboarding.error.endsWith("}")
|
|
287
|
+
? onboarding.error
|
|
288
|
+
: `{ ${onboarding.error} }` }), _jsx("button", { type: "button", className: "onboarding-button onboarding-button-primary", onClick: onboarding.reset, children: "Try Again" })] })), showSocialButtons && (showEmailForm || showOtpForm) && (_jsx("div", { className: "onboarding-divider", children: _jsx("span", { className: "onboarding-divider-text", children: "or" }) })), showSocialButtons && (_jsx(SocialButtons, { onGoogleLogin: authMethodsHook.handleGoogleLogin, onTwitterLogin: authMethodsHook.handleTwitterLogin, onDiscordLogin: authMethodsHook.handleDiscordLogin, loading: authMethodsHook.loading, config: config })), showPasskey && (_jsx(PasskeyButton, { onPasskeyLogin: authMethodsHook.handlePasskeyLogin, onPasskeySignup: authMethodsHook.handlePasskeySignup, loading: authMethodsHook.loading, config: config })), showExternalWalletsSection && (_jsxs(_Fragment, { children: [!showExternalWallets && (_jsx("div", { className: "onboarding-divider", children: _jsx("span", { className: "onboarding-divider-text", children: "or" }) })), _jsx("div", { style: { marginTop: showExternalWallets ? "0" : "12px" }, children: _jsx(ExternalWalletButtons, { onShowMoreWallets: () => setShowExternalWallets(true), onHideMoreWallets: () => setShowExternalWallets(false) }) })] })), config.showFooter !== false && (_jsx("div", { className: "onboarding-footer", children: _jsxs("p", { className: "onboarding-footer-text", children: ["Powered by", " ", _jsxs("a", { href: "https://abstraxn.com", target: "_blank", rel: "noopener noreferrer", className: "onboarding-footer-brand", style: {
|
|
289
|
+
display: "inline-flex",
|
|
290
|
+
alignItems: "center",
|
|
291
|
+
gap: "6px",
|
|
292
|
+
}, children: [_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 48 48", fill: "none", style: { display: "inline-block", verticalAlign: "middle" }, children: [_jsx("path", { d: "M47.9082 37.191L23.9541 23.553L0 9.91504L37.7436 -8.13502e-06L47.9082 37.191Z", fill: "url(#paint0_linear_1242_781)" }), _jsx("path", { d: "M13.5156 46.3594L10.1846 47.2344L8.99219 42.873L12.4365 42.4111L13.5156 46.3594ZM20.4268 44.5566L17.1152 45.4199L16.125 41.8818L19.5566 41.3721L20.4268 44.5566ZM26.9307 42.834L23.6152 43.6982L22.8438 40.9443L26.2744 40.4326L26.9307 42.834ZM33.5078 41.1074L30.1875 41.9727L29.6328 39.9951L33.0635 39.4844L33.5078 41.1074ZM39.998 39.4014L36.6729 40.2686L36.3359 39.0674L39.7656 38.5508L39.998 39.4014ZM10.1406 33.9434L11.6807 39.5762L8.15918 39.7568L6.46094 33.543L10.1406 33.9434ZM17.6582 34.5996L18.8916 39.1113L15.4199 39.3496L14.0078 34.3076L17.6582 34.5996ZM24.8779 35.332L25.8047 38.7227L22.3252 38.959L21.2266 35.0361L24.8779 35.332ZM32.0918 36.0723L32.7119 38.3398L29.2227 38.5723L28.4375 35.7656L32.0918 36.0723ZM43.2373 38.5488L43.1172 38.1172L47.7939 37.3516L43.2373 38.5488ZM39.3047 36.8096L39.6182 37.9561L36.1221 38.1846L35.6484 36.4961L39.3047 36.8096ZM47.7939 37.3516L43.0107 37.7939L42.8516 37.2236L47.7939 37.3516ZM47.8291 37.2988L42.7227 36.7529L42.5547 36.1523L47.8291 37.2988ZM47.8652 37.2412L42.3711 35.3486L42.2031 34.7471L47.8652 37.2412ZM38.748 34.8604L39.0664 36.0254L35.3369 35.4043L34.8594 33.6982L38.748 34.8604ZM31.0576 32.3994L31.6787 34.6709L27.959 34.0566L27.1719 31.2461L31.0576 32.3994ZM38.0811 32.6318L38.4092 33.8301L34.4893 32.3496L34.1543 31.1523C34.1005 30.9591 34.0322 30.7719 33.9531 30.5918L38.0811 32.6318ZM23.3682 29.9385L24.291 33.3164L20.5801 32.71L19.4844 28.7949L23.3682 29.9385ZM15.6641 27.4805L16.8896 31.9629L13.1875 31.3594L11.7812 26.3379L15.6641 27.4805ZM29.9463 28.4678L30.5693 30.748L26.6201 29.2812L25.8633 26.583C25.8534 26.5431 25.8417 26.5028 25.8281 26.4639L29.9463 28.4678ZM7.6875 25.0938L9.21484 30.6816L5.44727 29.959L3.75781 23.7793L7.6875 25.0938ZM21.5312 23.3623L22.4492 26.7227L18.5059 25.2627L17.4141 21.3643L21.5312 23.3623ZM13.6104 20.1602L14.8242 24.6006L10.8887 23.1387L9.49219 18.1553L13.6104 20.1602ZM5.2168 16.0654L6.72559 21.585L2.70703 19.9473L1.06055 13.8701L5.2168 16.0654Z", fill: "url(#paint1_linear_1242_781)" }), _jsxs("defs", { children: [_jsxs("linearGradient", { id: "paint0_linear_1242_781", x1: "7.03362", y1: "6.09543", x2: "47.2003", y2: "57.0656", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#F878D2" }), _jsx("stop", { offset: "0.393522", stopColor: "#FDCC81" }), _jsx("stop", { offset: "1", stopColor: "#F9A0D9" })] }), _jsxs("linearGradient", { id: "paint1_linear_1242_781", x1: "2.53739", y1: "21.5136", x2: "48.7969", y2: "38.5742", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#F878D2" }), _jsx("stop", { offset: "0.393522", stopColor: "#FDCC81" }), _jsx("stop", { offset: "1", stopColor: "#F9A0D9" })] })] })] }), _jsx("span", { children: "abstraxn" })] })] }) }))] }) }));
|
|
293
|
+
// OAuth Loading Modal (only show for OAuth flows, never during OTP flow)
|
|
294
|
+
// Check if we're in OTP flow - only email and otp steps, not loading (loading can be OAuth too)
|
|
295
|
+
const isInOtpFlow = onboarding.step === "email" || onboarding.step === "otp";
|
|
296
|
+
// Show OAuth loading modal if oauthLoading is true and not in OTP flow
|
|
297
|
+
if (oauthLoading && !isInOtpFlow) {
|
|
298
|
+
return (_jsx(Modal, { isOpen: true, onClose: () => {
|
|
299
|
+
setOauthLoading(false);
|
|
300
|
+
clearQueryParams();
|
|
301
|
+
}, closeOnBackdropClick: config.closeOnBackdropClick !== false, theme: theme, children: renderModalContent(_jsxs("div", { className: "onboarding-loading", style: { textAlign: "center", padding: "40px" }, children: [_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: { animation: "spin 1s linear infinite" }, children: [_jsx("line", { x1: "12", y1: "2", x2: "12", y2: "6" }), _jsx("line", { x1: "12", y1: "18", x2: "12", y2: "22" }), _jsx("line", { x1: "4.93", y1: "4.93", x2: "7.76", y2: "7.76" }), _jsx("line", { x1: "16.24", y1: "16.24", x2: "19.07", y2: "19.07" }), _jsx("line", { x1: "2", y1: "12", x2: "6", y2: "12" }), _jsx("line", { x1: "18", y1: "12", x2: "22", y2: "12" }), _jsx("line", { x1: "4.93", y1: "19.07", x2: "7.76", y2: "16.24" }), _jsx("line", { x1: "16.24", y1: "7.76", x2: "19.07", y2: "4.93" })] }), _jsx("p", { style: { marginTop: "16px" }, children: "Authenticating..." })] })) }));
|
|
302
|
+
}
|
|
303
|
+
// OAuth Error Modal
|
|
304
|
+
if (oauthError) {
|
|
305
|
+
return (_jsx(Modal, { isOpen: true, onClose: () => {
|
|
306
|
+
setOauthError(null);
|
|
307
|
+
clearQueryParams();
|
|
308
|
+
}, closeOnBackdropClick: config.closeOnBackdropClick !== false, theme: theme, children: renderModalContent(_jsxs("div", { className: "onboarding-error-container", style: { padding: "40px", textAlign: "center" }, children: [_jsx("div", { className: "onboarding-error", role: "alert", children: oauthError }), _jsx("button", { type: "button", className: "onboarding-button onboarding-button-primary", onClick: () => {
|
|
309
|
+
setOauthError(null);
|
|
310
|
+
clearQueryParams();
|
|
311
|
+
}, style: { marginTop: "24px" }, children: "Close" })] })) }));
|
|
312
|
+
}
|
|
313
|
+
if (modal) {
|
|
314
|
+
return (_jsx(Modal, { isOpen: true, onClose: handleClose, closeOnBackdropClick: config.closeOnBackdropClick !== false, theme: theme, children: content }));
|
|
315
|
+
}
|
|
316
|
+
return content;
|
|
317
|
+
};
|
|
318
|
+
//# sourceMappingURL=OnboardingUIReact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnboardingUIReact.js","sourceRoot":"","sources":["../../../../src/components/OnboardingUI/OnboardingUIReact.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import type { OnboardingUIConfig, Theme } from "@abstraxn/signer-core";
|
|
2
|
+
/**
|
|
3
|
+
* OnboardingUI Class
|
|
4
|
+
*
|
|
5
|
+
* A customizable user onboarding component with email-OTP and Google login options.
|
|
6
|
+
* Works with vanilla JavaScript - no framework dependencies required.
|
|
7
|
+
*/
|
|
8
|
+
export declare class OnboardingUIWeb {
|
|
9
|
+
private static stylesInjected;
|
|
10
|
+
private config;
|
|
11
|
+
private container;
|
|
12
|
+
private rootElement;
|
|
13
|
+
private modalOverlay;
|
|
14
|
+
private modalContent;
|
|
15
|
+
private emailInput;
|
|
16
|
+
private otpInput;
|
|
17
|
+
private otpInputs;
|
|
18
|
+
private autoSubmitEnabled;
|
|
19
|
+
private emailForm;
|
|
20
|
+
private continueButton;
|
|
21
|
+
private emailArrowButton;
|
|
22
|
+
private googleButton;
|
|
23
|
+
private twitterButton;
|
|
24
|
+
private discordButton;
|
|
25
|
+
private passkeyLoginButton;
|
|
26
|
+
private passkeySignupLink;
|
|
27
|
+
private passkeyDivider;
|
|
28
|
+
private passkeyErrorElement;
|
|
29
|
+
private errorElement;
|
|
30
|
+
private otpGroup;
|
|
31
|
+
private otpVerificationScreen;
|
|
32
|
+
private resendButton;
|
|
33
|
+
private socialGrid;
|
|
34
|
+
externalWalletContainer: HTMLElement | null;
|
|
35
|
+
externalWalletDivider: HTMLElement | null;
|
|
36
|
+
private divider;
|
|
37
|
+
private footer;
|
|
38
|
+
private verifyButton;
|
|
39
|
+
private email;
|
|
40
|
+
private otp;
|
|
41
|
+
private otpSent;
|
|
42
|
+
private loading;
|
|
43
|
+
private activeButton;
|
|
44
|
+
private resendCooldown;
|
|
45
|
+
private resendCooldownTimer;
|
|
46
|
+
private externalWalletsEnabled;
|
|
47
|
+
constructor(config: OnboardingUIConfig, externalWalletsEnabled?: boolean);
|
|
48
|
+
/**
|
|
49
|
+
* Show external wallet container and divider
|
|
50
|
+
* Call this before init() to prevent flicker when external wallets are enabled
|
|
51
|
+
*/
|
|
52
|
+
showExternalWallets(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Initialize and render the component
|
|
55
|
+
*/
|
|
56
|
+
init(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Check URL parameters for social login callbacks
|
|
59
|
+
*/
|
|
60
|
+
private checkUrlParams;
|
|
61
|
+
/**
|
|
62
|
+
* Show error screen or modal (public method)
|
|
63
|
+
*/
|
|
64
|
+
showError(message: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Show error screen
|
|
67
|
+
*/
|
|
68
|
+
private showErrorScreen;
|
|
69
|
+
/**
|
|
70
|
+
* Show loading screen
|
|
71
|
+
*/
|
|
72
|
+
private showLoadingScreen;
|
|
73
|
+
/**
|
|
74
|
+
* Show loading screen as a modal overlay (for inline components)
|
|
75
|
+
* Public method to allow external access
|
|
76
|
+
*/
|
|
77
|
+
showLoadingModal(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Hide loading modal overlay
|
|
80
|
+
*/
|
|
81
|
+
hideLoadingModal(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Show error screen as a modal overlay (for inline components)
|
|
84
|
+
*/
|
|
85
|
+
private showErrorModal;
|
|
86
|
+
/**
|
|
87
|
+
* Inject CSS styles into the document head (only once)
|
|
88
|
+
*/
|
|
89
|
+
private injectStyles;
|
|
90
|
+
/**
|
|
91
|
+
* Apply custom colors from config
|
|
92
|
+
*/
|
|
93
|
+
private applyCustomColors;
|
|
94
|
+
/**
|
|
95
|
+
* Setup the container element
|
|
96
|
+
*/
|
|
97
|
+
private setupContainer;
|
|
98
|
+
/**
|
|
99
|
+
* Render the component
|
|
100
|
+
*/
|
|
101
|
+
private render;
|
|
102
|
+
/**
|
|
103
|
+
* Render as modal overlay
|
|
104
|
+
*/
|
|
105
|
+
private renderAsModal;
|
|
106
|
+
/**
|
|
107
|
+
* Trap focus within modal for accessibility
|
|
108
|
+
*/
|
|
109
|
+
private trapFocus;
|
|
110
|
+
/**
|
|
111
|
+
* Render inline (non-modal)
|
|
112
|
+
*/
|
|
113
|
+
private renderInline;
|
|
114
|
+
/**
|
|
115
|
+
* Build form content (shared between modal and inline)
|
|
116
|
+
*/
|
|
117
|
+
private buildFormContent;
|
|
118
|
+
/**
|
|
119
|
+
* Attach event listeners
|
|
120
|
+
*/
|
|
121
|
+
private attachEventListeners;
|
|
122
|
+
/**
|
|
123
|
+
* Handle email form submission
|
|
124
|
+
*/
|
|
125
|
+
private handleEmailSubmit;
|
|
126
|
+
/**
|
|
127
|
+
* Handle Google login
|
|
128
|
+
*/
|
|
129
|
+
private handleGoogleLogin;
|
|
130
|
+
/**
|
|
131
|
+
* Handle Twitter login
|
|
132
|
+
*/
|
|
133
|
+
private handleTwitterLogin;
|
|
134
|
+
/**
|
|
135
|
+
* Handle Discord login
|
|
136
|
+
*/
|
|
137
|
+
private handleDiscordLogin;
|
|
138
|
+
/**
|
|
139
|
+
* Hide all login-related elements (social buttons, passkey, etc.)
|
|
140
|
+
* This ensures they stay hidden on the OTP screen
|
|
141
|
+
* Made public so it can be called from AbstraxnProvider
|
|
142
|
+
*/
|
|
143
|
+
hideLoginElements(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Show OTP verification screen
|
|
146
|
+
*/
|
|
147
|
+
private showOtpInput;
|
|
148
|
+
/**
|
|
149
|
+
* Create OTP verification screen with 6 input fields
|
|
150
|
+
*/
|
|
151
|
+
private createOtpVerificationScreen;
|
|
152
|
+
/**
|
|
153
|
+
* Create email icon SVG
|
|
154
|
+
*/
|
|
155
|
+
private createEmailIconSVG;
|
|
156
|
+
/**
|
|
157
|
+
* Handle OTP input - auto-advance to next field
|
|
158
|
+
*/
|
|
159
|
+
private handleOtpInput;
|
|
160
|
+
/**
|
|
161
|
+
* Handle OTP keydown - backspace to go to previous field
|
|
162
|
+
*/
|
|
163
|
+
private handleOtpKeydown;
|
|
164
|
+
/**
|
|
165
|
+
* Handle OTP paste - fill all fields from clipboard
|
|
166
|
+
*/
|
|
167
|
+
private handleOtpPaste;
|
|
168
|
+
/**
|
|
169
|
+
* Update OTP value from input fields
|
|
170
|
+
*/
|
|
171
|
+
private updateOtpValue;
|
|
172
|
+
/**
|
|
173
|
+
* Handle OTP verification
|
|
174
|
+
*/
|
|
175
|
+
private handleOtpVerify;
|
|
176
|
+
/**
|
|
177
|
+
* Handle resend OTP
|
|
178
|
+
*/
|
|
179
|
+
private handleResendOtp;
|
|
180
|
+
/**
|
|
181
|
+
* Start resend cooldown timer
|
|
182
|
+
*/
|
|
183
|
+
private startResendCooldown;
|
|
184
|
+
/**
|
|
185
|
+
* Set error message
|
|
186
|
+
*/
|
|
187
|
+
private setError;
|
|
188
|
+
/**
|
|
189
|
+
* Set loading state
|
|
190
|
+
*/
|
|
191
|
+
private setLoading;
|
|
192
|
+
/**
|
|
193
|
+
* Update button state
|
|
194
|
+
*/
|
|
195
|
+
private updateButtonState;
|
|
196
|
+
/**
|
|
197
|
+
* Update theme
|
|
198
|
+
*/
|
|
199
|
+
setTheme(theme: Theme): void;
|
|
200
|
+
/**
|
|
201
|
+
* Show/hide component
|
|
202
|
+
*/
|
|
203
|
+
setVisible(visible: boolean): void;
|
|
204
|
+
/**
|
|
205
|
+
* Reset OTP screen and show initial login form
|
|
206
|
+
*/
|
|
207
|
+
resetToLoginForm(): void;
|
|
208
|
+
/**
|
|
209
|
+
* Close the modal
|
|
210
|
+
*/
|
|
211
|
+
close(): void;
|
|
212
|
+
/**
|
|
213
|
+
* Destroy the component
|
|
214
|
+
*/
|
|
215
|
+
destroy(): void;
|
|
216
|
+
/**
|
|
217
|
+
* Create DOM element helper
|
|
218
|
+
*/
|
|
219
|
+
private createElement;
|
|
220
|
+
/**
|
|
221
|
+
* Parse style object or string
|
|
222
|
+
*/
|
|
223
|
+
private parseStyle;
|
|
224
|
+
/**
|
|
225
|
+
* Create email icon SVG
|
|
226
|
+
*/
|
|
227
|
+
private createEmailIcon;
|
|
228
|
+
/**
|
|
229
|
+
* Create Google icon SVG
|
|
230
|
+
*/
|
|
231
|
+
private createGoogleIcon;
|
|
232
|
+
/**
|
|
233
|
+
* Create right arrow icon SVG
|
|
234
|
+
*/
|
|
235
|
+
private createArrowIcon;
|
|
236
|
+
/**
|
|
237
|
+
* Create passkey icon SVG
|
|
238
|
+
*/
|
|
239
|
+
private createPasskeyIcon;
|
|
240
|
+
/**
|
|
241
|
+
* Create X (Twitter) icon SVG
|
|
242
|
+
*/
|
|
243
|
+
private createTwitterIcon;
|
|
244
|
+
/**
|
|
245
|
+
* Create Discord icon SVG
|
|
246
|
+
*/
|
|
247
|
+
private createDiscordIcon;
|
|
248
|
+
/**
|
|
249
|
+
* Handle passkey login
|
|
250
|
+
*/
|
|
251
|
+
private handlePasskeyLogin;
|
|
252
|
+
/**
|
|
253
|
+
* Handle passkey signup
|
|
254
|
+
*/
|
|
255
|
+
private handlePasskeySignup;
|
|
256
|
+
/**
|
|
257
|
+
* Show passkey-specific error near the passkey controls
|
|
258
|
+
*/
|
|
259
|
+
private showPasskeyError;
|
|
260
|
+
/**
|
|
261
|
+
* Hide passkey-specific error
|
|
262
|
+
*/
|
|
263
|
+
private hidePasskeyError;
|
|
264
|
+
}
|
|
265
|
+
export default OnboardingUIWeb;
|