@djangocfg/ext-payments 1.0.20 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.cjs +8 -1
- package/dist/config.js +8 -1
- package/dist/i18n.cjs +420 -0
- package/dist/i18n.d.cts +171 -0
- package/dist/i18n.d.ts +171 -0
- package/dist/i18n.js +391 -0
- package/dist/index.cjs +641 -109
- package/dist/index.js +642 -110
- package/package.json +16 -9
- package/src/components/ActivityList.tsx +18 -4
- package/src/components/AddFundsSheet.tsx +37 -14
- package/src/components/BalanceHero.tsx +20 -5
- package/src/components/CurrencyCombobox.tsx +16 -3
- package/src/components/PaymentSheet.tsx +75 -29
- package/src/components/WithdrawSheet.tsx +39 -15
- package/src/components/WithdrawalSheet.tsx +78 -32
- package/src/i18n/index.ts +35 -0
- package/src/i18n/locales/en.ts +136 -0
- package/src/i18n/locales/ko.ts +136 -0
- package/src/i18n/locales/ru.ts +136 -0
- package/src/i18n/types.ts +163 -0
package/dist/index.cjs
CHANGED
|
@@ -8,6 +8,8 @@ var zod = require('zod');
|
|
|
8
8
|
var useSWR = require('swr');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
10
|
var lucideReact = require('lucide-react');
|
|
11
|
+
var i18n = require('@djangocfg/ext-base/i18n');
|
|
12
|
+
var i18n$1 = require('@djangocfg/i18n');
|
|
11
13
|
var uiCore = require('@djangocfg/ui-core');
|
|
12
14
|
var lib = require('@djangocfg/ui-core/lib');
|
|
13
15
|
var moment3 = require('moment');
|
|
@@ -2053,8 +2055,398 @@ function mapWithdrawalStatus(status) {
|
|
|
2053
2055
|
return "pending";
|
|
2054
2056
|
}
|
|
2055
2057
|
}
|
|
2058
|
+
|
|
2059
|
+
// src/i18n/locales/en.ts
|
|
2060
|
+
var en = {
|
|
2061
|
+
balance: {
|
|
2062
|
+
available: "Available Balance",
|
|
2063
|
+
totalDeposited: "Total Deposited",
|
|
2064
|
+
totalWithdrawn: "Total Withdrawn"
|
|
2065
|
+
},
|
|
2066
|
+
actions: {
|
|
2067
|
+
addFunds: "Add Funds",
|
|
2068
|
+
withdraw: "Withdraw",
|
|
2069
|
+
continue: "Continue",
|
|
2070
|
+
requestWithdrawal: "Request Withdrawal",
|
|
2071
|
+
cancel: "Cancel",
|
|
2072
|
+
close: "Close",
|
|
2073
|
+
copyAddress: "Copy Address",
|
|
2074
|
+
copied: "Copied!",
|
|
2075
|
+
viewAll: "View All",
|
|
2076
|
+
tryAgain: "Try Again",
|
|
2077
|
+
refreshStatus: "Refresh Status",
|
|
2078
|
+
createNewPayment: "Create New Payment",
|
|
2079
|
+
openInPaymentProvider: "Open in Payment Provider"
|
|
2080
|
+
},
|
|
2081
|
+
paymentStatus: {
|
|
2082
|
+
waiting: "Waiting for payment",
|
|
2083
|
+
confirming: "Confirming",
|
|
2084
|
+
completed: "Completed",
|
|
2085
|
+
failed: "Failed",
|
|
2086
|
+
expired: "Expired",
|
|
2087
|
+
paymentExpired: "Payment Expired"
|
|
2088
|
+
},
|
|
2089
|
+
withdrawalStatus: {
|
|
2090
|
+
pending: "Pending Approval",
|
|
2091
|
+
approved: "Approved",
|
|
2092
|
+
processing: "Processing",
|
|
2093
|
+
completed: "Completed",
|
|
2094
|
+
rejected: "Rejected",
|
|
2095
|
+
cancelled: "Cancelled"
|
|
2096
|
+
},
|
|
2097
|
+
paymentDescriptions: {
|
|
2098
|
+
sendCrypto: "Send cryptocurrency to complete payment",
|
|
2099
|
+
expired: "This payment has expired",
|
|
2100
|
+
completed: "Payment completed successfully",
|
|
2101
|
+
failed: "Payment failed",
|
|
2102
|
+
confirming: "Confirming your payment",
|
|
2103
|
+
createNew: "Please create a new payment to continue"
|
|
2104
|
+
},
|
|
2105
|
+
withdrawalDescriptions: {
|
|
2106
|
+
pendingApproval: "Waiting for admin approval",
|
|
2107
|
+
processing: "Your withdrawal is being processed",
|
|
2108
|
+
completed: "Withdrawal completed successfully",
|
|
2109
|
+
rejected: "Withdrawal was rejected",
|
|
2110
|
+
cancelled: "Withdrawal was cancelled"
|
|
2111
|
+
},
|
|
2112
|
+
form: {
|
|
2113
|
+
amount: "Amount",
|
|
2114
|
+
amountUsd: "Amount (USD)",
|
|
2115
|
+
currency: "Currency",
|
|
2116
|
+
walletAddress: "Wallet Address",
|
|
2117
|
+
selectCurrency: "Select currency...",
|
|
2118
|
+
enterWalletAddress: "Enter your wallet address",
|
|
2119
|
+
search: "Search...",
|
|
2120
|
+
payWith: "Pay with",
|
|
2121
|
+
withdrawAs: "Withdraw as",
|
|
2122
|
+
amountToSend: "Amount to send",
|
|
2123
|
+
equivalent: "Equivalent",
|
|
2124
|
+
network: "Network",
|
|
2125
|
+
paymentAddress: "Payment Address",
|
|
2126
|
+
transactionHash: "Transaction Hash",
|
|
2127
|
+
paymentId: "Payment ID",
|
|
2128
|
+
orderId: "Order #",
|
|
2129
|
+
created: "Created"
|
|
2130
|
+
},
|
|
2131
|
+
validation: {
|
|
2132
|
+
minimumDeposit: "Minimum $1",
|
|
2133
|
+
minimumWithdrawal: "Minimum $10",
|
|
2134
|
+
selectCurrency: "Select a currency",
|
|
2135
|
+
invalidWalletAddress: "Invalid wallet address"
|
|
2136
|
+
},
|
|
2137
|
+
messages: {
|
|
2138
|
+
paymentCreated: "Payment created successfully",
|
|
2139
|
+
paymentFailed: "Failed to create payment",
|
|
2140
|
+
withdrawalCreated: "Withdrawal request created",
|
|
2141
|
+
withdrawalFailed: "Failed to create withdrawal request",
|
|
2142
|
+
withdrawalCancelled: "Withdrawal cancelled",
|
|
2143
|
+
addressCopied: "Address copied to clipboard",
|
|
2144
|
+
failedToLoadPayment: "Failed to load payment",
|
|
2145
|
+
failedToCreateWithdrawal: "Failed to create withdrawal request"
|
|
2146
|
+
},
|
|
2147
|
+
sheets: {
|
|
2148
|
+
addFundsTitle: "Add Funds",
|
|
2149
|
+
addFundsDescription: "Add funds to your wallet using cryptocurrency",
|
|
2150
|
+
withdrawTitle: "Withdraw",
|
|
2151
|
+
withdrawDescription: "Withdraw funds to your cryptocurrency wallet",
|
|
2152
|
+
paymentTitle: "Payment Details",
|
|
2153
|
+
withdrawalTitle: "Withdrawal Details"
|
|
2154
|
+
},
|
|
2155
|
+
activity: {
|
|
2156
|
+
title: "Recent Activity",
|
|
2157
|
+
noActivity: "No Activity Yet",
|
|
2158
|
+
deposit: "Deposit",
|
|
2159
|
+
withdrawal: "Withdrawal",
|
|
2160
|
+
payment: "Payment",
|
|
2161
|
+
transactionsWillAppear: "Your transactions will appear here"
|
|
2162
|
+
},
|
|
2163
|
+
estimate: {
|
|
2164
|
+
gettingRate: "Getting rate...",
|
|
2165
|
+
calculating: "Calculating fees...",
|
|
2166
|
+
enterAmountToSee: "Enter amount to see conversion",
|
|
2167
|
+
youWillSend: "You will send",
|
|
2168
|
+
youWillReceive: "You will receive",
|
|
2169
|
+
serviceFee: "Service fee",
|
|
2170
|
+
networkFee: "Network fee",
|
|
2171
|
+
rate: "Rate",
|
|
2172
|
+
minimumAmount: "Minimum amount"
|
|
2173
|
+
},
|
|
2174
|
+
withdraw: {
|
|
2175
|
+
insufficientBalance: "Insufficient balance",
|
|
2176
|
+
approvalWarning: "Withdrawal requests require admin approval. Processing may take 24-48 hours.",
|
|
2177
|
+
submitting: "Submitting...",
|
|
2178
|
+
creating: "Creating...",
|
|
2179
|
+
expiresIn: "Expires in"
|
|
2180
|
+
}
|
|
2181
|
+
};
|
|
2182
|
+
|
|
2183
|
+
// src/i18n/locales/ru.ts
|
|
2184
|
+
var ru = {
|
|
2185
|
+
balance: {
|
|
2186
|
+
available: "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0439 \u0431\u0430\u043B\u0430\u043D\u0441",
|
|
2187
|
+
totalDeposited: "\u0412\u0441\u0435\u0433\u043E \u0432\u043D\u0435\u0441\u0435\u043D\u043E",
|
|
2188
|
+
totalWithdrawn: "\u0412\u0441\u0435\u0433\u043E \u0432\u044B\u0432\u0435\u0434\u0435\u043D\u043E"
|
|
2189
|
+
},
|
|
2190
|
+
actions: {
|
|
2191
|
+
addFunds: "\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C",
|
|
2192
|
+
withdraw: "\u0412\u044B\u0432\u0435\u0441\u0442\u0438",
|
|
2193
|
+
continue: "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C",
|
|
2194
|
+
requestWithdrawal: "\u0417\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u044B\u0432\u043E\u0434",
|
|
2195
|
+
cancel: "\u041E\u0442\u043C\u0435\u043D\u0430",
|
|
2196
|
+
close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
|
|
2197
|
+
copyAddress: "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0430\u0434\u0440\u0435\u0441",
|
|
2198
|
+
copied: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E!",
|
|
2199
|
+
viewAll: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435",
|
|
2200
|
+
tryAgain: "\u041F\u043E\u043F\u0440\u043E\u0431\u043E\u0432\u0430\u0442\u044C \u0441\u043D\u043E\u0432\u0430",
|
|
2201
|
+
refreshStatus: "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0442\u0430\u0442\u0443\u0441",
|
|
2202
|
+
createNewPayment: "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u043F\u043B\u0430\u0442\u0451\u0436",
|
|
2203
|
+
openInPaymentProvider: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0443 \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430"
|
|
2204
|
+
},
|
|
2205
|
+
paymentStatus: {
|
|
2206
|
+
waiting: "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043E\u043F\u043B\u0430\u0442\u044B",
|
|
2207
|
+
confirming: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435",
|
|
2208
|
+
completed: "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",
|
|
2209
|
+
failed: "\u041E\u0448\u0438\u0431\u043A\u0430",
|
|
2210
|
+
expired: "\u0418\u0441\u0442\u0435\u043A\u043B\u043E",
|
|
2211
|
+
paymentExpired: "\u041F\u043B\u0430\u0442\u0451\u0436 \u0438\u0441\u0442\u0451\u043A"
|
|
2212
|
+
},
|
|
2213
|
+
withdrawalStatus: {
|
|
2214
|
+
pending: "\u041E\u0436\u0438\u0434\u0430\u0435\u0442 \u043E\u0434\u043E\u0431\u0440\u0435\u043D\u0438\u044F",
|
|
2215
|
+
approved: "\u041E\u0434\u043E\u0431\u0440\u0435\u043D\u043E",
|
|
2216
|
+
processing: "\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430",
|
|
2217
|
+
completed: "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",
|
|
2218
|
+
rejected: "\u041E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u043E",
|
|
2219
|
+
cancelled: "\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E"
|
|
2220
|
+
},
|
|
2221
|
+
paymentDescriptions: {
|
|
2222
|
+
sendCrypto: "\u041E\u0442\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u0443 \u0434\u043B\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u043F\u043B\u0430\u0442\u0435\u0436\u0430",
|
|
2223
|
+
expired: "\u0421\u0440\u043E\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u043F\u043B\u0430\u0442\u0435\u0436\u0430 \u0438\u0441\u0442\u0451\u043A",
|
|
2224
|
+
completed: "\u041F\u043B\u0430\u0442\u0451\u0436 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D",
|
|
2225
|
+
failed: "\u041F\u043B\u0430\u0442\u0451\u0436 \u043D\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D",
|
|
2226
|
+
confirming: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u043B\u0430\u0442\u0435\u0436\u0430",
|
|
2227
|
+
createNew: "\u0421\u043E\u0437\u0434\u0430\u0439\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u043F\u043B\u0430\u0442\u0451\u0436 \u0434\u043B\u044F \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u044F"
|
|
2228
|
+
},
|
|
2229
|
+
withdrawalDescriptions: {
|
|
2230
|
+
pendingApproval: "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043E\u0434\u043E\u0431\u0440\u0435\u043D\u0438\u044F \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u0430",
|
|
2231
|
+
processing: "\u0412\u0430\u0448 \u0432\u044B\u0432\u043E\u0434 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F",
|
|
2232
|
+
completed: "\u0412\u044B\u0432\u043E\u0434 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D",
|
|
2233
|
+
rejected: "\u0412\u044B\u0432\u043E\u0434 \u0431\u044B\u043B \u043E\u0442\u043A\u043B\u043E\u043D\u0451\u043D",
|
|
2234
|
+
cancelled: "\u0412\u044B\u0432\u043E\u0434 \u0431\u044B\u043B \u043E\u0442\u043C\u0435\u043D\u0451\u043D"
|
|
2235
|
+
},
|
|
2236
|
+
form: {
|
|
2237
|
+
amount: "\u0421\u0443\u043C\u043C\u0430",
|
|
2238
|
+
amountUsd: "\u0421\u0443\u043C\u043C\u0430 (USD)",
|
|
2239
|
+
currency: "\u0412\u0430\u043B\u044E\u0442\u0430",
|
|
2240
|
+
walletAddress: "\u0410\u0434\u0440\u0435\u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430",
|
|
2241
|
+
selectCurrency: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u043B\u044E\u0442\u0443...",
|
|
2242
|
+
enterWalletAddress: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430",
|
|
2243
|
+
search: "\u041F\u043E\u0438\u0441\u043A...",
|
|
2244
|
+
payWith: "\u041E\u043F\u043B\u0430\u0442\u0438\u0442\u044C \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E",
|
|
2245
|
+
withdrawAs: "\u0412\u044B\u0432\u0435\u0441\u0442\u0438 \u043A\u0430\u043A",
|
|
2246
|
+
amountToSend: "\u0421\u0443\u043C\u043C\u0430 \u043A \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0435",
|
|
2247
|
+
equivalent: "\u042D\u043A\u0432\u0438\u0432\u0430\u043B\u0435\u043D\u0442",
|
|
2248
|
+
network: "\u0421\u0435\u0442\u044C",
|
|
2249
|
+
paymentAddress: "\u0410\u0434\u0440\u0435\u0441 \u0434\u043B\u044F \u043E\u043F\u043B\u0430\u0442\u044B",
|
|
2250
|
+
transactionHash: "\u0425\u0435\u0448 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0438",
|
|
2251
|
+
paymentId: "ID \u043F\u043B\u0430\u0442\u0435\u0436\u0430",
|
|
2252
|
+
orderId: "\u0417\u0430\u043A\u0430\u0437 \u2116",
|
|
2253
|
+
created: "\u0421\u043E\u0437\u0434\u0430\u043D\u043E"
|
|
2254
|
+
},
|
|
2255
|
+
validation: {
|
|
2256
|
+
minimumDeposit: "\u041C\u0438\u043D\u0438\u043C\u0443\u043C $1",
|
|
2257
|
+
minimumWithdrawal: "\u041C\u0438\u043D\u0438\u043C\u0443\u043C $10",
|
|
2258
|
+
selectCurrency: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u043B\u044E\u0442\u0443",
|
|
2259
|
+
invalidWalletAddress: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430"
|
|
2260
|
+
},
|
|
2261
|
+
messages: {
|
|
2262
|
+
paymentCreated: "\u041F\u043B\u0430\u0442\u0451\u0436 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u0441\u043E\u0437\u0434\u0430\u043D",
|
|
2263
|
+
paymentFailed: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u043B\u0430\u0442\u0451\u0436",
|
|
2264
|
+
withdrawalCreated: "\u0417\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u0432\u044B\u0432\u043E\u0434 \u0441\u043E\u0437\u0434\u0430\u043D",
|
|
2265
|
+
withdrawalFailed: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u0432\u044B\u0432\u043E\u0434",
|
|
2266
|
+
withdrawalCancelled: "\u0412\u044B\u0432\u043E\u0434 \u043E\u0442\u043C\u0435\u043D\u0451\u043D",
|
|
2267
|
+
addressCopied: "\u0410\u0434\u0440\u0435\u0441 \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D",
|
|
2268
|
+
failedToLoadPayment: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043F\u043B\u0430\u0442\u0451\u0436",
|
|
2269
|
+
failedToCreateWithdrawal: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u0432\u044B\u0432\u043E\u0434"
|
|
2270
|
+
},
|
|
2271
|
+
sheets: {
|
|
2272
|
+
addFundsTitle: "\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435",
|
|
2273
|
+
addFundsDescription: "\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043A\u043E\u0448\u0435\u043B\u0451\u043A \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u044B",
|
|
2274
|
+
withdrawTitle: "\u0412\u044B\u0432\u043E\u0434",
|
|
2275
|
+
withdrawDescription: "\u0412\u044B\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043D\u0430 \u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u043D\u044B\u0439 \u043A\u043E\u0448\u0435\u043B\u0451\u043A",
|
|
2276
|
+
paymentTitle: "\u0414\u0435\u0442\u0430\u043B\u0438 \u043F\u043B\u0430\u0442\u0435\u0436\u0430",
|
|
2277
|
+
withdrawalTitle: "\u0414\u0435\u0442\u0430\u043B\u0438 \u0432\u044B\u0432\u043E\u0434\u0430"
|
|
2278
|
+
},
|
|
2279
|
+
activity: {
|
|
2280
|
+
title: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C",
|
|
2281
|
+
noActivity: "\u041D\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438",
|
|
2282
|
+
deposit: "\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435",
|
|
2283
|
+
withdrawal: "\u0412\u044B\u0432\u043E\u0434",
|
|
2284
|
+
payment: "\u041F\u043B\u0430\u0442\u0451\u0436",
|
|
2285
|
+
transactionsWillAppear: "\u0412\u0430\u0448\u0438 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0438 \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u0437\u0434\u0435\u0441\u044C"
|
|
2286
|
+
},
|
|
2287
|
+
estimate: {
|
|
2288
|
+
gettingRate: "\u041F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435 \u043A\u0443\u0440\u0441\u0430...",
|
|
2289
|
+
calculating: "\u0420\u0430\u0441\u0447\u0451\u0442 \u043A\u043E\u043C\u0438\u0441\u0441\u0438\u0439...",
|
|
2290
|
+
enterAmountToSee: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0443\u043C\u043C\u0443 \u0434\u043B\u044F \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438",
|
|
2291
|
+
youWillSend: "\u0412\u044B \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u0435",
|
|
2292
|
+
youWillReceive: "\u0412\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435",
|
|
2293
|
+
serviceFee: "\u041A\u043E\u043C\u0438\u0441\u0441\u0438\u044F \u0441\u0435\u0440\u0432\u0438\u0441\u0430",
|
|
2294
|
+
networkFee: "\u041A\u043E\u043C\u0438\u0441\u0441\u0438\u044F \u0441\u0435\u0442\u0438",
|
|
2295
|
+
rate: "\u041A\u0443\u0440\u0441",
|
|
2296
|
+
minimumAmount: "\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0441\u0443\u043C\u043C\u0430"
|
|
2297
|
+
},
|
|
2298
|
+
withdraw: {
|
|
2299
|
+
insufficientBalance: "\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u0441\u0440\u0435\u0434\u0441\u0442\u0432",
|
|
2300
|
+
approvalWarning: "\u0417\u0430\u043F\u0440\u043E\u0441\u044B \u043D\u0430 \u0432\u044B\u0432\u043E\u0434 \u0442\u0440\u0435\u0431\u0443\u044E\u0442 \u043E\u0434\u043E\u0431\u0440\u0435\u043D\u0438\u044F \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u0430. \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u043D\u044F\u0442\u044C 24-48 \u0447\u0430\u0441\u043E\u0432.",
|
|
2301
|
+
submitting: "\u041E\u0442\u043F\u0440\u0430\u0432\u043A\u0430...",
|
|
2302
|
+
creating: "\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435...",
|
|
2303
|
+
expiresIn: "\u0418\u0441\u0442\u0435\u043A\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437"
|
|
2304
|
+
}
|
|
2305
|
+
};
|
|
2306
|
+
|
|
2307
|
+
// src/i18n/locales/ko.ts
|
|
2308
|
+
var ko = {
|
|
2309
|
+
balance: {
|
|
2310
|
+
available: "\uC0AC\uC6A9 \uAC00\uB2A5 \uC794\uC561",
|
|
2311
|
+
totalDeposited: "\uCD1D \uC785\uAE08\uC561",
|
|
2312
|
+
totalWithdrawn: "\uCD1D \uCD9C\uAE08\uC561"
|
|
2313
|
+
},
|
|
2314
|
+
actions: {
|
|
2315
|
+
addFunds: "\uC785\uAE08\uD558\uAE30",
|
|
2316
|
+
withdraw: "\uCD9C\uAE08\uD558\uAE30",
|
|
2317
|
+
continue: "\uACC4\uC18D",
|
|
2318
|
+
requestWithdrawal: "\uCD9C\uAE08 \uC694\uCCAD",
|
|
2319
|
+
cancel: "\uCDE8\uC18C",
|
|
2320
|
+
close: "\uB2EB\uAE30",
|
|
2321
|
+
copyAddress: "\uC8FC\uC18C \uBCF5\uC0AC",
|
|
2322
|
+
copied: "\uBCF5\uC0AC\uB428!",
|
|
2323
|
+
viewAll: "\uC804\uCCB4 \uBCF4\uAE30",
|
|
2324
|
+
tryAgain: "\uB2E4\uC2DC \uC2DC\uB3C4",
|
|
2325
|
+
refreshStatus: "\uC0C1\uD0DC \uC0C8\uB85C\uACE0\uCE68",
|
|
2326
|
+
createNewPayment: "\uC0C8 \uACB0\uC81C \uB9CC\uB4E4\uAE30",
|
|
2327
|
+
openInPaymentProvider: "\uACB0\uC81C \uC81C\uACF5\uC5C5\uCCB4\uC5D0\uC11C \uC5F4\uAE30"
|
|
2328
|
+
},
|
|
2329
|
+
paymentStatus: {
|
|
2330
|
+
waiting: "\uACB0\uC81C \uB300\uAE30 \uC911",
|
|
2331
|
+
confirming: "\uD655\uC778 \uC911",
|
|
2332
|
+
completed: "\uC644\uB8CC",
|
|
2333
|
+
failed: "\uC2E4\uD328",
|
|
2334
|
+
expired: "\uB9CC\uB8CC\uB428",
|
|
2335
|
+
paymentExpired: "\uACB0\uC81C \uB9CC\uB8CC\uB428"
|
|
2336
|
+
},
|
|
2337
|
+
withdrawalStatus: {
|
|
2338
|
+
pending: "\uC2B9\uC778 \uB300\uAE30 \uC911",
|
|
2339
|
+
approved: "\uC2B9\uC778\uB428",
|
|
2340
|
+
processing: "\uCC98\uB9AC \uC911",
|
|
2341
|
+
completed: "\uC644\uB8CC",
|
|
2342
|
+
rejected: "\uAC70\uBD80\uB428",
|
|
2343
|
+
cancelled: "\uCDE8\uC18C\uB428"
|
|
2344
|
+
},
|
|
2345
|
+
paymentDescriptions: {
|
|
2346
|
+
sendCrypto: "\uACB0\uC81C\uB97C \uC644\uB8CC\uD558\uB824\uBA74 \uC554\uD638\uD654\uD3D0\uB97C \uBCF4\uB0B4\uC138\uC694",
|
|
2347
|
+
expired: "\uC774 \uACB0\uC81C\uAC00 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2348
|
+
completed: "\uACB0\uC81C\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2349
|
+
failed: "\uACB0\uC81C\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",
|
|
2350
|
+
confirming: "\uACB0\uC81C \uD655\uC778 \uC911",
|
|
2351
|
+
createNew: "\uACC4\uC18D\uD558\uB824\uBA74 \uC0C8 \uACB0\uC81C\uB97C \uC0DD\uC131\uD558\uC138\uC694"
|
|
2352
|
+
},
|
|
2353
|
+
withdrawalDescriptions: {
|
|
2354
|
+
pendingApproval: "\uAD00\uB9AC\uC790 \uC2B9\uC778 \uB300\uAE30 \uC911",
|
|
2355
|
+
processing: "\uCD9C\uAE08\uC774 \uCC98\uB9AC\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4",
|
|
2356
|
+
completed: "\uCD9C\uAE08\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2357
|
+
rejected: "\uCD9C\uAE08\uC774 \uAC70\uBD80\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2358
|
+
cancelled: "\uCD9C\uAE08\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4"
|
|
2359
|
+
},
|
|
2360
|
+
form: {
|
|
2361
|
+
amount: "\uAE08\uC561",
|
|
2362
|
+
amountUsd: "\uAE08\uC561 (USD)",
|
|
2363
|
+
currency: "\uD1B5\uD654",
|
|
2364
|
+
walletAddress: "\uC9C0\uAC11 \uC8FC\uC18C",
|
|
2365
|
+
selectCurrency: "\uD1B5\uD654 \uC120\uD0DD...",
|
|
2366
|
+
enterWalletAddress: "\uC9C0\uAC11 \uC8FC\uC18C \uC785\uB825",
|
|
2367
|
+
search: "\uAC80\uC0C9...",
|
|
2368
|
+
payWith: "\uACB0\uC81C \uC218\uB2E8",
|
|
2369
|
+
withdrawAs: "\uCD9C\uAE08 \uD1B5\uD654",
|
|
2370
|
+
amountToSend: "\uBCF4\uB0BC \uAE08\uC561",
|
|
2371
|
+
equivalent: "\uD658\uC0B0 \uAE08\uC561",
|
|
2372
|
+
network: "\uB124\uD2B8\uC6CC\uD06C",
|
|
2373
|
+
paymentAddress: "\uACB0\uC81C \uC8FC\uC18C",
|
|
2374
|
+
transactionHash: "\uAC70\uB798 \uD574\uC2DC",
|
|
2375
|
+
paymentId: "\uACB0\uC81C ID",
|
|
2376
|
+
orderId: "\uC8FC\uBB38 #",
|
|
2377
|
+
created: "\uC0DD\uC131\uC77C"
|
|
2378
|
+
},
|
|
2379
|
+
validation: {
|
|
2380
|
+
minimumDeposit: "\uCD5C\uC18C $1",
|
|
2381
|
+
minimumWithdrawal: "\uCD5C\uC18C $10",
|
|
2382
|
+
selectCurrency: "\uD1B5\uD654\uB97C \uC120\uD0DD\uD558\uC138\uC694",
|
|
2383
|
+
invalidWalletAddress: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC9C0\uAC11 \uC8FC\uC18C"
|
|
2384
|
+
},
|
|
2385
|
+
messages: {
|
|
2386
|
+
paymentCreated: "\uACB0\uC81C\uAC00 \uC0DD\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2387
|
+
paymentFailed: "\uACB0\uC81C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",
|
|
2388
|
+
withdrawalCreated: "\uCD9C\uAE08 \uC694\uCCAD\uC774 \uC0DD\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2389
|
+
withdrawalFailed: "\uCD9C\uAE08 \uC694\uCCAD \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4",
|
|
2390
|
+
withdrawalCancelled: "\uCD9C\uAE08\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2391
|
+
addressCopied: "\uC8FC\uC18C\uAC00 \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
2392
|
+
failedToLoadPayment: "\uACB0\uC81C\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",
|
|
2393
|
+
failedToCreateWithdrawal: "\uCD9C\uAE08 \uC694\uCCAD\uC744 \uC0DD\uC131\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4"
|
|
2394
|
+
},
|
|
2395
|
+
sheets: {
|
|
2396
|
+
addFundsTitle: "\uC785\uAE08",
|
|
2397
|
+
addFundsDescription: "\uC554\uD638\uD654\uD3D0\uB85C \uC9C0\uAC11\uC744 \uCDA9\uC804\uD558\uC138\uC694",
|
|
2398
|
+
withdrawTitle: "\uCD9C\uAE08",
|
|
2399
|
+
withdrawDescription: "\uC554\uD638\uD654\uD3D0 \uC9C0\uAC11\uC73C\uB85C \uC790\uAE08\uC744 \uCD9C\uAE08\uD558\uC138\uC694",
|
|
2400
|
+
paymentTitle: "\uACB0\uC81C \uC0C1\uC138",
|
|
2401
|
+
withdrawalTitle: "\uCD9C\uAE08 \uC0C1\uC138"
|
|
2402
|
+
},
|
|
2403
|
+
activity: {
|
|
2404
|
+
title: "\uCD5C\uADFC \uD65C\uB3D9",
|
|
2405
|
+
noActivity: "\uD65C\uB3D9 \uC5C6\uC74C",
|
|
2406
|
+
deposit: "\uC785\uAE08",
|
|
2407
|
+
withdrawal: "\uCD9C\uAE08",
|
|
2408
|
+
payment: "\uACB0\uC81C",
|
|
2409
|
+
transactionsWillAppear: "\uAC70\uB798 \uB0B4\uC5ED\uC774 \uC5EC\uAE30\uC5D0 \uD45C\uC2DC\uB429\uB2C8\uB2E4"
|
|
2410
|
+
},
|
|
2411
|
+
estimate: {
|
|
2412
|
+
gettingRate: "\uD658\uC728 \uC870\uD68C \uC911...",
|
|
2413
|
+
calculating: "\uC218\uC218\uB8CC \uACC4\uC0B0 \uC911...",
|
|
2414
|
+
enterAmountToSee: "\uAE08\uC561\uC744 \uC785\uB825\uD558\uC5EC \uD658\uC0B0\uC744 \uD655\uC778\uD558\uC138\uC694",
|
|
2415
|
+
youWillSend: "\uBCF4\uB0BC \uAE08\uC561",
|
|
2416
|
+
youWillReceive: "\uBC1B\uC744 \uAE08\uC561",
|
|
2417
|
+
serviceFee: "\uC11C\uBE44\uC2A4 \uC218\uC218\uB8CC",
|
|
2418
|
+
networkFee: "\uB124\uD2B8\uC6CC\uD06C \uC218\uC218\uB8CC",
|
|
2419
|
+
rate: "\uD658\uC728",
|
|
2420
|
+
minimumAmount: "\uCD5C\uC18C \uAE08\uC561"
|
|
2421
|
+
},
|
|
2422
|
+
withdraw: {
|
|
2423
|
+
insufficientBalance: "\uC794\uC561 \uBD80\uC871",
|
|
2424
|
+
approvalWarning: "\uCD9C\uAE08 \uC694\uCCAD\uC740 \uAD00\uB9AC\uC790 \uC2B9\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uCC98\uB9AC\uC5D0 24-48\uC2DC\uAC04\uC774 \uC18C\uC694\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
|
|
2425
|
+
submitting: "\uC81C\uCD9C \uC911...",
|
|
2426
|
+
creating: "\uC0DD\uC131 \uC911...",
|
|
2427
|
+
expiresIn: "\uB9CC\uB8CC\uAE4C\uC9C0"
|
|
2428
|
+
}
|
|
2429
|
+
};
|
|
2430
|
+
|
|
2431
|
+
// src/i18n/index.ts
|
|
2432
|
+
var PAYMENTS_NAMESPACE = "payments";
|
|
2433
|
+
var paymentsI18n = i18n.createExtensionI18n({
|
|
2434
|
+
namespace: PAYMENTS_NAMESPACE,
|
|
2435
|
+
defaultLocale: "en",
|
|
2436
|
+
locales: { en, ru, ko }
|
|
2437
|
+
});
|
|
2438
|
+
paymentsI18n.getAllTranslations();
|
|
2056
2439
|
function BalanceHero({ onAddFunds, onWithdraw, className }) {
|
|
2440
|
+
const baseT = i18n$1.useT();
|
|
2441
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
2057
2442
|
const { balance, balanceAmount, isLoadingBalance, refreshWallet } = useWallet();
|
|
2443
|
+
const labels = react.useMemo(() => ({
|
|
2444
|
+
available: pt("balance.available"),
|
|
2445
|
+
totalDeposited: pt("balance.totalDeposited"),
|
|
2446
|
+
totalWithdrawn: pt("balance.totalWithdrawn"),
|
|
2447
|
+
addFunds: pt("actions.addFunds"),
|
|
2448
|
+
withdraw: pt("actions.withdraw")
|
|
2449
|
+
}), [pt]);
|
|
2058
2450
|
const formattedBalance = new Intl.NumberFormat("en-US", {
|
|
2059
2451
|
style: "currency",
|
|
2060
2452
|
currency: "USD",
|
|
@@ -2067,7 +2459,7 @@ function BalanceHero({ onAddFunds, onWithdraw, className }) {
|
|
|
2067
2459
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Skeleton, { className: "h-4 w-24 mx-auto" })
|
|
2068
2460
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2069
2461
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-5xl font-bold tracking-tight tabular-nums", children: formattedBalance }),
|
|
2070
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1", children:
|
|
2462
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1", children: labels.available })
|
|
2071
2463
|
] }) }),
|
|
2072
2464
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
2073
2465
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -2078,7 +2470,7 @@ function BalanceHero({ onAddFunds, onWithdraw, className }) {
|
|
|
2078
2470
|
className: "rounded-full px-6",
|
|
2079
2471
|
children: [
|
|
2080
2472
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-5 w-5 mr-2" }),
|
|
2081
|
-
|
|
2473
|
+
labels.addFunds
|
|
2082
2474
|
]
|
|
2083
2475
|
}
|
|
2084
2476
|
),
|
|
@@ -2091,7 +2483,7 @@ function BalanceHero({ onAddFunds, onWithdraw, className }) {
|
|
|
2091
2483
|
className: "rounded-full px-6",
|
|
2092
2484
|
children: [
|
|
2093
2485
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpRight, { className: "h-5 w-5 mr-2" }),
|
|
2094
|
-
|
|
2486
|
+
labels.withdraw
|
|
2095
2487
|
]
|
|
2096
2488
|
}
|
|
2097
2489
|
),
|
|
@@ -2112,7 +2504,7 @@ function BalanceHero({ onAddFunds, onWithdraw, className }) {
|
|
|
2112
2504
|
"$",
|
|
2113
2505
|
parseFloat(balance.total_deposited || "0").toFixed(2)
|
|
2114
2506
|
] }),
|
|
2115
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
2507
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.totalDeposited })
|
|
2116
2508
|
] }),
|
|
2117
2509
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-8 w-px bg-border" }),
|
|
2118
2510
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
@@ -2120,7 +2512,7 @@ function BalanceHero({ onAddFunds, onWithdraw, className }) {
|
|
|
2120
2512
|
"$",
|
|
2121
2513
|
parseFloat(balance.total_withdrawn || "0").toFixed(2)
|
|
2122
2514
|
] }),
|
|
2123
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
2515
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.totalWithdrawn })
|
|
2124
2516
|
] })
|
|
2125
2517
|
] })
|
|
2126
2518
|
] });
|
|
@@ -2207,7 +2599,15 @@ function ActivityList({
|
|
|
2207
2599
|
limit = 10,
|
|
2208
2600
|
className
|
|
2209
2601
|
}) {
|
|
2602
|
+
const baseT = i18n$1.useT();
|
|
2603
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
2210
2604
|
const { activity, isLoadingActivity, hasMoreActivity } = useWallet();
|
|
2605
|
+
const labels = react.useMemo(() => ({
|
|
2606
|
+
title: pt("activity.title"),
|
|
2607
|
+
noActivity: pt("activity.noActivity"),
|
|
2608
|
+
transactionsWillAppear: pt("activity.transactionsWillAppear"),
|
|
2609
|
+
viewAll: pt("actions.viewAll")
|
|
2610
|
+
}), [pt]);
|
|
2211
2611
|
const displayedActivity = limit ? activity.slice(0, limit) : activity;
|
|
2212
2612
|
if (isLoadingActivity) {
|
|
2213
2613
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("space-y-2", className), children: [
|
|
@@ -2225,15 +2625,15 @@ function ActivityList({
|
|
|
2225
2625
|
if (activity.length === 0) {
|
|
2226
2626
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("text-center py-12", className), children: [
|
|
2227
2627
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex items-center justify-center w-16 h-16 rounded-full bg-muted mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { className: "h-8 w-8 text-muted-foreground" }) }),
|
|
2228
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold mb-1", children:
|
|
2229
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children:
|
|
2628
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold mb-1", children: labels.noActivity }),
|
|
2629
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: labels.transactionsWillAppear })
|
|
2230
2630
|
] });
|
|
2231
2631
|
}
|
|
2232
2632
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("pt-6", className), children: [
|
|
2233
2633
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-2", children: [
|
|
2234
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-semibold text-lg", children:
|
|
2634
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-semibold text-lg", children: labels.title }),
|
|
2235
2635
|
hasMoreActivity && onViewAll && /* @__PURE__ */ jsxRuntime.jsxs(uiCore.Button, { variant: "ghost", size: "sm", onClick: onViewAll, className: "text-primary", children: [
|
|
2236
|
-
|
|
2636
|
+
labels.viewAll,
|
|
2237
2637
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4 ml-1" })
|
|
2238
2638
|
] })
|
|
2239
2639
|
] }),
|
|
@@ -2459,16 +2859,22 @@ function CurrencyCombobox({
|
|
|
2459
2859
|
value,
|
|
2460
2860
|
onChange,
|
|
2461
2861
|
disabled,
|
|
2462
|
-
placeholder
|
|
2862
|
+
placeholder
|
|
2463
2863
|
}) {
|
|
2864
|
+
const baseT = i18n$1.useT();
|
|
2865
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
2866
|
+
const labels = react.useMemo(() => ({
|
|
2867
|
+
selectCurrency: pt("form.selectCurrency"),
|
|
2868
|
+
search: pt("form.search")
|
|
2869
|
+
}), [pt]);
|
|
2464
2870
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2465
2871
|
uiCore.Combobox,
|
|
2466
2872
|
{
|
|
2467
2873
|
options,
|
|
2468
2874
|
value,
|
|
2469
2875
|
onValueChange: onChange,
|
|
2470
|
-
placeholder,
|
|
2471
|
-
searchPlaceholder:
|
|
2876
|
+
placeholder: placeholder || labels.selectCurrency,
|
|
2877
|
+
searchPlaceholder: labels.search,
|
|
2472
2878
|
disabled,
|
|
2473
2879
|
className: "h-14",
|
|
2474
2880
|
renderOption: (option) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 flex-1", children: [
|
|
@@ -2488,9 +2894,27 @@ var AddFundsSchema = zod.z.object({
|
|
|
2488
2894
|
});
|
|
2489
2895
|
var STORAGE_KEY = "payments:addFunds";
|
|
2490
2896
|
function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
2897
|
+
const baseT = i18n$1.useT();
|
|
2898
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
2491
2899
|
const { currencies, isLoadingCurrencies, addFunds } = useWallet();
|
|
2492
2900
|
const [isSubmitting, setIsSubmitting] = react.useState(false);
|
|
2493
2901
|
const [error, setError] = react.useState(null);
|
|
2902
|
+
const labels = react.useMemo(() => ({
|
|
2903
|
+
title: pt("sheets.addFundsTitle"),
|
|
2904
|
+
description: pt("sheets.addFundsDescription"),
|
|
2905
|
+
amountUsd: pt("form.amountUsd"),
|
|
2906
|
+
payWith: pt("form.payWith"),
|
|
2907
|
+
amount: pt("form.amount"),
|
|
2908
|
+
serviceFee: pt("estimate.serviceFee"),
|
|
2909
|
+
rate: pt("estimate.rate"),
|
|
2910
|
+
youWillSend: pt("estimate.youWillSend"),
|
|
2911
|
+
youWillReceive: pt("estimate.youWillReceive"),
|
|
2912
|
+
gettingRate: pt("estimate.gettingRate"),
|
|
2913
|
+
enterAmountToSee: pt("estimate.enterAmountToSee"),
|
|
2914
|
+
minimumAmount: pt("estimate.minimumAmount"),
|
|
2915
|
+
continue: pt("actions.continue"),
|
|
2916
|
+
creating: pt("withdraw.creating")
|
|
2917
|
+
}), [pt]);
|
|
2494
2918
|
const [saved, setSaved] = uiCore.useLocalStorage(STORAGE_KEY, {
|
|
2495
2919
|
currency: "",
|
|
2496
2920
|
amount: 100
|
|
@@ -2570,8 +2994,8 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2570
2994
|
}, [form, onOpenChange, saved]);
|
|
2571
2995
|
return /* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheet, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetContent, { className: "sm:max-w-md", children: [
|
|
2572
2996
|
/* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetHeader, { children: [
|
|
2573
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children:
|
|
2574
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetDescription, { children:
|
|
2997
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children: labels.title }),
|
|
2998
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetDescription, { children: labels.description })
|
|
2575
2999
|
] }),
|
|
2576
3000
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Form, { ...form, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: form.handleSubmit(handleSubmit), className: "space-y-6 p-4 sm:p-0 sm:mt-4", children: [
|
|
2577
3001
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2580,7 +3004,7 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2580
3004
|
control: form.control,
|
|
2581
3005
|
name: "amount",
|
|
2582
3006
|
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(uiCore.FormItem, { children: [
|
|
2583
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children:
|
|
3007
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children: labels.amountUsd }),
|
|
2584
3008
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2585
3009
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground text-lg", children: "$" }),
|
|
2586
3010
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2606,7 +3030,7 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2606
3030
|
control: form.control,
|
|
2607
3031
|
name: "currency",
|
|
2608
3032
|
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(uiCore.FormItem, { children: [
|
|
2609
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children:
|
|
3033
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children: labels.payWith }),
|
|
2610
3034
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2611
3035
|
CurrencyCombobox,
|
|
2612
3036
|
{
|
|
@@ -2622,10 +3046,10 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2622
3046
|
),
|
|
2623
3047
|
selectedCurrency && watchedAmount >= 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-muted rounded-xl p-4 space-y-2", children: isLoadingEstimate ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center py-2", children: [
|
|
2624
3048
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }),
|
|
2625
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-sm text-muted-foreground", children:
|
|
3049
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-sm text-muted-foreground", children: labels.gettingRate })
|
|
2626
3050
|
] }) : displayData ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2627
3051
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
2628
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3052
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.amount }),
|
|
2629
3053
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
2630
3054
|
"$",
|
|
2631
3055
|
formatUsdAmount(displayData.amountToReceive)
|
|
@@ -2633,7 +3057,8 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2633
3057
|
] }),
|
|
2634
3058
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
2635
3059
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
2636
|
-
|
|
3060
|
+
labels.serviceFee,
|
|
3061
|
+
" (",
|
|
2637
3062
|
displayData.serviceFeePercent,
|
|
2638
3063
|
"%)"
|
|
2639
3064
|
] }),
|
|
@@ -2643,7 +3068,7 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2643
3068
|
] })
|
|
2644
3069
|
] }),
|
|
2645
3070
|
displayData.showRate && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm text-muted-foreground", children: [
|
|
2646
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3071
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.rate }),
|
|
2647
3072
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
2648
3073
|
"1 ",
|
|
2649
3074
|
displayData.token,
|
|
@@ -2652,7 +3077,7 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2652
3077
|
] })
|
|
2653
3078
|
] }),
|
|
2654
3079
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t pt-2 mt-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
2655
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children:
|
|
3080
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: labels.youWillSend }),
|
|
2656
3081
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-right", children: [
|
|
2657
3082
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 justify-end", children: [
|
|
2658
3083
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.TokenIcon, { symbol: displayData.token, size: 20 }),
|
|
@@ -2669,17 +3094,18 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2669
3094
|
] })
|
|
2670
3095
|
] }) }),
|
|
2671
3096
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm pt-2", children: [
|
|
2672
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3097
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.youWillReceive }),
|
|
2673
3098
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium", children: [
|
|
2674
3099
|
"$",
|
|
2675
3100
|
formatUsdAmount(displayData.amountToReceive)
|
|
2676
3101
|
] })
|
|
2677
3102
|
] }),
|
|
2678
3103
|
displayData.belowMinimum && displayData.minAmount && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm text-destructive mt-2 pt-2 border-t border-destructive/20", children: [
|
|
2679
|
-
|
|
3104
|
+
labels.minimumAmount,
|
|
3105
|
+
": $",
|
|
2680
3106
|
displayData.minAmount
|
|
2681
3107
|
] })
|
|
2682
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-sm text-muted-foreground py-2", children:
|
|
3108
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-sm text-muted-foreground py-2", children: labels.enterAmountToSee }) }),
|
|
2683
3109
|
error && /* @__PURE__ */ jsxRuntime.jsx(uiCore.Alert, { variant: "destructive", children: /* @__PURE__ */ jsxRuntime.jsx(uiCore.AlertDescription, { children: error }) }),
|
|
2684
3110
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2685
3111
|
uiCore.Button,
|
|
@@ -2690,8 +3116,8 @@ function AddFundsSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2690
3116
|
disabled: isSubmitting || currencyOptions.length === 0 || isLoadingEstimate || displayData?.belowMinimum,
|
|
2691
3117
|
children: isSubmitting ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2692
3118
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-5 w-5 mr-2 animate-spin" }),
|
|
2693
|
-
|
|
2694
|
-
] }) :
|
|
3119
|
+
labels.creating
|
|
3120
|
+
] }) : labels.continue
|
|
2695
3121
|
}
|
|
2696
3122
|
)
|
|
2697
3123
|
] }) })
|
|
@@ -2704,9 +3130,28 @@ var WithdrawSchema = zod.z.object({
|
|
|
2704
3130
|
});
|
|
2705
3131
|
var STORAGE_KEY2 = "payments:withdraw";
|
|
2706
3132
|
function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
3133
|
+
const baseT = i18n$1.useT();
|
|
3134
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
2707
3135
|
const { currencies, isLoadingCurrencies, withdraw, balanceAmount } = useWallet();
|
|
2708
3136
|
const [isSubmitting, setIsSubmitting] = react.useState(false);
|
|
2709
3137
|
const [error, setError] = react.useState(null);
|
|
3138
|
+
const labels = react.useMemo(() => ({
|
|
3139
|
+
title: pt("sheets.withdrawTitle"),
|
|
3140
|
+
description: pt("sheets.withdrawDescription"),
|
|
3141
|
+
amountUsd: pt("form.amountUsd"),
|
|
3142
|
+
withdrawAs: pt("form.withdrawAs"),
|
|
3143
|
+
walletAddress: pt("form.walletAddress"),
|
|
3144
|
+
enterWalletAddress: pt("form.enterWalletAddress"),
|
|
3145
|
+
amount: pt("form.amount"),
|
|
3146
|
+
serviceFee: pt("estimate.serviceFee"),
|
|
3147
|
+
networkFee: pt("estimate.networkFee"),
|
|
3148
|
+
youWillReceive: pt("estimate.youWillReceive"),
|
|
3149
|
+
calculating: pt("estimate.calculating"),
|
|
3150
|
+
insufficientBalance: pt("withdraw.insufficientBalance"),
|
|
3151
|
+
approvalWarning: pt("withdraw.approvalWarning"),
|
|
3152
|
+
submitting: pt("withdraw.submitting"),
|
|
3153
|
+
requestWithdrawal: pt("actions.requestWithdrawal")
|
|
3154
|
+
}), [pt]);
|
|
2710
3155
|
const [saved, setSaved] = uiCore.useLocalStorage(STORAGE_KEY2, {
|
|
2711
3156
|
currency: "",
|
|
2712
3157
|
wallet: ""
|
|
@@ -2779,8 +3224,8 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2779
3224
|
}, [form, onOpenChange, saved]);
|
|
2780
3225
|
return /* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheet, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetContent, { className: "sm:max-w-md", children: [
|
|
2781
3226
|
/* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetHeader, { children: [
|
|
2782
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children:
|
|
2783
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetDescription, { children:
|
|
3227
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children: labels.title }),
|
|
3228
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetDescription, { children: labels.description })
|
|
2784
3229
|
] }),
|
|
2785
3230
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Form, { ...form, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: form.handleSubmit(handleSubmit), className: "space-y-6 p-4 sm:p-0 sm:mt-4", children: [
|
|
2786
3231
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2789,7 +3234,7 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2789
3234
|
control: form.control,
|
|
2790
3235
|
name: "amount",
|
|
2791
3236
|
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(uiCore.FormItem, { children: [
|
|
2792
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children:
|
|
3237
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children: labels.amountUsd }),
|
|
2793
3238
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2794
3239
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground text-lg", children: "$" }),
|
|
2795
3240
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2807,7 +3252,8 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2807
3252
|
] }) }),
|
|
2808
3253
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormMessage, {}),
|
|
2809
3254
|
insufficientBalance && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-destructive mt-1", children: [
|
|
2810
|
-
|
|
3255
|
+
labels.insufficientBalance,
|
|
3256
|
+
" (Available: $",
|
|
2811
3257
|
formatUsdAmount(balanceAmount),
|
|
2812
3258
|
")"
|
|
2813
3259
|
] })
|
|
@@ -2820,7 +3266,7 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2820
3266
|
control: form.control,
|
|
2821
3267
|
name: "currency",
|
|
2822
3268
|
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(uiCore.FormItem, { children: [
|
|
2823
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children:
|
|
3269
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children: labels.withdrawAs }),
|
|
2824
3270
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2825
3271
|
CurrencyCombobox,
|
|
2826
3272
|
{
|
|
@@ -2840,11 +3286,11 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2840
3286
|
control: form.control,
|
|
2841
3287
|
name: "wallet_address",
|
|
2842
3288
|
render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsxs(uiCore.FormItem, { children: [
|
|
2843
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children:
|
|
3289
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormLabel, { children: labels.walletAddress }),
|
|
2844
3290
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.FormControl, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2845
3291
|
uiCore.Input,
|
|
2846
3292
|
{
|
|
2847
|
-
placeholder:
|
|
3293
|
+
placeholder: labels.enterWalletAddress,
|
|
2848
3294
|
className: "font-mono text-sm",
|
|
2849
3295
|
...field
|
|
2850
3296
|
}
|
|
@@ -2855,7 +3301,7 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2855
3301
|
),
|
|
2856
3302
|
amount >= 10 && selectedCurrency && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-muted rounded-xl p-4 space-y-2", children: [
|
|
2857
3303
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
2858
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3304
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.amount }),
|
|
2859
3305
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
2860
3306
|
"$",
|
|
2861
3307
|
formatUsdAmount(amount)
|
|
@@ -2863,11 +3309,12 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2863
3309
|
] }),
|
|
2864
3310
|
isLoadingEstimate ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground py-2", children: [
|
|
2865
3311
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
2866
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3312
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.calculating })
|
|
2867
3313
|
] }) : estimate ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2868
3314
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
2869
3315
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
2870
|
-
|
|
3316
|
+
labels.serviceFee,
|
|
3317
|
+
" (",
|
|
2871
3318
|
estimate.serviceFeePercent,
|
|
2872
3319
|
"%)"
|
|
2873
3320
|
] }),
|
|
@@ -2877,14 +3324,14 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2877
3324
|
] })
|
|
2878
3325
|
] }),
|
|
2879
3326
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
2880
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3327
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.networkFee }),
|
|
2881
3328
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-destructive", children: [
|
|
2882
3329
|
"-$",
|
|
2883
3330
|
formatUsdAmount(estimate.networkFeeUsd)
|
|
2884
3331
|
] })
|
|
2885
3332
|
] }),
|
|
2886
3333
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t pt-2 mt-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
2887
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children:
|
|
3334
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: labels.youWillReceive }),
|
|
2888
3335
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-right", children: [
|
|
2889
3336
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-semibold", children: [
|
|
2890
3337
|
"$",
|
|
@@ -2904,7 +3351,7 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2904
3351
|
] }),
|
|
2905
3352
|
/* @__PURE__ */ jsxRuntime.jsxs(uiCore.Alert, { children: [
|
|
2906
3353
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4" }),
|
|
2907
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.AlertDescription, { children:
|
|
3354
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.AlertDescription, { children: labels.approvalWarning })
|
|
2908
3355
|
] }),
|
|
2909
3356
|
error && /* @__PURE__ */ jsxRuntime.jsx(uiCore.Alert, { variant: "destructive", children: /* @__PURE__ */ jsxRuntime.jsx(uiCore.AlertDescription, { children: error }) }),
|
|
2910
3357
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2916,8 +3363,8 @@ function WithdrawSheet({ open, onOpenChange, onSuccess }) {
|
|
|
2916
3363
|
disabled: isSubmitting || currencyOptions.length === 0 || insufficientBalance || !estimate || estimate.amountToReceive <= 0 || isLoadingEstimate,
|
|
2917
3364
|
children: isSubmitting ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2918
3365
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-5 w-5 mr-2 animate-spin" }),
|
|
2919
|
-
|
|
2920
|
-
] }) :
|
|
3366
|
+
labels.submitting
|
|
3367
|
+
] }) : labels.requestWithdrawal
|
|
2921
3368
|
}
|
|
2922
3369
|
)
|
|
2923
3370
|
] }) })
|
|
@@ -2927,43 +3374,73 @@ var statusConfig2 = {
|
|
|
2927
3374
|
pending: {
|
|
2928
3375
|
icon: lucideReact.Clock,
|
|
2929
3376
|
color: "text-yellow-500",
|
|
2930
|
-
bg: "bg-yellow-500/10"
|
|
2931
|
-
label: "Pending Approval"
|
|
3377
|
+
bg: "bg-yellow-500/10"
|
|
2932
3378
|
},
|
|
2933
3379
|
approved: {
|
|
2934
3380
|
icon: lucideReact.CheckCircle2,
|
|
2935
3381
|
color: "text-blue-500",
|
|
2936
|
-
bg: "bg-blue-500/10"
|
|
2937
|
-
label: "Approved"
|
|
3382
|
+
bg: "bg-blue-500/10"
|
|
2938
3383
|
},
|
|
2939
3384
|
processing: {
|
|
2940
3385
|
icon: lucideReact.RefreshCw,
|
|
2941
3386
|
color: "text-blue-500",
|
|
2942
3387
|
bg: "bg-blue-500/10",
|
|
2943
|
-
label: "Processing",
|
|
2944
3388
|
animate: true
|
|
2945
3389
|
},
|
|
2946
3390
|
completed: {
|
|
2947
3391
|
icon: lucideReact.CheckCircle2,
|
|
2948
3392
|
color: "text-green-500",
|
|
2949
|
-
bg: "bg-green-500/10"
|
|
2950
|
-
label: "Completed"
|
|
3393
|
+
bg: "bg-green-500/10"
|
|
2951
3394
|
},
|
|
2952
3395
|
rejected: {
|
|
2953
3396
|
icon: lucideReact.XCircle,
|
|
2954
3397
|
color: "text-red-500",
|
|
2955
|
-
bg: "bg-red-500/10"
|
|
2956
|
-
label: "Rejected"
|
|
3398
|
+
bg: "bg-red-500/10"
|
|
2957
3399
|
},
|
|
2958
3400
|
cancelled: {
|
|
2959
3401
|
icon: lucideReact.Ban,
|
|
2960
3402
|
color: "text-muted-foreground",
|
|
2961
|
-
bg: "bg-muted"
|
|
2962
|
-
label: "Cancelled"
|
|
3403
|
+
bg: "bg-muted"
|
|
2963
3404
|
}
|
|
2964
3405
|
};
|
|
2965
3406
|
function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
3407
|
+
const baseT = i18n$1.useT();
|
|
3408
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
2966
3409
|
const { getWithdrawalDetails, cancelWithdrawal, refreshWallet } = useWallet();
|
|
3410
|
+
const labels = react.useMemo(() => ({
|
|
3411
|
+
title: pt("sheets.withdrawalTitle"),
|
|
3412
|
+
// Status labels
|
|
3413
|
+
pending: pt("withdrawalStatus.pending"),
|
|
3414
|
+
approved: pt("withdrawalStatus.approved"),
|
|
3415
|
+
processing: pt("withdrawalStatus.processing"),
|
|
3416
|
+
completed: pt("withdrawalStatus.completed"),
|
|
3417
|
+
rejected: pt("withdrawalStatus.rejected"),
|
|
3418
|
+
cancelled: pt("withdrawalStatus.cancelled"),
|
|
3419
|
+
// Descriptions
|
|
3420
|
+
pendingApproval: pt("withdrawalDescriptions.pendingApproval"),
|
|
3421
|
+
processingDesc: pt("withdrawalDescriptions.processing"),
|
|
3422
|
+
completedDesc: pt("withdrawalDescriptions.completed"),
|
|
3423
|
+
rejectedDesc: pt("withdrawalDescriptions.rejected"),
|
|
3424
|
+
cancelledDesc: pt("withdrawalDescriptions.cancelled"),
|
|
3425
|
+
// Form
|
|
3426
|
+
amount: pt("form.amount"),
|
|
3427
|
+
totalFees: pt("estimate.serviceFee"),
|
|
3428
|
+
youReceive: pt("estimate.youWillReceive"),
|
|
3429
|
+
cryptoAmount: pt("form.amount"),
|
|
3430
|
+
destinationWallet: pt("form.walletAddress"),
|
|
3431
|
+
transactionHash: pt("form.transactionHash"),
|
|
3432
|
+
withdrawalId: pt("form.paymentId"),
|
|
3433
|
+
reference: pt("form.orderId"),
|
|
3434
|
+
created: pt("form.created"),
|
|
3435
|
+
network: pt("form.network"),
|
|
3436
|
+
// Actions
|
|
3437
|
+
viewOnExplorer: pt("actions.openInPaymentProvider"),
|
|
3438
|
+
cancel: pt("actions.cancel"),
|
|
3439
|
+
refreshStatus: pt("actions.refreshStatus"),
|
|
3440
|
+
tryAgain: pt("actions.tryAgain"),
|
|
3441
|
+
// Messages
|
|
3442
|
+
failedToLoad: pt("messages.failedToLoadPayment")
|
|
3443
|
+
}), [pt]);
|
|
2967
3444
|
const { data: withdrawal, isLoading, error, mutate } = useSWR__default.default(
|
|
2968
3445
|
open && withdrawalId ? ["withdrawal-details", withdrawalId] : null,
|
|
2969
3446
|
() => getWithdrawalDetails(withdrawalId),
|
|
@@ -2978,12 +3455,20 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
2978
3455
|
const isCancelled = s === "cancelled";
|
|
2979
3456
|
const isProcessing = s === "processing" || s === "approved";
|
|
2980
3457
|
const canCancel2 = isPending;
|
|
3458
|
+
const statusLabels = {
|
|
3459
|
+
pending: labels.pending,
|
|
3460
|
+
approved: labels.approved,
|
|
3461
|
+
processing: labels.processing,
|
|
3462
|
+
completed: labels.completed,
|
|
3463
|
+
rejected: labels.rejected,
|
|
3464
|
+
cancelled: labels.cancelled
|
|
3465
|
+
};
|
|
2981
3466
|
let description2 = "";
|
|
2982
|
-
if (isPending) description2 =
|
|
2983
|
-
else if (isProcessing) description2 =
|
|
2984
|
-
else if (isCompleted) description2 =
|
|
2985
|
-
else if (isRejected) description2 =
|
|
2986
|
-
else if (isCancelled) description2 =
|
|
3467
|
+
if (isPending) description2 = labels.pendingApproval;
|
|
3468
|
+
else if (isProcessing) description2 = labels.processingDesc;
|
|
3469
|
+
else if (isCompleted) description2 = labels.completedDesc;
|
|
3470
|
+
else if (isRejected) description2 = labels.rejectedDesc;
|
|
3471
|
+
else if (isCancelled) description2 = labels.cancelledDesc;
|
|
2987
3472
|
const amountUsd2 = withdrawal?.amount_usd ? `$${parseFloat(withdrawal.amount_usd).toFixed(2)}` : "";
|
|
2988
3473
|
const finalAmountUsd2 = withdrawal?.final_amount_usd ? `$${parseFloat(withdrawal.final_amount_usd).toFixed(2)}` : "";
|
|
2989
3474
|
const totalFeeUsd2 = withdrawal?.total_fee_usd ? `$${parseFloat(withdrawal.total_fee_usd).toFixed(2)}` : "";
|
|
@@ -2992,6 +3477,7 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
2992
3477
|
return {
|
|
2993
3478
|
status: s,
|
|
2994
3479
|
config: config2,
|
|
3480
|
+
statusLabel: statusLabels[s] || statusLabels.pending,
|
|
2995
3481
|
isPending,
|
|
2996
3482
|
isCompleted,
|
|
2997
3483
|
isRejected,
|
|
@@ -3005,8 +3491,8 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3005
3491
|
createdAt: createdAt2,
|
|
3006
3492
|
completedAt: completedAt2
|
|
3007
3493
|
};
|
|
3008
|
-
}, [withdrawal]);
|
|
3009
|
-
const { config, canCancel, description, amountUsd, finalAmountUsd, totalFeeUsd, createdAt, completedAt } = displayData;
|
|
3494
|
+
}, [withdrawal, labels]);
|
|
3495
|
+
const { config, statusLabel, canCancel, description, amountUsd, finalAmountUsd, totalFeeUsd, createdAt, completedAt } = displayData;
|
|
3010
3496
|
const StatusIcon = config.icon;
|
|
3011
3497
|
const handleCancel = async () => {
|
|
3012
3498
|
if (!withdrawalId) return;
|
|
@@ -3020,7 +3506,7 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3020
3506
|
};
|
|
3021
3507
|
return /* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheet, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetContent, { className: "sm:max-w-lg", children: [
|
|
3022
3508
|
/* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetHeader, { children: [
|
|
3023
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children:
|
|
3509
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children: labels.title }),
|
|
3024
3510
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetDescription, { children: description })
|
|
3025
3511
|
] }),
|
|
3026
3512
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 sm:p-0 sm:mt-4 overflow-y-auto max-h-[70vh]", children: [
|
|
@@ -3031,38 +3517,38 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3031
3517
|
] }),
|
|
3032
3518
|
error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-12", children: [
|
|
3033
3519
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: "h-12 w-12 text-destructive mb-4" }),
|
|
3034
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mb-4", children:
|
|
3035
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Button, { onClick: () => mutate(), children:
|
|
3520
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mb-4", children: labels.failedToLoad }),
|
|
3521
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Button, { onClick: () => mutate(), children: labels.tryAgain })
|
|
3036
3522
|
] }),
|
|
3037
3523
|
withdrawal && !isLoading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
3038
3524
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("flex items-center gap-3 p-4 rounded-xl", config.bg), children: [
|
|
3039
3525
|
/* @__PURE__ */ jsxRuntime.jsx(StatusIcon, { className: lib.cn("h-6 w-6", config.color, config.animate && "animate-spin") }),
|
|
3040
3526
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
3041
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children:
|
|
3527
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children: statusLabel }),
|
|
3042
3528
|
withdrawal.admin_notes && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: withdrawal.admin_notes })
|
|
3043
3529
|
] })
|
|
3044
3530
|
] }),
|
|
3045
3531
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-muted rounded-xl p-4 space-y-3", children: [
|
|
3046
3532
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
3047
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3533
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.amount }),
|
|
3048
3534
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: amountUsd })
|
|
3049
3535
|
] }),
|
|
3050
3536
|
totalFeeUsd && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
3051
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3537
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.totalFees }),
|
|
3052
3538
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-destructive", children: [
|
|
3053
3539
|
"-",
|
|
3054
3540
|
totalFeeUsd
|
|
3055
3541
|
] })
|
|
3056
3542
|
] }),
|
|
3057
3543
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-2 border-t", children: [
|
|
3058
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3544
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.youReceive }),
|
|
3059
3545
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3060
3546
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.TokenIcon, { symbol: withdrawal.currency_code, size: 24 }),
|
|
3061
3547
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono font-bold text-lg", children: finalAmountUsd })
|
|
3062
3548
|
] })
|
|
3063
3549
|
] }),
|
|
3064
3550
|
withdrawal.crypto_amount && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
3065
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3551
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.cryptoAmount }),
|
|
3066
3552
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono", children: [
|
|
3067
3553
|
withdrawal.crypto_amount,
|
|
3068
3554
|
" ",
|
|
@@ -3071,14 +3557,14 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3071
3557
|
] })
|
|
3072
3558
|
] }),
|
|
3073
3559
|
withdrawal.wallet_address && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
3074
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children:
|
|
3560
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: labels.destinationWallet }),
|
|
3075
3561
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3076
3562
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 p-3 bg-muted rounded-xl font-mono text-sm break-all", children: withdrawal.wallet_address }),
|
|
3077
3563
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.CopyButton, { value: withdrawal.wallet_address, variant: "outline", className: "shrink-0" })
|
|
3078
3564
|
] })
|
|
3079
3565
|
] }),
|
|
3080
3566
|
withdrawal.transaction_hash && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
3081
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children:
|
|
3567
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: labels.transactionHash }),
|
|
3082
3568
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3083
3569
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 p-3 bg-muted rounded-xl font-mono text-sm break-all", children: withdrawal.transaction_hash }),
|
|
3084
3570
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.CopyButton, { value: withdrawal.transaction_hash, variant: "outline", className: "shrink-0" })
|
|
@@ -3092,7 +3578,7 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3092
3578
|
onClick: () => window.open(withdrawal.explorer_link, "_blank"),
|
|
3093
3579
|
children: [
|
|
3094
3580
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "h-4 w-4 mr-2" }),
|
|
3095
|
-
|
|
3581
|
+
labels.viewOnExplorer
|
|
3096
3582
|
]
|
|
3097
3583
|
}
|
|
3098
3584
|
),
|
|
@@ -3104,29 +3590,29 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3104
3590
|
onClick: handleCancel,
|
|
3105
3591
|
children: [
|
|
3106
3592
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Ban, { className: "h-4 w-4 mr-2" }),
|
|
3107
|
-
|
|
3593
|
+
labels.cancel
|
|
3108
3594
|
]
|
|
3109
3595
|
}
|
|
3110
3596
|
),
|
|
3111
3597
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-xs text-muted-foreground pt-4 border-t", children: [
|
|
3112
3598
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3113
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3599
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.withdrawalId }),
|
|
3114
3600
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: withdrawal.id })
|
|
3115
3601
|
] }),
|
|
3116
3602
|
withdrawal.internal_withdrawal_id && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3117
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3603
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.reference }),
|
|
3118
3604
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: withdrawal.internal_withdrawal_id })
|
|
3119
3605
|
] }),
|
|
3120
3606
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3121
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3607
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.created }),
|
|
3122
3608
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: createdAt })
|
|
3123
3609
|
] }),
|
|
3124
3610
|
completedAt && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3125
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3611
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.completed }),
|
|
3126
3612
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: completedAt })
|
|
3127
3613
|
] }),
|
|
3128
3614
|
withdrawal.currency_network && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3129
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3615
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.network }),
|
|
3130
3616
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: withdrawal.currency_network })
|
|
3131
3617
|
] })
|
|
3132
3618
|
] }),
|
|
@@ -3138,7 +3624,7 @@ function WithdrawalSheet({ withdrawalId, open, onOpenChange }) {
|
|
|
3138
3624
|
onClick: () => mutate(),
|
|
3139
3625
|
children: [
|
|
3140
3626
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-4 w-4 mr-2" }),
|
|
3141
|
-
|
|
3627
|
+
labels.refreshStatus
|
|
3142
3628
|
]
|
|
3143
3629
|
}
|
|
3144
3630
|
)
|
|
@@ -3150,38 +3636,70 @@ var statusConfig3 = {
|
|
|
3150
3636
|
pending: {
|
|
3151
3637
|
icon: lucideReact.Clock,
|
|
3152
3638
|
color: "text-yellow-500",
|
|
3153
|
-
bg: "bg-yellow-500/10"
|
|
3154
|
-
label: "Waiting for payment"
|
|
3639
|
+
bg: "bg-yellow-500/10"
|
|
3155
3640
|
},
|
|
3156
3641
|
confirming: {
|
|
3157
3642
|
icon: lucideReact.RefreshCw,
|
|
3158
3643
|
color: "text-blue-500",
|
|
3159
3644
|
bg: "bg-blue-500/10",
|
|
3160
|
-
label: "Confirming",
|
|
3161
3645
|
animate: true
|
|
3162
3646
|
},
|
|
3163
3647
|
completed: {
|
|
3164
3648
|
icon: lucideReact.CheckCircle2,
|
|
3165
3649
|
color: "text-green-500",
|
|
3166
|
-
bg: "bg-green-500/10"
|
|
3167
|
-
label: "Completed"
|
|
3650
|
+
bg: "bg-green-500/10"
|
|
3168
3651
|
},
|
|
3169
3652
|
failed: {
|
|
3170
3653
|
icon: lucideReact.XCircle,
|
|
3171
3654
|
color: "text-red-500",
|
|
3172
|
-
bg: "bg-red-500/10"
|
|
3173
|
-
label: "Failed"
|
|
3655
|
+
bg: "bg-red-500/10"
|
|
3174
3656
|
},
|
|
3175
3657
|
expired: {
|
|
3176
3658
|
icon: lucideReact.AlertCircle,
|
|
3177
3659
|
color: "text-muted-foreground",
|
|
3178
|
-
bg: "bg-muted"
|
|
3179
|
-
label: "Expired"
|
|
3660
|
+
bg: "bg-muted"
|
|
3180
3661
|
}
|
|
3181
3662
|
};
|
|
3182
3663
|
function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
3664
|
+
const baseT = i18n$1.useT();
|
|
3665
|
+
const pt = i18n.createTypedExtensionT(baseT, PAYMENTS_NAMESPACE);
|
|
3183
3666
|
const { getPaymentDetails } = useWallet();
|
|
3184
3667
|
const [timeLeft, setTimeLeft] = react.useState("");
|
|
3668
|
+
const labels = react.useMemo(() => ({
|
|
3669
|
+
title: pt("sheets.paymentTitle"),
|
|
3670
|
+
// Status labels
|
|
3671
|
+
waiting: pt("paymentStatus.waiting"),
|
|
3672
|
+
confirming: pt("paymentStatus.confirming"),
|
|
3673
|
+
completed: pt("paymentStatus.completed"),
|
|
3674
|
+
failed: pt("paymentStatus.failed"),
|
|
3675
|
+
expired: pt("paymentStatus.expired"),
|
|
3676
|
+
paymentExpired: pt("paymentStatus.paymentExpired"),
|
|
3677
|
+
// Descriptions
|
|
3678
|
+
sendCrypto: pt("paymentDescriptions.sendCrypto"),
|
|
3679
|
+
expiredDesc: pt("paymentDescriptions.expired"),
|
|
3680
|
+
completedDesc: pt("paymentDescriptions.completed"),
|
|
3681
|
+
failedDesc: pt("paymentDescriptions.failed"),
|
|
3682
|
+
confirmingDesc: pt("paymentDescriptions.confirming"),
|
|
3683
|
+
createNew: pt("paymentDescriptions.createNew"),
|
|
3684
|
+
// Form
|
|
3685
|
+
amountToSend: pt("form.amountToSend"),
|
|
3686
|
+
equivalent: pt("form.equivalent"),
|
|
3687
|
+
network: pt("form.network"),
|
|
3688
|
+
paymentAddress: pt("form.paymentAddress"),
|
|
3689
|
+
transactionHash: pt("form.transactionHash"),
|
|
3690
|
+
paymentId: pt("form.paymentId"),
|
|
3691
|
+
orderId: pt("form.orderId"),
|
|
3692
|
+
created: pt("form.created"),
|
|
3693
|
+
// Actions
|
|
3694
|
+
tryAgain: pt("actions.tryAgain"),
|
|
3695
|
+
refreshStatus: pt("actions.refreshStatus"),
|
|
3696
|
+
createNewPayment: pt("actions.createNewPayment"),
|
|
3697
|
+
openInPaymentProvider: pt("actions.openInPaymentProvider"),
|
|
3698
|
+
// Withdraw
|
|
3699
|
+
expiresIn: pt("withdraw.expiresIn"),
|
|
3700
|
+
// Messages
|
|
3701
|
+
failedToLoadPayment: pt("messages.failedToLoadPayment")
|
|
3702
|
+
}), [pt]);
|
|
3185
3703
|
const { data: payment, isLoading, error, mutate } = useSWR__default.default(
|
|
3186
3704
|
open && paymentId ? ["payment-details", paymentId] : null,
|
|
3187
3705
|
() => getPaymentDetails(paymentId),
|
|
@@ -3222,18 +3740,25 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3222
3740
|
const isFailed = status === "failed";
|
|
3223
3741
|
const isConfirming = status === "confirming";
|
|
3224
3742
|
const canPay2 = isPending && !isExpired2;
|
|
3743
|
+
const statusLabels = {
|
|
3744
|
+
pending: labels.waiting,
|
|
3745
|
+
confirming: labels.confirming,
|
|
3746
|
+
completed: labels.completed,
|
|
3747
|
+
failed: labels.failed,
|
|
3748
|
+
expired: labels.expired
|
|
3749
|
+
};
|
|
3225
3750
|
let description2 = "";
|
|
3226
|
-
if (canPay2) description2 =
|
|
3227
|
-
else if (isExpired2) description2 =
|
|
3228
|
-
else if (isCompleted) description2 =
|
|
3229
|
-
else if (isFailed) description2 =
|
|
3230
|
-
else if (isConfirming) description2 =
|
|
3751
|
+
if (canPay2) description2 = labels.sendCrypto;
|
|
3752
|
+
else if (isExpired2) description2 = labels.expiredDesc;
|
|
3753
|
+
else if (isCompleted) description2 = labels.completedDesc;
|
|
3754
|
+
else if (isFailed) description2 = labels.failedDesc;
|
|
3755
|
+
else if (isConfirming) description2 = labels.confirmingDesc;
|
|
3231
3756
|
const statusBadge2 = {
|
|
3232
3757
|
bg: isExpired2 ? "bg-muted" : config2.bg,
|
|
3233
3758
|
iconColor: isExpired2 ? "text-muted-foreground" : config2.color,
|
|
3234
3759
|
iconAnimate: config2.animate,
|
|
3235
|
-
label: isExpired2 ?
|
|
3236
|
-
subtitle: canPay2 && timeLeft ?
|
|
3760
|
+
label: isExpired2 ? labels.paymentExpired : statusLabels[status],
|
|
3761
|
+
subtitle: canPay2 && timeLeft ? `${labels.expiresIn} ${timeLeft}` : isExpired2 ? labels.createNew : null
|
|
3237
3762
|
};
|
|
3238
3763
|
const qrCodeUrl2 = payment?.pay_address && canPay2 ? `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(payment.pay_address)}` : null;
|
|
3239
3764
|
const amountUsd2 = payment?.amount_usd ? `$${parseFloat(payment.amount_usd).toFixed(2)} USD` : "";
|
|
@@ -3253,12 +3778,12 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3253
3778
|
amountUsd: amountUsd2,
|
|
3254
3779
|
createdAt: createdAt2
|
|
3255
3780
|
};
|
|
3256
|
-
}, [payment, timeLeft]);
|
|
3781
|
+
}, [payment, timeLeft, labels]);
|
|
3257
3782
|
const { config, canPay, isExpired, description, statusBadge, qrCodeUrl, amountUsd, createdAt } = displayData;
|
|
3258
3783
|
const StatusIcon = config.icon;
|
|
3259
3784
|
return /* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheet, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetContent, { className: "sm:max-w-lg", children: [
|
|
3260
3785
|
/* @__PURE__ */ jsxRuntime.jsxs(uiCore.ResponsiveSheetHeader, { children: [
|
|
3261
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children:
|
|
3786
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetTitle, { children: labels.title }),
|
|
3262
3787
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.ResponsiveSheetDescription, { children: description })
|
|
3263
3788
|
] }),
|
|
3264
3789
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 sm:p-0 sm:mt-4 overflow-y-auto max-h-[70vh]", children: [
|
|
@@ -3269,8 +3794,8 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3269
3794
|
] }),
|
|
3270
3795
|
error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-12", children: [
|
|
3271
3796
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { className: "h-12 w-12 text-destructive mb-4" }),
|
|
3272
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mb-4", children:
|
|
3273
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Button, { onClick: () => mutate(), children:
|
|
3797
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mb-4", children: labels.failedToLoadPayment }),
|
|
3798
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiCore.Button, { onClick: () => mutate(), children: labels.tryAgain })
|
|
3274
3799
|
] }),
|
|
3275
3800
|
payment && !isLoading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
3276
3801
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("flex items-center gap-3 p-4 rounded-xl", statusBadge.bg), children: [
|
|
@@ -3282,7 +3807,7 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3282
3807
|
] }),
|
|
3283
3808
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-muted rounded-xl p-4 space-y-3", children: [
|
|
3284
3809
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
3285
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3810
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.amountToSend }),
|
|
3286
3811
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3287
3812
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.TokenIcon, { symbol: payment.currency_code, size: 24 }),
|
|
3288
3813
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono font-bold text-lg", children: [
|
|
@@ -3293,17 +3818,17 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3293
3818
|
] })
|
|
3294
3819
|
] }),
|
|
3295
3820
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
3296
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3821
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.equivalent }),
|
|
3297
3822
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: amountUsd })
|
|
3298
3823
|
] }),
|
|
3299
3824
|
payment.currency_network && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm pt-2 border-t", children: [
|
|
3300
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children:
|
|
3825
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: labels.network }),
|
|
3301
3826
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: payment.currency_network })
|
|
3302
3827
|
] })
|
|
3303
3828
|
] }),
|
|
3304
3829
|
qrCodeUrl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center p-6 bg-white rounded-xl", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: qrCodeUrl, alt: "Payment QR Code", className: "w-48 h-48" }) }),
|
|
3305
3830
|
payment.pay_address && canPay && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
3306
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children:
|
|
3831
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: labels.paymentAddress }),
|
|
3307
3832
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3308
3833
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 p-3 bg-muted rounded-xl font-mono text-sm break-all", children: payment.pay_address }),
|
|
3309
3834
|
/* @__PURE__ */ jsxRuntime.jsx(uiCore.CopyButton, { value: payment.pay_address, variant: "outline", className: "shrink-0" })
|
|
@@ -3318,11 +3843,11 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3318
3843
|
onOpenChange(false);
|
|
3319
3844
|
onCreateNew();
|
|
3320
3845
|
},
|
|
3321
|
-
children:
|
|
3846
|
+
children: labels.createNewPayment
|
|
3322
3847
|
}
|
|
3323
3848
|
),
|
|
3324
3849
|
payment.transaction_hash && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
3325
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children:
|
|
3850
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium", children: labels.transactionHash }),
|
|
3326
3851
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-3 bg-muted rounded-xl font-mono text-sm break-all", children: payment.transaction_hash })
|
|
3327
3852
|
] }),
|
|
3328
3853
|
payment.payment_url && canPay && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -3333,21 +3858,21 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3333
3858
|
onClick: () => window.open(payment.payment_url, "_blank"),
|
|
3334
3859
|
children: [
|
|
3335
3860
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "h-4 w-4 mr-2" }),
|
|
3336
|
-
|
|
3861
|
+
labels.openInPaymentProvider
|
|
3337
3862
|
]
|
|
3338
3863
|
}
|
|
3339
3864
|
),
|
|
3340
3865
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-xs text-muted-foreground pt-4 border-t", children: [
|
|
3341
3866
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3342
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3867
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.paymentId }),
|
|
3343
3868
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: payment.id })
|
|
3344
3869
|
] }),
|
|
3345
3870
|
payment.internal_payment_id && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3346
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3871
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.orderId }),
|
|
3347
3872
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: payment.internal_payment_id })
|
|
3348
3873
|
] }),
|
|
3349
3874
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
3350
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children:
|
|
3875
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.created }),
|
|
3351
3876
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: createdAt })
|
|
3352
3877
|
] })
|
|
3353
3878
|
] }),
|
|
@@ -3359,7 +3884,7 @@ function PaymentSheet({ paymentId, open, onOpenChange, onCreateNew }) {
|
|
|
3359
3884
|
onClick: () => mutate(),
|
|
3360
3885
|
children: [
|
|
3361
3886
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-4 w-4 mr-2" }),
|
|
3362
|
-
|
|
3887
|
+
labels.refreshStatus
|
|
3363
3888
|
]
|
|
3364
3889
|
}
|
|
3365
3890
|
)
|
|
@@ -3445,7 +3970,7 @@ function WalletPage() {
|
|
|
3445
3970
|
// package.json
|
|
3446
3971
|
var package_default = {
|
|
3447
3972
|
name: "@djangocfg/ext-payments",
|
|
3448
|
-
version: "1.0.
|
|
3973
|
+
version: "1.0.22",
|
|
3449
3974
|
description: "Payments system extension for DjangoCFG",
|
|
3450
3975
|
keywords: [
|
|
3451
3976
|
"django",
|
|
@@ -3496,6 +4021,11 @@ var package_default = {
|
|
|
3496
4021
|
types: "./dist/api/hooks.d.ts",
|
|
3497
4022
|
import: "./dist/api/hooks.js",
|
|
3498
4023
|
require: "./dist/api/hooks.cjs"
|
|
4024
|
+
},
|
|
4025
|
+
"./i18n": {
|
|
4026
|
+
types: "./dist/i18n.d.ts",
|
|
4027
|
+
import: "./dist/i18n.js",
|
|
4028
|
+
require: "./dist/i18n.cjs"
|
|
3499
4029
|
}
|
|
3500
4030
|
},
|
|
3501
4031
|
files: [
|
|
@@ -3511,6 +4041,7 @@ var package_default = {
|
|
|
3511
4041
|
peerDependencies: {
|
|
3512
4042
|
"@djangocfg/api": "workspace:*",
|
|
3513
4043
|
"@djangocfg/ext-base": "workspace:*",
|
|
4044
|
+
"@djangocfg/i18n": "workspace:*",
|
|
3514
4045
|
"@djangocfg/ui-core": "workspace:*",
|
|
3515
4046
|
"@djangocfg/ui-nextjs": "workspace:*",
|
|
3516
4047
|
consola: "^3.4.2",
|
|
@@ -3527,6 +4058,7 @@ var package_default = {
|
|
|
3527
4058
|
devDependencies: {
|
|
3528
4059
|
"@djangocfg/api": "workspace:*",
|
|
3529
4060
|
"@djangocfg/ext-base": "workspace:*",
|
|
4061
|
+
"@djangocfg/i18n": "workspace:*",
|
|
3530
4062
|
"@djangocfg/typescript-config": "workspace:*",
|
|
3531
4063
|
"@djangocfg/ui-nextjs": "workspace:*",
|
|
3532
4064
|
"@types/node": "^24.7.2",
|