@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.
Files changed (178) hide show
  1. package/README.md +114 -0
  2. package/dist/src/AbstraxnProvider.d.ts +9 -0
  3. package/dist/src/AbstraxnProvider.js +21 -0
  4. package/dist/src/AbstraxnProvider.js.map +1 -0
  5. package/dist/src/ConnectButton.css +217 -0
  6. package/dist/src/ConnectButton.d.ts +71 -0
  7. package/dist/src/ConnectButton.js +102 -0
  8. package/dist/src/ConnectButton.js.map +1 -0
  9. package/dist/src/ExternalWalletButtons.css +319 -0
  10. package/dist/src/ExternalWalletButtons.d.ts +56 -0
  11. package/dist/src/ExternalWalletButtons.js +272 -0
  12. package/dist/src/ExternalWalletButtons.js.map +1 -0
  13. package/dist/src/OnboardingUI.d.ts +63 -0
  14. package/dist/src/OnboardingUI.js +66 -0
  15. package/dist/src/OnboardingUI.js.map +1 -0
  16. package/dist/src/WalletModal.css +2319 -0
  17. package/dist/src/WalletModal.d.ts +7 -0
  18. package/dist/src/WalletModal.js +322 -0
  19. package/dist/src/WalletModal.js.map +1 -0
  20. package/dist/src/chains.d.ts +56 -0
  21. package/dist/src/chains.js +291 -0
  22. package/dist/src/chains.js.map +1 -0
  23. package/dist/src/components/AbstraxnProvider/AbstraxnProvider.d.ts +12 -0
  24. package/dist/src/components/AbstraxnProvider/AbstraxnProvider.js +146 -0
  25. package/dist/src/components/AbstraxnProvider/AbstraxnProvider.js.map +1 -0
  26. package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.d.ts +25 -0
  27. package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js +3086 -0
  28. package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js.map +1 -0
  29. package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.d.ts +8 -0
  30. package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.js +46 -0
  31. package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.js.map +1 -0
  32. package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.d.ts +8 -0
  33. package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.js +12 -0
  34. package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.js.map +1 -0
  35. package/dist/src/components/AbstraxnProvider/context.d.ts +2 -0
  36. package/dist/src/components/AbstraxnProvider/context.js +6 -0
  37. package/dist/src/components/AbstraxnProvider/context.js.map +1 -0
  38. package/dist/src/components/AbstraxnProvider/index.d.ts +6 -0
  39. package/dist/src/components/AbstraxnProvider/index.js +7 -0
  40. package/dist/src/components/AbstraxnProvider/index.js.map +1 -0
  41. package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.d.ts +30 -0
  42. package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js +49 -0
  43. package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js.map +1 -0
  44. package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.d.ts +2 -0
  45. package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.js +13 -0
  46. package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.js.map +1 -0
  47. package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.d.ts +22 -0
  48. package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.js +242 -0
  49. package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.js.map +1 -0
  50. package/dist/src/components/AbstraxnProvider/useWalletInitialization.d.ts +25 -0
  51. package/dist/src/components/AbstraxnProvider/useWalletInitialization.js +539 -0
  52. package/dist/src/components/AbstraxnProvider/useWalletInitialization.js.map +1 -0
  53. package/dist/src/components/AbstraxnProvider/utils.d.ts +41 -0
  54. package/dist/src/components/AbstraxnProvider/utils.js +139 -0
  55. package/dist/src/components/AbstraxnProvider/utils.js.map +1 -0
  56. package/dist/src/components/OnboardingUI/OnboardingUI.css +1062 -0
  57. package/dist/src/components/OnboardingUI/OnboardingUIReact.d.ts +15 -0
  58. package/dist/src/components/OnboardingUI/OnboardingUIReact.js +318 -0
  59. package/dist/src/components/OnboardingUI/OnboardingUIReact.js.map +1 -0
  60. package/dist/src/components/OnboardingUI/OnboardingUIWeb.d.ts +265 -0
  61. package/dist/src/components/OnboardingUI/OnboardingUIWeb.js +3782 -0
  62. package/dist/src/components/OnboardingUI/OnboardingUIWeb.js.map +1 -0
  63. package/dist/src/components/OnboardingUI/components/EmailForm.d.ts +16 -0
  64. package/dist/src/components/OnboardingUI/components/EmailForm.js +27 -0
  65. package/dist/src/components/OnboardingUI/components/EmailForm.js.map +1 -0
  66. package/dist/src/components/OnboardingUI/components/Modal.d.ts +14 -0
  67. package/dist/src/components/OnboardingUI/components/Modal.js +61 -0
  68. package/dist/src/components/OnboardingUI/components/Modal.js.map +1 -0
  69. package/dist/src/components/OnboardingUI/components/OtpForm.d.ts +20 -0
  70. package/dist/src/components/OnboardingUI/components/OtpForm.js +72 -0
  71. package/dist/src/components/OnboardingUI/components/OtpForm.js.map +1 -0
  72. package/dist/src/components/OnboardingUI/components/PasskeyButton.d.ts +14 -0
  73. package/dist/src/components/OnboardingUI/components/PasskeyButton.js +22 -0
  74. package/dist/src/components/OnboardingUI/components/PasskeyButton.js.map +1 -0
  75. package/dist/src/components/OnboardingUI/components/SocialButtons.d.ts +15 -0
  76. package/dist/src/components/OnboardingUI/components/SocialButtons.js +20 -0
  77. package/dist/src/components/OnboardingUI/components/SocialButtons.js.map +1 -0
  78. package/dist/src/components/OnboardingUI/components/index.d.ts +13 -0
  79. package/dist/src/components/OnboardingUI/components/index.js +9 -0
  80. package/dist/src/components/OnboardingUI/components/index.js.map +1 -0
  81. package/dist/src/components/OnboardingUI/hooks/index.d.ts +7 -0
  82. package/dist/src/components/OnboardingUI/hooks/index.js +6 -0
  83. package/dist/src/components/OnboardingUI/hooks/index.js.map +1 -0
  84. package/dist/src/components/OnboardingUI/hooks/useAuthMethods.d.ts +11 -0
  85. package/dist/src/components/OnboardingUI/hooks/useAuthMethods.js +243 -0
  86. package/dist/src/components/OnboardingUI/hooks/useAuthMethods.js.map +1 -0
  87. package/dist/src/components/OnboardingUI/hooks/useOnboarding.d.ts +21 -0
  88. package/dist/src/components/OnboardingUI/hooks/useOnboarding.js +153 -0
  89. package/dist/src/components/OnboardingUI/hooks/useOnboarding.js.map +1 -0
  90. package/dist/src/components/OnboardingUI/index.d.ts +12 -0
  91. package/dist/src/components/OnboardingUI/index.js +15 -0
  92. package/dist/src/components/OnboardingUI/index.js.map +1 -0
  93. package/dist/src/components/QRCode.d.ts +13 -0
  94. package/dist/src/components/QRCode.js +6 -0
  95. package/dist/src/components/QRCode.js.map +1 -0
  96. package/dist/src/components/WalletModal/components/ChainSelector.css +327 -0
  97. package/dist/src/components/WalletModal/components/ChainSelector.d.ts +11 -0
  98. package/dist/src/components/WalletModal/components/ChainSelector.js +75 -0
  99. package/dist/src/components/WalletModal/components/ChainSelector.js.map +1 -0
  100. package/dist/src/components/WalletModal/components/ExportKeyModal.css +134 -0
  101. package/dist/src/components/WalletModal/components/ExportKeyModal.d.ts +14 -0
  102. package/dist/src/components/WalletModal/components/ExportKeyModal.js +26 -0
  103. package/dist/src/components/WalletModal/components/ExportKeyModal.js.map +1 -0
  104. package/dist/src/components/WalletModal/components/ExportWarningModal.css +107 -0
  105. package/dist/src/components/WalletModal/components/ExportWarningModal.d.ts +17 -0
  106. package/dist/src/components/WalletModal/components/ExportWarningModal.js +20 -0
  107. package/dist/src/components/WalletModal/components/ExportWarningModal.js.map +1 -0
  108. package/dist/src/components/WalletModal/components/ManageWalletModal.css +246 -0
  109. package/dist/src/components/WalletModal/components/ManageWalletModal.d.ts +12 -0
  110. package/dist/src/components/WalletModal/components/ManageWalletModal.js +36 -0
  111. package/dist/src/components/WalletModal/components/ManageWalletModal.js.map +1 -0
  112. package/dist/src/components/WalletModal/components/PreviewTransactionModal.css +127 -0
  113. package/dist/src/components/WalletModal/components/PreviewTransactionModal.d.ts +17 -0
  114. package/dist/src/components/WalletModal/components/PreviewTransactionModal.js +10 -0
  115. package/dist/src/components/WalletModal/components/PreviewTransactionModal.js.map +1 -0
  116. package/dist/src/components/WalletModal/components/ReceiveModal.css +136 -0
  117. package/dist/src/components/WalletModal/components/ReceiveModal.d.ts +8 -0
  118. package/dist/src/components/WalletModal/components/ReceiveModal.js +22 -0
  119. package/dist/src/components/WalletModal/components/ReceiveModal.js.map +1 -0
  120. package/dist/src/components/WalletModal/components/SendModal.css +277 -0
  121. package/dist/src/components/WalletModal/components/SendModal.d.ts +16 -0
  122. package/dist/src/components/WalletModal/components/SendModal.js +219 -0
  123. package/dist/src/components/WalletModal/components/SendModal.js.map +1 -0
  124. package/dist/src/components/WalletModal/components/SuccessModal.css +85 -0
  125. package/dist/src/components/WalletModal/components/SuccessModal.d.ts +13 -0
  126. package/dist/src/components/WalletModal/components/SuccessModal.js +8 -0
  127. package/dist/src/components/WalletModal/components/SuccessModal.js.map +1 -0
  128. package/dist/src/components/WalletModal/components/TokenSelectorModal.css +240 -0
  129. package/dist/src/components/WalletModal/components/TokenSelectorModal.d.ts +21 -0
  130. package/dist/src/components/WalletModal/components/TokenSelectorModal.js +44 -0
  131. package/dist/src/components/WalletModal/components/TokenSelectorModal.js.map +1 -0
  132. package/dist/src/components/WalletModal/components/UserAvatar.d.ts +9 -0
  133. package/dist/src/components/WalletModal/components/UserAvatar.js +31 -0
  134. package/dist/src/components/WalletModal/components/UserAvatar.js.map +1 -0
  135. package/dist/src/components/WalletModal/components/index.d.ts +23 -0
  136. package/dist/src/components/WalletModal/components/index.js +14 -0
  137. package/dist/src/components/WalletModal/components/index.js.map +1 -0
  138. package/dist/src/components/WalletModal/hooks/index.d.ts +6 -0
  139. package/dist/src/components/WalletModal/hooks/index.js +7 -0
  140. package/dist/src/components/WalletModal/hooks/index.js.map +1 -0
  141. package/dist/src/components/WalletModal/hooks/useAddressValidation.d.ts +4 -0
  142. package/dist/src/components/WalletModal/hooks/useAddressValidation.js +17 -0
  143. package/dist/src/components/WalletModal/hooks/useAddressValidation.js.map +1 -0
  144. package/dist/src/components/WalletModal/hooks/useAmountValidation.d.ts +4 -0
  145. package/dist/src/components/WalletModal/hooks/useAmountValidation.js +29 -0
  146. package/dist/src/components/WalletModal/hooks/useAmountValidation.js.map +1 -0
  147. package/dist/src/components/WalletModal/hooks/useSendTransaction.d.ts +20 -0
  148. package/dist/src/components/WalletModal/hooks/useSendTransaction.js +55 -0
  149. package/dist/src/components/WalletModal/hooks/useSendTransaction.js.map +1 -0
  150. package/dist/src/components/WalletModal/index.d.ts +5 -0
  151. package/dist/src/components/WalletModal/index.js +7 -0
  152. package/dist/src/components/WalletModal/index.js.map +1 -0
  153. package/dist/src/components/WalletModal/utils/addressUtils.d.ts +19 -0
  154. package/dist/src/components/WalletModal/utils/addressUtils.js +62 -0
  155. package/dist/src/components/WalletModal/utils/addressUtils.js.map +1 -0
  156. package/dist/src/components/WalletModal/utils/formatUtils.d.ts +20 -0
  157. package/dist/src/components/WalletModal/utils/formatUtils.js +47 -0
  158. package/dist/src/components/WalletModal/utils/formatUtils.js.map +1 -0
  159. package/dist/src/components/WalletModal/utils/index.d.ts +5 -0
  160. package/dist/src/components/WalletModal/utils/index.js +6 -0
  161. package/dist/src/components/WalletModal/utils/index.js.map +1 -0
  162. package/dist/src/connectors.d.ts +27 -0
  163. package/dist/src/connectors.js +70 -0
  164. package/dist/src/connectors.js.map +1 -0
  165. package/dist/src/hooks.d.ts +13136 -0
  166. package/dist/src/hooks.js +1358 -0
  167. package/dist/src/hooks.js.map +1 -0
  168. package/dist/src/index.d.ts +17 -0
  169. package/dist/src/index.js +14 -0
  170. package/dist/src/index.js.map +1 -0
  171. package/dist/src/types.d.ts +224 -0
  172. package/dist/src/types.js +2 -0
  173. package/dist/src/types.js.map +1 -0
  174. package/dist/src/wagmiConfig.d.ts +16 -0
  175. package/dist/src/wagmiConfig.js +103 -0
  176. package/dist/src/wagmiConfig.js.map +1 -0
  177. package/dist/tsconfig.tsbuildinfo +1 -0
  178. 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":";AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,qBAAqB,CAAC;AA8D7B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,WAAW,GAAG,gBAAgB,EAC9B,aAAa,GAAG,WAAW,EAC3B,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,EACd,KAAK,EACL,oBAAoB,GAAG,KAAK,EAC5B,GAAG,KAAK,EACW;IACnB,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACxF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAsC,EAAE,EAAE;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QAED,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,wBAAwB;YACxB,cAAc,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CACvC,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,2BAA2B;IAC3B,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC;IAEhC,oBAAoB;IACpB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAE5C,cAAc;QACd,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;QAExF,aAAa;QACb,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,wBAAwB;QACxB,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACpD,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAClD,CAAC;QAED,mBAAmB;QACnB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnF,2BAA2B;IAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;gBAC3B,yBAAyB;gBACzB,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,OAAO,CACL,8BACG,aAAa,EACd,eAAM,SAAS,EAAC,iCAAiC,YAAE,YAAY,GAAQ,IACtE,CACJ,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAE9E,OAAO,CACL,8BACE,oBACM,KAAK,EACT,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,YAE3B,aAAa,GACP,EACR,WAAW,IAAI,CACd,KAAC,WAAW,IAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,GAAI,CACtE,IACA,CACJ,CAAC;AACJ,CAAC"}