@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
package/README.md
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# @abstraxn/signer-react
|
|
2
|
+
|
|
3
|
+
**React SDK** for Abstraxn Wallet - React components, hooks, and providers for seamless Web3 wallet integration.
|
|
4
|
+
|
|
5
|
+
This package provides React-specific components and hooks that use `@abstraxn/signer-core` under the hood.
|
|
6
|
+
|
|
7
|
+
## 📦 Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @abstraxn/signer-react
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Requirements:**
|
|
14
|
+
- React 18.0.0 or higher (supports both React 18 and React 19)
|
|
15
|
+
- Node.js 16.0.0 or higher
|
|
16
|
+
- `@abstraxn/signer-core` (installed automatically as a dependency)
|
|
17
|
+
|
|
18
|
+
## 🚀 Quick Start
|
|
19
|
+
|
|
20
|
+
### 1. Wrap Your App with AbstraxnProvider
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { AbstraxnProvider, type AbstraxnProviderConfig } from '@abstraxn/signer-react';
|
|
24
|
+
import { StrictMode } from 'react';
|
|
25
|
+
import { createRoot } from 'react-dom/client';
|
|
26
|
+
import App from './App';
|
|
27
|
+
|
|
28
|
+
const providerConfig: AbstraxnProviderConfig = {
|
|
29
|
+
apiKey: 'your-api-key-here',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
createRoot(document.getElementById('root')!).render(
|
|
33
|
+
<StrictMode>
|
|
34
|
+
<AbstraxnProvider config={providerConfig}>
|
|
35
|
+
<App />
|
|
36
|
+
</AbstraxnProvider>
|
|
37
|
+
</StrictMode>,
|
|
38
|
+
);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Use the ConnectButton Component
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import { ConnectButton } from "@abstraxn/signer-react";
|
|
45
|
+
|
|
46
|
+
function App() {
|
|
47
|
+
return (
|
|
48
|
+
<div>
|
|
49
|
+
<ConnectButton
|
|
50
|
+
connectText="Connect Wallet"
|
|
51
|
+
connectedText="Connected"
|
|
52
|
+
showAddress={true}
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3. Or Use Hooks for Custom Integration
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import { useAbstraxnWallet } from "@abstraxn/signer-react";
|
|
63
|
+
|
|
64
|
+
function HookConnectButton() {
|
|
65
|
+
const { showOnboarding, loading } = useAbstraxnWallet();
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<button
|
|
69
|
+
onClick={showOnboarding}
|
|
70
|
+
disabled={loading}
|
|
71
|
+
className="demo-connect-button"
|
|
72
|
+
>
|
|
73
|
+
{loading ? 'Connecting...' : 'Connect via Hook'}
|
|
74
|
+
</button>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## ✨ Features
|
|
80
|
+
|
|
81
|
+
- 🔐 **Multiple Auth Methods**: Email OTP, Social login (Google, Discord, X), Passkey, External wallets
|
|
82
|
+
- 💼 **Wallet Management**: Connect, disconnect, view wallet info, export wallets
|
|
83
|
+
- 🎨 **Beautiful UI Components**: Pre-built ConnectButton, WalletModal, and OnboardingUI
|
|
84
|
+
- 🌓 **Theme Support**: Light and dark themes
|
|
85
|
+
- 🔄 **Auto-Reconnect**: Automatic session restoration
|
|
86
|
+
- 📱 **Responsive Design**: Works on all devices
|
|
87
|
+
- ⚡ **TypeScript**: Full TypeScript support
|
|
88
|
+
- 🌐 **Multi-Chain**: Support for multiple blockchain networks
|
|
89
|
+
|
|
90
|
+
## 📚 Components
|
|
91
|
+
|
|
92
|
+
- `AbstraxnProvider` - Context provider
|
|
93
|
+
- `ConnectButton` - Ready-to-use connect button
|
|
94
|
+
- `WalletModal` - Wallet management modal
|
|
95
|
+
- `OnboardingUI` - Authentication UI component
|
|
96
|
+
|
|
97
|
+
## 🪝 Hooks
|
|
98
|
+
|
|
99
|
+
- `useAbstraxnWallet()` - Main wallet hook
|
|
100
|
+
- `useIsConnected()` - Check connection status
|
|
101
|
+
- `useAddress()` - Get wallet address
|
|
102
|
+
- `useWhoami()` - Get user information
|
|
103
|
+
- `useExternalWalletInfo()` - External wallet information
|
|
104
|
+
- `usePrepareTransaction()` - Prepare and sign transactions
|
|
105
|
+
- `useExportWallet()` - Export wallet
|
|
106
|
+
|
|
107
|
+
## 🔗 Related Packages
|
|
108
|
+
|
|
109
|
+
- **@abstraxn/signer-core** - Core SDK (dependency)
|
|
110
|
+
- **@abstraxn/signer** - Backward compatible wrapper (deprecated)
|
|
111
|
+
|
|
112
|
+
## 📝 License
|
|
113
|
+
|
|
114
|
+
MIT
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstraxn Wallet Provider - React Context Provider
|
|
3
|
+
* Wrap your app with this provider to use Abstraxn Wallet SDK
|
|
4
|
+
*
|
|
5
|
+
* This file now re-exports from the modular component structure.
|
|
6
|
+
* The actual implementation is in components/AbstraxnProvider/
|
|
7
|
+
*/
|
|
8
|
+
export { AbstraxnProvider, AbstraxnContext, useAbstraxnWallet, } from "./components/AbstraxnProvider";
|
|
9
|
+
export type { AbstraxnProviderConfig, AbstraxnContextValue } from "./types";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstraxn Wallet Provider - React Context Provider
|
|
3
|
+
* Wrap your app with this provider to use Abstraxn Wallet SDK
|
|
4
|
+
*
|
|
5
|
+
* This file now re-exports from the modular component structure.
|
|
6
|
+
* The actual implementation is in components/AbstraxnProvider/
|
|
7
|
+
*/
|
|
8
|
+
// Re-export main provider and hook
|
|
9
|
+
export { AbstraxnProvider, AbstraxnContext, useAbstraxnWallet, } from "./components/AbstraxnProvider";
|
|
10
|
+
// Keep the original implementation below for reference during migration
|
|
11
|
+
// TODO: Remove this once migration is complete and tested
|
|
12
|
+
/*
|
|
13
|
+
* ORIGINAL IMPLEMENTATION - Being migrated to components/AbstraxnProvider/
|
|
14
|
+
* This section will be removed once the migration is complete
|
|
15
|
+
*/
|
|
16
|
+
/*
|
|
17
|
+
* ORIGINAL IMPLEMENTATION COMMENTED OUT
|
|
18
|
+
* See components/AbstraxnProvider/ for the new modular implementation
|
|
19
|
+
*/
|
|
20
|
+
/* END OF ORIGINAL IMPLEMENTATION */
|
|
21
|
+
//# sourceMappingURL=AbstraxnProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstraxnProvider.js","sourceRoot":"","sources":["../../src/AbstraxnProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mCAAmC;AACnC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AAKvC,wEAAwE;AACxE,0DAA0D;AAE1D;;;GAGG;AAEH;;;GAGG;AACH,oCAAoC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/* ConnectButton Styles */
|
|
2
|
+
.abstraxn-connect-button {
|
|
3
|
+
position: relative;
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
gap: 8px;
|
|
8
|
+
padding: 12px 24px;
|
|
9
|
+
font-size: 16px;
|
|
10
|
+
font-weight: 600;
|
|
11
|
+
line-height: 1.5;
|
|
12
|
+
border-radius: 12px;
|
|
13
|
+
border: none;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: all 0.2s ease-in-out;
|
|
16
|
+
font-family: 'GeistSans', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
user-select: none;
|
|
19
|
+
outline: none;
|
|
20
|
+
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.abstraxn-connect-button:focus-visible {
|
|
24
|
+
outline-offset: 2px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.abstraxn-connect-button-light:focus-visible {
|
|
28
|
+
outline: 2px solid #111827;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.abstraxn-connect-button-dark:focus-visible {
|
|
32
|
+
outline: 2px solid #9ca3af;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.abstraxn-connect-button:disabled {
|
|
36
|
+
opacity: 0.6;
|
|
37
|
+
cursor: not-allowed;
|
|
38
|
+
pointer-events: none;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Light Theme (Default) */
|
|
42
|
+
.abstraxn-connect-button.abstraxn-connect-button-light {
|
|
43
|
+
background-color: #111827;
|
|
44
|
+
color: #ffffff;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.abstraxn-connect-button.abstraxn-connect-button-light:hover:not(:disabled) {
|
|
48
|
+
background-color: #1f2937;
|
|
49
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
50
|
+
transform: translateY(-1px);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.abstraxn-connect-button.abstraxn-connect-button-light:active:not(:disabled) {
|
|
54
|
+
transform: translateY(0);
|
|
55
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
56
|
+
background-color: #374151;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Dark Theme */
|
|
60
|
+
.abstraxn-connect-button.abstraxn-connect-button-dark {
|
|
61
|
+
background-color: #4b5563;
|
|
62
|
+
color: #ffffff;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.abstraxn-connect-button.abstraxn-connect-button-dark:hover:not(:disabled) {
|
|
66
|
+
background-color: #6b7280;
|
|
67
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
|
|
68
|
+
transform: translateY(-1px);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.abstraxn-connect-button.abstraxn-connect-button-dark:active:not(:disabled) {
|
|
72
|
+
transform: translateY(0);
|
|
73
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);
|
|
74
|
+
background-color: #6b7280;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Connected State - Light Theme */
|
|
78
|
+
.abstraxn-connect-button.abstraxn-connect-button-light.abstraxn-connect-button-connected {
|
|
79
|
+
background: #f3f4f6;
|
|
80
|
+
color: #111827;
|
|
81
|
+
border: 1px solid #e5e7eb;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.abstraxn-connect-button.abstraxn-connect-button-light.abstraxn-connect-button-connected:hover:not(:disabled) {
|
|
85
|
+
background: #e5e7eb;
|
|
86
|
+
box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.1);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Connected State - Dark Theme */
|
|
90
|
+
.abstraxn-connect-button.abstraxn-connect-button-dark.abstraxn-connect-button-connected {
|
|
91
|
+
background: #374151;
|
|
92
|
+
color: #ffffff;
|
|
93
|
+
border: 1px solid #4b5563;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.abstraxn-connect-button.abstraxn-connect-button-dark.abstraxn-connect-button-connected:hover:not(:disabled) {
|
|
97
|
+
background: #4b5563;
|
|
98
|
+
box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.3);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* Size Variants */
|
|
102
|
+
.abstraxn-connect-button.abstraxn-connect-button-sm {
|
|
103
|
+
padding: 8px 16px;
|
|
104
|
+
font-size: 14px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.abstraxn-connect-button.abstraxn-connect-button-md {
|
|
108
|
+
padding: 12px 24px;
|
|
109
|
+
font-size: 16px;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.abstraxn-connect-button.abstraxn-connect-button-lg {
|
|
113
|
+
padding: 16px 32px;
|
|
114
|
+
font-size: 18px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* Variant Styles */
|
|
118
|
+
.abstraxn-connect-button.abstraxn-connect-button-outline {
|
|
119
|
+
background: transparent;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.abstraxn-connect-button.abstraxn-connect-button-outline.abstraxn-connect-button-light {
|
|
123
|
+
border: 2px solid #111827;
|
|
124
|
+
color: #111827;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.abstraxn-connect-button.abstraxn-connect-button-outline.abstraxn-connect-button-light:hover:not(:disabled) {
|
|
128
|
+
background: #111827;
|
|
129
|
+
color: #ffffff;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.abstraxn-connect-button.abstraxn-connect-button-outline.abstraxn-connect-button-dark {
|
|
133
|
+
border: 2px solid #9ca3af;
|
|
134
|
+
color: #9ca3af;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.abstraxn-connect-button.abstraxn-connect-button-outline.abstraxn-connect-button-dark:hover:not(:disabled) {
|
|
138
|
+
background: #9ca3af;
|
|
139
|
+
color: #ffffff;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.abstraxn-connect-button.abstraxn-connect-button-ghost {
|
|
143
|
+
background: transparent;
|
|
144
|
+
border: none;
|
|
145
|
+
box-shadow: none;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.abstraxn-connect-button.abstraxn-connect-button-ghost.abstraxn-connect-button-light {
|
|
149
|
+
color: #111827;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.abstraxn-connect-button.abstraxn-connect-button-ghost.abstraxn-connect-button-light:hover:not(:disabled) {
|
|
153
|
+
background: rgba(17, 24, 39, 0.1);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.abstraxn-connect-button.abstraxn-connect-button-ghost.abstraxn-connect-button-dark {
|
|
157
|
+
color: #9ca3af;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.abstraxn-connect-button.abstraxn-connect-button-ghost.abstraxn-connect-button-dark:hover:not(:disabled) {
|
|
161
|
+
background: rgba(156, 163, 175, 0.2);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Loading State */
|
|
165
|
+
.abstraxn-connect-button-loading {
|
|
166
|
+
position: relative;
|
|
167
|
+
color: transparent !important;
|
|
168
|
+
pointer-events: none;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.abstraxn-connect-button-loading::after {
|
|
172
|
+
content: '';
|
|
173
|
+
position: absolute;
|
|
174
|
+
top: 50%;
|
|
175
|
+
left: 50%;
|
|
176
|
+
width: 16px;
|
|
177
|
+
height: 16px;
|
|
178
|
+
margin: -8px 0 0 -8px;
|
|
179
|
+
border: 2px solid currentColor;
|
|
180
|
+
border-top-color: transparent;
|
|
181
|
+
border-radius: 50%;
|
|
182
|
+
animation: spin 0.6s linear infinite;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@keyframes spin {
|
|
186
|
+
to {
|
|
187
|
+
transform: rotate(360deg);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* Address Badge */
|
|
192
|
+
.abstraxn-connect-button-address {
|
|
193
|
+
display: inline-flex;
|
|
194
|
+
align-items: center;
|
|
195
|
+
gap: 4px;
|
|
196
|
+
padding: 4px 8px;
|
|
197
|
+
background: rgba(255, 255, 255, 0.2);
|
|
198
|
+
border-radius: 6px;
|
|
199
|
+
font-size: 0.875em;
|
|
200
|
+
font-weight: 500;
|
|
201
|
+
margin-left: 8px;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.abstraxn-connect-button-dark .abstraxn-connect-button-address {
|
|
205
|
+
background: rgba(255, 255, 255, 0.15);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.abstraxn-connect-button-light.abstraxn-connect-button-connected .abstraxn-connect-button-address {
|
|
209
|
+
background: rgba(17, 24, 39, 0.1);
|
|
210
|
+
color: #111827;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.abstraxn-connect-button-dark.abstraxn-connect-button-connected .abstraxn-connect-button-address {
|
|
214
|
+
background: rgba(156, 163, 175, 0.2);
|
|
215
|
+
color: #9ca3af;
|
|
216
|
+
}
|
|
217
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { ReactNode, ButtonHTMLAttributes, CSSProperties } from 'react';
|
|
2
|
+
import './ConnectButton.css';
|
|
3
|
+
export type ConnectButtonVariant = 'primary' | 'outline' | 'ghost';
|
|
4
|
+
export type ConnectButtonSize = 'sm' | 'md' | 'lg';
|
|
5
|
+
export interface ConnectButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'style'> {
|
|
6
|
+
/**
|
|
7
|
+
* Custom button text when disconnected
|
|
8
|
+
* @default 'Connect Wallet'
|
|
9
|
+
*/
|
|
10
|
+
connectText?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Custom button text when connected
|
|
13
|
+
* @default 'Connected'
|
|
14
|
+
*/
|
|
15
|
+
connectedText?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Show address when connected
|
|
18
|
+
* @default false
|
|
19
|
+
*/
|
|
20
|
+
showAddress?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Custom children to render inside the button
|
|
23
|
+
* If provided, this will override the default text
|
|
24
|
+
*/
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
/**
|
|
27
|
+
* Button variant style
|
|
28
|
+
* @default 'primary'
|
|
29
|
+
*/
|
|
30
|
+
variant?: ConnectButtonVariant;
|
|
31
|
+
/**
|
|
32
|
+
* Button size
|
|
33
|
+
* @default 'md'
|
|
34
|
+
*/
|
|
35
|
+
size?: ConnectButtonSize;
|
|
36
|
+
/**
|
|
37
|
+
* Custom CSS class name
|
|
38
|
+
* Will be merged with default classes
|
|
39
|
+
*/
|
|
40
|
+
className?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Custom inline styles
|
|
43
|
+
* Will be merged with default styles
|
|
44
|
+
*/
|
|
45
|
+
style?: CSSProperties;
|
|
46
|
+
/**
|
|
47
|
+
* Disable default styling
|
|
48
|
+
* If true, only applies minimal classes for functionality
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
51
|
+
disableDefaultStyles?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* ConnectButton - A button component that triggers the onboarding modal
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* import { ConnectButton } from '@abstraxn/signer/react';
|
|
59
|
+
*
|
|
60
|
+
* function App() {
|
|
61
|
+
* return (
|
|
62
|
+
* <ConnectButton
|
|
63
|
+
* connectText="Connect Wallet"
|
|
64
|
+
* connectedText="Connected"
|
|
65
|
+
* showAddress={true}
|
|
66
|
+
* />
|
|
67
|
+
* );
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function ConnectButton({ connectText, connectedText, showAddress, children, onClick, disabled, variant, size, className, style, disableDefaultStyles, ...props }: ConnectButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* ConnectButton Component
|
|
4
|
+
* A ready-to-use button component that shows the onboarding modal when clicked
|
|
5
|
+
*/
|
|
6
|
+
import { useCallback, useState, useMemo } from 'react';
|
|
7
|
+
import { useAbstraxnWallet } from './AbstraxnProvider';
|
|
8
|
+
import { WalletModal } from './WalletModal';
|
|
9
|
+
import './ConnectButton.css';
|
|
10
|
+
/**
|
|
11
|
+
* ConnectButton - A button component that triggers the onboarding modal
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { ConnectButton } from '@abstraxn/signer/react';
|
|
16
|
+
*
|
|
17
|
+
* function App() {
|
|
18
|
+
* return (
|
|
19
|
+
* <ConnectButton
|
|
20
|
+
* connectText="Connect Wallet"
|
|
21
|
+
* connectedText="Connected"
|
|
22
|
+
* showAddress={true}
|
|
23
|
+
* />
|
|
24
|
+
* );
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function ConnectButton({ connectText = 'Connect Wallet', connectedText = 'Connected', showAddress = false, children, onClick, disabled, variant = 'primary', size = 'md', className = '', style, disableDefaultStyles = false, ...props }) {
|
|
29
|
+
const { isConnected, address, showOnboarding, loading, uiConfig } = useAbstraxnWallet();
|
|
30
|
+
const [isWalletModalOpen, setIsWalletModalOpen] = useState(false);
|
|
31
|
+
const handleClick = useCallback((e) => {
|
|
32
|
+
if (onClick) {
|
|
33
|
+
onClick(e);
|
|
34
|
+
}
|
|
35
|
+
if (e.defaultPrevented) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!isConnected) {
|
|
39
|
+
// Show onboarding modal
|
|
40
|
+
showOnboarding();
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Show wallet modal when connected
|
|
44
|
+
setIsWalletModalOpen(true);
|
|
45
|
+
}
|
|
46
|
+
}, [isConnected, showOnboarding, onClick]);
|
|
47
|
+
const handleCloseModal = useCallback(() => {
|
|
48
|
+
setIsWalletModalOpen(false);
|
|
49
|
+
}, []);
|
|
50
|
+
// Get theme from UI config
|
|
51
|
+
const theme = uiConfig?.theme || 'light';
|
|
52
|
+
const isDark = theme === 'dark';
|
|
53
|
+
// Build class names
|
|
54
|
+
const buttonClasses = useMemo(() => {
|
|
55
|
+
if (disableDefaultStyles) {
|
|
56
|
+
return className;
|
|
57
|
+
}
|
|
58
|
+
const classes = ['abstraxn-connect-button'];
|
|
59
|
+
// Theme class
|
|
60
|
+
classes.push(isDark ? 'abstraxn-connect-button-dark' : 'abstraxn-connect-button-light');
|
|
61
|
+
// Size class
|
|
62
|
+
classes.push(`abstraxn-connect-button-${size}`);
|
|
63
|
+
// Variant class (only if not primary)
|
|
64
|
+
if (variant !== 'primary') {
|
|
65
|
+
classes.push(`abstraxn-connect-button-${variant}`);
|
|
66
|
+
}
|
|
67
|
+
// Connected state class
|
|
68
|
+
if (isConnected) {
|
|
69
|
+
classes.push('abstraxn-connect-button-connected');
|
|
70
|
+
}
|
|
71
|
+
// Loading state class
|
|
72
|
+
if (loading) {
|
|
73
|
+
classes.push('abstraxn-connect-button-loading');
|
|
74
|
+
}
|
|
75
|
+
// Custom className
|
|
76
|
+
if (className) {
|
|
77
|
+
classes.push(className);
|
|
78
|
+
}
|
|
79
|
+
return classes.join(' ');
|
|
80
|
+
}, [disableDefaultStyles, isDark, size, variant, isConnected, loading, className]);
|
|
81
|
+
// Determine button content
|
|
82
|
+
const buttonContent = useMemo(() => {
|
|
83
|
+
if (children) {
|
|
84
|
+
return children;
|
|
85
|
+
}
|
|
86
|
+
if (isConnected) {
|
|
87
|
+
if (showAddress && address) {
|
|
88
|
+
// Show shortened address
|
|
89
|
+
const shortAddress = `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
90
|
+
return (_jsxs(_Fragment, { children: [connectedText, _jsx("span", { className: "abstraxn-connect-button-address", children: shortAddress })] }));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return connectedText;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return connectText;
|
|
98
|
+
}
|
|
99
|
+
}, [children, isConnected, showAddress, address, connectedText, connectText]);
|
|
100
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { ...props, className: buttonClasses, style: style, onClick: handleClick, disabled: disabled || loading, type: props.type || 'button', children: buttonContent }), isConnected && (_jsx(WalletModal, { isOpen: isWalletModalOpen, onClose: handleCloseModal }))] }));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=ConnectButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectButton.js","sourceRoot":"","sources":["../../src/ConnectButton.tsx"],"names":[],"mappings":"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"}
|