@mantle-rwa/react 0.1.1 → 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.
Files changed (73) hide show
  1. package/dist/cjs/components/ConnectWalletPrompt.js +13 -0
  2. package/dist/cjs/components/ConnectWalletPrompt.js.map +1 -0
  3. package/dist/cjs/components/ErrorDisplay.js +42 -0
  4. package/dist/cjs/components/ErrorDisplay.js.map +1 -0
  5. package/dist/cjs/components/InvestorDashboard.js +156 -0
  6. package/dist/cjs/components/InvestorDashboard.js.map +1 -0
  7. package/dist/cjs/components/KYCFlow.js +146 -0
  8. package/dist/cjs/components/KYCFlow.js.map +1 -0
  9. package/dist/cjs/components/LoadingSpinner.js +18 -0
  10. package/dist/cjs/components/LoadingSpinner.js.map +1 -0
  11. package/dist/cjs/components/TokenMintForm.js +163 -0
  12. package/dist/cjs/components/TokenMintForm.js.map +1 -0
  13. package/dist/cjs/components/YieldCalculator.js +97 -0
  14. package/dist/cjs/components/YieldCalculator.js.map +1 -0
  15. package/dist/cjs/hooks/useRWA.js +87 -40
  16. package/dist/cjs/hooks/useRWA.js.map +1 -1
  17. package/dist/cjs/index.js +11 -1
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/types/index.js +2 -2
  20. package/dist/cjs/types/index.js.map +1 -1
  21. package/dist/esm/components/ConnectWalletPrompt.js +10 -0
  22. package/dist/esm/components/ConnectWalletPrompt.js.map +1 -0
  23. package/dist/esm/components/ErrorDisplay.js +38 -0
  24. package/dist/esm/components/ErrorDisplay.js.map +1 -0
  25. package/dist/esm/components/InvestorDashboard.js +153 -0
  26. package/dist/esm/components/InvestorDashboard.js.map +1 -0
  27. package/dist/esm/components/KYCFlow.js +143 -0
  28. package/dist/esm/components/KYCFlow.js.map +1 -0
  29. package/dist/esm/components/LoadingSpinner.js +15 -0
  30. package/dist/esm/components/LoadingSpinner.js.map +1 -0
  31. package/dist/esm/components/TokenMintForm.js +158 -0
  32. package/dist/esm/components/TokenMintForm.js.map +1 -0
  33. package/dist/esm/components/YieldCalculator.js +94 -0
  34. package/dist/esm/components/YieldCalculator.js.map +1 -0
  35. package/dist/esm/hooks/useRWA.js +86 -39
  36. package/dist/esm/hooks/useRWA.js.map +1 -1
  37. package/dist/esm/index.js +4 -0
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/types/index.js +3 -3
  40. package/dist/esm/types/index.js.map +1 -1
  41. package/dist/styles.css +3 -1
  42. package/dist/types/components/ConnectWalletPrompt.d.ts +15 -0
  43. package/dist/types/components/ConnectWalletPrompt.d.ts.map +1 -0
  44. package/dist/types/components/ErrorDisplay.d.ts +16 -0
  45. package/dist/types/components/ErrorDisplay.d.ts.map +1 -0
  46. package/dist/types/components/InvestorDashboard.d.ts +7 -0
  47. package/dist/types/components/InvestorDashboard.d.ts.map +1 -0
  48. package/dist/types/components/KYCFlow.d.ts +7 -0
  49. package/dist/types/components/KYCFlow.d.ts.map +1 -0
  50. package/dist/types/components/LoadingSpinner.d.ts +10 -0
  51. package/dist/types/components/LoadingSpinner.d.ts.map +1 -0
  52. package/dist/types/components/TokenMintForm.d.ts +15 -0
  53. package/dist/types/components/TokenMintForm.d.ts.map +1 -0
  54. package/dist/types/components/YieldCalculator.d.ts +7 -0
  55. package/dist/types/components/YieldCalculator.d.ts.map +1 -0
  56. package/dist/types/hooks/useRWA.d.ts +7 -19
  57. package/dist/types/hooks/useRWA.d.ts.map +1 -1
  58. package/dist/types/index.d.ts +5 -1
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/dist/types/types/index.d.ts +113 -131
  61. package/dist/types/types/index.d.ts.map +1 -1
  62. package/package.json +5 -3
  63. package/src/components/ConnectWalletPrompt.tsx +47 -0
  64. package/src/components/ErrorDisplay.tsx +90 -0
  65. package/src/components/InvestorDashboard.tsx +315 -0
  66. package/src/components/KYCFlow.tsx +267 -0
  67. package/src/components/LoadingSpinner.tsx +33 -0
  68. package/src/components/TokenMintForm.tsx +291 -0
  69. package/src/components/YieldCalculator.tsx +250 -0
  70. package/src/hooks/useRWA.ts +110 -0
  71. package/src/index.ts +4 -0
  72. package/src/styles/index.css +68 -14
  73. package/src/types/index.ts +200 -0
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ConnectWalletPrompt = ConnectWalletPrompt;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * ConnectWalletPrompt component
8
+ */
9
+ function ConnectWalletPrompt({ message = 'Please connect your wallet to continue.', className = '', }) {
10
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-connect-wallet-prompt ${className}`, children: (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.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.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: (0, jsx_runtime_1.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" }) }), (0, jsx_runtime_1.jsx)("p", { className: "ml-3 text-sm text-yellow-700 dark:text-yellow-300", children: message })] }) }) }));
11
+ }
12
+ exports.default = ConnectWalletPrompt;
13
+ //# sourceMappingURL=ConnectWalletPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectWalletPrompt.js","sourceRoot":"","sources":["../../../src/components/ConnectWalletPrompt.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAgBb,kDA4BC;;AA/BD;;GAEG;AACH,SAAgB,mBAAmB,CAAC,EAChC,OAAO,GAAG,yCAAyC,EACnD,SAAS,GAAG,EAAE,GACS;IACvB,OAAO,CACH,gCAAK,SAAS,EAAE,6BAA6B,SAAS,EAAE,YACpD,gCAAK,SAAS,EAAC,mGAAmG,YAC9G,iCAAK,SAAS,EAAC,mBAAmB,aAC9B,gCACI,SAAS,EAAC,4DAA4D,EACtE,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,iCACI,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,sIAAsI,GAC1I,GACA,EACN,8BAAG,SAAS,EAAC,mDAAmD,YAC3D,OAAO,GACR,IACF,GACJ,GACJ,CACT,CAAC;AACN,CAAC;AAED,kBAAe,mBAAmB,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.formatErrorMessage = formatErrorMessage;
5
+ exports.ErrorDisplay = ErrorDisplay;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * Format error message for display
9
+ */
10
+ function formatErrorMessage(error) {
11
+ const message = error.message;
12
+ // Handle common contract errors
13
+ if (message.includes('user rejected')) {
14
+ return 'Transaction was rejected by the user.';
15
+ }
16
+ if (message.includes('insufficient funds')) {
17
+ return 'Insufficient funds for this transaction.';
18
+ }
19
+ if (message.includes('nonce')) {
20
+ return 'Transaction nonce error. Please try again.';
21
+ }
22
+ if (message.includes('gas')) {
23
+ return 'Gas estimation failed. The transaction may fail.';
24
+ }
25
+ if (message.includes('network')) {
26
+ return 'Network error. Please check your connection.';
27
+ }
28
+ if (message.includes('timeout')) {
29
+ return 'Request timed out. Please try again.';
30
+ }
31
+ // Return original message if no special handling
32
+ return message;
33
+ }
34
+ /**
35
+ * ErrorDisplay component for consistent error UI
36
+ */
37
+ function ErrorDisplay({ error, onRetry, className = '', }) {
38
+ const formattedMessage = formatErrorMessage(error);
39
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-error-display ${className}`, children: (0, jsx_runtime_1.jsx)("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.jsxs)("div", { className: "flex items-start", children: [(0, jsx_runtime_1.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: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "ml-3 flex-1", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-medium text-red-800 dark:text-red-200", children: "Error" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-red-700 dark:text-red-300", children: formattedMessage }), onRetry && ((0, jsx_runtime_1.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" }))] })] }) }) }));
40
+ }
41
+ exports.default = ErrorDisplay;
42
+ //# sourceMappingURL=ErrorDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorDisplay.js","sourceRoot":"","sources":["../../../src/components/ErrorDisplay.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAab,gDAyBC;AAKD,oCA4CC;;AA7ED;;GAEG;AACH,SAAgB,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,SAAgB,YAAY,CAAC,EACzB,KAAK,EACL,OAAO,EACP,SAAS,GAAG,EAAE,GACE;IAChB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEnD,OAAO,CACH,gCAAK,SAAS,EAAE,qBAAqB,SAAS,EAAE,YAC5C,gCAAK,SAAS,EAAC,uFAAuF,YAClG,iCAAK,SAAS,EAAC,kBAAkB,aAC7B,gCACI,SAAS,EAAC,6DAA6D,EACvE,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,iCACI,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,mDAAmD,GACvD,GACA,EACN,iCAAK,SAAS,EAAC,aAAa,aACxB,+BAAI,SAAS,EAAC,oDAAoD,sBAE7D,EACL,8BAAG,SAAS,EAAC,6CAA6C,YACrD,gBAAgB,GACjB,EACH,OAAO,IAAI,CACR,mCACI,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,8GAA8G,0BAGnH,CACZ,IACC,IACJ,GACJ,GACJ,CACT,CAAC;AACN,CAAC;AAED,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.InvestorDashboard = InvestorDashboard;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * InvestorDashboard - Dashboard displaying investor portfolio information
8
+ *
9
+ * Shows token balance, KYC status, accreditation tier, and pending yield claims.
10
+ */
11
+ const react_1 = require("react");
12
+ const wagmi_1 = require("wagmi");
13
+ const viem_1 = require("viem");
14
+ const useRWA_1 = require("../hooks/useRWA");
15
+ const sdk_1 = require("@mantle-rwa/sdk");
16
+ /**
17
+ * Get display name for accreditation tier
18
+ */
19
+ function getTierName(tier) {
20
+ switch (tier) {
21
+ case sdk_1.AccreditationTier.None:
22
+ return 'None';
23
+ case sdk_1.AccreditationTier.Retail:
24
+ return 'Retail';
25
+ case sdk_1.AccreditationTier.Accredited:
26
+ return 'Accredited';
27
+ case sdk_1.AccreditationTier.Institutional:
28
+ return 'Institutional';
29
+ default:
30
+ return 'Unknown';
31
+ }
32
+ }
33
+ /**
34
+ * Format token amount for display
35
+ */
36
+ function formatTokenAmount(amount, decimals, symbol) {
37
+ const formatted = (0, viem_1.formatUnits)(amount, decimals);
38
+ const num = parseFloat(formatted);
39
+ return `${num.toLocaleString(undefined, { maximumFractionDigits: 4 })} ${symbol}`;
40
+ }
41
+ /**
42
+ * InvestorDashboard component
43
+ */
44
+ function InvestorDashboard({ tokenAddress, kycRegistryAddress, yieldDistributorAddress, investorAddress, onClaimSuccess, onError, className = '', }) {
45
+ const { client, isInitialized, hasSigner } = (0, useRWA_1.useRWA)();
46
+ const { address: connectedAddress } = (0, wagmi_1.useAccount)();
47
+ const targetAddress = investorAddress || connectedAddress;
48
+ const [tokenInfo, setTokenInfo] = (0, react_1.useState)(null);
49
+ const [balance, setBalance] = (0, react_1.useState)(null);
50
+ const [kycInfo, setKycInfo] = (0, react_1.useState)(null);
51
+ const [pendingClaims, setPendingClaims] = (0, react_1.useState)([]);
52
+ const [totalClaimable, setTotalClaimable] = (0, react_1.useState)(0n);
53
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
54
+ const [error, setError] = (0, react_1.useState)(null);
55
+ const [isClaiming, setIsClaiming] = (0, react_1.useState)(false);
56
+ // Fetch all dashboard data
57
+ const fetchData = (0, react_1.useCallback)(async () => {
58
+ if (!client || !isInitialized || !targetAddress) {
59
+ setIsLoading(false);
60
+ return;
61
+ }
62
+ setIsLoading(true);
63
+ setError(null);
64
+ try {
65
+ // Fetch token info and balance
66
+ const token = client.token.connect(tokenAddress);
67
+ const [info, userBalance] = await Promise.all([
68
+ token.getInfo(),
69
+ token.balanceOf(targetAddress),
70
+ ]);
71
+ setTokenInfo(info);
72
+ setBalance(userBalance);
73
+ // Fetch KYC info
74
+ const registry = client.kyc.connect(kycRegistryAddress);
75
+ const investorData = await registry.getInvestorInfo(targetAddress);
76
+ setKycInfo(investorData);
77
+ // Fetch pending claims
78
+ const distributor = client.yield.connect(yieldDistributorAddress);
79
+ const claims = await distributor.getPendingClaims(targetAddress);
80
+ setPendingClaims(claims);
81
+ // Calculate total claimable
82
+ const total = claims.reduce((sum, claim) => sum + claim.amount, 0n);
83
+ setTotalClaimable(total);
84
+ }
85
+ catch (err) {
86
+ const errorObj = err instanceof Error ? err : new Error('Failed to fetch dashboard data');
87
+ setError(errorObj);
88
+ onError?.(errorObj);
89
+ }
90
+ finally {
91
+ setIsLoading(false);
92
+ }
93
+ }, [client, isInitialized, targetAddress, tokenAddress, kycRegistryAddress, yieldDistributorAddress, onError]);
94
+ // Fetch data on mount and when dependencies change
95
+ (0, react_1.useEffect)(() => {
96
+ fetchData();
97
+ }, [fetchData]);
98
+ // Handle claim single distribution
99
+ const handleClaim = (0, react_1.useCallback)(async (distributionId) => {
100
+ if (!client || !hasSigner)
101
+ return;
102
+ setIsClaiming(true);
103
+ setError(null);
104
+ try {
105
+ const distributor = client.yield.connect(yieldDistributorAddress);
106
+ const result = await distributor.claim(distributionId);
107
+ onClaimSuccess?.(result);
108
+ await fetchData(); // Refresh data
109
+ }
110
+ catch (err) {
111
+ const errorObj = err instanceof Error ? err : new Error('Failed to claim yield');
112
+ setError(errorObj);
113
+ onError?.(errorObj);
114
+ }
115
+ finally {
116
+ setIsClaiming(false);
117
+ }
118
+ }, [client, hasSigner, yieldDistributorAddress, onClaimSuccess, onError, fetchData]);
119
+ // Handle claim all
120
+ const handleClaimAll = (0, react_1.useCallback)(async () => {
121
+ if (!client || !hasSigner || pendingClaims.length === 0)
122
+ return;
123
+ setIsClaiming(true);
124
+ setError(null);
125
+ try {
126
+ const distributor = client.yield.connect(yieldDistributorAddress);
127
+ const distributionIds = pendingClaims.map(c => c.distributionId);
128
+ const result = await distributor.claimMultiple(distributionIds);
129
+ onClaimSuccess?.(result);
130
+ await fetchData(); // Refresh data
131
+ }
132
+ catch (err) {
133
+ const errorObj = err instanceof Error ? err : new Error('Failed to claim yields');
134
+ setError(errorObj);
135
+ onError?.(errorObj);
136
+ }
137
+ finally {
138
+ setIsClaiming(false);
139
+ }
140
+ }, [client, hasSigner, pendingClaims, yieldDistributorAddress, onClaimSuccess, onError, fetchData]);
141
+ // Render loading state
142
+ if (isLoading) {
143
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-investor-dashboard rwa-investor-dashboard--loading ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center p-8", children: [(0, jsx_runtime_1.jsx)("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" }), (0, jsx_runtime_1.jsx)("span", { className: "ml-3 text-gray-600 dark:text-gray-300", children: "Loading dashboard..." })] }) }));
144
+ }
145
+ // Render no wallet state
146
+ if (!targetAddress) {
147
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-investor-dashboard rwa-investor-dashboard--no-wallet ${className}`, children: (0, jsx_runtime_1.jsx)("div", { className: "p-6 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: "Please connect your wallet to view your dashboard." }) }) }));
148
+ }
149
+ // Render error state
150
+ if (error && !tokenInfo) {
151
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-investor-dashboard rwa-investor-dashboard--error ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-red-50 dark:bg-red-900/20 rounded-lg border border-red-200 dark:border-red-800", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-red-800 dark:text-red-200", children: "Error" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-red-700 dark:text-red-300", children: error.message }), (0, jsx_runtime_1.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" })] }) }));
152
+ }
153
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-investor-dashboard ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "Token Balance" }), tokenInfo && balance !== null && ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-3xl font-bold text-gray-900 dark:text-white", children: formatTokenAmount(balance, tokenInfo.decimals, tokenInfo.symbol) }), (0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: tokenInfo.name })] }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "KYC Status" }), kycInfo && ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 space-y-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-gray-600 dark:text-gray-400 w-32", children: "Status:" }), (0, jsx_runtime_1.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' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-gray-600 dark:text-gray-400 w-32", children: "Tier:" }), (0, jsx_runtime_1.jsx)("span", { className: "font-medium text-gray-900 dark:text-white", children: getTierName(kycInfo.tier) })] }), kycInfo.expiry && kycInfo.verified && ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-gray-600 dark:text-gray-400 w-32", children: "Valid Until:" }), (0, jsx_runtime_1.jsx)("span", { className: "font-medium text-gray-900 dark:text-white", children: kycInfo.expiry.toLocaleDateString() })] }))] }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "Pending Yields" }), pendingClaims.length > 0 && hasSigner && ((0, jsx_runtime_1.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 ? ((0, jsx_runtime_1.jsx)("p", { className: "mt-4 text-gray-500 dark:text-gray-400", children: "No pending yields to claim." })) : ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 space-y-3", children: [(0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-gray-600 dark:text-gray-400", children: ["Total Claimable: ", (0, jsx_runtime_1.jsxs)("span", { className: "font-semibold", children: [(0, viem_1.formatUnits)(totalClaimable, 18), " tokens"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "divide-y divide-gray-200 dark:divide-gray-700", children: pendingClaims.map((claim) => ((0, jsx_runtime_1.jsxs)("div", { className: "py-3 flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("p", { className: "font-medium text-gray-900 dark:text-white", children: ["Distribution #", claim.distributionId] }), (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: ["Amount: ", (0, viem_1.formatUnits)(claim.amount, 18), " \u2022 Deadline: ", claim.deadline.toLocaleDateString()] })] }), hasSigner && ((0, jsx_runtime_1.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 && ((0, jsx_runtime_1.jsx)("p", { className: "mt-4 text-sm text-yellow-600 dark:text-yellow-400", children: "Connect your wallet to claim yields." }))] }), error && ((0, jsx_runtime_1.jsx)("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 }) }))] }) }));
154
+ }
155
+ exports.default = InvestorDashboard;
156
+ //# sourceMappingURL=InvestorDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvestorDashboard.js","sourceRoot":"","sources":["../../../src/components/InvestorDashboard.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AA6Cb,8CA2QC;;AAtTD;;;;GAIG;AAEH,iCAAyD;AACzD,iCAAmC;AACnC,+BAAmC;AACnC,4CAAyC;AAEzC,yCAA0G;AAE1G;;GAEG;AACH,SAAS,WAAW,CAAC,IAAuB;IACxC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,uBAAiB,CAAC,IAAI;YACvB,OAAO,MAAM,CAAC;QAClB,KAAK,uBAAiB,CAAC,MAAM;YACzB,OAAO,QAAQ,CAAC;QACpB,KAAK,uBAAiB,CAAC,UAAU;YAC7B,OAAO,YAAY,CAAC;QACxB,KAAK,uBAAiB,CAAC,aAAa;YAChC,OAAO,eAAe,CAAC;QAC3B;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAc;IACvE,MAAM,SAAS,GAAG,IAAA,kBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,EAC9B,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,cAAc,EACd,OAAO,EACP,SAAS,GAAG,EAAE,GACO;IACrB,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAA,eAAM,GAAE,CAAC;IACtD,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAA,kBAAU,GAAE,CAAC;IAEnD,MAAM,aAAa,GAAG,eAAe,IAAI,gBAAgB,CAAC;IAE1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAmB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAsB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAiB,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAS,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAEpD,2BAA2B;IAC3B,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACD,+BAA+B;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1C,KAAK,CAAC,OAAO,EAAE;gBACf,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;aACjC,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,UAAU,CAAC,WAAW,CAAC,CAAC;YAExB,iBAAiB;YACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACnE,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzB,uBAAuB;YACvB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACjE,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzB,4BAA4B;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpE,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC1F,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/G,mDAAmD;IACnD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,SAAS,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,mCAAmC;IACnC,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,cAAsB,EAAE,EAAE;QAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;YAAE,OAAO;QAElC,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACvD,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,SAAS,EAAE,CAAC,CAAC,eAAe;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACjF,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;gBAAS,CAAC;YACP,aAAa,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAErF,mBAAmB;IACnB,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhE,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAChE,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,SAAS,EAAE,CAAC,CAAC,eAAe;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAClF,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;gBAAS,CAAC;YACP,aAAa,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,uBAAuB,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEpG,uBAAuB;IACvB,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,CACH,gCAAK,SAAS,EAAE,0DAA0D,SAAS,EAAE,YACjF,iCAAK,SAAS,EAAC,sCAAsC,aACjD,gCAAK,SAAS,EAAC,8DAA8D,GAAG,EAChF,iCAAM,SAAS,EAAC,uCAAuC,qCAA4B,IACjF,GACJ,CACT,CAAC;IACN,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,CACH,gCAAK,SAAS,EAAE,4DAA4D,SAAS,EAAE,YACnF,gCAAK,SAAS,EAAC,mGAAmG,YAC9G,8BAAG,SAAS,EAAC,sCAAsC,mEAE/C,GACF,GACJ,CACT,CAAC;IACN,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CACH,gCAAK,SAAS,EAAE,wDAAwD,SAAS,EAAE,YAC/E,iCAAK,SAAS,EAAC,uFAAuF,aAClG,+BAAI,SAAS,EAAC,sDAAsD,sBAAW,EAC/E,8BAAG,SAAS,EAAC,qCAAqC,YAAE,KAAK,CAAC,OAAO,GAAK,EACtE,mCACI,OAAO,EAAE,SAAS,EAClB,SAAS,EAAC,oFAAoF,sBAGzF,IACP,GACJ,CACT,CAAC;IACN,CAAC;IAED,OAAO,CACH,gCAAK,SAAS,EAAE,0BAA0B,SAAS,EAAE,YACjD,iCAAK,SAAS,EAAC,WAAW,aAEtB,iCAAK,SAAS,EAAC,gGAAgG,aAC3G,+BAAI,SAAS,EAAC,wDAAwD,8BAAmB,EACxF,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,CAC9B,iCAAK,SAAS,EAAC,MAAM,aACjB,8BAAG,SAAS,EAAC,kDAAkD,YAC1D,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,GACjE,EACJ,8BAAG,SAAS,EAAC,+CAA+C,YACvD,SAAS,CAAC,IAAI,GACf,IACF,CACT,IACC,EAGN,iCAAK,SAAS,EAAC,gGAAgG,aAC3G,+BAAI,SAAS,EAAC,wDAAwD,2BAAgB,EACrF,OAAO,IAAI,CACR,iCAAK,SAAS,EAAC,gBAAgB,aAC3B,iCAAK,SAAS,EAAC,mBAAmB,aAC9B,iCAAM,SAAS,EAAC,uCAAuC,wBAAe,EACtE,iCAAM,SAAS,EAAE,eAAe,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,sCAAsC,EAAE,YAC7H,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,GAC5C,IACL,EACN,iCAAK,SAAS,EAAC,mBAAmB,aAC9B,iCAAM,SAAS,EAAC,uCAAuC,sBAAa,EACpE,iCAAM,SAAS,EAAC,2CAA2C,YACtD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GACvB,IACL,EACL,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,CACnC,iCAAK,SAAS,EAAC,mBAAmB,aAC9B,iCAAM,SAAS,EAAC,uCAAuC,6BAAoB,EAC3E,iCAAM,SAAS,EAAC,2CAA2C,YACtD,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,GACjC,IACL,CACT,IACC,CACT,IACC,EAGN,iCAAK,SAAS,EAAC,gGAAgG,aAC3G,iCAAK,SAAS,EAAC,mCAAmC,aAC9C,+BAAI,SAAS,EAAC,wDAAwD,+BAAoB,EACzF,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,CACtC,mCACI,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,gHAAgH,YAEzH,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,GACpC,CACZ,IACC,EAEL,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,8BAAG,SAAS,EAAC,uCAAuC,4CAAgC,CACvF,CAAC,CAAC,CAAC,CACA,iCAAK,SAAS,EAAC,gBAAgB,aAC3B,+BAAG,SAAS,EAAC,0CAA0C,kCAClC,kCAAM,SAAS,EAAC,eAAe,aAAE,IAAA,kBAAW,EAAC,cAAc,EAAE,EAAE,CAAC,eAAe,IAChG,EACJ,gCAAK,SAAS,EAAC,+CAA+C,YACzD,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,iCAAgC,SAAS,EAAC,wCAAwC,aAC9E,4CACI,+BAAG,SAAS,EAAC,2CAA2C,+BACrC,KAAK,CAAC,cAAc,IACnC,EACJ,+BAAG,SAAS,EAAC,0CAA0C,yBAC1C,IAAA,kBAAW,EAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,wBAAe,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IACxF,IACF,EACL,SAAS,IAAI,CACV,mCACI,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,EAChD,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,2GAA2G,sBAGhH,CACZ,KAjBK,KAAK,CAAC,cAAc,CAkBxB,CACT,CAAC,GACA,IACJ,CACT,EAEA,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CACvC,8BAAG,SAAS,EAAC,mDAAmD,qDAE5D,CACP,IACC,EAGL,KAAK,IAAI,CACN,gCAAK,SAAS,EAAC,uFAAuF,YAClG,8BAAG,SAAS,EAAC,gCAAgC,YAAE,KAAK,CAAC,OAAO,GAAK,GAC/D,CACT,IACC,GACJ,CACT,CAAC;AACN,CAAC;AAED,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.KYCFlow = KYCFlow;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * KYCFlow - Multi-step KYC verification flow component
8
+ *
9
+ * Guides users through the KYC verification process and displays
10
+ * their current verification status and accreditation tier.
11
+ */
12
+ const react_1 = require("react");
13
+ const wagmi_1 = require("wagmi");
14
+ const useRWA_1 = require("../hooks/useRWA");
15
+ const sdk_1 = require("@mantle-rwa/sdk");
16
+ /**
17
+ * Get display name for accreditation tier
18
+ */
19
+ function getTierName(tier) {
20
+ switch (tier) {
21
+ case sdk_1.AccreditationTier.None:
22
+ return 'None';
23
+ case sdk_1.AccreditationTier.Retail:
24
+ return 'Retail';
25
+ case sdk_1.AccreditationTier.Accredited:
26
+ return 'Accredited';
27
+ case sdk_1.AccreditationTier.Institutional:
28
+ return 'Institutional';
29
+ default:
30
+ return 'Unknown';
31
+ }
32
+ }
33
+ /**
34
+ * Format date for display
35
+ */
36
+ function formatDate(date) {
37
+ return date.toLocaleDateString('en-US', {
38
+ year: 'numeric',
39
+ month: 'long',
40
+ day: 'numeric',
41
+ });
42
+ }
43
+ /**
44
+ * KYCFlow component for guiding users through KYC verification
45
+ */
46
+ function KYCFlow({ registryAddress, investorAddress, onStatusChange, onComplete, onError, className = '', }) {
47
+ const { client, isInitialized, hasSigner } = (0, useRWA_1.useRWA)();
48
+ const { address: connectedAddress } = (0, wagmi_1.useAccount)();
49
+ const targetAddress = investorAddress || connectedAddress;
50
+ const [status, setStatus] = (0, react_1.useState)('idle');
51
+ const [investorInfo, setInvestorInfo] = (0, react_1.useState)(null);
52
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
53
+ const [error, setError] = (0, react_1.useState)(null);
54
+ // Update status and notify callback
55
+ const updateStatus = (0, react_1.useCallback)((newStatus) => {
56
+ setStatus(newStatus);
57
+ onStatusChange?.(newStatus);
58
+ }, [onStatusChange]);
59
+ // Fetch investor KYC data
60
+ const fetchKYCData = (0, react_1.useCallback)(async () => {
61
+ if (!client || !isInitialized || !registryAddress || !targetAddress) {
62
+ setIsLoading(false);
63
+ return;
64
+ }
65
+ setIsLoading(true);
66
+ setError(null);
67
+ try {
68
+ const registry = client.kyc.connect(registryAddress);
69
+ const info = await registry.getInvestorInfo(targetAddress);
70
+ setInvestorInfo(info);
71
+ // Determine status based on investor info
72
+ if (info.verified) {
73
+ updateStatus('completed');
74
+ onComplete?.(info.tier);
75
+ }
76
+ else if (info.tier !== sdk_1.AccreditationTier.None) {
77
+ updateStatus('in_progress');
78
+ }
79
+ else {
80
+ updateStatus('pending');
81
+ }
82
+ }
83
+ catch (err) {
84
+ const errorObj = err instanceof Error ? err : new Error('Failed to fetch KYC data');
85
+ setError(errorObj);
86
+ updateStatus('failed');
87
+ onError?.(errorObj);
88
+ }
89
+ finally {
90
+ setIsLoading(false);
91
+ }
92
+ }, [client, isInitialized, registryAddress, targetAddress, updateStatus, onComplete, onError]);
93
+ // Fetch data on mount and when dependencies change
94
+ (0, react_1.useEffect)(() => {
95
+ fetchKYCData();
96
+ }, [fetchKYCData]);
97
+ // Handle start verification
98
+ const handleStartVerification = (0, react_1.useCallback)(async () => {
99
+ if (!client || !targetAddress)
100
+ return;
101
+ updateStatus('in_progress');
102
+ try {
103
+ // Initiate verification through the KYC provider
104
+ const session = await client.kyc.verifyInvestor(targetAddress);
105
+ // If there's a redirect URL, open it
106
+ if (session.redirectUrl) {
107
+ window.open(session.redirectUrl, '_blank');
108
+ }
109
+ }
110
+ catch (err) {
111
+ const errorObj = err instanceof Error ? err : new Error('Failed to start verification');
112
+ setError(errorObj);
113
+ updateStatus('failed');
114
+ onError?.(errorObj);
115
+ }
116
+ }, [client, targetAddress, updateStatus, onError]);
117
+ // Handle retry
118
+ const handleRetry = (0, react_1.useCallback)(() => {
119
+ setError(null);
120
+ fetchKYCData();
121
+ }, [fetchKYCData]);
122
+ // Render loading state
123
+ if (isLoading) {
124
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-kyc-flow rwa-kyc-flow--loading ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center p-8", children: [(0, jsx_runtime_1.jsx)("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" }), (0, jsx_runtime_1.jsx)("span", { className: "ml-3 text-gray-600 dark:text-gray-300", children: "Loading KYC status..." })] }) }));
125
+ }
126
+ // Render no wallet connected state
127
+ if (!targetAddress) {
128
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-kyc-flow rwa-kyc-flow--no-wallet ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-yellow-50 dark:bg-yellow-900/20 rounded-lg border border-yellow-200 dark:border-yellow-800", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-yellow-800 dark:text-yellow-200", children: "Wallet Not Connected" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-yellow-700 dark:text-yellow-300", children: "Please connect your wallet to view your KYC status." })] }) }));
129
+ }
130
+ // Render error state
131
+ if (status === 'failed' && error) {
132
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-kyc-flow rwa-kyc-flow--error ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-red-50 dark:bg-red-900/20 rounded-lg border border-red-200 dark:border-red-800", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-red-800 dark:text-red-200", children: "Verification Failed" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-red-700 dark:text-red-300", children: error.message }), (0, jsx_runtime_1.jsx)("button", { onClick: handleRetry, className: "mt-4 px-4 py-2 bg-red-600 hover:bg-red-700 text-white rounded-md transition-colors", children: "Retry" })] }) }));
133
+ }
134
+ // Render completed state
135
+ if (status === 'completed' && investorInfo) {
136
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-kyc-flow rwa-kyc-flow--completed ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-green-50 dark:bg-green-900/20 rounded-lg border border-green-200 dark:border-green-800", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("svg", { className: "w-8 h-8 text-green-600 dark:text-green-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" }) }), (0, jsx_runtime_1.jsx)("h3", { className: "ml-3 text-lg font-semibold text-green-800 dark:text-green-200", children: "Verification Complete" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-4 space-y-2", children: [(0, jsx_runtime_1.jsxs)("p", { className: "text-green-700 dark:text-green-300", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-medium", children: "Accreditation Tier:" }), " ", getTierName(investorInfo.tier)] }), investorInfo.expiry && ((0, jsx_runtime_1.jsxs)("p", { className: "text-green-700 dark:text-green-300", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-medium", children: "Valid Until:" }), " ", formatDate(investorInfo.expiry)] }))] })] }) }));
137
+ }
138
+ // Render in progress state
139
+ if (status === 'in_progress') {
140
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-kyc-flow rwa-kyc-flow--in-progress ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-blue-50 dark:bg-blue-900/20 rounded-lg border border-blue-200 dark:border-blue-800", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", 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)("h3", { className: "ml-3 text-lg font-semibold text-blue-800 dark:text-blue-200", children: "Verification In Progress" })] }), (0, jsx_runtime_1.jsx)("p", { className: "mt-4 text-blue-700 dark:text-blue-300", children: "Your identity verification is being processed. This may take a few minutes." }), (0, jsx_runtime_1.jsx)("button", { onClick: fetchKYCData, className: "mt-4 px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-md transition-colors", children: "Check Status" })] }) }));
141
+ }
142
+ // Render pending state (default)
143
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-kyc-flow rwa-kyc-flow--pending ${className}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-semibold text-gray-800 dark:text-gray-200", children: "KYC Verification Required" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-gray-600 dark:text-gray-400", children: "Complete identity verification to participate in RWA token offerings." }), !hasSigner ? ((0, jsx_runtime_1.jsx)("p", { className: "mt-4 text-yellow-600 dark:text-yellow-400 text-sm", children: "Connect your wallet to start verification." })) : ((0, jsx_runtime_1.jsx)("button", { onClick: handleStartVerification, className: "mt-4 px-6 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-md transition-colors", children: "Start Verification" }))] }) }));
144
+ }
145
+ exports.default = KYCFlow;
146
+ //# sourceMappingURL=KYCFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KYCFlow.js","sourceRoot":"","sources":["../../../src/components/KYCFlow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LoadingSpinner = LoadingSpinner;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const sizeClasses = {
7
+ sm: 'h-4 w-4',
8
+ md: 'h-6 w-6',
9
+ lg: 'h-8 w-8',
10
+ };
11
+ /**
12
+ * LoadingSpinner component
13
+ */
14
+ function LoadingSpinner({ size = 'md', className = '', }) {
15
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-loading-spinner ${className}`, children: (0, jsx_runtime_1.jsx)("div", { className: `animate-spin rounded-full border-b-2 border-blue-600 dark:border-blue-400 ${sizeClasses[size]}`, role: "status", "aria-label": "Loading" }) }));
16
+ }
17
+ exports.default = LoadingSpinner;
18
+ //# sourceMappingURL=LoadingSpinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingSpinner.js","sourceRoot":"","sources":["../../../src/components/LoadingSpinner.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAiBb,wCAaC;;AAtBD,MAAM,WAAW,GAAG;IAChB,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;CAChB,CAAC;AAEF;;GAEG;AACH,SAAgB,cAAc,CAAC,EAC3B,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,GACI;IAClB,OAAO,CACH,gCAAK,SAAS,EAAE,uBAAuB,SAAS,EAAE,YAC9C,gCACI,SAAS,EAAE,6EAA6E,WAAW,CAAC,IAAI,CAAC,EAAE,EAC3G,IAAI,EAAC,QAAQ,gBACF,SAAS,GACtB,GACA,CACT,CAAC;AACN,CAAC;AAED,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isValidAddress = isValidAddress;
5
+ exports.isValidAmount = isValidAmount;
6
+ exports.TokenMintForm = TokenMintForm;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ /**
9
+ * TokenMintForm - Form for minting RWA tokens to verified investors
10
+ *
11
+ * Validates recipient address and KYC status before allowing mint.
12
+ */
13
+ const react_1 = require("react");
14
+ const useRWA_1 = require("../hooks/useRWA");
15
+ const sdk_1 = require("@mantle-rwa/sdk");
16
+ /**
17
+ * Validate Ethereum address format
18
+ */
19
+ function isValidAddress(address) {
20
+ return /^0x[a-fA-F0-9]{40}$/.test(address);
21
+ }
22
+ /**
23
+ * Validate amount is positive
24
+ */
25
+ function isValidAmount(amount) {
26
+ const num = parseFloat(amount);
27
+ return !isNaN(num) && num > 0 && isFinite(num);
28
+ }
29
+ /**
30
+ * Get display name for accreditation tier
31
+ */
32
+ function getTierName(tier) {
33
+ switch (tier) {
34
+ case sdk_1.AccreditationTier.None:
35
+ return 'None';
36
+ case sdk_1.AccreditationTier.Retail:
37
+ return 'Retail';
38
+ case sdk_1.AccreditationTier.Accredited:
39
+ return 'Accredited';
40
+ case sdk_1.AccreditationTier.Institutional:
41
+ return 'Institutional';
42
+ default:
43
+ return 'Unknown';
44
+ }
45
+ }
46
+ /**
47
+ * TokenMintForm component
48
+ */
49
+ function TokenMintForm({ tokenAddress, kycRegistryAddress, onSuccess, onError, className = '', }) {
50
+ const { client, isInitialized, hasSigner } = (0, useRWA_1.useRWA)();
51
+ const [form, setForm] = (0, react_1.useState)({ recipient: '', amount: '' });
52
+ const [validation, setValidation] = (0, react_1.useState)({ recipientError: null, amountError: null });
53
+ const [kycCheck, setKycCheck] = (0, react_1.useState)({ isChecking: false, isVerified: null, tier: null });
54
+ const [isPending, setIsPending] = (0, react_1.useState)(false);
55
+ const [error, setError] = (0, react_1.useState)(null);
56
+ const [txResult, setTxResult] = (0, react_1.useState)(null);
57
+ // Validate recipient address
58
+ const validateRecipient = (0, react_1.useCallback)((address) => {
59
+ if (!address)
60
+ return 'Recipient address is required';
61
+ if (!isValidAddress(address))
62
+ return 'Invalid Ethereum address format';
63
+ return null;
64
+ }, []);
65
+ // Validate amount
66
+ const validateAmount = (0, react_1.useCallback)((amount) => {
67
+ if (!amount)
68
+ return 'Amount is required';
69
+ if (!isValidAmount(amount))
70
+ return 'Amount must be a positive number';
71
+ return null;
72
+ }, []);
73
+ // Handle recipient change
74
+ const handleRecipientChange = (0, react_1.useCallback)((e) => {
75
+ const value = e.target.value;
76
+ setForm(prev => ({ ...prev, recipient: value }));
77
+ setValidation(prev => ({ ...prev, recipientError: validateRecipient(value) }));
78
+ setKycCheck({ isChecking: false, isVerified: null, tier: null });
79
+ setTxResult(null);
80
+ }, [validateRecipient]);
81
+ // Handle amount change
82
+ const handleAmountChange = (0, react_1.useCallback)((e) => {
83
+ const value = e.target.value;
84
+ setForm(prev => ({ ...prev, amount: value }));
85
+ setValidation(prev => ({ ...prev, amountError: validateAmount(value) }));
86
+ setTxResult(null);
87
+ }, [validateAmount]);
88
+ // Check KYC status
89
+ const checkKYC = (0, react_1.useCallback)(async () => {
90
+ if (!client || !isInitialized || !form.recipient || !isValidAddress(form.recipient)) {
91
+ return;
92
+ }
93
+ setKycCheck({ isChecking: true, isVerified: null, tier: null });
94
+ try {
95
+ const registry = client.kyc.connect(kycRegistryAddress);
96
+ const info = await registry.getInvestorInfo(form.recipient);
97
+ setKycCheck({
98
+ isChecking: false,
99
+ isVerified: info.verified,
100
+ tier: info.tier,
101
+ });
102
+ }
103
+ catch (err) {
104
+ setKycCheck({ isChecking: false, isVerified: false, tier: null });
105
+ }
106
+ }, [client, isInitialized, form.recipient, kycRegistryAddress]);
107
+ // Handle form submission
108
+ const handleSubmit = (0, react_1.useCallback)(async (e) => {
109
+ e.preventDefault();
110
+ // Validate all fields
111
+ const recipientError = validateRecipient(form.recipient);
112
+ const amountError = validateAmount(form.amount);
113
+ setValidation({ recipientError, amountError });
114
+ if (recipientError || amountError) {
115
+ return;
116
+ }
117
+ // Check KYC if not already checked
118
+ if (kycCheck.isVerified === null) {
119
+ await checkKYC();
120
+ return; // User needs to submit again after KYC check
121
+ }
122
+ // Block if not verified
123
+ if (!kycCheck.isVerified) {
124
+ setError(new Error('Recipient is not KYC verified. Cannot mint tokens to unverified addresses.'));
125
+ return;
126
+ }
127
+ if (!client || !hasSigner) {
128
+ setError(new Error('Wallet not connected'));
129
+ return;
130
+ }
131
+ setIsPending(true);
132
+ setError(null);
133
+ setTxResult(null);
134
+ try {
135
+ const token = client.token.connect(tokenAddress);
136
+ const result = await token.mint(form.recipient, form.amount);
137
+ setTxResult(result);
138
+ onSuccess?.(result);
139
+ // Clear form on success
140
+ setForm({ recipient: '', amount: '' });
141
+ setKycCheck({ isChecking: false, isVerified: null, tier: null });
142
+ }
143
+ catch (err) {
144
+ const errorObj = err instanceof Error ? err : new Error('Mint failed');
145
+ setError(errorObj);
146
+ onError?.(errorObj);
147
+ }
148
+ finally {
149
+ setIsPending(false);
150
+ }
151
+ }, [form, validation, kycCheck, client, hasSigner, tokenAddress, validateRecipient, validateAmount, checkKYC, onSuccess, onError]);
152
+ const isFormValid = !validation.recipientError && !validation.amountError && form.recipient && form.amount;
153
+ const canSubmit = isFormValid && hasSigner && !isPending && (kycCheck.isVerified === null || kycCheck.isVerified);
154
+ return ((0, jsx_runtime_1.jsx)("div", { className: `rwa-token-mint-form ${className}`, children: (0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "recipient", className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Recipient Address" }), (0, jsx_runtime_1.jsx)("input", { type: "text", id: "recipient", value: form.recipient, onChange: handleRecipientChange, onBlur: checkKYC, placeholder: "0x...", className: `mt-1 block w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white ${validation.recipientError
155
+ ? 'border-red-500 focus:border-red-500'
156
+ : 'border-gray-300 dark:border-gray-600 focus:border-blue-500'}` }), validation.recipientError && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: validation.recipientError })), kycCheck.isChecking && ((0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: "Checking KYC status..." })), kycCheck.isVerified === true && ((0, jsx_runtime_1.jsxs)("p", { className: "mt-2 text-sm text-green-600 dark:text-green-400", children: ["\u2713 Verified (", getTierName(kycCheck.tier), ")"] })), kycCheck.isVerified === false && ((0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-sm text-red-600 dark:text-red-400", children: "\u2717 Not KYC verified - cannot mint to this address" }))] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "amount", className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Amount" }), (0, jsx_runtime_1.jsx)("input", { type: "text", id: "amount", value: form.amount, onChange: handleAmountChange, placeholder: "0.00", className: `mt-1 block w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white ${validation.amountError
157
+ ? 'border-red-500 focus:border-red-500'
158
+ : 'border-gray-300 dark:border-gray-600 focus:border-blue-500'}` }), validation.amountError && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: validation.amountError }))] }), !hasSigner && ((0, jsx_runtime_1.jsx)("div", { className: "p-3 bg-yellow-50 dark:bg-yellow-900/20 rounded-md border border-yellow-200 dark:border-yellow-800", children: (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-yellow-700 dark:text-yellow-300", children: "Connect your wallet to mint tokens." }) })), error && ((0, jsx_runtime_1.jsx)("div", { className: "p-3 bg-red-50 dark:bg-red-900/20 rounded-md border border-red-200 dark:border-red-800", children: (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-red-700 dark:text-red-300", children: error.message }) })), txResult && ((0, jsx_runtime_1.jsx)("div", { className: "p-3 bg-green-50 dark:bg-green-900/20 rounded-md border border-green-200 dark:border-green-800", children: (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-green-700 dark:text-green-300", children: ["\u2713 Mint successful! Transaction: ", txResult.hash.slice(0, 10), "..."] }) })), (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: !canSubmit, className: `w-full py-2 px-4 rounded-md font-medium transition-colors ${canSubmit
159
+ ? 'bg-blue-600 hover:bg-blue-700 text-white'
160
+ : 'bg-gray-300 dark:bg-gray-700 text-gray-500 dark:text-gray-400 cursor-not-allowed'}`, children: isPending ? 'Minting...' : kycCheck.isVerified === null && form.recipient ? 'Check KYC & Mint' : 'Mint Tokens' })] }) }));
161
+ }
162
+ exports.default = TokenMintForm;
163
+ //# sourceMappingURL=TokenMintForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenMintForm.js","sourceRoot":"","sources":["../../../src/components/TokenMintForm.tsx"],"names":[],"mappings":"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"}