@mantle-rwa/react 0.1.0 → 0.1.2
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/LICENSE +0 -0
- package/dist/cjs/components/ConnectWalletPrompt.js +13 -0
- package/dist/cjs/components/ConnectWalletPrompt.js.map +1 -0
- package/dist/cjs/components/ErrorDisplay.js +42 -0
- package/dist/cjs/components/ErrorDisplay.js.map +1 -0
- package/dist/cjs/components/InvestorDashboard.js +156 -0
- package/dist/cjs/components/InvestorDashboard.js.map +1 -0
- package/dist/cjs/components/KYCFlow.js +146 -0
- package/dist/cjs/components/KYCFlow.js.map +1 -0
- package/dist/cjs/components/LoadingSpinner.js +18 -0
- package/dist/cjs/components/LoadingSpinner.js.map +1 -0
- package/dist/cjs/components/TokenMintForm.js +163 -0
- package/dist/cjs/components/TokenMintForm.js.map +1 -0
- package/dist/cjs/components/YieldCalculator.js +97 -0
- package/dist/cjs/components/YieldCalculator.js.map +1 -0
- package/dist/cjs/hooks/useRWA.js +87 -40
- package/dist/cjs/hooks/useRWA.js.map +1 -1
- package/dist/cjs/index.js +11 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/index.js +2 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/esm/components/ConnectWalletPrompt.js +10 -0
- package/dist/esm/components/ConnectWalletPrompt.js.map +1 -0
- package/dist/esm/components/ErrorDisplay.js +38 -0
- package/dist/esm/components/ErrorDisplay.js.map +1 -0
- package/dist/esm/components/InvestorDashboard.js +153 -0
- package/dist/esm/components/InvestorDashboard.js.map +1 -0
- package/dist/esm/components/KYCFlow.js +143 -0
- package/dist/esm/components/KYCFlow.js.map +1 -0
- package/dist/esm/components/LoadingSpinner.js +15 -0
- package/dist/esm/components/LoadingSpinner.js.map +1 -0
- package/dist/esm/components/TokenMintForm.js +158 -0
- package/dist/esm/components/TokenMintForm.js.map +1 -0
- package/dist/esm/components/YieldCalculator.js +94 -0
- package/dist/esm/components/YieldCalculator.js.map +1 -0
- package/dist/esm/hooks/useRWA.js +86 -39
- package/dist/esm/hooks/useRWA.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/index.js +3 -3
- package/dist/esm/types/index.js.map +1 -1
- package/dist/styles.css +3 -1
- package/dist/types/components/ConnectWalletPrompt.d.ts +15 -0
- package/dist/types/components/ConnectWalletPrompt.d.ts.map +1 -0
- package/dist/types/components/ErrorDisplay.d.ts +16 -0
- package/dist/types/components/ErrorDisplay.d.ts.map +1 -0
- package/dist/types/components/InvestorDashboard.d.ts +7 -0
- package/dist/types/components/InvestorDashboard.d.ts.map +1 -0
- package/dist/types/components/KYCFlow.d.ts +7 -0
- package/dist/types/components/KYCFlow.d.ts.map +1 -0
- package/dist/types/components/LoadingSpinner.d.ts +10 -0
- package/dist/types/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/types/components/TokenMintForm.d.ts +15 -0
- package/dist/types/components/TokenMintForm.d.ts.map +1 -0
- package/dist/types/components/YieldCalculator.d.ts +7 -0
- package/dist/types/components/YieldCalculator.d.ts.map +1 -0
- package/dist/types/hooks/useRWA.d.ts +7 -19
- package/dist/types/hooks/useRWA.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +113 -131
- package/dist/types/types/index.d.ts.map +1 -1
- package/package.json +65 -63
- package/src/components/ConnectWalletPrompt.tsx +47 -0
- package/src/components/ErrorDisplay.tsx +90 -0
- package/src/components/InvestorDashboard.tsx +315 -0
- package/src/components/KYCFlow.tsx +267 -0
- package/src/components/LoadingSpinner.tsx +33 -0
- package/src/components/TokenMintForm.tsx +291 -0
- package/src/components/YieldCalculator.tsx +250 -0
- package/src/hooks/useRWA.ts +90 -50
- package/src/index.ts +5 -17
- package/src/styles/index.css +60 -175
- package/src/types/index.ts +142 -135
- package/src/components/InvestorDashboard/index.tsx +0 -359
- package/src/components/KYCFlow/index.tsx +0 -434
- package/src/components/TokenMintForm/index.tsx +0 -590
- package/src/components/YieldCalculator/index.tsx +0 -541
- package/src/components/index.ts +0 -8
- package/src/hooks/index.ts +0 -5
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.YieldCalculator = YieldCalculator;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* YieldCalculator - Calculator for previewing yield distributions
|
|
8
|
+
*
|
|
9
|
+
* Shows how yields will be allocated to token holders before creating a distribution.
|
|
10
|
+
*/
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const viem_1 = require("viem");
|
|
13
|
+
const useRWA_1 = require("../hooks/useRWA");
|
|
14
|
+
/**
|
|
15
|
+
* Format address for display
|
|
16
|
+
*/
|
|
17
|
+
function formatAddress(address) {
|
|
18
|
+
return `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format token amount for display
|
|
22
|
+
*/
|
|
23
|
+
function formatAmount(amount, decimals = 18) {
|
|
24
|
+
const formatted = (0, viem_1.formatUnits)(amount, decimals);
|
|
25
|
+
const num = parseFloat(formatted);
|
|
26
|
+
return num.toLocaleString(undefined, { maximumFractionDigits: 4 });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* YieldCalculator component
|
|
30
|
+
*/
|
|
31
|
+
function YieldCalculator({ tokenAddress, yieldDistributorAddress: _yieldDistributorAddress, holderAddresses, onCalculate, onError, className = '', }) {
|
|
32
|
+
const { client, isInitialized } = (0, useRWA_1.useRWA)();
|
|
33
|
+
const [amount, setAmount] = (0, react_1.useState)('');
|
|
34
|
+
const [preview, setPreview] = (0, react_1.useState)(null);
|
|
35
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
36
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
37
|
+
// Debounce timer ref
|
|
38
|
+
const debounceRef = (0, react_1.useRef)(null);
|
|
39
|
+
// Calculate preview
|
|
40
|
+
const calculatePreview = (0, react_1.useCallback)(async (distributionAmount) => {
|
|
41
|
+
if (!client || !isInitialized || !distributionAmount || parseFloat(distributionAmount) <= 0) {
|
|
42
|
+
setPreview(null);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setIsLoading(true);
|
|
46
|
+
setError(null);
|
|
47
|
+
try {
|
|
48
|
+
const result = await client.yield.previewDistribution(tokenAddress, distributionAmount, undefined, // snapshotId
|
|
49
|
+
holderAddresses);
|
|
50
|
+
setPreview(result);
|
|
51
|
+
onCalculate?.(result);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const errorObj = err instanceof Error ? err : new Error('Failed to calculate preview');
|
|
55
|
+
setError(errorObj);
|
|
56
|
+
onError?.(errorObj);
|
|
57
|
+
setPreview(null);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
setIsLoading(false);
|
|
61
|
+
}
|
|
62
|
+
}, [client, isInitialized, tokenAddress, holderAddresses, onCalculate, onError]);
|
|
63
|
+
// Handle amount change with debounce
|
|
64
|
+
const handleAmountChange = (0, react_1.useCallback)((e) => {
|
|
65
|
+
const value = e.target.value;
|
|
66
|
+
setAmount(value);
|
|
67
|
+
// Clear previous debounce
|
|
68
|
+
if (debounceRef.current) {
|
|
69
|
+
clearTimeout(debounceRef.current);
|
|
70
|
+
}
|
|
71
|
+
// Debounce the calculation
|
|
72
|
+
debounceRef.current = setTimeout(() => {
|
|
73
|
+
calculatePreview(value);
|
|
74
|
+
}, 500);
|
|
75
|
+
}, [calculatePreview]);
|
|
76
|
+
// Cleanup debounce on unmount
|
|
77
|
+
(0, react_1.useEffect)(() => {
|
|
78
|
+
return () => {
|
|
79
|
+
if (debounceRef.current) {
|
|
80
|
+
clearTimeout(debounceRef.current);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}, []);
|
|
84
|
+
// Recalculate when holder addresses change
|
|
85
|
+
(0, react_1.useEffect)(() => {
|
|
86
|
+
if (amount && parseFloat(amount) > 0) {
|
|
87
|
+
calculatePreview(amount);
|
|
88
|
+
}
|
|
89
|
+
}, [holderAddresses]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
90
|
+
// Handle manual calculate button
|
|
91
|
+
const handleCalculate = (0, react_1.useCallback)(() => {
|
|
92
|
+
calculatePreview(amount);
|
|
93
|
+
}, [amount, calculatePreview]);
|
|
94
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-yield-calculator ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "distribution-amount", className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Total Distribution Amount" }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-1 flex rounded-md shadow-sm", children: [(0, jsx_runtime_1.jsx)("input", { type: "text", id: "distribution-amount", value: amount, onChange: handleAmountChange, placeholder: "Enter amount to distribute", className: "flex-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-l-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-800 dark:text-white" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleCalculate, disabled: isLoading || !amount, className: "px-4 py-2 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-r-md transition-colors", children: isLoading ? 'Calculating...' : 'Calculate' })] })] }), isLoading && ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center p-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "animate-spin rounded-full h-6 w-6 border-b-2 border-blue-600" }), (0, jsx_runtime_1.jsx)("span", { className: "ml-2 text-gray-600 dark:text-gray-300", children: "Calculating distribution..." })] })), error && ((0, jsx_runtime_1.jsxs)("div", { className: "p-4 bg-red-50 dark:bg-red-900/20 rounded-lg border border-red-200 dark:border-red-800", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-red-700 dark:text-red-300", children: error.message }), (0, jsx_runtime_1.jsx)("button", { onClick: handleCalculate, className: "mt-2 text-sm text-red-600 dark:text-red-400 underline hover:no-underline", children: "Retry" })] })), preview && !isLoading && ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "p-4 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700", children: [(0, jsx_runtime_1.jsx)("h4", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: "Distribution Summary" }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-2 grid grid-cols-2 gap-4", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: "Total Holders" }), (0, jsx_runtime_1.jsx)("p", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: preview.totalHolders })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: "Total Supply" }), (0, jsx_runtime_1.jsx)("p", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: formatAmount(preview.totalSupplyAtSnapshot) })] })] })] }), preview.distributions.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "overflow-hidden rounded-lg border border-gray-200 dark:border-gray-700", children: (0, jsx_runtime_1.jsxs)("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [(0, jsx_runtime_1.jsx)("thead", { className: "bg-gray-50 dark:bg-gray-800", children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { className: "px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Address" }), (0, jsx_runtime_1.jsx)("th", { className: "px-4 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Balance" }), (0, jsx_runtime_1.jsx)("th", { className: "px-4 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Yield Amount" }), (0, jsx_runtime_1.jsx)("th", { className: "px-4 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Share" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: preview.distributions.map((dist) => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "px-4 py-3 whitespace-nowrap text-sm font-mono text-gray-900 dark:text-white", children: formatAddress(dist.address) }), (0, jsx_runtime_1.jsx)("td", { className: "px-4 py-3 whitespace-nowrap text-sm text-right text-gray-600 dark:text-gray-300", children: formatAmount(dist.balance) }), (0, jsx_runtime_1.jsx)("td", { className: "px-4 py-3 whitespace-nowrap text-sm text-right font-medium text-green-600 dark:text-green-400", children: formatAmount(dist.yieldAmount) }), (0, jsx_runtime_1.jsxs)("td", { className: "px-4 py-3 whitespace-nowrap text-sm text-right text-gray-600 dark:text-gray-300", children: [dist.percentage.toFixed(2), "%"] })] }, dist.address))) })] }) })), preview.distributions.length === 0 && ((0, jsx_runtime_1.jsx)("div", { className: "p-4 bg-yellow-50 dark:bg-yellow-900/20 rounded-lg border border-yellow-200 dark:border-yellow-800", children: (0, jsx_runtime_1.jsx)("p", { className: "text-yellow-700 dark:text-yellow-300", children: "No holder addresses provided or no holders have balances." }) }))] })), !preview && !isLoading && !error && ((0, jsx_runtime_1.jsx)("div", { className: "p-6 text-center text-gray-500 dark:text-gray-400", children: (0, jsx_runtime_1.jsx)("p", { children: "Enter a distribution amount to preview how yields will be allocated." }) }))] }) }));
|
|
95
|
+
}
|
|
96
|
+
exports.default = YieldCalculator;
|
|
97
|
+
//# sourceMappingURL=YieldCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YieldCalculator.js","sourceRoot":"","sources":["../../../src/components/YieldCalculator.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/hooks/useRWA.js
CHANGED
|
@@ -1,54 +1,101 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
* useRWA hook for accessing RWA SDK functionality in React components
|
|
4
|
-
*/
|
|
2
|
+
'use client';
|
|
5
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
4
|
exports.useRWA = useRWA;
|
|
5
|
+
/**
|
|
6
|
+
* useRWA - Core hook for accessing the RWA SDK client
|
|
7
|
+
*
|
|
8
|
+
* Provides access to the @mantle-rwa/sdk RWAClient instance with
|
|
9
|
+
* automatic wagmi wallet integration.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { useRWA } from '@mantle-rwa/react';
|
|
14
|
+
*
|
|
15
|
+
* function MyComponent() {
|
|
16
|
+
* const { client, isInitialized, hasSigner } = useRWA();
|
|
17
|
+
*
|
|
18
|
+
* if (!isInitialized) return <div>Loading...</div>;
|
|
19
|
+
*
|
|
20
|
+
* // Use client.token, client.kyc, client.yield, client.compliance
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
7
24
|
const react_1 = require("react");
|
|
25
|
+
const wagmi_1 = require("wagmi");
|
|
26
|
+
const ethers_1 = require("ethers");
|
|
27
|
+
const sdk_1 = require("@mantle-rwa/sdk");
|
|
28
|
+
// Default contract addresses (can be overridden via config)
|
|
29
|
+
const DEFAULT_CONTRACTS = {
|
|
30
|
+
token: undefined,
|
|
31
|
+
kycRegistry: undefined,
|
|
32
|
+
yieldDistributor: undefined,
|
|
33
|
+
assetVault: undefined,
|
|
34
|
+
factory: undefined,
|
|
35
|
+
};
|
|
8
36
|
/**
|
|
9
|
-
* Hook for
|
|
10
|
-
*
|
|
37
|
+
* Hook for initializing and managing the RWA SDK client
|
|
38
|
+
*
|
|
39
|
+
* @param config - Optional configuration for network and contract addresses
|
|
40
|
+
* @returns UseRWAReturn object with client, state, and utilities
|
|
11
41
|
*/
|
|
12
|
-
function useRWA() {
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const [
|
|
16
|
-
const [
|
|
42
|
+
function useRWA(config) {
|
|
43
|
+
const { isConnected } = (0, wagmi_1.useAccount)();
|
|
44
|
+
const { data: walletClient } = (0, wagmi_1.useWalletClient)();
|
|
45
|
+
const [client, setClient] = (0, react_1.useState)(null);
|
|
46
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
|
|
17
47
|
const [error, setError] = (0, react_1.useState)(null);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
});
|
|
34
|
-
if (chainIdHex) {
|
|
35
|
-
setChainId(parseInt(chainIdHex, 16));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
setIsInitialized(true);
|
|
48
|
+
const network = config?.network ?? 'mantle-sepolia';
|
|
49
|
+
// Initialize or reinitialize the client
|
|
50
|
+
const initializeClient = (0, react_1.useCallback)(async () => {
|
|
51
|
+
setIsLoading(true);
|
|
52
|
+
setError(null);
|
|
53
|
+
try {
|
|
54
|
+
let rwaClient;
|
|
55
|
+
if (walletClient && isConnected) {
|
|
56
|
+
// Create client with wallet signer for write operations
|
|
57
|
+
const provider = new ethers_1.BrowserProvider(walletClient.transport);
|
|
58
|
+
const signer = await provider.getSigner();
|
|
59
|
+
rwaClient = new sdk_1.RWAClient({
|
|
60
|
+
network,
|
|
61
|
+
signer,
|
|
62
|
+
});
|
|
39
63
|
}
|
|
40
|
-
|
|
41
|
-
|
|
64
|
+
else {
|
|
65
|
+
// Create read-only client (no signer)
|
|
66
|
+
rwaClient = new sdk_1.RWAClient({
|
|
67
|
+
network,
|
|
68
|
+
});
|
|
42
69
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
70
|
+
setClient(rwaClient);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const errorMessage = err instanceof Error ? err.message : 'Failed to initialize RWA client';
|
|
74
|
+
setError(new Error(errorMessage));
|
|
75
|
+
setClient(null);
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
setIsLoading(false);
|
|
79
|
+
}
|
|
80
|
+
}, [walletClient, isConnected, network]);
|
|
81
|
+
// Initialize client on mount and when wallet changes
|
|
82
|
+
(0, react_1.useEffect)(() => {
|
|
83
|
+
initializeClient();
|
|
84
|
+
}, [initializeClient]);
|
|
85
|
+
// Memoized contract addresses
|
|
86
|
+
const contracts = (0, react_1.useMemo)(() => ({
|
|
87
|
+
...DEFAULT_CONTRACTS,
|
|
88
|
+
...config?.contracts,
|
|
89
|
+
}), [config?.contracts]);
|
|
46
90
|
return {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
isConnected,
|
|
91
|
+
client,
|
|
92
|
+
isInitialized: client !== null && !isLoading,
|
|
93
|
+
isLoading,
|
|
51
94
|
error,
|
|
95
|
+
hasSigner: client?.hasSigner ?? false,
|
|
96
|
+
contracts,
|
|
97
|
+
reinitialize: initializeClient,
|
|
52
98
|
};
|
|
53
99
|
}
|
|
100
|
+
exports.default = useRWA;
|
|
54
101
|
//# sourceMappingURL=useRWA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRWA.js","sourceRoot":"","sources":["../../../src/hooks/useRWA.ts"],"names":[],"mappings":";AAAA;;
|
|
1
|
+
{"version":3,"file":"useRWA.js","sourceRoot":"","sources":["../../../src/hooks/useRWA.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* React components for Real-World Asset tokenization on Mantle Network
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.useRWA = exports.YieldCalculator = exports.TokenMintForm = exports.InvestorDashboard = exports.KYCFlow = void 0;
|
|
7
|
+
exports.useRWA = exports.ConnectWalletPrompt = exports.LoadingSpinner = exports.formatErrorMessage = exports.ErrorDisplay = exports.YieldCalculator = exports.isValidAmount = exports.isValidAddress = exports.TokenMintForm = exports.InvestorDashboard = exports.KYCFlow = void 0;
|
|
8
8
|
// Components
|
|
9
9
|
var KYCFlow_1 = require("./components/KYCFlow");
|
|
10
10
|
Object.defineProperty(exports, "KYCFlow", { enumerable: true, get: function () { return KYCFlow_1.KYCFlow; } });
|
|
@@ -12,8 +12,18 @@ var InvestorDashboard_1 = require("./components/InvestorDashboard");
|
|
|
12
12
|
Object.defineProperty(exports, "InvestorDashboard", { enumerable: true, get: function () { return InvestorDashboard_1.InvestorDashboard; } });
|
|
13
13
|
var TokenMintForm_1 = require("./components/TokenMintForm");
|
|
14
14
|
Object.defineProperty(exports, "TokenMintForm", { enumerable: true, get: function () { return TokenMintForm_1.TokenMintForm; } });
|
|
15
|
+
var TokenMintForm_2 = require("./components/TokenMintForm");
|
|
16
|
+
Object.defineProperty(exports, "isValidAddress", { enumerable: true, get: function () { return TokenMintForm_2.isValidAddress; } });
|
|
17
|
+
Object.defineProperty(exports, "isValidAmount", { enumerable: true, get: function () { return TokenMintForm_2.isValidAmount; } });
|
|
15
18
|
var YieldCalculator_1 = require("./components/YieldCalculator");
|
|
16
19
|
Object.defineProperty(exports, "YieldCalculator", { enumerable: true, get: function () { return YieldCalculator_1.YieldCalculator; } });
|
|
20
|
+
var ErrorDisplay_1 = require("./components/ErrorDisplay");
|
|
21
|
+
Object.defineProperty(exports, "ErrorDisplay", { enumerable: true, get: function () { return ErrorDisplay_1.ErrorDisplay; } });
|
|
22
|
+
Object.defineProperty(exports, "formatErrorMessage", { enumerable: true, get: function () { return ErrorDisplay_1.formatErrorMessage; } });
|
|
23
|
+
var LoadingSpinner_1 = require("./components/LoadingSpinner");
|
|
24
|
+
Object.defineProperty(exports, "LoadingSpinner", { enumerable: true, get: function () { return LoadingSpinner_1.LoadingSpinner; } });
|
|
25
|
+
var ConnectWalletPrompt_1 = require("./components/ConnectWalletPrompt");
|
|
26
|
+
Object.defineProperty(exports, "ConnectWalletPrompt", { enumerable: true, get: function () { return ConnectWalletPrompt_1.ConnectWalletPrompt; } });
|
|
17
27
|
// Hooks
|
|
18
28
|
var useRWA_1 = require("./hooks/useRWA");
|
|
19
29
|
Object.defineProperty(exports, "useRWA", { enumerable: true, get: function () { return useRWA_1.useRWA; } });
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,aAAa;AACb,gDAA+C;AAAtC,kGAAA,OAAO,OAAA;AAChB,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,4DAA2D;AAAlD,8GAAA,aAAa,OAAA;AACtB,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,aAAa;AACb,gDAA+C;AAAtC,kGAAA,OAAO,OAAA;AAChB,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,4DAA2D;AAAlD,8GAAA,aAAa,OAAA;AACtB,4DAA2E;AAAlE,+GAAA,cAAc,OAAA;AAAE,8GAAA,aAAa,OAAA;AACtC,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AACxB,0DAA6E;AAApE,4GAAA,YAAY,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AACzC,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AACvB,wEAAuE;AAA9D,0HAAA,mBAAmB,OAAA;AAE5B,QAAQ;AACR,yCAAwC;AAA/B,gGAAA,MAAM,OAAA"}
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Type definitions for @mantle-rwa/react
|
|
3
|
+
* Type definitions for @mantle-rwa/react
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AccreditationTier = void 0;
|
|
7
|
-
// Re-export
|
|
7
|
+
// Re-export relevant types from SDK
|
|
8
8
|
var sdk_1 = require("@mantle-rwa/sdk");
|
|
9
9
|
Object.defineProperty(exports, "AccreditationTier", { enumerable: true, get: function () { return sdk_1.AccreditationTier; } });
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,oCAAoC;AACpC,uCAWyB;AAVrB,wGAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* ConnectWalletPrompt component
|
|
5
|
+
*/
|
|
6
|
+
export function ConnectWalletPrompt({ message = 'Please connect your wallet to continue.', className = '', }) {
|
|
7
|
+
return (_jsx("div", { className: `rwa-connect-wallet-prompt ${className}`, children: _jsx("div", { className: "p-4 bg-yellow-50 dark:bg-yellow-900/20 rounded-lg border border-yellow-200 dark:border-yellow-800", children: _jsxs("div", { className: "flex items-center", children: [_jsx("svg", { className: "w-5 h-5 text-yellow-600 dark:text-yellow-400 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }), _jsx("p", { className: "ml-3 text-sm text-yellow-700 dark:text-yellow-300", children: message })] }) }) }));
|
|
8
|
+
}
|
|
9
|
+
export default ConnectWalletPrompt;
|
|
10
|
+
//# sourceMappingURL=ConnectWalletPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectWalletPrompt.js","sourceRoot":"","sources":["../../../src/components/ConnectWalletPrompt.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAab;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAChC,OAAO,GAAG,yCAAyC,EACnD,SAAS,GAAG,EAAE,GACS;IACvB,OAAO,CACH,cAAK,SAAS,EAAE,6BAA6B,SAAS,EAAE,YACpD,cAAK,SAAS,EAAC,mGAAmG,YAC9G,eAAK,SAAS,EAAC,mBAAmB,aAC9B,cACI,SAAS,EAAC,4DAA4D,EACtE,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,eACI,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,sIAAsI,GAC1I,GACA,EACN,YAAG,SAAS,EAAC,mDAAmD,YAC3D,OAAO,GACR,IACF,GACJ,GACJ,CACT,CAAC;AACN,CAAC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Format error message for display
|
|
5
|
+
*/
|
|
6
|
+
export function formatErrorMessage(error) {
|
|
7
|
+
const message = error.message;
|
|
8
|
+
// Handle common contract errors
|
|
9
|
+
if (message.includes('user rejected')) {
|
|
10
|
+
return 'Transaction was rejected by the user.';
|
|
11
|
+
}
|
|
12
|
+
if (message.includes('insufficient funds')) {
|
|
13
|
+
return 'Insufficient funds for this transaction.';
|
|
14
|
+
}
|
|
15
|
+
if (message.includes('nonce')) {
|
|
16
|
+
return 'Transaction nonce error. Please try again.';
|
|
17
|
+
}
|
|
18
|
+
if (message.includes('gas')) {
|
|
19
|
+
return 'Gas estimation failed. The transaction may fail.';
|
|
20
|
+
}
|
|
21
|
+
if (message.includes('network')) {
|
|
22
|
+
return 'Network error. Please check your connection.';
|
|
23
|
+
}
|
|
24
|
+
if (message.includes('timeout')) {
|
|
25
|
+
return 'Request timed out. Please try again.';
|
|
26
|
+
}
|
|
27
|
+
// Return original message if no special handling
|
|
28
|
+
return message;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* ErrorDisplay component for consistent error UI
|
|
32
|
+
*/
|
|
33
|
+
export function ErrorDisplay({ error, onRetry, className = '', }) {
|
|
34
|
+
const formattedMessage = formatErrorMessage(error);
|
|
35
|
+
return (_jsx("div", { className: `rwa-error-display ${className}`, children: _jsx("div", { className: "p-4 bg-red-50 dark:bg-red-900/20 rounded-lg border border-red-200 dark:border-red-800", children: _jsxs("div", { className: "flex items-start", children: [_jsx("svg", { className: "w-5 h-5 text-red-600 dark:text-red-400 mt-0.5 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }), _jsxs("div", { className: "ml-3 flex-1", children: [_jsx("h3", { className: "text-sm font-medium text-red-800 dark:text-red-200", children: "Error" }), _jsx("p", { className: "mt-1 text-sm text-red-700 dark:text-red-300", children: formattedMessage }), onRetry && (_jsx("button", { onClick: onRetry, className: "mt-3 text-sm font-medium text-red-600 dark:text-red-400 hover:text-red-500 dark:hover:text-red-300 underline", children: "Try again" }))] })] }) }) }));
|
|
36
|
+
}
|
|
37
|
+
export default ErrorDisplay;
|
|
38
|
+
//# sourceMappingURL=ErrorDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorDisplay.js","sourceRoot":"","sources":["../../../src/components/ErrorDisplay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAUb;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE9B,gCAAgC;IAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,uCAAuC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACzC,OAAO,0CAA0C,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,4CAA4C,CAAC;IACxD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,kDAAkD,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,8CAA8C,CAAC;IAC1D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,sCAAsC,CAAC;IAClD,CAAC;IAED,iDAAiD;IACjD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EACzB,KAAK,EACL,OAAO,EACP,SAAS,GAAG,EAAE,GACE;IAChB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEnD,OAAO,CACH,cAAK,SAAS,EAAE,qBAAqB,SAAS,EAAE,YAC5C,cAAK,SAAS,EAAC,uFAAuF,YAClG,eAAK,SAAS,EAAC,kBAAkB,aAC7B,cACI,SAAS,EAAC,6DAA6D,EACvE,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,eACI,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,mDAAmD,GACvD,GACA,EACN,eAAK,SAAS,EAAC,aAAa,aACxB,aAAI,SAAS,EAAC,oDAAoD,sBAE7D,EACL,YAAG,SAAS,EAAC,6CAA6C,YACrD,gBAAgB,GACjB,EACH,OAAO,IAAI,CACR,iBACI,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,8GAA8G,0BAGnH,CACZ,IACC,IACJ,GACJ,GACJ,CACT,CAAC;AACN,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* InvestorDashboard - Dashboard displaying investor portfolio information
|
|
5
|
+
*
|
|
6
|
+
* Shows token balance, KYC status, accreditation tier, and pending yield claims.
|
|
7
|
+
*/
|
|
8
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
9
|
+
import { useAccount } from 'wagmi';
|
|
10
|
+
import { formatUnits } from 'viem';
|
|
11
|
+
import { useRWA } from '../hooks/useRWA';
|
|
12
|
+
import { AccreditationTier } from '@mantle-rwa/sdk';
|
|
13
|
+
/**
|
|
14
|
+
* Get display name for accreditation tier
|
|
15
|
+
*/
|
|
16
|
+
function getTierName(tier) {
|
|
17
|
+
switch (tier) {
|
|
18
|
+
case AccreditationTier.None:
|
|
19
|
+
return 'None';
|
|
20
|
+
case AccreditationTier.Retail:
|
|
21
|
+
return 'Retail';
|
|
22
|
+
case AccreditationTier.Accredited:
|
|
23
|
+
return 'Accredited';
|
|
24
|
+
case AccreditationTier.Institutional:
|
|
25
|
+
return 'Institutional';
|
|
26
|
+
default:
|
|
27
|
+
return 'Unknown';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format token amount for display
|
|
32
|
+
*/
|
|
33
|
+
function formatTokenAmount(amount, decimals, symbol) {
|
|
34
|
+
const formatted = formatUnits(amount, decimals);
|
|
35
|
+
const num = parseFloat(formatted);
|
|
36
|
+
return `${num.toLocaleString(undefined, { maximumFractionDigits: 4 })} ${symbol}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* InvestorDashboard component
|
|
40
|
+
*/
|
|
41
|
+
export function InvestorDashboard({ tokenAddress, kycRegistryAddress, yieldDistributorAddress, investorAddress, onClaimSuccess, onError, className = '', }) {
|
|
42
|
+
const { client, isInitialized, hasSigner } = useRWA();
|
|
43
|
+
const { address: connectedAddress } = useAccount();
|
|
44
|
+
const targetAddress = investorAddress || connectedAddress;
|
|
45
|
+
const [tokenInfo, setTokenInfo] = useState(null);
|
|
46
|
+
const [balance, setBalance] = useState(null);
|
|
47
|
+
const [kycInfo, setKycInfo] = useState(null);
|
|
48
|
+
const [pendingClaims, setPendingClaims] = useState([]);
|
|
49
|
+
const [totalClaimable, setTotalClaimable] = useState(0n);
|
|
50
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
51
|
+
const [error, setError] = useState(null);
|
|
52
|
+
const [isClaiming, setIsClaiming] = useState(false);
|
|
53
|
+
// Fetch all dashboard data
|
|
54
|
+
const fetchData = useCallback(async () => {
|
|
55
|
+
if (!client || !isInitialized || !targetAddress) {
|
|
56
|
+
setIsLoading(false);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
setIsLoading(true);
|
|
60
|
+
setError(null);
|
|
61
|
+
try {
|
|
62
|
+
// Fetch token info and balance
|
|
63
|
+
const token = client.token.connect(tokenAddress);
|
|
64
|
+
const [info, userBalance] = await Promise.all([
|
|
65
|
+
token.getInfo(),
|
|
66
|
+
token.balanceOf(targetAddress),
|
|
67
|
+
]);
|
|
68
|
+
setTokenInfo(info);
|
|
69
|
+
setBalance(userBalance);
|
|
70
|
+
// Fetch KYC info
|
|
71
|
+
const registry = client.kyc.connect(kycRegistryAddress);
|
|
72
|
+
const investorData = await registry.getInvestorInfo(targetAddress);
|
|
73
|
+
setKycInfo(investorData);
|
|
74
|
+
// Fetch pending claims
|
|
75
|
+
const distributor = client.yield.connect(yieldDistributorAddress);
|
|
76
|
+
const claims = await distributor.getPendingClaims(targetAddress);
|
|
77
|
+
setPendingClaims(claims);
|
|
78
|
+
// Calculate total claimable
|
|
79
|
+
const total = claims.reduce((sum, claim) => sum + claim.amount, 0n);
|
|
80
|
+
setTotalClaimable(total);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const errorObj = err instanceof Error ? err : new Error('Failed to fetch dashboard data');
|
|
84
|
+
setError(errorObj);
|
|
85
|
+
onError?.(errorObj);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
setIsLoading(false);
|
|
89
|
+
}
|
|
90
|
+
}, [client, isInitialized, targetAddress, tokenAddress, kycRegistryAddress, yieldDistributorAddress, onError]);
|
|
91
|
+
// Fetch data on mount and when dependencies change
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
fetchData();
|
|
94
|
+
}, [fetchData]);
|
|
95
|
+
// Handle claim single distribution
|
|
96
|
+
const handleClaim = useCallback(async (distributionId) => {
|
|
97
|
+
if (!client || !hasSigner)
|
|
98
|
+
return;
|
|
99
|
+
setIsClaiming(true);
|
|
100
|
+
setError(null);
|
|
101
|
+
try {
|
|
102
|
+
const distributor = client.yield.connect(yieldDistributorAddress);
|
|
103
|
+
const result = await distributor.claim(distributionId);
|
|
104
|
+
onClaimSuccess?.(result);
|
|
105
|
+
await fetchData(); // Refresh data
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const errorObj = err instanceof Error ? err : new Error('Failed to claim yield');
|
|
109
|
+
setError(errorObj);
|
|
110
|
+
onError?.(errorObj);
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
setIsClaiming(false);
|
|
114
|
+
}
|
|
115
|
+
}, [client, hasSigner, yieldDistributorAddress, onClaimSuccess, onError, fetchData]);
|
|
116
|
+
// Handle claim all
|
|
117
|
+
const handleClaimAll = useCallback(async () => {
|
|
118
|
+
if (!client || !hasSigner || pendingClaims.length === 0)
|
|
119
|
+
return;
|
|
120
|
+
setIsClaiming(true);
|
|
121
|
+
setError(null);
|
|
122
|
+
try {
|
|
123
|
+
const distributor = client.yield.connect(yieldDistributorAddress);
|
|
124
|
+
const distributionIds = pendingClaims.map(c => c.distributionId);
|
|
125
|
+
const result = await distributor.claimMultiple(distributionIds);
|
|
126
|
+
onClaimSuccess?.(result);
|
|
127
|
+
await fetchData(); // Refresh data
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
const errorObj = err instanceof Error ? err : new Error('Failed to claim yields');
|
|
131
|
+
setError(errorObj);
|
|
132
|
+
onError?.(errorObj);
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
setIsClaiming(false);
|
|
136
|
+
}
|
|
137
|
+
}, [client, hasSigner, pendingClaims, yieldDistributorAddress, onClaimSuccess, onError, fetchData]);
|
|
138
|
+
// Render loading state
|
|
139
|
+
if (isLoading) {
|
|
140
|
+
return (_jsx("div", { className: `rwa-investor-dashboard rwa-investor-dashboard--loading ${className}`, children: _jsxs("div", { className: "flex items-center justify-center p-8", children: [_jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" }), _jsx("span", { className: "ml-3 text-gray-600 dark:text-gray-300", children: "Loading dashboard..." })] }) }));
|
|
141
|
+
}
|
|
142
|
+
// Render no wallet state
|
|
143
|
+
if (!targetAddress) {
|
|
144
|
+
return (_jsx("div", { className: `rwa-investor-dashboard rwa-investor-dashboard--no-wallet ${className}`, children: _jsx("div", { className: "p-6 bg-yellow-50 dark:bg-yellow-900/20 rounded-lg border border-yellow-200 dark:border-yellow-800", children: _jsx("p", { className: "text-yellow-700 dark:text-yellow-300", children: "Please connect your wallet to view your dashboard." }) }) }));
|
|
145
|
+
}
|
|
146
|
+
// Render error state
|
|
147
|
+
if (error && !tokenInfo) {
|
|
148
|
+
return (_jsx("div", { className: `rwa-investor-dashboard rwa-investor-dashboard--error ${className}`, children: _jsxs("div", { className: "p-6 bg-red-50 dark:bg-red-900/20 rounded-lg border border-red-200 dark:border-red-800", children: [_jsx("h3", { className: "text-lg font-semibold text-red-800 dark:text-red-200", children: "Error" }), _jsx("p", { className: "mt-2 text-red-700 dark:text-red-300", children: error.message }), _jsx("button", { onClick: fetchData, className: "mt-4 px-4 py-2 bg-red-600 hover:bg-red-700 text-white rounded-md transition-colors", children: "Retry" })] }) }));
|
|
149
|
+
}
|
|
150
|
+
return (_jsx("div", { className: `rwa-investor-dashboard ${className}`, children: _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "Token Balance" }), tokenInfo && balance !== null && (_jsxs("div", { className: "mt-4", children: [_jsx("p", { className: "text-3xl font-bold text-gray-900 dark:text-white", children: formatTokenAmount(balance, tokenInfo.decimals, tokenInfo.symbol) }), _jsx("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: tokenInfo.name })] }))] }), _jsxs("div", { className: "p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "KYC Status" }), kycInfo && (_jsxs("div", { className: "mt-4 space-y-3", children: [_jsxs("div", { className: "flex items-center", children: [_jsx("span", { className: "text-gray-600 dark:text-gray-400 w-32", children: "Status:" }), _jsx("span", { className: `font-medium ${kycInfo.verified ? 'text-green-600 dark:text-green-400' : 'text-yellow-600 dark:text-yellow-400'}`, children: kycInfo.verified ? 'Verified' : 'Not Verified' })] }), _jsxs("div", { className: "flex items-center", children: [_jsx("span", { className: "text-gray-600 dark:text-gray-400 w-32", children: "Tier:" }), _jsx("span", { className: "font-medium text-gray-900 dark:text-white", children: getTierName(kycInfo.tier) })] }), kycInfo.expiry && kycInfo.verified && (_jsxs("div", { className: "flex items-center", children: [_jsx("span", { className: "text-gray-600 dark:text-gray-400 w-32", children: "Valid Until:" }), _jsx("span", { className: "font-medium text-gray-900 dark:text-white", children: kycInfo.expiry.toLocaleDateString() })] }))] }))] }), _jsxs("div", { className: "p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "Pending Yields" }), pendingClaims.length > 0 && hasSigner && (_jsx("button", { onClick: handleClaimAll, disabled: isClaiming, className: "px-4 py-2 bg-green-600 hover:bg-green-700 disabled:bg-gray-400 text-white rounded-md transition-colors text-sm", children: isClaiming ? 'Claiming...' : 'Claim All' }))] }), pendingClaims.length === 0 ? (_jsx("p", { className: "mt-4 text-gray-500 dark:text-gray-400", children: "No pending yields to claim." })) : (_jsxs("div", { className: "mt-4 space-y-3", children: [_jsxs("p", { className: "text-sm text-gray-600 dark:text-gray-400", children: ["Total Claimable: ", _jsxs("span", { className: "font-semibold", children: [formatUnits(totalClaimable, 18), " tokens"] })] }), _jsx("div", { className: "divide-y divide-gray-200 dark:divide-gray-700", children: pendingClaims.map((claim) => (_jsxs("div", { className: "py-3 flex items-center justify-between", children: [_jsxs("div", { children: [_jsxs("p", { className: "font-medium text-gray-900 dark:text-white", children: ["Distribution #", claim.distributionId] }), _jsxs("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: ["Amount: ", formatUnits(claim.amount, 18), " \u2022 Deadline: ", claim.deadline.toLocaleDateString()] })] }), hasSigner && (_jsx("button", { onClick: () => handleClaim(claim.distributionId), disabled: isClaiming, className: "px-3 py-1 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded text-sm transition-colors", children: "Claim" }))] }, claim.distributionId))) })] })), !hasSigner && pendingClaims.length > 0 && (_jsx("p", { className: "mt-4 text-sm text-yellow-600 dark:text-yellow-400", children: "Connect your wallet to claim yields." }))] }), error && (_jsx("div", { className: "p-4 bg-red-50 dark:bg-red-900/20 rounded-lg border border-red-200 dark:border-red-800", children: _jsx("p", { className: "text-red-700 dark:text-red-300", children: error.message }) }))] }) }));
|
|
151
|
+
}
|
|
152
|
+
export default InvestorDashboard;
|
|
153
|
+
//# sourceMappingURL=InvestorDashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvestorDashboard.js","sourceRoot":"","sources":["../../../src/components/InvestorDashboard.tsx"],"names":[],"mappings":"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"}
|