@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,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCSV = parseCSV;
4
+ exports.validateAddress = validateAddress;
5
+ exports.validateAmount = validateAmount;
6
+ exports.checkCompliance = checkCompliance;
7
+ exports.TokenMintForm = TokenMintForm;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ /**
10
+ * TokenMintForm Component
11
+ * Form for minting RWA tokens with compliance pre-checks
12
+ *
13
+ * @see Requirements 12.1, 12.2, 12.3, 12.4
14
+ */
15
+ const react_1 = require("react");
16
+ /**
17
+ * Parse CSV content into batch mint entries
18
+ * Exported for testing purposes
19
+ */
20
+ function parseCSV(content, maxBatchSize) {
21
+ const entries = [];
22
+ const errors = [];
23
+ const lines = content.split('\n').filter((line) => line.trim());
24
+ if (lines.length === 0) {
25
+ return { entries, errors: ['CSV file is empty'] };
26
+ }
27
+ // Skip header if present - check if first line looks like a header
28
+ // A header should start with "address" (case insensitive) and not be a valid address
29
+ const firstLine = lines[0].toLowerCase().trim();
30
+ const isHeader = firstLine.startsWith('address') && !firstLine.startsWith('0x');
31
+ const startIndex = isHeader ? 1 : 0;
32
+ for (let i = startIndex; i < lines.length; i++) {
33
+ if (entries.length >= maxBatchSize) {
34
+ errors.push(`Maximum batch size of ${maxBatchSize} reached. Remaining entries ignored.`);
35
+ break;
36
+ }
37
+ const line = lines[i].trim();
38
+ if (!line)
39
+ continue;
40
+ const parts = line.split(',').map((s) => s.trim());
41
+ if (parts.length < 2) {
42
+ errors.push(`Line ${i + 1}: Invalid format, expected "address,amount"`);
43
+ continue;
44
+ }
45
+ const [addr, amt] = parts;
46
+ if (!/^0x[a-fA-F0-9]{40}$/.test(addr)) {
47
+ errors.push(`Line ${i + 1}: Invalid address format "${addr}"`);
48
+ continue;
49
+ }
50
+ const amountNum = parseFloat(amt);
51
+ if (isNaN(amountNum) || amountNum <= 0) {
52
+ errors.push(`Line ${i + 1}: Invalid amount "${amt}"`);
53
+ continue;
54
+ }
55
+ entries.push({ recipient: addr, amount: amt });
56
+ }
57
+ return { entries, errors };
58
+ }
59
+ /**
60
+ * Validate Ethereum address format
61
+ */
62
+ function validateAddress(address) {
63
+ return /^0x[a-fA-F0-9]{40}$/.test(address);
64
+ }
65
+ /**
66
+ * Validate amount is a positive number
67
+ */
68
+ function validateAmount(value) {
69
+ const num = parseFloat(value);
70
+ return !isNaN(num) && num > 0;
71
+ }
72
+ /**
73
+ * Check compliance for a recipient address
74
+ * This is the core compliance pre-check function (Property 25)
75
+ * In production, this would call the KYC registry contract
76
+ */
77
+ async function checkCompliance(address, _kycRegistryAddress) {
78
+ // Validate address format first
79
+ if (!validateAddress(address)) {
80
+ return {
81
+ eligible: false,
82
+ reason: 'Invalid address format',
83
+ checks: [{ name: 'Address Format', passed: false, details: 'Address must be a valid Ethereum address' }],
84
+ };
85
+ }
86
+ // Simulate async compliance check (in production, this calls the KYC registry)
87
+ await new Promise((resolve) => setTimeout(resolve, 100));
88
+ const checks = [];
89
+ // Check 1: Address format (already validated above)
90
+ checks.push({ name: 'Address Format', passed: true, details: 'Valid Ethereum address' });
91
+ // Check 2: KYC verification status
92
+ // For demo/testing: addresses starting with 0x00 are not KYC verified
93
+ const isKYCVerified = !address.toLowerCase().startsWith('0x00');
94
+ checks.push({
95
+ name: 'KYC Verification',
96
+ passed: isKYCVerified,
97
+ details: isKYCVerified ? 'Recipient is KYC verified' : 'Recipient is not KYC verified',
98
+ });
99
+ // Check 3: Accreditation status
100
+ // For demo/testing: addresses starting with 0x01 are not accredited
101
+ const isAccredited = !address.toLowerCase().startsWith('0x01');
102
+ checks.push({
103
+ name: 'Accreditation Status',
104
+ passed: isAccredited,
105
+ details: isAccredited ? 'Recipient meets accreditation requirements' : 'Recipient does not meet accreditation requirements',
106
+ });
107
+ // Determine overall eligibility
108
+ const allPassed = checks.every((c) => c.passed);
109
+ const failedCheck = checks.find((c) => !c.passed);
110
+ return {
111
+ eligible: allPassed,
112
+ reason: allPassed ? undefined : failedCheck?.details,
113
+ checks,
114
+ };
115
+ }
116
+ /**
117
+ * TokenMintForm component for issuing tokens to investors
118
+ * Supports single and batch minting with compliance pre-checks
119
+ *
120
+ * @example
121
+ * ```tsx
122
+ * <TokenMintForm
123
+ * tokenAddress="0x..."
124
+ * kycRegistryAddress="0x..."
125
+ * onMintComplete={(hash, recipient, amount) => console.log('Minted:', hash)}
126
+ * allowBatchMint={true}
127
+ * />
128
+ * ```
129
+ */
130
+ function TokenMintForm({ tokenAddress: _tokenAddress, // Reserved for future contract interaction
131
+ kycRegistryAddress, onMintComplete, onError, allowBatchMint = false, maxBatchSize = 100, theme = 'light', }) {
132
+ const [recipient, setRecipient] = (0, react_1.useState)('');
133
+ const [amount, setAmount] = (0, react_1.useState)('');
134
+ const [batchEntries, setBatchEntries] = (0, react_1.useState)([]);
135
+ const [csvErrors, setCsvErrors] = (0, react_1.useState)([]);
136
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
137
+ const [isCheckingCompliance, setIsCheckingCompliance] = (0, react_1.useState)(false);
138
+ const [complianceResult, setComplianceResult] = (0, react_1.useState)(null);
139
+ const [error, setError] = (0, react_1.useState)(null);
140
+ const [txStatus, setTxStatus] = (0, react_1.useState)('idle');
141
+ const [txHash, setTxHash] = (0, react_1.useState)(null);
142
+ const [isBatchMode, setIsBatchMode] = (0, react_1.useState)(false);
143
+ const isDark = theme === 'dark';
144
+ // Validate form inputs
145
+ const isValidRecipient = (0, react_1.useMemo)(() => validateAddress(recipient), [recipient]);
146
+ const isValidAmount = (0, react_1.useMemo)(() => validateAmount(amount), [amount]);
147
+ const canSubmit = (0, react_1.useMemo)(() => {
148
+ if (isBatchMode) {
149
+ return batchEntries.length > 0 && !isLoading;
150
+ }
151
+ return isValidRecipient && isValidAmount && !isLoading && complianceResult?.eligible !== false;
152
+ }, [isBatchMode, batchEntries.length, isValidRecipient, isValidAmount, isLoading, complianceResult]);
153
+ // Check compliance when recipient changes
154
+ const handleRecipientChange = (0, react_1.useCallback)(async (newRecipient) => {
155
+ setRecipient(newRecipient);
156
+ setComplianceResult(null);
157
+ setError(null);
158
+ if (validateAddress(newRecipient)) {
159
+ setIsCheckingCompliance(true);
160
+ try {
161
+ const result = await checkCompliance(newRecipient, kycRegistryAddress);
162
+ setComplianceResult(result);
163
+ if (!result.eligible) {
164
+ setError(`Compliance check failed: ${result.reason}`);
165
+ }
166
+ }
167
+ catch (err) {
168
+ setError('Failed to check compliance');
169
+ }
170
+ finally {
171
+ setIsCheckingCompliance(false);
172
+ }
173
+ }
174
+ }, [kycRegistryAddress]);
175
+ const handleSingleMint = (0, react_1.useCallback)(async () => {
176
+ setError(null);
177
+ setTxStatus('pending');
178
+ setIsLoading(true);
179
+ try {
180
+ // Validate inputs
181
+ if (!validateAddress(recipient)) {
182
+ throw new Error('Invalid recipient address');
183
+ }
184
+ if (!validateAmount(amount)) {
185
+ throw new Error('Invalid amount');
186
+ }
187
+ // Compliance pre-check (Property 25: Mint Compliance Pre-Check)
188
+ // Re-check compliance before submission to ensure it's still valid
189
+ const compliance = await checkCompliance(recipient, kycRegistryAddress);
190
+ if (!compliance.eligible) {
191
+ throw new Error(`Compliance check failed: ${compliance.reason}`);
192
+ }
193
+ // Placeholder: In full implementation, this would call the token contract
194
+ await new Promise((resolve) => setTimeout(resolve, 1000));
195
+ const mockTxHash = `0x${Array(64).fill(0).map(() => Math.floor(Math.random() * 16).toString(16)).join('')}`;
196
+ setTxHash(mockTxHash);
197
+ setTxStatus('success');
198
+ onMintComplete?.(mockTxHash, recipient, amount);
199
+ // Reset form
200
+ setRecipient('');
201
+ setAmount('');
202
+ setComplianceResult(null);
203
+ }
204
+ catch (err) {
205
+ const errorMessage = err instanceof Error ? err.message : 'Minting failed';
206
+ setError(errorMessage);
207
+ setTxStatus('error');
208
+ onError?.(err instanceof Error ? err : new Error(errorMessage));
209
+ }
210
+ finally {
211
+ setIsLoading(false);
212
+ }
213
+ }, [recipient, amount, kycRegistryAddress, onMintComplete, onError]);
214
+ const handleCSVUpload = (0, react_1.useCallback)((event) => {
215
+ const file = event.target.files?.[0];
216
+ if (!file)
217
+ return;
218
+ setError(null);
219
+ setCsvErrors([]);
220
+ const reader = new FileReader();
221
+ reader.onload = (e) => {
222
+ try {
223
+ const text = e.target?.result;
224
+ const { entries, errors } = parseCSV(text, maxBatchSize);
225
+ setBatchEntries(entries);
226
+ setCsvErrors(errors);
227
+ if (entries.length === 0 && errors.length > 0) {
228
+ setError('No valid entries found in CSV file');
229
+ }
230
+ }
231
+ catch (err) {
232
+ setError('Failed to parse CSV file');
233
+ }
234
+ };
235
+ reader.onerror = () => {
236
+ setError('Failed to read CSV file');
237
+ };
238
+ reader.readAsText(file);
239
+ }, [maxBatchSize]);
240
+ const handleBatchMint = (0, react_1.useCallback)(async () => {
241
+ setError(null);
242
+ setTxStatus('pending');
243
+ setIsLoading(true);
244
+ try {
245
+ // Check compliance for all entries (Property 25)
246
+ const failedEntries = [];
247
+ for (const entry of batchEntries) {
248
+ const compliance = await checkCompliance(entry.recipient, kycRegistryAddress);
249
+ if (!compliance.eligible) {
250
+ failedEntries.push(`${entry.recipient}: ${compliance.reason}`);
251
+ }
252
+ }
253
+ if (failedEntries.length > 0) {
254
+ throw new Error(`Compliance check failed for ${failedEntries.length} recipient(s):\n${failedEntries.slice(0, 3).join('\n')}${failedEntries.length > 3 ? `\n...and ${failedEntries.length - 3} more` : ''}`);
255
+ }
256
+ // Placeholder: In full implementation, this would call batch mint
257
+ await new Promise((resolve) => setTimeout(resolve, 2000));
258
+ const mockTxHash = `0x${Array(64).fill(0).map(() => Math.floor(Math.random() * 16).toString(16)).join('')}`;
259
+ setTxHash(mockTxHash);
260
+ setTxStatus('success');
261
+ // Call onMintComplete for each entry
262
+ for (const entry of batchEntries) {
263
+ onMintComplete?.(mockTxHash, entry.recipient, entry.amount);
264
+ }
265
+ // Reset
266
+ setBatchEntries([]);
267
+ setCsvErrors([]);
268
+ }
269
+ catch (err) {
270
+ const errorMessage = err instanceof Error ? err.message : 'Batch minting failed';
271
+ setError(errorMessage);
272
+ setTxStatus('error');
273
+ onError?.(err instanceof Error ? err : new Error(errorMessage));
274
+ }
275
+ finally {
276
+ setIsLoading(false);
277
+ }
278
+ }, [batchEntries, kycRegistryAddress, onMintComplete, onError]);
279
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `rwa-card ${isDark ? 'dark' : ''}`, "data-testid": "token-mint-form", "data-theme": theme, children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-lg font-semibold mb-4", children: "Mint Tokens" }), allowBatchMint && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex space-x-2", role: "tablist", "aria-label": "Mint mode selection", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", role: "tab", "aria-selected": !isBatchMode, className: `px-3 py-1 text-sm rounded-md ${!isBatchMode ? 'bg-mantle-600 text-white' : 'bg-gray-200 dark:bg-gray-700'}`, onClick: () => setIsBatchMode(false), "data-testid": "single-mode-btn", children: "Single" }), (0, jsx_runtime_1.jsx)("button", { type: "button", role: "tab", "aria-selected": isBatchMode, className: `px-3 py-1 text-sm rounded-md ${isBatchMode ? 'bg-mantle-600 text-white' : 'bg-gray-200 dark:bg-gray-700'}`, onClick: () => setIsBatchMode(true), "data-testid": "batch-mode-btn", children: "Batch" })] })), error && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 p-3 bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-200 rounded-md", role: "alert", "data-testid": "mint-error", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium", children: "Error" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm whitespace-pre-line", children: error })] })), csvErrors.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 p-3 bg-yellow-100 dark:bg-yellow-900 text-yellow-700 dark:text-yellow-200 rounded-md", role: "alert", "data-testid": "csv-warnings", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium", children: "CSV Parsing Warnings" }), (0, jsx_runtime_1.jsxs)("ul", { className: "text-sm list-disc list-inside", children: [csvErrors.slice(0, 5).map((err, i) => ((0, jsx_runtime_1.jsx)("li", { children: err }, i))), csvErrors.length > 5 && ((0, jsx_runtime_1.jsxs)("li", { children: ["...and ", csvErrors.length - 5, " more warnings"] }))] })] })), txStatus === 'success' && txHash && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 p-3 bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-200 rounded-md", role: "status", "data-testid": "tx-success", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium", children: "Transaction Successful!" }), (0, jsx_runtime_1.jsxs)("p", { className: "text-sm", children: ["Hash: ", txHash.slice(0, 10), "...", txHash.slice(-8)] })] })), txStatus === 'pending' && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 p-3 bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-200 rounded-md", role: "status", "data-testid": "tx-pending", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-medium", children: "Transaction Pending..." }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm", children: "Please wait while the transaction is being processed." })] })), !isBatchMode ? (
280
+ /* Single Mint Form */
281
+ (0, jsx_runtime_1.jsxs)("form", { onSubmit: (e) => { e.preventDefault(); handleSingleMint(); }, className: "space-y-4", "aria-label": "Single mint form", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "recipient", className: "rwa-label", children: "Recipient Address" }), (0, jsx_runtime_1.jsx)("input", { id: "recipient", type: "text", className: `rwa-input mt-1 ${recipient && !isValidRecipient ? 'border-red-500' : ''}`, placeholder: "0x...", value: recipient, onChange: (e) => handleRecipientChange(e.target.value), required: true, "aria-describedby": "recipient-hint recipient-error", "aria-invalid": recipient ? !isValidRecipient : undefined, "data-testid": "recipient-input" }), (0, jsx_runtime_1.jsx)("p", { id: "recipient-hint", className: "mt-1 text-xs text-gray-500", children: "Must be a KYC-verified address" }), recipient && !isValidRecipient && ((0, jsx_runtime_1.jsx)("p", { id: "recipient-error", className: "mt-1 text-xs text-red-500", "data-testid": "recipient-error", children: "Invalid Ethereum address format" }))] }), isCheckingCompliance && ((0, jsx_runtime_1.jsx)("div", { className: "p-3 bg-gray-100 dark:bg-gray-700 rounded-md", "data-testid": "compliance-checking", children: (0, jsx_runtime_1.jsxs)("p", { className: "text-sm text-gray-600 dark:text-gray-300 flex items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "animate-spin inline-block w-4 h-4 border-2 border-gray-400 border-t-transparent rounded-full mr-2" }), "Checking compliance..."] }) })), complianceResult && !isCheckingCompliance && ((0, jsx_runtime_1.jsxs)("div", { className: `p-3 rounded-md ${complianceResult.eligible ? 'bg-green-50 dark:bg-green-900/20' : 'bg-red-50 dark:bg-red-900/20'}`, "data-testid": "compliance-result", children: [(0, jsx_runtime_1.jsx)("p", { className: `text-sm font-medium ${complianceResult.eligible ? 'text-green-700 dark:text-green-300' : 'text-red-700 dark:text-red-300'}`, children: complianceResult.eligible ? '✓ Compliance Check Passed' : '✗ Compliance Check Failed' }), complianceResult.checks && ((0, jsx_runtime_1.jsx)("ul", { className: "mt-2 space-y-1", children: complianceResult.checks.map((check, i) => ((0, jsx_runtime_1.jsxs)("li", { className: "text-xs flex items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: check.passed ? 'text-green-600' : 'text-red-600', children: check.passed ? '✓' : '✗' }), (0, jsx_runtime_1.jsxs)("span", { className: "ml-2 text-gray-600 dark:text-gray-400", children: [check.name, ": ", check.details] })] }, i))) }))] })), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "amount", className: "rwa-label", children: "Amount" }), (0, jsx_runtime_1.jsx)("input", { id: "amount", type: "number", className: `rwa-input mt-1 ${amount && !isValidAmount ? 'border-red-500' : ''}`, placeholder: "0.00", value: amount, onChange: (e) => setAmount(e.target.value), min: "0", step: "any", required: true, "aria-invalid": amount ? !isValidAmount : undefined, "data-testid": "amount-input" }), amount && !isValidAmount && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-xs text-red-500", "data-testid": "amount-error", children: "Amount must be a positive number" }))] }), (0, jsx_runtime_1.jsx)("button", { type: "submit", className: "rwa-button-primary w-full", disabled: !canSubmit || isCheckingCompliance, "aria-busy": isLoading, "data-testid": "mint-submit-btn", children: isLoading ? 'Minting...' : 'Mint Tokens' })] })) : (
282
+ /* Batch Mint Form */
283
+ (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", role: "tabpanel", "aria-label": "Batch mint form", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "csv-upload", className: "rwa-label", children: "Upload CSV File" }), (0, jsx_runtime_1.jsx)("input", { id: "csv-upload", type: "file", accept: ".csv", className: "mt-1 block w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-medium file:bg-mantle-50 file:text-mantle-700 hover:file:bg-mantle-100", onChange: handleCSVUpload, "data-testid": "csv-upload-input" }), (0, jsx_runtime_1.jsxs)("p", { className: "mt-1 text-xs text-gray-500", children: ["CSV format: address,amount (max ", maxBatchSize, " entries)"] })] }), batchEntries.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { "data-testid": "batch-entries-preview", children: [(0, jsx_runtime_1.jsxs)("p", { className: "text-sm font-medium mb-2", children: [batchEntries.length, " valid entries loaded"] }), (0, jsx_runtime_1.jsxs)("div", { className: "max-h-40 overflow-y-auto border rounded-md p-2 dark:border-gray-600", children: [(0, jsx_runtime_1.jsxs)("table", { className: "w-full text-xs", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "text-left text-gray-500", children: [(0, jsx_runtime_1.jsx)("th", { className: "pb-1", children: "Address" }), (0, jsx_runtime_1.jsx)("th", { className: "pb-1 text-right", children: "Amount" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: batchEntries.slice(0, 5).map((entry, i) => ((0, jsx_runtime_1.jsxs)("tr", { className: "text-gray-600 dark:text-gray-400", children: [(0, jsx_runtime_1.jsxs)("td", { className: "py-0.5", children: [entry.recipient.slice(0, 10), "...", entry.recipient.slice(-6)] }), (0, jsx_runtime_1.jsx)("td", { className: "py-0.5 text-right", children: entry.amount })] }, i))) })] }), batchEntries.length > 5 && ((0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-gray-500 mt-2 text-center", children: ["...and ", batchEntries.length - 5, " more entries"] }))] })] })), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rwa-button-primary w-full", disabled: !canSubmit, onClick: handleBatchMint, "aria-busy": isLoading, "data-testid": "batch-mint-btn", children: isLoading ? 'Minting...' : `Mint to ${batchEntries.length} Recipients` })] }))] }));
284
+ }
285
+ exports.default = TokenMintForm;
286
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/TokenMintForm/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateDistribution = calculateDistribution;
4
+ exports.sumDistributionAmounts = sumDistributionAmounts;
5
+ exports.formatAmount = formatAmount;
6
+ exports.parseAmount = parseAmount;
7
+ exports.exportToCSV = exportToCSV;
8
+ exports.exportToJSON = exportToJSON;
9
+ exports.YieldCalculator = YieldCalculator;
10
+ const jsx_runtime_1 = require("react/jsx-runtime");
11
+ /**
12
+ * YieldCalculator Component
13
+ * Preview and calculate yield distributions before execution
14
+ *
15
+ * @see Requirements 13.1, 13.2, 13.3, 13.4
16
+ */
17
+ const react_1 = require("react");
18
+ /**
19
+ * Calculate proportional yield distribution for holders
20
+ * This is the core calculation function for Property 26
21
+ *
22
+ * @param totalAmount - Total amount to distribute (in smallest unit)
23
+ * @param holders - Array of holder addresses and balances
24
+ * @returns Array of distribution preview entries
25
+ */
26
+ function calculateDistribution(totalAmount, holders) {
27
+ if (holders.length === 0 || totalAmount <= BigInt(0)) {
28
+ return [];
29
+ }
30
+ const totalSupply = holders.reduce((sum, h) => sum + h.balance, BigInt(0));
31
+ if (totalSupply === BigInt(0)) {
32
+ return [];
33
+ }
34
+ // Property 26: Yield Calculator Distribution Accuracy
35
+ // Sum of per-holder amounts must equal total amount (within rounding)
36
+ return holders.map((holder) => {
37
+ // Calculate percentage with 2 decimal precision (multiply by 10000, then divide by 100)
38
+ const percentage = Number(holder.balance * BigInt(10000) / totalSupply) / 100;
39
+ // Calculate yield amount proportionally
40
+ const yieldAmount = (totalAmount * holder.balance) / totalSupply;
41
+ return {
42
+ address: holder.address,
43
+ balance: holder.balance,
44
+ yieldAmount,
45
+ percentage,
46
+ };
47
+ });
48
+ }
49
+ /**
50
+ * Calculate the sum of all yield amounts in a distribution
51
+ * Used to verify Property 26 (distribution accuracy)
52
+ */
53
+ function sumDistributionAmounts(entries) {
54
+ return entries.reduce((sum, entry) => sum + entry.yieldAmount, BigInt(0));
55
+ }
56
+ /**
57
+ * Format a bigint amount for display with decimals
58
+ */
59
+ function formatAmount(value, decimals) {
60
+ if (decimals <= 0) {
61
+ return value.toLocaleString();
62
+ }
63
+ const divisor = BigInt(10 ** decimals);
64
+ const integerPart = value / divisor;
65
+ const fractionalPart = value % divisor;
66
+ const fractionalStr = fractionalPart.toString().padStart(decimals, '0').slice(0, 2);
67
+ return `${integerPart.toLocaleString()}.${fractionalStr}`;
68
+ }
69
+ /**
70
+ * Parse a decimal string amount to bigint with given decimals
71
+ */
72
+ function parseAmount(value, decimals) {
73
+ const num = parseFloat(value);
74
+ if (isNaN(num) || num < 0) {
75
+ return BigInt(0);
76
+ }
77
+ return BigInt(Math.floor(num * (10 ** decimals)));
78
+ }
79
+ /**
80
+ * Export distribution preview to CSV format
81
+ */
82
+ function exportToCSV(entries, tokenSymbol, decimals) {
83
+ const headers = 'Address,Balance,Yield Amount,Percentage\n';
84
+ const rows = entries.map((entry) => `${entry.address},${entry.balance.toString()},${formatAmount(entry.yieldAmount, decimals)} ${tokenSymbol},${entry.percentage.toFixed(2)}%`).join('\n');
85
+ return headers + rows;
86
+ }
87
+ /**
88
+ * Export distribution preview to JSON format
89
+ */
90
+ function exportToJSON(entries) {
91
+ return JSON.stringify(entries.map((entry) => ({
92
+ address: entry.address,
93
+ balance: entry.balance.toString(),
94
+ yieldAmount: entry.yieldAmount.toString(),
95
+ percentage: entry.percentage,
96
+ })), null, 2);
97
+ }
98
+ /**
99
+ * Generate colors for pie chart segments
100
+ */
101
+ function generateChartColors(count) {
102
+ const baseColors = [
103
+ '#3B82F6', // blue
104
+ '#10B981', // green
105
+ '#F59E0B', // amber
106
+ '#EF4444', // red
107
+ '#8B5CF6', // purple
108
+ '#EC4899', // pink
109
+ '#06B6D4', // cyan
110
+ '#F97316', // orange
111
+ ];
112
+ const colors = [];
113
+ for (let i = 0; i < count; i++) {
114
+ colors.push(baseColors[i % baseColors.length]);
115
+ }
116
+ return colors;
117
+ }
118
+ /**
119
+ * YieldCalculator component for previewing yield distributions
120
+ * Shows per-holder breakdown with optional chart visualization
121
+ *
122
+ * @example
123
+ * ```tsx
124
+ * <YieldCalculator
125
+ * tokenAddress="0x..."
126
+ * yieldDistributorAddress="0x..."
127
+ * supportedPaymentTokens={[{ address: '0x...', symbol: 'USDC', decimals: 6 }]}
128
+ * onDistribute={(config) => console.log('Distributing:', config)}
129
+ * />
130
+ * ```
131
+ */
132
+ function YieldCalculator({ tokenAddress, yieldDistributorAddress: _yieldDistributorAddress, // Reserved for future contract interaction
133
+ supportedPaymentTokens, onDistribute, showChart = true, allowExport = true, theme = 'light', }) {
134
+ const [totalAmount, setTotalAmount] = (0, react_1.useState)('');
135
+ const [selectedToken, setSelectedToken] = (0, react_1.useState)(supportedPaymentTokens[0]?.address ?? '');
136
+ const [snapshotDate, setSnapshotDate] = (0, react_1.useState)(new Date().toISOString().split('T')[0]);
137
+ const [claimWindowDays, setClaimWindowDays] = (0, react_1.useState)('30');
138
+ const [preview, setPreview] = (0, react_1.useState)([]);
139
+ const [isCalculating, setIsCalculating] = (0, react_1.useState)(false);
140
+ const [chartType, setChartType] = (0, react_1.useState)('bar');
141
+ const isDark = theme === 'dark';
142
+ const selectedTokenInfo = (0, react_1.useMemo)(() => supportedPaymentTokens.find((t) => t.address === selectedToken), [supportedPaymentTokens, selectedToken]);
143
+ const calculatePreview = (0, react_1.useCallback)(async () => {
144
+ if (!totalAmount || parseFloat(totalAmount) <= 0)
145
+ return;
146
+ setIsCalculating(true);
147
+ try {
148
+ // Placeholder: In full implementation, this would fetch actual holder data
149
+ await new Promise((resolve) => setTimeout(resolve, 500));
150
+ // Mock holder data for preview
151
+ const mockHolders = [
152
+ { address: '0x1234567890123456789012345678901234567890', balance: BigInt(500) * BigInt(10 ** 18) },
153
+ { address: '0x2345678901234567890123456789012345678901', balance: BigInt(300) * BigInt(10 ** 18) },
154
+ { address: '0x3456789012345678901234567890123456789012', balance: BigInt(200) * BigInt(10 ** 18) },
155
+ ];
156
+ const totalAmountBigInt = parseAmount(totalAmount, selectedTokenInfo?.decimals ?? 6);
157
+ const previewEntries = calculateDistribution(totalAmountBigInt, mockHolders);
158
+ setPreview(previewEntries);
159
+ }
160
+ catch (error) {
161
+ console.error('Failed to calculate preview:', error);
162
+ }
163
+ finally {
164
+ setIsCalculating(false);
165
+ }
166
+ }, [totalAmount, selectedTokenInfo]);
167
+ const handleDistribute = (0, react_1.useCallback)(() => {
168
+ if (!selectedTokenInfo || !totalAmount)
169
+ return;
170
+ const config = {
171
+ tokenAddress,
172
+ paymentToken: selectedToken,
173
+ totalAmount,
174
+ snapshotDate: new Date(snapshotDate),
175
+ claimWindowDays: parseInt(claimWindowDays, 10),
176
+ };
177
+ onDistribute?.(config);
178
+ }, [tokenAddress, selectedToken, totalAmount, snapshotDate, claimWindowDays, onDistribute, selectedTokenInfo]);
179
+ const handleExport = (0, react_1.useCallback)((format) => {
180
+ if (preview.length === 0)
181
+ return;
182
+ let content;
183
+ let filename;
184
+ let mimeType;
185
+ if (format === 'csv') {
186
+ content = exportToCSV(preview, selectedTokenInfo?.symbol ?? '', selectedTokenInfo?.decimals ?? 6);
187
+ filename = `yield-distribution-${Date.now()}.csv`;
188
+ mimeType = 'text/csv';
189
+ }
190
+ else {
191
+ content = exportToJSON(preview);
192
+ filename = `yield-distribution-${Date.now()}.json`;
193
+ mimeType = 'application/json';
194
+ }
195
+ const blob = new Blob([content], { type: mimeType });
196
+ const url = URL.createObjectURL(blob);
197
+ const a = document.createElement('a');
198
+ a.href = url;
199
+ a.download = filename;
200
+ a.click();
201
+ URL.revokeObjectURL(url);
202
+ }, [preview, selectedTokenInfo]);
203
+ // Calculate total distributed for verification
204
+ const totalDistributed = (0, react_1.useMemo)(() => sumDistributionAmounts(preview), [preview]);
205
+ // Generate chart colors
206
+ const chartColors = (0, react_1.useMemo)(() => generateChartColors(preview.length), [preview.length]);
207
+ // Calculate pie chart segments
208
+ const pieSegments = (0, react_1.useMemo)(() => {
209
+ if (preview.length === 0)
210
+ return [];
211
+ let cumulativePercentage = 0;
212
+ return preview.map((entry, index) => {
213
+ const startAngle = cumulativePercentage * 3.6; // Convert percentage to degrees
214
+ cumulativePercentage += entry.percentage;
215
+ const endAngle = cumulativePercentage * 3.6;
216
+ return {
217
+ ...entry,
218
+ startAngle,
219
+ endAngle,
220
+ color: chartColors[index],
221
+ };
222
+ });
223
+ }, [preview, chartColors]);
224
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `rwa-card ${isDark ? 'dark' : ''}`, "data-testid": "yield-calculator", "data-theme": theme, children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-lg font-semibold mb-4", children: "Yield Calculator" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4 mb-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "total-amount", className: "rwa-label", children: "Total Distribution Amount" }), (0, jsx_runtime_1.jsx)("input", { id: "total-amount", type: "number", className: "rwa-input mt-1", placeholder: "0.00", value: totalAmount, onChange: (e) => setTotalAmount(e.target.value), min: "0", step: "any", "data-testid": "total-amount-input" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "payment-token", className: "rwa-label", children: "Payment Token" }), (0, jsx_runtime_1.jsx)("select", { id: "payment-token", className: "rwa-input mt-1", value: selectedToken, onChange: (e) => setSelectedToken(e.target.value), "data-testid": "payment-token-select", children: supportedPaymentTokens.map((token) => ((0, jsx_runtime_1.jsx)("option", { value: token.address, children: token.symbol }, token.address))) })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "snapshot-date", className: "rwa-label", children: "Snapshot Date" }), (0, jsx_runtime_1.jsx)("input", { id: "snapshot-date", type: "date", className: "rwa-input mt-1", value: snapshotDate, onChange: (e) => setSnapshotDate(e.target.value), "data-testid": "snapshot-date-input" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "claim-window", className: "rwa-label", children: "Claim Window (days)" }), (0, jsx_runtime_1.jsx)("input", { id: "claim-window", type: "number", className: "rwa-input mt-1", value: claimWindowDays, onChange: (e) => setClaimWindowDays(e.target.value), min: "1", max: "365", "data-testid": "claim-window-input" })] })] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rwa-button-secondary w-full", onClick: calculatePreview, disabled: isCalculating || !totalAmount, "aria-busy": isCalculating, "data-testid": "calculate-preview-btn", children: isCalculating ? 'Calculating...' : 'Calculate Preview' })] }), preview.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", "data-testid": "distribution-preview", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-medium", children: "Distribution Preview" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center space-x-4", children: [showChart && ((0, jsx_runtime_1.jsxs)("div", { className: "flex space-x-1", role: "group", "aria-label": "Chart type", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: `px-2 py-1 text-xs rounded ${chartType === 'bar' ? 'bg-mantle-600 text-white' : 'bg-gray-200 dark:bg-gray-700'}`, onClick: () => setChartType('bar'), "data-testid": "chart-type-bar", children: "Bar" }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: `px-2 py-1 text-xs rounded ${chartType === 'pie' ? 'bg-mantle-600 text-white' : 'bg-gray-200 dark:bg-gray-700'}`, onClick: () => setChartType('pie'), "data-testid": "chart-type-pie", children: "Pie" })] })), allowExport && ((0, jsx_runtime_1.jsxs)("div", { className: "flex space-x-2", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "text-xs text-mantle-600 hover:text-mantle-700", onClick: () => handleExport('csv'), "data-testid": "export-csv-btn", children: "Export CSV" }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "text-xs text-mantle-600 hover:text-mantle-700", onClick: () => handleExport('json'), "data-testid": "export-json-btn", children: "Export JSON" })] }))] })] }), showChart && ((0, jsx_runtime_1.jsx)("div", { "data-testid": "distribution-chart", children: chartType === 'bar' ? (
225
+ /* Bar Chart */
226
+ (0, jsx_runtime_1.jsx)("div", { className: "space-y-2", role: "img", "aria-label": "Distribution bar chart", "data-testid": "bar-chart", children: preview.map((entry, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-xs w-24 truncate", title: entry.address, children: [entry.address.slice(0, 6), "...", entry.address.slice(-4)] }), (0, jsx_runtime_1.jsx)("div", { className: "flex-1 h-4 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden", children: (0, jsx_runtime_1.jsx)("div", { className: "h-full rounded-full transition-all duration-300", style: {
227
+ width: `${entry.percentage}%`,
228
+ backgroundColor: chartColors[index],
229
+ }, "data-testid": `bar-segment-${index}` }) }), (0, jsx_runtime_1.jsxs)("span", { className: "text-xs w-16 text-right", children: [entry.percentage.toFixed(1), "%"] })] }, entry.address))) })) : (
230
+ /* Pie Chart (SVG-based) */
231
+ (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center", "data-testid": "pie-chart", children: [(0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 100 100", className: "w-48 h-48", role: "img", "aria-label": "Distribution pie chart", children: pieSegments.map((segment, index) => {
232
+ // Convert angles to radians and calculate arc path
233
+ const startRad = (segment.startAngle - 90) * Math.PI / 180;
234
+ const endRad = (segment.endAngle - 90) * Math.PI / 180;
235
+ const x1 = 50 + 40 * Math.cos(startRad);
236
+ const y1 = 50 + 40 * Math.sin(startRad);
237
+ const x2 = 50 + 40 * Math.cos(endRad);
238
+ const y2 = 50 + 40 * Math.sin(endRad);
239
+ const largeArc = segment.percentage > 50 ? 1 : 0;
240
+ const pathD = `M 50 50 L ${x1} ${y1} A 40 40 0 ${largeArc} 1 ${x2} ${y2} Z`;
241
+ return ((0, jsx_runtime_1.jsx)("path", { d: pathD, fill: segment.color, stroke: "white", strokeWidth: "0.5", "data-testid": `pie-segment-${index}`, children: (0, jsx_runtime_1.jsx)("title", { children: `${segment.address.slice(0, 6)}...${segment.address.slice(-4)}: ${segment.percentage.toFixed(1)}%` }) }, segment.address));
242
+ }) }), (0, jsx_runtime_1.jsx)("div", { className: "ml-4 space-y-1", children: preview.map((entry, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center text-xs", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-3 h-3 rounded-sm mr-2", style: { backgroundColor: chartColors[index] } }), (0, jsx_runtime_1.jsxs)("span", { className: "truncate max-w-[100px]", title: entry.address, children: [entry.address.slice(0, 6), "...", entry.address.slice(-4)] }), (0, jsx_runtime_1.jsxs)("span", { className: "ml-2 text-gray-500", children: [entry.percentage.toFixed(1), "%"] })] }, entry.address))) })] })) })), (0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto", "data-testid": "distribution-table", children: (0, jsx_runtime_1.jsxs)("table", { className: "w-full text-sm", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "border-b dark:border-gray-700", children: [(0, jsx_runtime_1.jsx)("th", { className: "text-left py-2", children: "Address" }), (0, jsx_runtime_1.jsx)("th", { className: "text-right py-2", children: "Yield Amount" }), (0, jsx_runtime_1.jsx)("th", { className: "text-right py-2", children: "%" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: preview.map((entry, index) => ((0, jsx_runtime_1.jsxs)("tr", { className: "border-b dark:border-gray-700", "data-testid": `table-row-${index}`, children: [(0, jsx_runtime_1.jsx)("td", { className: "py-2", children: (0, jsx_runtime_1.jsxs)("span", { title: entry.address, children: [entry.address.slice(0, 10), "...", entry.address.slice(-8)] }) }), (0, jsx_runtime_1.jsxs)("td", { className: "text-right py-2", "data-testid": `yield-amount-${index}`, children: [formatAmount(entry.yieldAmount, selectedTokenInfo?.decimals ?? 6), " ", selectedTokenInfo?.symbol] }), (0, jsx_runtime_1.jsxs)("td", { className: "text-right py-2", "data-testid": `percentage-${index}`, children: [entry.percentage.toFixed(2), "%"] })] }, entry.address))) }), (0, jsx_runtime_1.jsx)("tfoot", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "font-medium", children: [(0, jsx_runtime_1.jsx)("td", { className: "py-2", children: "Total" }), (0, jsx_runtime_1.jsxs)("td", { className: "text-right py-2", "data-testid": "total-distributed", children: [formatAmount(totalDistributed, selectedTokenInfo?.decimals ?? 6), " ", selectedTokenInfo?.symbol] }), (0, jsx_runtime_1.jsx)("td", { className: "text-right py-2", "data-testid": "total-percentage", children: "100%" })] }) })] }) }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "rwa-button-primary w-full", onClick: handleDistribute, "data-testid": "execute-distribution-btn", children: "Execute Distribution" })] }))] }));
243
+ }
244
+ exports.default = YieldCalculator;
245
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/YieldCalculator/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * React components for RWA tokenization
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.YieldCalculator = exports.TokenMintForm = exports.InvestorDashboard = exports.KYCFlow = void 0;
7
+ var KYCFlow_1 = require("./KYCFlow");
8
+ Object.defineProperty(exports, "KYCFlow", { enumerable: true, get: function () { return KYCFlow_1.KYCFlow; } });
9
+ var InvestorDashboard_1 = require("./InvestorDashboard");
10
+ Object.defineProperty(exports, "InvestorDashboard", { enumerable: true, get: function () { return InvestorDashboard_1.InvestorDashboard; } });
11
+ var TokenMintForm_1 = require("./TokenMintForm");
12
+ Object.defineProperty(exports, "TokenMintForm", { enumerable: true, get: function () { return TokenMintForm_1.TokenMintForm; } });
13
+ var YieldCalculator_1 = require("./YieldCalculator");
14
+ Object.defineProperty(exports, "YieldCalculator", { enumerable: true, get: function () { return YieldCalculator_1.YieldCalculator; } });
15
+ //# sourceMappingURL=index.js.map