@mantle-rwa/react 0.1.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 (66) hide show
  1. package/dist/cjs/components/InvestorDashboard/index.js +156 -0
  2. package/dist/cjs/components/InvestorDashboard/index.js.map +1 -0
  3. package/dist/cjs/components/KYCFlow/index.js +231 -0
  4. package/dist/cjs/components/KYCFlow/index.js.map +1 -0
  5. package/dist/cjs/components/TokenMintForm/index.js +286 -0
  6. package/dist/cjs/components/TokenMintForm/index.js.map +1 -0
  7. package/dist/cjs/components/YieldCalculator/index.js +245 -0
  8. package/dist/cjs/components/YieldCalculator/index.js.map +1 -0
  9. package/dist/cjs/components/index.js +15 -0
  10. package/dist/cjs/components/index.js.map +1 -0
  11. package/dist/cjs/hooks/index.js +9 -0
  12. package/dist/cjs/hooks/index.js.map +1 -0
  13. package/dist/cjs/hooks/useRWA.js +54 -0
  14. package/dist/cjs/hooks/useRWA.js.map +1 -0
  15. package/dist/cjs/index.js +20 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/types/index.js +10 -0
  18. package/dist/cjs/types/index.js.map +1 -0
  19. package/dist/esm/components/InvestorDashboard/index.js +153 -0
  20. package/dist/esm/components/InvestorDashboard/index.js.map +1 -0
  21. package/dist/esm/components/KYCFlow/index.js +228 -0
  22. package/dist/esm/components/KYCFlow/index.js.map +1 -0
  23. package/dist/esm/components/TokenMintForm/index.js +279 -0
  24. package/dist/esm/components/TokenMintForm/index.js.map +1 -0
  25. package/dist/esm/components/YieldCalculator/index.js +236 -0
  26. package/dist/esm/components/YieldCalculator/index.js.map +1 -0
  27. package/dist/esm/components/index.js +8 -0
  28. package/dist/esm/components/index.js.map +1 -0
  29. package/dist/esm/hooks/index.js +5 -0
  30. package/dist/esm/hooks/index.js.map +1 -0
  31. package/dist/esm/hooks/useRWA.js +51 -0
  32. package/dist/esm/hooks/useRWA.js.map +1 -0
  33. package/dist/esm/index.js +12 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/types/index.js +6 -0
  36. package/dist/esm/types/index.js.map +1 -0
  37. package/dist/styles.css +1 -0
  38. package/dist/types/components/InvestorDashboard/index.d.ts +25 -0
  39. package/dist/types/components/InvestorDashboard/index.d.ts.map +1 -0
  40. package/dist/types/components/KYCFlow/index.d.ts +25 -0
  41. package/dist/types/components/KYCFlow/index.d.ts.map +1 -0
  42. package/dist/types/components/TokenMintForm/index.d.ts +60 -0
  43. package/dist/types/components/TokenMintForm/index.d.ts.map +1 -0
  44. package/dist/types/components/YieldCalculator/index.d.ts +59 -0
  45. package/dist/types/components/YieldCalculator/index.d.ts.map +1 -0
  46. package/dist/types/components/index.d.ts +8 -0
  47. package/dist/types/components/index.d.ts.map +1 -0
  48. package/dist/types/hooks/index.d.ts +5 -0
  49. package/dist/types/hooks/index.d.ts.map +1 -0
  50. package/dist/types/hooks/useRWA.d.ts +22 -0
  51. package/dist/types/hooks/useRWA.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +11 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/types/index.d.ts +177 -0
  55. package/dist/types/types/index.d.ts.map +1 -0
  56. package/package.json +66 -0
  57. package/src/components/InvestorDashboard/index.tsx +359 -0
  58. package/src/components/KYCFlow/index.tsx +434 -0
  59. package/src/components/TokenMintForm/index.tsx +590 -0
  60. package/src/components/YieldCalculator/index.tsx +541 -0
  61. package/src/components/index.ts +8 -0
  62. package/src/hooks/index.ts +5 -0
  63. package/src/hooks/useRWA.ts +70 -0
  64. package/src/index.ts +32 -0
  65. package/src/styles/index.css +197 -0
  66. package/src/types/index.ts +193 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * React hooks for RWA functionality
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useRWA = void 0;
7
+ var useRWA_1 = require("./useRWA");
8
+ Object.defineProperty(exports, "useRWA", { enumerable: true, get: function () { return useRWA_1.useRWA; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * useRWA hook for accessing RWA SDK functionality in React components
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useRWA = useRWA;
7
+ const react_1 = require("react");
8
+ /**
9
+ * Hook for accessing RWA SDK functionality
10
+ * Provides connection status and SDK client access
11
+ */
12
+ function useRWA() {
13
+ const [isInitialized, setIsInitialized] = (0, react_1.useState)(false);
14
+ const [chainId, setChainId] = (0, react_1.useState)(undefined);
15
+ const [address, setAddress] = (0, react_1.useState)(undefined);
16
+ const [isConnected, setIsConnected] = (0, react_1.useState)(false);
17
+ const [error, setError] = (0, react_1.useState)(null);
18
+ (0, react_1.useEffect)(() => {
19
+ // Initialize SDK client
20
+ const initializeSDK = async () => {
21
+ try {
22
+ // Check if window.ethereum is available (browser wallet)
23
+ if (typeof window !== 'undefined' && window.ethereum) {
24
+ const accounts = await window.ethereum.request?.({
25
+ method: 'eth_accounts',
26
+ });
27
+ if (accounts && accounts.length > 0) {
28
+ setAddress(accounts[0]);
29
+ setIsConnected(true);
30
+ }
31
+ const chainIdHex = await window.ethereum.request?.({
32
+ method: 'eth_chainId',
33
+ });
34
+ if (chainIdHex) {
35
+ setChainId(parseInt(chainIdHex, 16));
36
+ }
37
+ }
38
+ setIsInitialized(true);
39
+ }
40
+ catch (err) {
41
+ setError(err instanceof Error ? err : new Error('Failed to initialize RWA SDK'));
42
+ }
43
+ };
44
+ initializeSDK();
45
+ }, []);
46
+ return {
47
+ isInitialized,
48
+ chainId,
49
+ address,
50
+ isConnected,
51
+ error,
52
+ };
53
+ }
54
+ //# sourceMappingURL=useRWA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRWA.js","sourceRoot":"","sources":["../../../src/hooks/useRWA.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,wBA+CC;AAtDD,iCAA4C;AAG5C;;;GAGG;AACH,SAAgB,MAAM;IAClB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAqB,SAAS,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAqB,SAAS,CAAC,CAAC;IACtE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IAEvD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,wBAAwB;QACxB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC;gBACD,yDAAyD;gBACzD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBAC7C,MAAM,EAAE,cAAc;qBACzB,CAAyB,CAAC;oBAE3B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBACxB,cAAc,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC;oBAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBAC/C,MAAM,EAAE,aAAa;qBACxB,CAAuB,CAAC;oBAEzB,IAAI,UAAU,EAAE,CAAC;wBACb,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACL,CAAC;gBAED,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACrF,CAAC;QACL,CAAC,CAAC;QAEF,aAAa,EAAE,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACH,aAAa;QACb,OAAO;QACP,OAAO;QACP,WAAW;QACX,KAAK;KACR,CAAC;AACN,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * @mantle-rwa/react
4
+ * React components for Real-World Asset tokenization on Mantle Network
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.useRWA = exports.YieldCalculator = exports.TokenMintForm = exports.InvestorDashboard = exports.KYCFlow = void 0;
8
+ // Components
9
+ var KYCFlow_1 = require("./components/KYCFlow");
10
+ Object.defineProperty(exports, "KYCFlow", { enumerable: true, get: function () { return KYCFlow_1.KYCFlow; } });
11
+ var InvestorDashboard_1 = require("./components/InvestorDashboard");
12
+ Object.defineProperty(exports, "InvestorDashboard", { enumerable: true, get: function () { return InvestorDashboard_1.InvestorDashboard; } });
13
+ var TokenMintForm_1 = require("./components/TokenMintForm");
14
+ Object.defineProperty(exports, "TokenMintForm", { enumerable: true, get: function () { return TokenMintForm_1.TokenMintForm; } });
15
+ var YieldCalculator_1 = require("./components/YieldCalculator");
16
+ Object.defineProperty(exports, "YieldCalculator", { enumerable: true, get: function () { return YieldCalculator_1.YieldCalculator; } });
17
+ // Hooks
18
+ var useRWA_1 = require("./hooks/useRWA");
19
+ Object.defineProperty(exports, "useRWA", { enumerable: true, get: function () { return useRWA_1.useRWA; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAExB,QAAQ;AACR,yCAAwC;AAA/B,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Type definitions for @mantle-rwa/react components
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AccreditationTier = void 0;
7
+ // Re-export SDK types that are commonly used
8
+ var sdk_1 = require("@mantle-rwa/sdk");
9
+ Object.defineProperty(exports, "AccreditationTier", { enumerable: true, get: function () { return sdk_1.AccreditationTier; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA6C;AAC7C,uCAAoD;AAA3C,wGAAA,iBAAiB,OAAA"}
@@ -0,0 +1,153 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * InvestorDashboard Component
4
+ * Displays investor portfolio, yield history, and compliance status
5
+ *
6
+ * @see Requirements 11.1, 11.2, 11.3, 11.4, 11.5
7
+ */
8
+ import { useState, useEffect, useCallback } from 'react';
9
+ import { useRWA } from '../../hooks/useRWA';
10
+ /**
11
+ * Accreditation tier labels
12
+ */
13
+ const TIER_LABELS = {
14
+ 0: 'None',
15
+ 1: 'Retail',
16
+ 2: 'Accredited',
17
+ 3: 'Institutional',
18
+ };
19
+ /**
20
+ * Format a bigint balance to a human-readable string
21
+ */
22
+ function formatBalance(value, decimals = 18) {
23
+ const divisor = BigInt(10 ** decimals);
24
+ const integerPart = value / divisor;
25
+ const fractionalPart = value % divisor;
26
+ const fractionalStr = fractionalPart.toString().padStart(decimals, '0').slice(0, 2);
27
+ return `${integerPart.toLocaleString()}.${fractionalStr}`;
28
+ }
29
+ /**
30
+ * Format a date to a localized string
31
+ */
32
+ function formatDate(date) {
33
+ return date.toLocaleDateString(undefined, {
34
+ year: 'numeric',
35
+ month: 'short',
36
+ day: 'numeric',
37
+ });
38
+ }
39
+ /**
40
+ * InvestorDashboard component for displaying investor portfolio
41
+ * Shows token balance, yield history, and compliance status
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * <InvestorDashboard
46
+ * tokenAddress="0x..."
47
+ * yieldDistributorAddress="0x..."
48
+ * kycRegistryAddress="0x..."
49
+ * onClaimYield={(id) => console.log('Claiming:', id)}
50
+ * />
51
+ * ```
52
+ */
53
+ export function InvestorDashboard({ tokenAddress, yieldDistributorAddress, kycRegistryAddress, theme = 'light', onClaimYield, showPortfolioValue = true, priceOracle: _priceOracle, // Reserved for future price oracle integration
54
+ }) {
55
+ const { address, isConnected } = useRWA();
56
+ const [balance, setBalance] = useState(BigInt(0));
57
+ const [yieldHistory, setYieldHistory] = useState([]);
58
+ const [pendingYield, setPendingYield] = useState(BigInt(0));
59
+ const [pendingDistributionId, setPendingDistributionId] = useState(null);
60
+ const [isKYCVerified, setIsKYCVerified] = useState(false);
61
+ const [accreditationTier, setAccreditationTier] = useState(0);
62
+ const [kycExpiry, setKycExpiry] = useState(null);
63
+ const [isLoading, setIsLoading] = useState(true);
64
+ const [isClaiming, setIsClaiming] = useState(false);
65
+ const [error, setError] = useState(null);
66
+ const [portfolioValue, setPortfolioValue] = useState(BigInt(0));
67
+ const isDark = theme === 'dark';
68
+ // Fetch dashboard data
69
+ useEffect(() => {
70
+ const fetchData = async () => {
71
+ if (!isConnected || !address) {
72
+ setIsLoading(false);
73
+ return;
74
+ }
75
+ setError(null);
76
+ try {
77
+ // In production, these would be actual contract calls via SDK
78
+ // For now, simulating data fetch with realistic mock data
79
+ await new Promise((resolve) => setTimeout(resolve, 500));
80
+ // Simulate token balance (1000 tokens with 18 decimals)
81
+ const mockBalance = BigInt(1000) * BigInt(10 ** 18);
82
+ setBalance(mockBalance);
83
+ // Simulate yield history
84
+ const mockYieldHistory = [
85
+ {
86
+ distributionId: 1,
87
+ amount: BigInt(50) * BigInt(10 ** 6), // 50 USDC
88
+ paymentToken: 'USDC',
89
+ claimedAt: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
90
+ },
91
+ {
92
+ distributionId: 2,
93
+ amount: BigInt(75) * BigInt(10 ** 6), // 75 USDC
94
+ paymentToken: 'USDC',
95
+ claimedAt: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000),
96
+ },
97
+ ];
98
+ setYieldHistory(mockYieldHistory);
99
+ // Simulate pending yield (25 USDC)
100
+ setPendingYield(BigInt(25) * BigInt(10 ** 6));
101
+ setPendingDistributionId(3);
102
+ // Simulate KYC status
103
+ setIsKYCVerified(true);
104
+ setAccreditationTier(2); // Accredited
105
+ setKycExpiry(new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)); // 1 year from now
106
+ // Simulate portfolio value (assuming $1 per token)
107
+ setPortfolioValue(mockBalance);
108
+ }
109
+ catch (err) {
110
+ console.error('Failed to fetch dashboard data:', err);
111
+ setError('Failed to load dashboard data. Please try again.');
112
+ }
113
+ finally {
114
+ setIsLoading(false);
115
+ }
116
+ };
117
+ fetchData();
118
+ }, [address, isConnected, tokenAddress, yieldDistributorAddress, kycRegistryAddress]);
119
+ // Handle claim yield
120
+ const handleClaimYield = useCallback(async (distributionId) => {
121
+ if (isClaiming)
122
+ return;
123
+ setIsClaiming(true);
124
+ setError(null);
125
+ try {
126
+ // Call the onClaimYield callback
127
+ onClaimYield?.(distributionId);
128
+ // In production, this would wait for transaction confirmation
129
+ await new Promise((resolve) => setTimeout(resolve, 1000));
130
+ // Update state after successful claim
131
+ setPendingYield(BigInt(0));
132
+ setPendingDistributionId(null);
133
+ }
134
+ catch (err) {
135
+ console.error('Failed to claim yield:', err);
136
+ setError('Failed to claim yield. Please try again.');
137
+ }
138
+ finally {
139
+ setIsClaiming(false);
140
+ }
141
+ }, [isClaiming, onClaimYield]);
142
+ // Render wallet not connected state
143
+ if (!isConnected) {
144
+ return (_jsx("div", { className: `rwa-card ${isDark ? 'dark' : ''}`, "data-testid": "investor-dashboard", "data-theme": theme, children: _jsx("p", { className: "text-center text-gray-600 dark:text-gray-400", children: "Please connect your wallet to view your dashboard." }) }));
145
+ }
146
+ // Render loading state
147
+ if (isLoading) {
148
+ return (_jsx("div", { className: `rwa-card ${isDark ? 'dark' : ''}`, "data-testid": "investor-dashboard", "data-theme": theme, "aria-busy": "true", children: _jsxs("div", { className: "flex items-center justify-center py-8", children: [_jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-mantle-600" }), _jsx("span", { className: "ml-3 text-gray-600 dark:text-gray-400", children: "Loading dashboard..." })] }) }));
149
+ }
150
+ return (_jsxs("div", { className: `rwa-card ${isDark ? 'dark' : ''}`, "data-testid": "investor-dashboard", "data-theme": theme, children: [_jsx("h2", { className: "text-lg font-semibold mb-6 text-gray-900 dark:text-white", children: "Investor Dashboard" }), error && (_jsx("div", { className: "mb-4 p-3 bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 rounded-md border border-red-200 dark:border-red-800", role: "alert", "data-testid": "dashboard-error", children: error })), showPortfolioValue && (_jsxs("section", { className: "mb-6", "aria-labelledby": "portfolio-heading", "data-testid": "portfolio-section", children: [_jsx("h3", { id: "portfolio-heading", className: "text-sm font-medium text-gray-500 dark:text-gray-400 mb-2", children: "Portfolio Overview" }), _jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-4", children: [_jsxs("div", { className: "p-4 bg-gray-50 dark:bg-gray-700 rounded-lg", children: [_jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Token Balance" }), _jsx("p", { className: "text-2xl font-bold text-gray-900 dark:text-white", "data-testid": "token-balance", children: formatBalance(balance) })] }), _jsxs("div", { className: "p-4 bg-gray-50 dark:bg-gray-700 rounded-lg", children: [_jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Portfolio Value" }), _jsxs("p", { className: "text-2xl font-bold text-gray-900 dark:text-white", "data-testid": "portfolio-value", children: ["$", formatBalance(portfolioValue)] })] }), _jsxs("div", { className: "p-4 bg-gray-50 dark:bg-gray-700 rounded-lg", children: [_jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Pending Yield" }), _jsxs("p", { className: "text-2xl font-bold text-mantle-600", "data-testid": "pending-yield", children: ["$", formatBalance(pendingYield, 6)] })] })] })] })), _jsxs("section", { className: "mb-6", "aria-labelledby": "compliance-heading", "data-testid": "compliance-section", children: [_jsx("h3", { id: "compliance-heading", className: "text-sm font-medium text-gray-500 dark:text-gray-400 mb-2", children: "Compliance Status" }), _jsx("div", { className: "p-4 bg-gray-50 dark:bg-gray-700 rounded-lg", children: _jsxs("div", { className: "flex flex-wrap items-center gap-4", children: [_jsxs("div", { className: "flex items-center", children: [_jsx("span", { className: `w-3 h-3 rounded-full mr-2 ${isKYCVerified ? 'bg-green-500' : 'bg-red-500'}`, "aria-hidden": "true" }), _jsxs("span", { className: "text-sm text-gray-700 dark:text-gray-300", "data-testid": "kyc-status", children: ["KYC: ", isKYCVerified ? 'Verified' : 'Not Verified'] })] }), _jsxs("div", { className: "text-sm text-gray-700 dark:text-gray-300", children: ["Tier:", ' ', _jsx("span", { className: "font-medium", "data-testid": "accreditation-tier", children: TIER_LABELS[accreditationTier] || 'Unknown' })] }), kycExpiry && (_jsxs("div", { className: "text-sm text-gray-500 dark:text-gray-400", "data-testid": "kyc-expiry", children: ["Expires: ", formatDate(kycExpiry)] }))] }) })] }), _jsxs("section", { className: "mb-6", "aria-labelledby": "yield-history-heading", "data-testid": "yield-history-section", children: [_jsx("h3", { id: "yield-history-heading", className: "text-sm font-medium text-gray-500 dark:text-gray-400 mb-2", children: "Yield History" }), yieldHistory.length > 0 ? (_jsx("ul", { className: "space-y-2", "data-testid": "yield-history-list", children: yieldHistory.map((entry) => (_jsxs("li", { className: "flex justify-between items-center p-3 bg-gray-50 dark:bg-gray-700 rounded-lg", "data-testid": `yield-entry-${entry.distributionId}`, children: [_jsxs("div", { children: [_jsxs("p", { className: "text-sm font-medium text-gray-900 dark:text-white", children: ["Distribution #", entry.distributionId] }), _jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: formatDate(entry.claimedAt) })] }), _jsxs("p", { className: "font-medium text-gray-900 dark:text-white", children: [formatBalance(entry.amount, 6), " ", entry.paymentToken] })] }, entry.distributionId))) })) : (_jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg", "data-testid": "no-yield-history", children: "No yield history yet." }))] }), pendingYield > BigInt(0) && pendingDistributionId !== null && (_jsx("button", { type: "button", className: "rwa-button-primary w-full", onClick: () => handleClaimYield(pendingDistributionId), disabled: isClaiming, "aria-busy": isClaiming, "data-testid": "claim-yield-btn", children: isClaiming ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "animate-spin inline-block w-4 h-4 border-2 border-white border-t-transparent rounded-full mr-2" }), "Claiming..."] })) : (`Claim Pending Yield ($${formatBalance(pendingYield, 6)})`) }))] }));
151
+ }
152
+ export default InvestorDashboard;
153
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/InvestorDashboard/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * KYCFlow Component
4
+ * Multi-step KYC verification flow with provider integration
5
+ *
6
+ * @see Requirements 10.1, 10.2, 10.3, 10.4, 10.5
7
+ */
8
+ import { useState, useCallback, useMemo, useEffect } from 'react';
9
+ const PROVIDER_CONFIGS = {
10
+ persona: {
11
+ name: 'persona',
12
+ displayName: 'Persona',
13
+ logo: '🔐',
14
+ description: 'Identity verification powered by Persona',
15
+ },
16
+ synaps: {
17
+ name: 'synaps',
18
+ displayName: 'Synaps',
19
+ logo: '🛡️',
20
+ description: 'KYC verification powered by Synaps',
21
+ },
22
+ jumio: {
23
+ name: 'jumio',
24
+ displayName: 'Jumio',
25
+ logo: '✓',
26
+ description: 'Identity verification powered by Jumio',
27
+ },
28
+ };
29
+ const FIELD_LABELS = {
30
+ identity: {
31
+ label: 'Identity Verification',
32
+ description: 'Verify your identity with a government-issued ID',
33
+ },
34
+ accreditation: {
35
+ label: 'Accreditation Status',
36
+ description: 'Confirm your investor accreditation status',
37
+ },
38
+ address: {
39
+ label: 'Address Verification',
40
+ description: 'Verify your residential address',
41
+ },
42
+ tax: {
43
+ label: 'Tax Information',
44
+ description: 'Provide tax identification information',
45
+ },
46
+ };
47
+ /**
48
+ * KYCFlow component for investor verification
49
+ * Supports Persona, Synaps, and Jumio providers
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * <KYCFlow
54
+ * provider="persona"
55
+ * requiredFields={['identity', 'accreditation']}
56
+ * onComplete={(result) => console.log('KYC complete:', result)}
57
+ * theme="light"
58
+ * />
59
+ * ```
60
+ */
61
+ export function KYCFlow({ provider, onComplete, onError, requiredFields, theme = 'light', customStyles, registryAddress, autoUpdateRegistry = false, }) {
62
+ const [currentStepIndex, setCurrentStepIndex] = useState(0);
63
+ const [isLoading, setIsLoading] = useState(false);
64
+ const [error, setError] = useState(null);
65
+ const [sessionId, setSessionId] = useState(null);
66
+ const [verificationStarted, setVerificationStarted] = useState(false);
67
+ const isDark = theme === 'dark';
68
+ const providerConfig = PROVIDER_CONFIGS[provider];
69
+ // Initialize steps based on required fields
70
+ const [steps, setSteps] = useState(() => requiredFields.map((field) => ({
71
+ id: field,
72
+ label: FIELD_LABELS[field].label,
73
+ description: FIELD_LABELS[field].description,
74
+ status: 'pending',
75
+ })));
76
+ // Reset steps when requiredFields change
77
+ useEffect(() => {
78
+ setSteps(requiredFields.map((field) => ({
79
+ id: field,
80
+ label: FIELD_LABELS[field].label,
81
+ description: FIELD_LABELS[field].description,
82
+ status: 'pending',
83
+ })));
84
+ setCurrentStepIndex(0);
85
+ setVerificationStarted(false);
86
+ setSessionId(null);
87
+ setError(null);
88
+ }, [requiredFields]);
89
+ const currentStep = steps[currentStepIndex];
90
+ const isLastStep = currentStepIndex === steps.length - 1;
91
+ const allStepsCompleted = steps.every((step) => step.status === 'completed');
92
+ // Update step status
93
+ const updateStepStatus = useCallback((stepIndex, status) => {
94
+ setSteps((prev) => prev.map((step, idx) => (idx === stepIndex ? { ...step, status } : step)));
95
+ }, []);
96
+ // Start verification flow
97
+ const handleStartVerification = useCallback(async () => {
98
+ setIsLoading(true);
99
+ setError(null);
100
+ setVerificationStarted(true);
101
+ try {
102
+ // Generate session ID for this verification flow
103
+ const newSessionId = `${provider}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
104
+ setSessionId(newSessionId);
105
+ // Mark first step as in progress
106
+ updateStepStatus(0, 'in_progress');
107
+ // Simulate provider initialization
108
+ await new Promise((resolve) => setTimeout(resolve, 500));
109
+ }
110
+ catch (err) {
111
+ const errorMessage = err instanceof Error ? err.message : 'Failed to start verification';
112
+ setError(errorMessage);
113
+ onError?.(err instanceof Error ? err : new Error(errorMessage));
114
+ setVerificationStarted(false);
115
+ }
116
+ finally {
117
+ setIsLoading(false);
118
+ }
119
+ }, [provider, onError, updateStepStatus]);
120
+ // Complete current step and move to next
121
+ const handleCompleteStep = useCallback(async () => {
122
+ setIsLoading(true);
123
+ setError(null);
124
+ try {
125
+ // Simulate step completion
126
+ await new Promise((resolve) => setTimeout(resolve, 800));
127
+ // Mark current step as completed
128
+ updateStepStatus(currentStepIndex, 'completed');
129
+ if (!isLastStep) {
130
+ // Move to next step
131
+ const nextIndex = currentStepIndex + 1;
132
+ setCurrentStepIndex(nextIndex);
133
+ updateStepStatus(nextIndex, 'in_progress');
134
+ }
135
+ }
136
+ catch (err) {
137
+ const errorMessage = err instanceof Error ? err.message : 'Step verification failed';
138
+ setError(errorMessage);
139
+ updateStepStatus(currentStepIndex, 'failed');
140
+ onError?.(err instanceof Error ? err : new Error(errorMessage));
141
+ }
142
+ finally {
143
+ setIsLoading(false);
144
+ }
145
+ }, [currentStepIndex, isLastStep, onError, updateStepStatus]);
146
+ // Complete entire verification flow
147
+ const handleCompleteVerification = useCallback(async () => {
148
+ setIsLoading(true);
149
+ setError(null);
150
+ try {
151
+ // Complete the last step first
152
+ await new Promise((resolve) => setTimeout(resolve, 500));
153
+ updateStepStatus(currentStepIndex, 'completed');
154
+ // Determine tier based on accreditation field
155
+ const hasAccreditation = requiredFields.includes('accreditation');
156
+ const tier = hasAccreditation ? 2 : 1; // Accredited (2) or Retail (1)
157
+ // Generate identity hash
158
+ const identityHash = '0x' + Array.from({ length: 64 }, () => Math.floor(Math.random() * 16).toString(16)).join('');
159
+ const result = {
160
+ verified: true,
161
+ tier,
162
+ identityHash,
163
+ sessionId: sessionId || `${provider}-${Date.now()}`,
164
+ };
165
+ // Auto-update registry if configured
166
+ if (autoUpdateRegistry && registryAddress) {
167
+ // In production, this would call the SDK to update the on-chain registry
168
+ await new Promise((resolve) => setTimeout(resolve, 500));
169
+ }
170
+ onComplete(result);
171
+ }
172
+ catch (err) {
173
+ const errorMessage = err instanceof Error ? err.message : 'Verification completion failed';
174
+ setError(errorMessage);
175
+ updateStepStatus(currentStepIndex, 'failed');
176
+ onError?.(err instanceof Error ? err : new Error(errorMessage));
177
+ }
178
+ finally {
179
+ setIsLoading(false);
180
+ }
181
+ }, [
182
+ currentStepIndex,
183
+ requiredFields,
184
+ sessionId,
185
+ provider,
186
+ autoUpdateRegistry,
187
+ registryAddress,
188
+ onComplete,
189
+ onError,
190
+ updateStepStatus,
191
+ ]);
192
+ // Retry failed step
193
+ const handleRetry = useCallback(() => {
194
+ setError(null);
195
+ updateStepStatus(currentStepIndex, 'in_progress');
196
+ }, [currentStepIndex, updateStepStatus]);
197
+ // Style classes
198
+ const containerClass = useMemo(() => customStyles?.container ?? `rwa-kyc-flow ${isDark ? 'dark' : ''}`, [customStyles?.container, isDark]);
199
+ const headerClass = useMemo(() => customStyles?.header ?? 'rwa-kyc-header', [customStyles?.header]);
200
+ const buttonClass = useMemo(() => customStyles?.button ?? 'rwa-button-primary', [customStyles?.button]);
201
+ // Render step indicator
202
+ const renderStepIndicator = () => (_jsx("div", { className: "rwa-kyc-steps", role: "list", "aria-label": "Verification steps", children: steps.map((step, index) => (_jsxs("div", { className: `rwa-kyc-step ${step.status}`, role: "listitem", "aria-current": index === currentStepIndex ? 'step' : undefined, children: [_jsx("div", { className: "rwa-kyc-step-indicator", children: step.status === 'completed' ? (_jsx("span", { "aria-hidden": "true", children: "\u2713" })) : step.status === 'failed' ? (_jsx("span", { "aria-hidden": "true", children: "\u2717" })) : (_jsx("span", { "aria-hidden": "true", children: index + 1 })) }), _jsxs("div", { className: "rwa-kyc-step-content", children: [_jsx("span", { className: "rwa-kyc-step-label", children: step.label }), index === currentStepIndex && verificationStarted && (_jsx("span", { className: "rwa-kyc-step-description", children: step.description }))] })] }, step.id))) }));
203
+ // Render provider info
204
+ const renderProviderInfo = () => (_jsxs("div", { className: "rwa-kyc-provider", "data-testid": "kyc-provider-info", children: [_jsx("span", { className: "rwa-kyc-provider-logo", "aria-hidden": "true", children: providerConfig.logo }), _jsxs("div", { className: "rwa-kyc-provider-details", children: [_jsx("span", { className: "rwa-kyc-provider-name", children: providerConfig.displayName }), _jsx("span", { className: "rwa-kyc-provider-description", children: providerConfig.description })] })] }));
205
+ // Render action buttons
206
+ const renderActions = () => {
207
+ if (!verificationStarted) {
208
+ return (_jsx("button", { type: "button", className: buttonClass, onClick: handleStartVerification, disabled: isLoading, "aria-busy": isLoading, "data-testid": "start-verification-btn", children: isLoading ? 'Starting...' : 'Start Verification' }));
209
+ }
210
+ if (currentStep?.status === 'failed') {
211
+ return (_jsx("button", { type: "button", className: buttonClass, onClick: handleRetry, disabled: isLoading, "data-testid": "retry-btn", children: "Retry Step" }));
212
+ }
213
+ if (allStepsCompleted) {
214
+ return (_jsxs("div", { className: "rwa-kyc-success", role: "status", children: [_jsx("span", { className: "rwa-kyc-success-icon", "aria-hidden": "true", children: "\u2713" }), _jsx("span", { children: "Verification Complete" })] }));
215
+ }
216
+ if (isLastStep) {
217
+ return (_jsx("button", { type: "button", className: buttonClass, onClick: handleCompleteVerification, disabled: isLoading, "aria-busy": isLoading, "data-testid": "complete-verification-btn", children: isLoading ? 'Completing...' : 'Complete Verification' }));
218
+ }
219
+ return (_jsx("button", { type: "button", className: buttonClass, onClick: handleCompleteStep, disabled: isLoading, "aria-busy": isLoading, "data-testid": "next-step-btn", children: isLoading ? 'Verifying...' : 'Continue' }));
220
+ };
221
+ return (_jsxs("div", { className: containerClass, "data-testid": "kyc-flow", "data-provider": provider, "data-theme": theme, role: "form", "aria-label": "KYC Verification Flow", children: [_jsx("h2", { className: headerClass, children: allStepsCompleted
222
+ ? 'Verification Complete'
223
+ : verificationStarted
224
+ ? `Step ${currentStepIndex + 1} of ${steps.length}: ${currentStep?.label}`
225
+ : 'Identity Verification' }), error && (_jsxs("div", { className: "rwa-kyc-error", role: "alert", "aria-live": "polite", "data-testid": "kyc-error", children: [_jsx("span", { className: "rwa-kyc-error-icon", "aria-hidden": "true", children: "\u26A0" }), _jsx("span", { children: error })] })), renderProviderInfo(), renderStepIndicator(), _jsx("div", { className: "rwa-kyc-actions", children: renderActions() }), sessionId && (_jsx("div", { className: "rwa-kyc-session", "data-testid": "session-info", children: _jsxs("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Session: ", sessionId.slice(0, 20), "..."] }) }))] }));
226
+ }
227
+ export default KYCFlow;
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/KYCFlow/index.tsx"],"names":[],"mappings":"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"}