@unifold/connect-react 0.1.14 → 0.1.16
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/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +172 -81
- package/dist/index.mjs +170 -81
- package/dist/styles.css +2 -1
- package/package.json +4 -4
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
export { Button, ButtonProps } from '@unifold/ui-react';
|
|
4
|
-
export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
|
|
3
|
+
export { AllowedCountryResult, Button, ButtonProps, useAllowedCountry } from '@unifold/ui-react';
|
|
4
|
+
export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, IpAddressResponse, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
|
|
5
5
|
|
|
6
6
|
interface UnifoldConnectProviderConfig {
|
|
7
7
|
publishableKey: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
export { Button, ButtonProps } from '@unifold/ui-react';
|
|
4
|
-
export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
|
|
3
|
+
export { AllowedCountryResult, Button, ButtonProps, useAllowedCountry } from '@unifold/ui-react';
|
|
4
|
+
export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, IpAddressResponse, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
|
|
5
5
|
|
|
6
6
|
interface UnifoldConnectProviderConfig {
|
|
7
7
|
publishableKey: string;
|
package/dist/index.js
CHANGED
|
@@ -1163,6 +1163,7 @@ __export(index_exports, {
|
|
|
1163
1163
|
getFiatCurrencies: () => getFiatCurrencies,
|
|
1164
1164
|
getIconUrl: () => getIconUrl,
|
|
1165
1165
|
getIconUrlWithCdn: () => getIconUrlWithCdn,
|
|
1166
|
+
getIpAddress: () => getIpAddress,
|
|
1166
1167
|
getMeldQuotes: () => getMeldQuotes,
|
|
1167
1168
|
getPreferredIconUrl: () => getPreferredIconUrl,
|
|
1168
1169
|
getProjectConfig: () => getProjectConfig,
|
|
@@ -1172,6 +1173,7 @@ __export(index_exports, {
|
|
|
1172
1173
|
i18n: () => i18n,
|
|
1173
1174
|
queryExecutions: () => queryExecutions,
|
|
1174
1175
|
setApiConfig: () => setApiConfig,
|
|
1176
|
+
useAllowedCountry: () => useAllowedCountry,
|
|
1175
1177
|
useUnifold: () => useUnifold2,
|
|
1176
1178
|
useUserIp: () => useUserIp
|
|
1177
1179
|
});
|
|
@@ -1380,6 +1382,21 @@ var Info = createLucideIcon("Info", [
|
|
|
1380
1382
|
["path", { d: "M12 8h.01", key: "e9boi3" }]
|
|
1381
1383
|
]);
|
|
1382
1384
|
|
|
1385
|
+
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/map-pin-off.js
|
|
1386
|
+
var MapPinOff = createLucideIcon("MapPinOff", [
|
|
1387
|
+
["path", { d: "M12.75 7.09a3 3 0 0 1 2.16 2.16", key: "1d4wjd" }],
|
|
1388
|
+
[
|
|
1389
|
+
"path",
|
|
1390
|
+
{
|
|
1391
|
+
d: "M17.072 17.072c-1.634 2.17-3.527 3.912-4.471 4.727a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 1.432-4.568",
|
|
1392
|
+
key: "12yil7"
|
|
1393
|
+
}
|
|
1394
|
+
],
|
|
1395
|
+
["path", { d: "m2 2 20 20", key: "1ooewy" }],
|
|
1396
|
+
["path", { d: "M8.475 2.818A8 8 0 0 1 20 10c0 1.183-.31 2.377-.81 3.533", key: "lhrkcz" }],
|
|
1397
|
+
["path", { d: "M9.13 9.13a3 3 0 0 0 3.74 3.74", key: "13wojd" }]
|
|
1398
|
+
]);
|
|
1399
|
+
|
|
1383
1400
|
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js
|
|
1384
1401
|
var Search = createLucideIcon("Search", [
|
|
1385
1402
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }],
|
|
@@ -1398,6 +1415,19 @@ var ShieldCheck = createLucideIcon("ShieldCheck", [
|
|
|
1398
1415
|
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
1399
1416
|
]);
|
|
1400
1417
|
|
|
1418
|
+
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/triangle-alert.js
|
|
1419
|
+
var TriangleAlert = createLucideIcon("TriangleAlert", [
|
|
1420
|
+
[
|
|
1421
|
+
"path",
|
|
1422
|
+
{
|
|
1423
|
+
d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
|
|
1424
|
+
key: "wmoenq"
|
|
1425
|
+
}
|
|
1426
|
+
],
|
|
1427
|
+
["path", { d: "M12 9v4", key: "juzpu7" }],
|
|
1428
|
+
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
1429
|
+
]);
|
|
1430
|
+
|
|
1401
1431
|
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js
|
|
1402
1432
|
var X = createLucideIcon("X", [
|
|
1403
1433
|
["path", { d: "M18 6 6 18", key: "1bl5f8" }],
|
|
@@ -6232,7 +6262,9 @@ function getChainName(chains, chainType, chainId) {
|
|
|
6232
6262
|
async function getProjectConfig(publishableKey) {
|
|
6233
6263
|
const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
|
|
6234
6264
|
validatePublishableKey(pk);
|
|
6235
|
-
const
|
|
6265
|
+
const url = `${API_BASE_URL}/v1/public/projects/config`;
|
|
6266
|
+
console.log("[getProjectConfig] Fetching from:", url, "with key:", pk);
|
|
6267
|
+
const response = await fetch(url, {
|
|
6236
6268
|
method: "GET",
|
|
6237
6269
|
headers: {
|
|
6238
6270
|
accept: "application/json",
|
|
@@ -6242,19 +6274,22 @@ async function getProjectConfig(publishableKey) {
|
|
|
6242
6274
|
if (!response.ok) {
|
|
6243
6275
|
throw new Error(`Failed to fetch project config: ${response.statusText}`);
|
|
6244
6276
|
}
|
|
6245
|
-
|
|
6277
|
+
const data = await response.json();
|
|
6278
|
+
return data;
|
|
6246
6279
|
}
|
|
6247
|
-
async function
|
|
6248
|
-
const
|
|
6249
|
-
|
|
6280
|
+
async function getIpAddress() {
|
|
6281
|
+
const response = await fetch(`${API_BASE_URL}/v1/public/ip_address`, {
|
|
6282
|
+
method: "GET",
|
|
6283
|
+
headers: {
|
|
6284
|
+
accept: "application/json"
|
|
6285
|
+
}
|
|
6286
|
+
});
|
|
6250
6287
|
if (!response.ok) {
|
|
6251
|
-
throw new Error(
|
|
6288
|
+
throw new Error(
|
|
6289
|
+
`Failed to fetch IP address information: ${response.statusText}`
|
|
6290
|
+
);
|
|
6252
6291
|
}
|
|
6253
|
-
|
|
6254
|
-
return {
|
|
6255
|
-
alpha2: data.country_code.toLowerCase(),
|
|
6256
|
-
state: data.region_code?.toLowerCase()
|
|
6257
|
-
};
|
|
6292
|
+
return response.json();
|
|
6258
6293
|
}
|
|
6259
6294
|
function useUserIp() {
|
|
6260
6295
|
const {
|
|
@@ -6262,22 +6297,21 @@ function useUserIp() {
|
|
|
6262
6297
|
isLoading,
|
|
6263
6298
|
error
|
|
6264
6299
|
} = (0, import_react_query2.useQuery)({
|
|
6265
|
-
queryKey: ["
|
|
6300
|
+
queryKey: ["unifold", "userIpInfo"],
|
|
6266
6301
|
queryFn: async () => {
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
|
|
6271
|
-
|
|
6272
|
-
|
|
6273
|
-
|
|
6274
|
-
}
|
|
6302
|
+
const data = await getIpAddress();
|
|
6303
|
+
return {
|
|
6304
|
+
alpha2: data.alpha2.toLowerCase(),
|
|
6305
|
+
alpha3: data.alpha3?.toLowerCase(),
|
|
6306
|
+
country: data.country,
|
|
6307
|
+
state: data.state?.toLowerCase() ?? null,
|
|
6308
|
+
ipAddress: data.ip_address
|
|
6309
|
+
};
|
|
6275
6310
|
},
|
|
6276
6311
|
// Cache configuration to reduce API calls
|
|
6277
6312
|
refetchOnMount: false,
|
|
6278
6313
|
refetchOnReconnect: true,
|
|
6279
6314
|
refetchOnWindowFocus: false,
|
|
6280
|
-
// Optional: Increase cache duration to 1 hour for even better rate limit protection
|
|
6281
6315
|
staleTime: 1e3 * 60 * 60,
|
|
6282
6316
|
// 1 hour - data considered fresh for 1 hour
|
|
6283
6317
|
gcTime: 1e3 * 60 * 60 * 24
|
|
@@ -10347,6 +10381,7 @@ var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
|
10347
10381
|
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
10348
10382
|
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
10349
10383
|
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
10384
|
+
var import_react_query4 = require("@tanstack/react-query");
|
|
10350
10385
|
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
10351
10386
|
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
10352
10387
|
var React52 = __toESM(require("react"), 1);
|
|
@@ -10820,7 +10855,7 @@ function DepositExecutionItem({
|
|
|
10820
10855
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h3", { className: "uf-text-foreground uf-font-medium uf-text-sm uf-leading-tight", children: isPending ? "Deposit processing" : "Deposit completed" }),
|
|
10821
10856
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "uf-text-muted-foreground uf-text-xs uf-leading-tight", children: formatDateTime(execution.created_at || (/* @__PURE__ */ new Date()).toISOString()) })
|
|
10822
10857
|
] }),
|
|
10823
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "uf-text-foreground uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(execution.
|
|
10858
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "uf-text-foreground uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(execution.source_amount_usd || "0") }),
|
|
10824
10859
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ChevronRight, { className: "uf-w-4 uf-h-4 uf-text-muted-foreground uf-flex-shrink-0" })
|
|
10825
10860
|
]
|
|
10826
10861
|
}
|
|
@@ -11144,7 +11179,7 @@ function DepositSuccessToast({
|
|
|
11144
11179
|
orderSubmittedAt,
|
|
11145
11180
|
status,
|
|
11146
11181
|
tokenIconUrl,
|
|
11147
|
-
|
|
11182
|
+
sourceAmountUsd = "0",
|
|
11148
11183
|
onClose,
|
|
11149
11184
|
execution
|
|
11150
11185
|
}) {
|
|
@@ -11267,7 +11302,7 @@ function DepositSuccessToast({
|
|
|
11267
11302
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h3", { className: "uf-text-black dark:uf-text-white uf-font-medium uf-text-sm", children: isPending ? "Deposit processing" : "Deposit completed" }),
|
|
11268
11303
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "uf-text-zinc-600 dark:uf-text-zinc-400 uf-text-xs", children: formatDateTime(orderSubmittedAt) })
|
|
11269
11304
|
] }),
|
|
11270
|
-
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "uf-text-black dark:uf-text-white uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(
|
|
11305
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "uf-text-black dark:uf-text-white uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(sourceAmountUsd) }),
|
|
11271
11306
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
11272
11307
|
"button",
|
|
11273
11308
|
{
|
|
@@ -12089,7 +12124,7 @@ function TransferCryptoBase({
|
|
|
12089
12124
|
}
|
|
12090
12125
|
)
|
|
12091
12126
|
] }),
|
|
12092
|
-
depositExecutions.length === 1 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "uf-
|
|
12127
|
+
depositExecutions.length === 1 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "uf-absolute uf-bottom-4 uf-left-0 uf-right-0 uf-flex uf-justify-center uf-px-4 uf-z-[100]", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "uf-w-full uf-max-w-[360px]", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
12093
12128
|
DepositSuccessToast,
|
|
12094
12129
|
{
|
|
12095
12130
|
depositTx: depositExecutions[0].transaction_hash,
|
|
@@ -12098,12 +12133,12 @@ function TransferCryptoBase({
|
|
|
12098
12133
|
explorerUrl: depositExecutions[0].explorer_url,
|
|
12099
12134
|
status: depositExecutions[0].status,
|
|
12100
12135
|
tokenIconUrl: depositExecutions[0].destination_token_metadata?.icon_url,
|
|
12101
|
-
|
|
12136
|
+
sourceAmountUsd: depositExecutions[0].source_amount_usd || "0",
|
|
12102
12137
|
onClose: () => setDepositExecutions([]),
|
|
12103
12138
|
execution: depositExecutions[0]
|
|
12104
12139
|
},
|
|
12105
12140
|
depositExecutions[0].id
|
|
12106
|
-
) }),
|
|
12141
|
+
) }) }),
|
|
12107
12142
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
12108
12143
|
DepositsModal,
|
|
12109
12144
|
{
|
|
@@ -12261,40 +12296,28 @@ function CurrencyModal({
|
|
|
12261
12296
|
] }) })
|
|
12262
12297
|
] }) });
|
|
12263
12298
|
}
|
|
12264
|
-
async function getIpViaIpApi2() {
|
|
12265
|
-
const url = "https://ipapi.co/json";
|
|
12266
|
-
const response = await fetch(url);
|
|
12267
|
-
if (!response.ok) {
|
|
12268
|
-
throw new Error(`ipapi.co failed: ${response.statusText}`);
|
|
12269
|
-
}
|
|
12270
|
-
const data = await response.json();
|
|
12271
|
-
return {
|
|
12272
|
-
alpha2: data.country_code.toLowerCase(),
|
|
12273
|
-
state: data.region_code?.toLowerCase()
|
|
12274
|
-
};
|
|
12275
|
-
}
|
|
12276
12299
|
function useUserIp2() {
|
|
12277
12300
|
const {
|
|
12278
12301
|
data: userIpInfo,
|
|
12279
12302
|
isLoading,
|
|
12280
12303
|
error
|
|
12281
12304
|
} = (0, import_react_query3.useQuery)({
|
|
12282
|
-
queryKey: ["
|
|
12305
|
+
queryKey: ["unifold", "userIpInfo"],
|
|
12283
12306
|
queryFn: async () => {
|
|
12284
|
-
|
|
12285
|
-
|
|
12286
|
-
|
|
12287
|
-
|
|
12288
|
-
|
|
12289
|
-
|
|
12290
|
-
|
|
12291
|
-
|
|
12307
|
+
const data = await getIpAddress();
|
|
12308
|
+
console.log("[useUserIp] IP detected:", data);
|
|
12309
|
+
return {
|
|
12310
|
+
alpha2: data.alpha2.toLowerCase(),
|
|
12311
|
+
alpha3: data.alpha3?.toLowerCase(),
|
|
12312
|
+
country: data.country,
|
|
12313
|
+
state: data.state?.toLowerCase() ?? null,
|
|
12314
|
+
ipAddress: data.ip_address
|
|
12315
|
+
};
|
|
12292
12316
|
},
|
|
12293
12317
|
// Cache configuration to reduce API calls
|
|
12294
12318
|
refetchOnMount: false,
|
|
12295
12319
|
refetchOnReconnect: true,
|
|
12296
12320
|
refetchOnWindowFocus: false,
|
|
12297
|
-
// Optional: Increase cache duration to 1 hour for even better rate limit protection
|
|
12298
12321
|
staleTime: 1e3 * 60 * 60,
|
|
12299
12322
|
// 1 hour - data considered fresh for 1 hour
|
|
12300
12323
|
gcTime: 1e3 * 60 * 60 * 24
|
|
@@ -13029,6 +13052,54 @@ function DepositTrackerButton({
|
|
|
13029
13052
|
}
|
|
13030
13053
|
);
|
|
13031
13054
|
}
|
|
13055
|
+
function useAllowedCountry(publishableKey) {
|
|
13056
|
+
const {
|
|
13057
|
+
data: ipData,
|
|
13058
|
+
isLoading: isIpLoading,
|
|
13059
|
+
error: ipError
|
|
13060
|
+
} = (0, import_react_query4.useQuery)({
|
|
13061
|
+
queryKey: ["unifold", "ipAddress"],
|
|
13062
|
+
queryFn: () => getIpAddress(),
|
|
13063
|
+
refetchOnMount: false,
|
|
13064
|
+
refetchOnReconnect: true,
|
|
13065
|
+
refetchOnWindowFocus: false,
|
|
13066
|
+
staleTime: 1e3 * 60 * 60,
|
|
13067
|
+
// 1 hour
|
|
13068
|
+
gcTime: 1e3 * 60 * 60 * 24
|
|
13069
|
+
// 24 hours
|
|
13070
|
+
});
|
|
13071
|
+
const {
|
|
13072
|
+
data: configData,
|
|
13073
|
+
isLoading: isConfigLoading,
|
|
13074
|
+
error: configError
|
|
13075
|
+
} = (0, import_react_query4.useQuery)({
|
|
13076
|
+
queryKey: ["unifold", "projectConfig", publishableKey],
|
|
13077
|
+
queryFn: () => getProjectConfig(publishableKey),
|
|
13078
|
+
refetchOnMount: false,
|
|
13079
|
+
refetchOnReconnect: true,
|
|
13080
|
+
refetchOnWindowFocus: false,
|
|
13081
|
+
staleTime: 1e3 * 60 * 5,
|
|
13082
|
+
// 5 minutes
|
|
13083
|
+
gcTime: 1e3 * 60 * 60
|
|
13084
|
+
// 1 hour
|
|
13085
|
+
});
|
|
13086
|
+
const isLoading = isIpLoading || isConfigLoading;
|
|
13087
|
+
const error = ipError || configError || null;
|
|
13088
|
+
let isAllowed = null;
|
|
13089
|
+
if (ipData && configData) {
|
|
13090
|
+
const blockedCodes = configData.blocked_country_codes || [];
|
|
13091
|
+
const userCountryUpper = ipData.alpha2.toUpperCase();
|
|
13092
|
+
isAllowed = !blockedCodes.some((code) => code.toUpperCase() === userCountryUpper);
|
|
13093
|
+
}
|
|
13094
|
+
return {
|
|
13095
|
+
isAllowed,
|
|
13096
|
+
// Return lowercase for consistency with useUserIp hook
|
|
13097
|
+
alpha2: ipData?.alpha2?.toLowerCase() ?? null,
|
|
13098
|
+
country: ipData?.country ?? null,
|
|
13099
|
+
isLoading,
|
|
13100
|
+
error
|
|
13101
|
+
};
|
|
13102
|
+
}
|
|
13032
13103
|
function SkeletonButton({ variant = "default" }) {
|
|
13033
13104
|
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-w-full uf-bg-secondary uf-rounded-xl uf-p-3 uf-flex uf-items-center uf-justify-between uf-animate-pulse", children: [
|
|
13034
13105
|
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-flex uf-items-center uf-gap-3", children: [
|
|
@@ -13096,6 +13167,7 @@ function DepositModal({
|
|
|
13096
13167
|
getProjectConfig(publishableKey).then(setProjectConfig).catch(console.error);
|
|
13097
13168
|
}
|
|
13098
13169
|
}, [open, publishableKey, projectConfig]);
|
|
13170
|
+
const { isAllowed, isLoading: isCountryLoading, error: countryError } = useAllowedCountry(publishableKey);
|
|
13099
13171
|
(0, import_react8.useEffect)(() => {
|
|
13100
13172
|
if (!open || wallets.length > 0) return;
|
|
13101
13173
|
let retryTimeout = null;
|
|
@@ -13173,39 +13245,56 @@ function DepositModal({
|
|
|
13173
13245
|
onClose: handleClose
|
|
13174
13246
|
}
|
|
13175
13247
|
),
|
|
13176
|
-
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-pb-4 uf-space-y-3", children: !projectConfig ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
|
|
13248
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-pb-4 uf-space-y-3", children: isCountryLoading || !projectConfig ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
|
|
13177
13249
|
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SkeletonButton, { variant: "with-icons" }),
|
|
13178
13250
|
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SkeletonButton, { variant: "with-icons" }),
|
|
13179
13251
|
!hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SkeletonButton, {})
|
|
13180
|
-
] }) :
|
|
13181
|
-
/*
|
|
13182
|
-
|
|
13183
|
-
{
|
|
13184
|
-
|
|
13185
|
-
|
|
13186
|
-
|
|
13187
|
-
|
|
13188
|
-
|
|
13189
|
-
),
|
|
13190
|
-
|
|
13191
|
-
|
|
13192
|
-
{
|
|
13193
|
-
|
|
13194
|
-
|
|
13195
|
-
|
|
13196
|
-
|
|
13197
|
-
|
|
13198
|
-
|
|
13199
|
-
|
|
13200
|
-
|
|
13201
|
-
|
|
13202
|
-
|
|
13203
|
-
|
|
13204
|
-
|
|
13205
|
-
|
|
13206
|
-
|
|
13207
|
-
|
|
13208
|
-
|
|
13252
|
+
] }) : countryError ? (
|
|
13253
|
+
/* Error state - couldn't verify location */
|
|
13254
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
|
|
13255
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TriangleAlert, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
13256
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "Unable to Verify Location" }),
|
|
13257
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "We couldn't verify your location. Please check your connection and try again." })
|
|
13258
|
+
] })
|
|
13259
|
+
) : !isAllowed ? (
|
|
13260
|
+
/* Blocked country state (isAllowed is false or null without error) */
|
|
13261
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
|
|
13262
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MapPinOff, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
13263
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "No Tokens Available" }),
|
|
13264
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "There are no supported tokens available from your current location." })
|
|
13265
|
+
] })
|
|
13266
|
+
) : (
|
|
13267
|
+
/* Normal deposit options */
|
|
13268
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
|
|
13269
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
13270
|
+
TransferCryptoButton,
|
|
13271
|
+
{
|
|
13272
|
+
onClick: () => setView("transfer"),
|
|
13273
|
+
title: t3.transferCrypto.title,
|
|
13274
|
+
subtitle: t3.transferCrypto.subtitle,
|
|
13275
|
+
featuredTokens: projectConfig.transfer_crypto.networks
|
|
13276
|
+
}
|
|
13277
|
+
),
|
|
13278
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
13279
|
+
DepositWithCardButton,
|
|
13280
|
+
{
|
|
13281
|
+
onClick: () => setView("card"),
|
|
13282
|
+
title: t3.depositWithCard.title,
|
|
13283
|
+
subtitle: t3.depositWithCard.subtitle,
|
|
13284
|
+
paymentNetworks: projectConfig.payment_networks.networks
|
|
13285
|
+
}
|
|
13286
|
+
),
|
|
13287
|
+
!hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
13288
|
+
DepositTrackerButton,
|
|
13289
|
+
{
|
|
13290
|
+
onClick: () => setDepositsModalOpen(true),
|
|
13291
|
+
title: "Deposit Tracker",
|
|
13292
|
+
subtitle: "Track your deposit progress",
|
|
13293
|
+
badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
|
|
13294
|
+
}
|
|
13295
|
+
)
|
|
13296
|
+
] })
|
|
13297
|
+
) })
|
|
13209
13298
|
] }) : view === "transfer" ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
|
|
13210
13299
|
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
13211
13300
|
DepositHeader,
|
|
@@ -13348,7 +13437,6 @@ function UnifoldProvider2({
|
|
|
13348
13437
|
const depositPromiseRef = import_react16.default.useRef(null);
|
|
13349
13438
|
const closeTimeoutRef = import_react16.default.useRef(null);
|
|
13350
13439
|
const beginDeposit = (0, import_react16.useCallback)((config2) => {
|
|
13351
|
-
console.log("[UnifoldProvider] beginDeposit called with:", config2);
|
|
13352
13440
|
if (closeTimeoutRef.current) {
|
|
13353
13441
|
clearTimeout(closeTimeoutRef.current);
|
|
13354
13442
|
closeTimeoutRef.current = null;
|
|
@@ -13383,7 +13471,6 @@ function UnifoldProvider2({
|
|
|
13383
13471
|
}, 200);
|
|
13384
13472
|
}, []);
|
|
13385
13473
|
const handleDepositSuccess = (0, import_react16.useCallback)((data) => {
|
|
13386
|
-
console.log("[UnifoldProvider] Deposit success:", data);
|
|
13387
13474
|
if (depositConfig?.onSuccess) {
|
|
13388
13475
|
depositConfig.onSuccess(data);
|
|
13389
13476
|
}
|
|
@@ -13468,6 +13555,7 @@ function useUnifold2() {
|
|
|
13468
13555
|
getFiatCurrencies,
|
|
13469
13556
|
getIconUrl,
|
|
13470
13557
|
getIconUrlWithCdn,
|
|
13558
|
+
getIpAddress,
|
|
13471
13559
|
getMeldQuotes,
|
|
13472
13560
|
getPreferredIconUrl,
|
|
13473
13561
|
getProjectConfig,
|
|
@@ -13477,6 +13565,7 @@ function useUnifold2() {
|
|
|
13477
13565
|
i18n,
|
|
13478
13566
|
queryExecutions,
|
|
13479
13567
|
setApiConfig,
|
|
13568
|
+
useAllowedCountry,
|
|
13480
13569
|
useUnifold,
|
|
13481
13570
|
useUserIp
|
|
13482
13571
|
});
|
|
@@ -13497,8 +13586,10 @@ lucide-react/dist/esm/icons/dollar-sign.js:
|
|
|
13497
13586
|
lucide-react/dist/esm/icons/external-link.js:
|
|
13498
13587
|
lucide-react/dist/esm/icons/file-text.js:
|
|
13499
13588
|
lucide-react/dist/esm/icons/info.js:
|
|
13589
|
+
lucide-react/dist/esm/icons/map-pin-off.js:
|
|
13500
13590
|
lucide-react/dist/esm/icons/search.js:
|
|
13501
13591
|
lucide-react/dist/esm/icons/shield-check.js:
|
|
13592
|
+
lucide-react/dist/esm/icons/triangle-alert.js:
|
|
13502
13593
|
lucide-react/dist/esm/icons/x.js:
|
|
13503
13594
|
lucide-react/dist/esm/icons/zap.js:
|
|
13504
13595
|
lucide-react/dist/esm/lucide-react.js:
|
package/dist/index.mjs
CHANGED
|
@@ -1357,6 +1357,21 @@ var Info = createLucideIcon("Info", [
|
|
|
1357
1357
|
["path", { d: "M12 8h.01", key: "e9boi3" }]
|
|
1358
1358
|
]);
|
|
1359
1359
|
|
|
1360
|
+
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/map-pin-off.js
|
|
1361
|
+
var MapPinOff = createLucideIcon("MapPinOff", [
|
|
1362
|
+
["path", { d: "M12.75 7.09a3 3 0 0 1 2.16 2.16", key: "1d4wjd" }],
|
|
1363
|
+
[
|
|
1364
|
+
"path",
|
|
1365
|
+
{
|
|
1366
|
+
d: "M17.072 17.072c-1.634 2.17-3.527 3.912-4.471 4.727a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 1.432-4.568",
|
|
1367
|
+
key: "12yil7"
|
|
1368
|
+
}
|
|
1369
|
+
],
|
|
1370
|
+
["path", { d: "m2 2 20 20", key: "1ooewy" }],
|
|
1371
|
+
["path", { d: "M8.475 2.818A8 8 0 0 1 20 10c0 1.183-.31 2.377-.81 3.533", key: "lhrkcz" }],
|
|
1372
|
+
["path", { d: "M9.13 9.13a3 3 0 0 0 3.74 3.74", key: "13wojd" }]
|
|
1373
|
+
]);
|
|
1374
|
+
|
|
1360
1375
|
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js
|
|
1361
1376
|
var Search = createLucideIcon("Search", [
|
|
1362
1377
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }],
|
|
@@ -1375,6 +1390,19 @@ var ShieldCheck = createLucideIcon("ShieldCheck", [
|
|
|
1375
1390
|
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
1376
1391
|
]);
|
|
1377
1392
|
|
|
1393
|
+
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/triangle-alert.js
|
|
1394
|
+
var TriangleAlert = createLucideIcon("TriangleAlert", [
|
|
1395
|
+
[
|
|
1396
|
+
"path",
|
|
1397
|
+
{
|
|
1398
|
+
d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
|
|
1399
|
+
key: "wmoenq"
|
|
1400
|
+
}
|
|
1401
|
+
],
|
|
1402
|
+
["path", { d: "M12 9v4", key: "juzpu7" }],
|
|
1403
|
+
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
1404
|
+
]);
|
|
1405
|
+
|
|
1378
1406
|
// ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js
|
|
1379
1407
|
var X = createLucideIcon("X", [
|
|
1380
1408
|
["path", { d: "M18 6 6 18", key: "1bl5f8" }],
|
|
@@ -6209,7 +6237,9 @@ function getChainName(chains, chainType, chainId) {
|
|
|
6209
6237
|
async function getProjectConfig(publishableKey) {
|
|
6210
6238
|
const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
|
|
6211
6239
|
validatePublishableKey(pk);
|
|
6212
|
-
const
|
|
6240
|
+
const url = `${API_BASE_URL}/v1/public/projects/config`;
|
|
6241
|
+
console.log("[getProjectConfig] Fetching from:", url, "with key:", pk);
|
|
6242
|
+
const response = await fetch(url, {
|
|
6213
6243
|
method: "GET",
|
|
6214
6244
|
headers: {
|
|
6215
6245
|
accept: "application/json",
|
|
@@ -6219,19 +6249,22 @@ async function getProjectConfig(publishableKey) {
|
|
|
6219
6249
|
if (!response.ok) {
|
|
6220
6250
|
throw new Error(`Failed to fetch project config: ${response.statusText}`);
|
|
6221
6251
|
}
|
|
6222
|
-
|
|
6252
|
+
const data = await response.json();
|
|
6253
|
+
return data;
|
|
6223
6254
|
}
|
|
6224
|
-
async function
|
|
6225
|
-
const
|
|
6226
|
-
|
|
6255
|
+
async function getIpAddress() {
|
|
6256
|
+
const response = await fetch(`${API_BASE_URL}/v1/public/ip_address`, {
|
|
6257
|
+
method: "GET",
|
|
6258
|
+
headers: {
|
|
6259
|
+
accept: "application/json"
|
|
6260
|
+
}
|
|
6261
|
+
});
|
|
6227
6262
|
if (!response.ok) {
|
|
6228
|
-
throw new Error(
|
|
6263
|
+
throw new Error(
|
|
6264
|
+
`Failed to fetch IP address information: ${response.statusText}`
|
|
6265
|
+
);
|
|
6229
6266
|
}
|
|
6230
|
-
|
|
6231
|
-
return {
|
|
6232
|
-
alpha2: data.country_code.toLowerCase(),
|
|
6233
|
-
state: data.region_code?.toLowerCase()
|
|
6234
|
-
};
|
|
6267
|
+
return response.json();
|
|
6235
6268
|
}
|
|
6236
6269
|
function useUserIp() {
|
|
6237
6270
|
const {
|
|
@@ -6239,22 +6272,21 @@ function useUserIp() {
|
|
|
6239
6272
|
isLoading,
|
|
6240
6273
|
error
|
|
6241
6274
|
} = useQuery({
|
|
6242
|
-
queryKey: ["
|
|
6275
|
+
queryKey: ["unifold", "userIpInfo"],
|
|
6243
6276
|
queryFn: async () => {
|
|
6244
|
-
|
|
6245
|
-
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
}
|
|
6277
|
+
const data = await getIpAddress();
|
|
6278
|
+
return {
|
|
6279
|
+
alpha2: data.alpha2.toLowerCase(),
|
|
6280
|
+
alpha3: data.alpha3?.toLowerCase(),
|
|
6281
|
+
country: data.country,
|
|
6282
|
+
state: data.state?.toLowerCase() ?? null,
|
|
6283
|
+
ipAddress: data.ip_address
|
|
6284
|
+
};
|
|
6252
6285
|
},
|
|
6253
6286
|
// Cache configuration to reduce API calls
|
|
6254
6287
|
refetchOnMount: false,
|
|
6255
6288
|
refetchOnReconnect: true,
|
|
6256
6289
|
refetchOnWindowFocus: false,
|
|
6257
|
-
// Optional: Increase cache duration to 1 hour for even better rate limit protection
|
|
6258
6290
|
staleTime: 1e3 * 60 * 60,
|
|
6259
6291
|
// 1 hour - data considered fresh for 1 hour
|
|
6260
6292
|
gcTime: 1e3 * 60 * 60 * 24
|
|
@@ -10324,6 +10356,7 @@ import { jsx as jsx162, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
|
10324
10356
|
import { jsx as jsx172, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
10325
10357
|
import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
10326
10358
|
import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
10359
|
+
import { useQuery as useQuery22 } from "@tanstack/react-query";
|
|
10327
10360
|
import { Fragment as Fragment42, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
10328
10361
|
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
10329
10362
|
import * as React52 from "react";
|
|
@@ -10797,7 +10830,7 @@ function DepositExecutionItem({
|
|
|
10797
10830
|
/* @__PURE__ */ jsx52("h3", { className: "uf-text-foreground uf-font-medium uf-text-sm uf-leading-tight", children: isPending ? "Deposit processing" : "Deposit completed" }),
|
|
10798
10831
|
/* @__PURE__ */ jsx52("p", { className: "uf-text-muted-foreground uf-text-xs uf-leading-tight", children: formatDateTime(execution.created_at || (/* @__PURE__ */ new Date()).toISOString()) })
|
|
10799
10832
|
] }),
|
|
10800
|
-
/* @__PURE__ */ jsx52("span", { className: "uf-text-foreground uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(execution.
|
|
10833
|
+
/* @__PURE__ */ jsx52("span", { className: "uf-text-foreground uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(execution.source_amount_usd || "0") }),
|
|
10801
10834
|
/* @__PURE__ */ jsx52(ChevronRight, { className: "uf-w-4 uf-h-4 uf-text-muted-foreground uf-flex-shrink-0" })
|
|
10802
10835
|
]
|
|
10803
10836
|
}
|
|
@@ -11121,7 +11154,7 @@ function DepositSuccessToast({
|
|
|
11121
11154
|
orderSubmittedAt,
|
|
11122
11155
|
status,
|
|
11123
11156
|
tokenIconUrl,
|
|
11124
|
-
|
|
11157
|
+
sourceAmountUsd = "0",
|
|
11125
11158
|
onClose,
|
|
11126
11159
|
execution
|
|
11127
11160
|
}) {
|
|
@@ -11244,7 +11277,7 @@ function DepositSuccessToast({
|
|
|
11244
11277
|
/* @__PURE__ */ jsx82("h3", { className: "uf-text-black dark:uf-text-white uf-font-medium uf-text-sm", children: isPending ? "Deposit processing" : "Deposit completed" }),
|
|
11245
11278
|
/* @__PURE__ */ jsx82("p", { className: "uf-text-zinc-600 dark:uf-text-zinc-400 uf-text-xs", children: formatDateTime(orderSubmittedAt) })
|
|
11246
11279
|
] }),
|
|
11247
|
-
/* @__PURE__ */ jsx82("div", { className: "uf-text-black dark:uf-text-white uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(
|
|
11280
|
+
/* @__PURE__ */ jsx82("div", { className: "uf-text-black dark:uf-text-white uf-font-medium uf-text-sm uf-flex-shrink-0", children: formatUsdAmount(sourceAmountUsd) }),
|
|
11248
11281
|
/* @__PURE__ */ jsx82(
|
|
11249
11282
|
"button",
|
|
11250
11283
|
{
|
|
@@ -12066,7 +12099,7 @@ function TransferCryptoBase({
|
|
|
12066
12099
|
}
|
|
12067
12100
|
)
|
|
12068
12101
|
] }),
|
|
12069
|
-
depositExecutions.length === 1 && /* @__PURE__ */ jsx112("div", { className: "uf-
|
|
12102
|
+
depositExecutions.length === 1 && /* @__PURE__ */ jsx112("div", { className: "uf-absolute uf-bottom-4 uf-left-0 uf-right-0 uf-flex uf-justify-center uf-px-4 uf-z-[100]", children: /* @__PURE__ */ jsx112("div", { className: "uf-w-full uf-max-w-[360px]", children: /* @__PURE__ */ jsx112(
|
|
12070
12103
|
DepositSuccessToast,
|
|
12071
12104
|
{
|
|
12072
12105
|
depositTx: depositExecutions[0].transaction_hash,
|
|
@@ -12075,12 +12108,12 @@ function TransferCryptoBase({
|
|
|
12075
12108
|
explorerUrl: depositExecutions[0].explorer_url,
|
|
12076
12109
|
status: depositExecutions[0].status,
|
|
12077
12110
|
tokenIconUrl: depositExecutions[0].destination_token_metadata?.icon_url,
|
|
12078
|
-
|
|
12111
|
+
sourceAmountUsd: depositExecutions[0].source_amount_usd || "0",
|
|
12079
12112
|
onClose: () => setDepositExecutions([]),
|
|
12080
12113
|
execution: depositExecutions[0]
|
|
12081
12114
|
},
|
|
12082
12115
|
depositExecutions[0].id
|
|
12083
|
-
) }),
|
|
12116
|
+
) }) }),
|
|
12084
12117
|
/* @__PURE__ */ jsx112(
|
|
12085
12118
|
DepositsModal,
|
|
12086
12119
|
{
|
|
@@ -12238,40 +12271,28 @@ function CurrencyModal({
|
|
|
12238
12271
|
] }) })
|
|
12239
12272
|
] }) });
|
|
12240
12273
|
}
|
|
12241
|
-
async function getIpViaIpApi2() {
|
|
12242
|
-
const url = "https://ipapi.co/json";
|
|
12243
|
-
const response = await fetch(url);
|
|
12244
|
-
if (!response.ok) {
|
|
12245
|
-
throw new Error(`ipapi.co failed: ${response.statusText}`);
|
|
12246
|
-
}
|
|
12247
|
-
const data = await response.json();
|
|
12248
|
-
return {
|
|
12249
|
-
alpha2: data.country_code.toLowerCase(),
|
|
12250
|
-
state: data.region_code?.toLowerCase()
|
|
12251
|
-
};
|
|
12252
|
-
}
|
|
12253
12274
|
function useUserIp2() {
|
|
12254
12275
|
const {
|
|
12255
12276
|
data: userIpInfo,
|
|
12256
12277
|
isLoading,
|
|
12257
12278
|
error
|
|
12258
12279
|
} = useQuery2({
|
|
12259
|
-
queryKey: ["
|
|
12280
|
+
queryKey: ["unifold", "userIpInfo"],
|
|
12260
12281
|
queryFn: async () => {
|
|
12261
|
-
|
|
12262
|
-
|
|
12263
|
-
|
|
12264
|
-
|
|
12265
|
-
|
|
12266
|
-
|
|
12267
|
-
|
|
12268
|
-
|
|
12282
|
+
const data = await getIpAddress();
|
|
12283
|
+
console.log("[useUserIp] IP detected:", data);
|
|
12284
|
+
return {
|
|
12285
|
+
alpha2: data.alpha2.toLowerCase(),
|
|
12286
|
+
alpha3: data.alpha3?.toLowerCase(),
|
|
12287
|
+
country: data.country,
|
|
12288
|
+
state: data.state?.toLowerCase() ?? null,
|
|
12289
|
+
ipAddress: data.ip_address
|
|
12290
|
+
};
|
|
12269
12291
|
},
|
|
12270
12292
|
// Cache configuration to reduce API calls
|
|
12271
12293
|
refetchOnMount: false,
|
|
12272
12294
|
refetchOnReconnect: true,
|
|
12273
12295
|
refetchOnWindowFocus: false,
|
|
12274
|
-
// Optional: Increase cache duration to 1 hour for even better rate limit protection
|
|
12275
12296
|
staleTime: 1e3 * 60 * 60,
|
|
12276
12297
|
// 1 hour - data considered fresh for 1 hour
|
|
12277
12298
|
gcTime: 1e3 * 60 * 60 * 24
|
|
@@ -13006,6 +13027,54 @@ function DepositTrackerButton({
|
|
|
13006
13027
|
}
|
|
13007
13028
|
);
|
|
13008
13029
|
}
|
|
13030
|
+
function useAllowedCountry(publishableKey) {
|
|
13031
|
+
const {
|
|
13032
|
+
data: ipData,
|
|
13033
|
+
isLoading: isIpLoading,
|
|
13034
|
+
error: ipError
|
|
13035
|
+
} = useQuery22({
|
|
13036
|
+
queryKey: ["unifold", "ipAddress"],
|
|
13037
|
+
queryFn: () => getIpAddress(),
|
|
13038
|
+
refetchOnMount: false,
|
|
13039
|
+
refetchOnReconnect: true,
|
|
13040
|
+
refetchOnWindowFocus: false,
|
|
13041
|
+
staleTime: 1e3 * 60 * 60,
|
|
13042
|
+
// 1 hour
|
|
13043
|
+
gcTime: 1e3 * 60 * 60 * 24
|
|
13044
|
+
// 24 hours
|
|
13045
|
+
});
|
|
13046
|
+
const {
|
|
13047
|
+
data: configData,
|
|
13048
|
+
isLoading: isConfigLoading,
|
|
13049
|
+
error: configError
|
|
13050
|
+
} = useQuery22({
|
|
13051
|
+
queryKey: ["unifold", "projectConfig", publishableKey],
|
|
13052
|
+
queryFn: () => getProjectConfig(publishableKey),
|
|
13053
|
+
refetchOnMount: false,
|
|
13054
|
+
refetchOnReconnect: true,
|
|
13055
|
+
refetchOnWindowFocus: false,
|
|
13056
|
+
staleTime: 1e3 * 60 * 5,
|
|
13057
|
+
// 5 minutes
|
|
13058
|
+
gcTime: 1e3 * 60 * 60
|
|
13059
|
+
// 1 hour
|
|
13060
|
+
});
|
|
13061
|
+
const isLoading = isIpLoading || isConfigLoading;
|
|
13062
|
+
const error = ipError || configError || null;
|
|
13063
|
+
let isAllowed = null;
|
|
13064
|
+
if (ipData && configData) {
|
|
13065
|
+
const blockedCodes = configData.blocked_country_codes || [];
|
|
13066
|
+
const userCountryUpper = ipData.alpha2.toUpperCase();
|
|
13067
|
+
isAllowed = !blockedCodes.some((code) => code.toUpperCase() === userCountryUpper);
|
|
13068
|
+
}
|
|
13069
|
+
return {
|
|
13070
|
+
isAllowed,
|
|
13071
|
+
// Return lowercase for consistency with useUserIp hook
|
|
13072
|
+
alpha2: ipData?.alpha2?.toLowerCase() ?? null,
|
|
13073
|
+
country: ipData?.country ?? null,
|
|
13074
|
+
isLoading,
|
|
13075
|
+
error
|
|
13076
|
+
};
|
|
13077
|
+
}
|
|
13009
13078
|
function SkeletonButton({ variant = "default" }) {
|
|
13010
13079
|
return /* @__PURE__ */ jsxs16("div", { className: "uf-w-full uf-bg-secondary uf-rounded-xl uf-p-3 uf-flex uf-items-center uf-justify-between uf-animate-pulse", children: [
|
|
13011
13080
|
/* @__PURE__ */ jsxs16("div", { className: "uf-flex uf-items-center uf-gap-3", children: [
|
|
@@ -13073,6 +13142,7 @@ function DepositModal({
|
|
|
13073
13142
|
getProjectConfig(publishableKey).then(setProjectConfig).catch(console.error);
|
|
13074
13143
|
}
|
|
13075
13144
|
}, [open, publishableKey, projectConfig]);
|
|
13145
|
+
const { isAllowed, isLoading: isCountryLoading, error: countryError } = useAllowedCountry(publishableKey);
|
|
13076
13146
|
useEffect62(() => {
|
|
13077
13147
|
if (!open || wallets.length > 0) return;
|
|
13078
13148
|
let retryTimeout = null;
|
|
@@ -13150,39 +13220,56 @@ function DepositModal({
|
|
|
13150
13220
|
onClose: handleClose
|
|
13151
13221
|
}
|
|
13152
13222
|
),
|
|
13153
|
-
/* @__PURE__ */ jsx20("div", { className: "uf-pb-4 uf-space-y-3", children: !projectConfig ? /* @__PURE__ */ jsxs16(Fragment42, { children: [
|
|
13223
|
+
/* @__PURE__ */ jsx20("div", { className: "uf-pb-4 uf-space-y-3", children: isCountryLoading || !projectConfig ? /* @__PURE__ */ jsxs16(Fragment42, { children: [
|
|
13154
13224
|
/* @__PURE__ */ jsx20(SkeletonButton, { variant: "with-icons" }),
|
|
13155
13225
|
/* @__PURE__ */ jsx20(SkeletonButton, { variant: "with-icons" }),
|
|
13156
13226
|
!hideDepositTracker && /* @__PURE__ */ jsx20(SkeletonButton, {})
|
|
13157
|
-
] }) :
|
|
13158
|
-
/*
|
|
13159
|
-
|
|
13160
|
-
{
|
|
13161
|
-
|
|
13162
|
-
|
|
13163
|
-
|
|
13164
|
-
|
|
13165
|
-
|
|
13166
|
-
|
|
13167
|
-
|
|
13168
|
-
|
|
13169
|
-
{
|
|
13170
|
-
|
|
13171
|
-
|
|
13172
|
-
|
|
13173
|
-
|
|
13174
|
-
|
|
13175
|
-
|
|
13176
|
-
|
|
13177
|
-
|
|
13178
|
-
|
|
13179
|
-
|
|
13180
|
-
|
|
13181
|
-
|
|
13182
|
-
|
|
13183
|
-
|
|
13184
|
-
|
|
13185
|
-
|
|
13227
|
+
] }) : countryError ? (
|
|
13228
|
+
/* Error state - couldn't verify location */
|
|
13229
|
+
/* @__PURE__ */ jsxs16("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
|
|
13230
|
+
/* @__PURE__ */ jsx20("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ jsx20(TriangleAlert, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
13231
|
+
/* @__PURE__ */ jsx20("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "Unable to Verify Location" }),
|
|
13232
|
+
/* @__PURE__ */ jsx20("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "We couldn't verify your location. Please check your connection and try again." })
|
|
13233
|
+
] })
|
|
13234
|
+
) : !isAllowed ? (
|
|
13235
|
+
/* Blocked country state (isAllowed is false or null without error) */
|
|
13236
|
+
/* @__PURE__ */ jsxs16("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
|
|
13237
|
+
/* @__PURE__ */ jsx20("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ jsx20(MapPinOff, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
13238
|
+
/* @__PURE__ */ jsx20("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "No Tokens Available" }),
|
|
13239
|
+
/* @__PURE__ */ jsx20("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "There are no supported tokens available from your current location." })
|
|
13240
|
+
] })
|
|
13241
|
+
) : (
|
|
13242
|
+
/* Normal deposit options */
|
|
13243
|
+
/* @__PURE__ */ jsxs16(Fragment42, { children: [
|
|
13244
|
+
/* @__PURE__ */ jsx20(
|
|
13245
|
+
TransferCryptoButton,
|
|
13246
|
+
{
|
|
13247
|
+
onClick: () => setView("transfer"),
|
|
13248
|
+
title: t3.transferCrypto.title,
|
|
13249
|
+
subtitle: t3.transferCrypto.subtitle,
|
|
13250
|
+
featuredTokens: projectConfig.transfer_crypto.networks
|
|
13251
|
+
}
|
|
13252
|
+
),
|
|
13253
|
+
/* @__PURE__ */ jsx20(
|
|
13254
|
+
DepositWithCardButton,
|
|
13255
|
+
{
|
|
13256
|
+
onClick: () => setView("card"),
|
|
13257
|
+
title: t3.depositWithCard.title,
|
|
13258
|
+
subtitle: t3.depositWithCard.subtitle,
|
|
13259
|
+
paymentNetworks: projectConfig.payment_networks.networks
|
|
13260
|
+
}
|
|
13261
|
+
),
|
|
13262
|
+
!hideDepositTracker && /* @__PURE__ */ jsx20(
|
|
13263
|
+
DepositTrackerButton,
|
|
13264
|
+
{
|
|
13265
|
+
onClick: () => setDepositsModalOpen(true),
|
|
13266
|
+
title: "Deposit Tracker",
|
|
13267
|
+
subtitle: "Track your deposit progress",
|
|
13268
|
+
badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
|
|
13269
|
+
}
|
|
13270
|
+
)
|
|
13271
|
+
] })
|
|
13272
|
+
) })
|
|
13186
13273
|
] }) : view === "transfer" ? /* @__PURE__ */ jsxs16(Fragment42, { children: [
|
|
13187
13274
|
/* @__PURE__ */ jsx20(
|
|
13188
13275
|
DepositHeader,
|
|
@@ -13325,7 +13412,6 @@ function UnifoldProvider2({
|
|
|
13325
13412
|
const depositPromiseRef = React39.useRef(null);
|
|
13326
13413
|
const closeTimeoutRef = React39.useRef(null);
|
|
13327
13414
|
const beginDeposit = useCallback10((config2) => {
|
|
13328
|
-
console.log("[UnifoldProvider] beginDeposit called with:", config2);
|
|
13329
13415
|
if (closeTimeoutRef.current) {
|
|
13330
13416
|
clearTimeout(closeTimeoutRef.current);
|
|
13331
13417
|
closeTimeoutRef.current = null;
|
|
@@ -13360,7 +13446,6 @@ function UnifoldProvider2({
|
|
|
13360
13446
|
}, 200);
|
|
13361
13447
|
}, []);
|
|
13362
13448
|
const handleDepositSuccess = useCallback10((data) => {
|
|
13363
|
-
console.log("[UnifoldProvider] Deposit success:", data);
|
|
13364
13449
|
if (depositConfig?.onSuccess) {
|
|
13365
13450
|
depositConfig.onSuccess(data);
|
|
13366
13451
|
}
|
|
@@ -13444,6 +13529,7 @@ export {
|
|
|
13444
13529
|
getFiatCurrencies,
|
|
13445
13530
|
getIconUrl,
|
|
13446
13531
|
getIconUrlWithCdn,
|
|
13532
|
+
getIpAddress,
|
|
13447
13533
|
getMeldQuotes,
|
|
13448
13534
|
getPreferredIconUrl,
|
|
13449
13535
|
getProjectConfig,
|
|
@@ -13453,6 +13539,7 @@ export {
|
|
|
13453
13539
|
i18n,
|
|
13454
13540
|
queryExecutions,
|
|
13455
13541
|
setApiConfig,
|
|
13542
|
+
useAllowedCountry,
|
|
13456
13543
|
useUnifold2 as useUnifold,
|
|
13457
13544
|
useUserIp
|
|
13458
13545
|
};
|
|
@@ -13473,8 +13560,10 @@ lucide-react/dist/esm/icons/dollar-sign.js:
|
|
|
13473
13560
|
lucide-react/dist/esm/icons/external-link.js:
|
|
13474
13561
|
lucide-react/dist/esm/icons/file-text.js:
|
|
13475
13562
|
lucide-react/dist/esm/icons/info.js:
|
|
13563
|
+
lucide-react/dist/esm/icons/map-pin-off.js:
|
|
13476
13564
|
lucide-react/dist/esm/icons/search.js:
|
|
13477
13565
|
lucide-react/dist/esm/icons/shield-check.js:
|
|
13566
|
+
lucide-react/dist/esm/icons/triangle-alert.js:
|
|
13478
13567
|
lucide-react/dist/esm/icons/x.js:
|
|
13479
13568
|
lucide-react/dist/esm/icons/zap.js:
|
|
13480
13569
|
lucide-react/dist/esm/lucide-react.js:
|
package/dist/styles.css
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--uf-background:0 0% 100%;--uf-foreground:0 0% 3.9%;--uf-card:0 0% 98%;--uf-card-foreground:0 0% 3.9%;--uf-popover:0 0% 100%;--uf-popover-foreground:0 0% 3.9%;--uf-primary:0 0% 9%;--uf-primary-foreground:0 0% 98%;--uf-secondary:0 0% 95%;--uf-secondary-foreground:0 0% 9%;--uf-muted:0 0% 92%;--uf-muted-foreground:0 0% 40%;--uf-accent:0 0% 90%;--uf-accent-foreground:0 0% 9%;--uf-destructive:0 84.2% 60.2%;--uf-destructive-foreground:0 0% 98%;--uf-border:0 0% 85%;--uf-input:0 0% 89.8%;--uf-ring:0 0% 3.9%;--uf-radius:0.5rem}.uf-dark{--uf-background:0 0% 5%;--uf-foreground:0 0% 98%;--uf-card:0 0% 10%;--uf-card-foreground:0 0% 98%;--uf-popover:0 0% 10%;--uf-popover-foreground:0 0% 98%;--uf-primary:0 0% 98%;--uf-primary-foreground:0 0% 9%;--uf-secondary:0 0% 16%;--uf-secondary-foreground:0 0% 98%;--uf-muted:0 0% 20%;--uf-muted-foreground:0 0% 60%;--uf-accent:0 0% 20%;--uf-accent-foreground:0 0% 98%;--uf-destructive:0 62.8% 30.6%;--uf-destructive-foreground:0 0% 98%;--uf-border:0 0% 20%;--uf-input:0 0% 20%;--uf-ring:0 0% 83.1%}[class*=uf-],[data-radix-popper-content-wrapper],[data-radix-portal]{font-family:Sons,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif!important}[class*=uf-] *,[data-radix-popper-content-wrapper] *,[data-radix-portal] *{font-family:inherit}.uf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.uf-pointer-events-none{pointer-events:none}.uf-invisible{visibility:hidden}.uf-fixed{position:fixed}.uf-absolute{position:absolute}.uf-relative{position:relative}.uf-inset-0{inset:0}.-uf-bottom-0\.5{bottom:-.125rem}.-uf-bottom-1{bottom:-.25rem}.-uf-right-0\.5{right:-.125rem}.-uf-right-1{right:-.25rem}.-uf-top-1{top:-.25rem}.uf--bottom-0\.5{bottom:-.125rem}.uf--right-0\.5{right:-.125rem}.uf-bottom-0{bottom:0}.uf-bottom-4{bottom:1rem}.uf-left-0{left:0}.uf-left-1\/2{left:50%}.uf-left-2{left:.5rem}.uf-left-4{left:1rem}.uf-right-0{right:0}.uf-right-6{right:1.5rem}.uf-top-1\/2{top:50%}.uf-top-6{top:1.5rem}.uf-z-50{z-index:50}.uf-z-\[100\]{z-index:100}.uf-z-\[1\]{z-index:1}.uf-z-\[9999\]{z-index:9999}.uf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.uf-mx-1{margin-left:.25rem;margin-right:.25rem}.uf-my-1{margin-top:.25rem;margin-bottom:.25rem}.uf-mb-0\.5{margin-bottom:.125rem}.uf-mb-1{margin-bottom:.25rem}.uf-mb-1\.5{margin-bottom:.375rem}.uf-mb-2{margin-bottom:.5rem}.uf-mb-3{margin-bottom:.75rem}.uf-mb-4{margin-bottom:1rem}.uf-mb-6{margin-bottom:1.5rem}.uf-mb-8{margin-bottom:2rem}.uf-mr-1{margin-right:.25rem}.uf-mt-0\.5{margin-top:.125rem}.uf-mt-2{margin-top:.5rem}.uf-mt-8{margin-top:2rem}.uf-block{display:block}.uf-flex{display:flex}.uf-inline-flex{display:inline-flex}.uf-grid{display:grid}.uf-h-10{height:2.5rem}.uf-h-11{height:2.75rem}.uf-h-2{height:.5rem}.uf-h-3{height:.75rem}.uf-h-3\.5{height:.875rem}.uf-h-4{height:1rem}.uf-h-5{height:1.25rem}.uf-h-6{height:1.5rem}.uf-h-7{height:1.75rem}.uf-h-8{height:2rem}.uf-h-9{height:2.25rem}.uf-h-\[18px\]{height:18px}.uf-h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.uf-h-full{height:100%}.uf-h-px{height:1px}.uf-max-h-96{max-height:24rem}.uf-max-h-\[300px\]{max-height:300px}.uf-max-h-\[400px\]{max-height:400px}.uf-max-h-\[500px\]{max-height:500px}.uf-min-h-\[420px\]{min-height:420px}.uf-w-10{width:2.5rem}.uf-w-2{width:.5rem}.uf-w-24{width:6rem}.uf-w-28{width:7rem}.uf-w-3{width:.75rem}.uf-w-3\.5{width:.875rem}.uf-w-32{width:8rem}.uf-w-4{width:1rem}.uf-w-40{width:10rem}.uf-w-5{width:1.25rem}.uf-w-6{width:1.5rem}.uf-w-7{width:1.75rem}.uf-w-8{width:2rem}.uf-w-9{width:2.25rem}.uf-w-\[360px\]{width:360px}.uf-w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.uf-w-full{width:100%}.uf-min-w-0{min-width:0}.uf-min-w-\[18px\]{min-width:18px}.uf-min-w-\[1ch\]{min-width:1ch}.uf-min-w-\[200px\]{min-width:200px}.uf-min-w-\[72px\]{min-width:72px}.uf-min-w-\[8rem\]{min-width:8rem}.uf-min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.uf-max-w-\[200px\]{max-width:200px}.uf-max-w-\[240px\]{max-width:240px}.uf-max-w-\[280px\]{max-width:280px}.uf-max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.uf-max-w-full{max-width:100%}.uf-flex-1{flex:1 1 0%}.uf-flex-shrink-0{flex-shrink:0}.uf--translate-x-1\/2{--tw-translate-x:-50%}.uf--translate-x-1\/2,.uf--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.uf--translate-y-1\/2{--tw-translate-y:-50%}@keyframes uf-pulse{50%{opacity:.5}}.uf-animate-pulse{animation:uf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes uf-spin{to{transform:rotate(1turn)}}.uf-animate-spin{animation:uf-spin 1s linear infinite}.uf-cursor-default{cursor:default}.uf-cursor-pointer{cursor:pointer}.uf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.uf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.uf-grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.uf-flex-col{flex-direction:column}.uf-flex-col-reverse{flex-direction:column-reverse}.uf-items-center{align-items:center}.uf-justify-end{justify-content:flex-end}.uf-justify-center{justify-content:center}.uf-justify-between{justify-content:space-between}.uf-gap-0{gap:0}.uf-gap-1{gap:.25rem}.uf-gap-1\.5{gap:.375rem}.uf-gap-2{gap:.5rem}.uf-gap-2\.5{gap:.625rem}.uf-gap-3{gap:.75rem}.uf-gap-4{gap:1rem}.uf--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.25rem*var(--tw-space-x-reverse));margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)))}.uf--space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.5rem*var(--tw-space-x-reverse));margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)))}.uf-space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.uf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.uf-space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.uf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.uf-self-start{align-self:flex-start}.uf-overflow-hidden{overflow:hidden}.uf-overflow-visible{overflow:visible}.uf-overflow-y-auto{overflow-y:auto}.uf-whitespace-nowrap{white-space:nowrap}.uf-break-all{word-break:break-all}.uf-rounded{border-radius:.25rem}.uf-rounded-2xl{border-radius:1rem}.uf-rounded-full{border-radius:9999px}.uf-rounded-lg{border-radius:var(--uf-radius)}.uf-rounded-md{border-radius:calc(var(--uf-radius) - 2px)}.uf-rounded-sm{border-radius:calc(var(--uf-radius) - 4px)}.uf-rounded-xl{border-radius:.75rem}.uf-rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.uf-border{border-width:1px}.uf-border-2{border-width:2px}.uf-border-b{border-bottom-width:1px}.uf-border-none{border-style:none}.uf-border-border{border-color:hsl(var(--uf-border))}.uf-border-border\/50{border-color:hsl(var(--uf-border)/.5)}.uf-border-input{border-color:hsl(var(--uf-input))}.uf-border-secondary{border-color:hsl(var(--uf-secondary))}.uf-border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity,1))}.\!uf-bg-card{background-color:hsl(var(--uf-card))!important}.\!uf-bg-popover{background-color:hsl(var(--uf-popover))!important}.\!uf-bg-secondary{background-color:hsl(var(--uf-secondary))!important}.uf-bg-background{background-color:hsl(var(--uf-background))}.uf-bg-black\/40{background-color:rgba(0,0,0,.4)}.uf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.uf-bg-card{background-color:hsl(var(--uf-card))}.uf-bg-destructive{background-color:hsl(var(--uf-destructive))}.uf-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.uf-bg-muted{background-color:hsl(var(--uf-muted))}.uf-bg-popover{background-color:hsl(var(--uf-popover))}.uf-bg-primary{background-color:hsl(var(--uf-primary))}.uf-bg-secondary{background-color:hsl(var(--uf-secondary))}.uf-bg-transparent{background-color:transparent}.uf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.uf-bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.uf-p-0{padding:0}.uf-p-0\.5{padding:.125rem}.uf-p-1{padding:.25rem}.uf-p-2{padding:.5rem}.uf-p-3{padding:.75rem}.uf-p-4{padding:1rem}.uf-p-6{padding:1.5rem}.uf-px-1{padding-left:.25rem;padding-right:.25rem}.uf-px-2{padding-left:.5rem;padding-right:.5rem}.uf-px-3{padding-left:.75rem;padding-right:.75rem}.uf-px-4{padding-left:1rem;padding-right:1rem}.uf-px-8{padding-left:2rem;padding-right:2rem}.uf-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.uf-py-1{padding-top:.25rem;padding-bottom:.25rem}.uf-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.uf-py-2{padding-top:.5rem;padding-bottom:.5rem}.uf-py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.uf-py-3{padding-top:.75rem;padding-bottom:.75rem}.uf-py-4{padding-top:1rem;padding-bottom:1rem}.uf-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.uf-py-8{padding-top:2rem;padding-bottom:2rem}.uf-pb-1{padding-bottom:.25rem}.uf-pb-2{padding-bottom:.5rem}.uf-pb-3{padding-bottom:.75rem}.uf-pb-4{padding-bottom:1rem}.uf-pl-11{padding-left:2.75rem}.uf-pl-8{padding-left:2rem}.uf-pr-2{padding-right:.5rem}.uf-pr-4{padding-right:1rem}.uf-pt-2{padding-top:.5rem}.uf-pt-4{padding-top:1rem}.uf-pt-6{padding-top:1.5rem}.uf-text-left{text-align:left}.uf-text-center{text-align:center}.uf-text-right{text-align:right}.uf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.uf-text-\[10px\]{font-size:10px}.uf-text-base{font-size:1rem;line-height:1.5rem}.uf-text-lg{font-size:1.125rem;line-height:1.75rem}.uf-text-sm{font-size:.875rem;line-height:1.25rem}.uf-text-xl{font-size:1.25rem;line-height:1.75rem}.uf-text-xs{font-size:.75rem;line-height:1rem}.uf-font-light{font-weight:300}.uf-font-medium{font-weight:500}.uf-font-normal{font-weight:400}.uf-font-semibold{font-weight:600}.uf-capitalize{text-transform:capitalize}.uf-leading-none{line-height:1}.uf-leading-relaxed{line-height:1.625}.uf-leading-tight{line-height:1.25}.uf-tracking-tight{letter-spacing:-.025em}.uf-text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.uf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.uf-text-destructive-foreground{color:hsl(var(--uf-destructive-foreground))}.uf-text-foreground{color:hsl(var(--uf-foreground))}.uf-text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.uf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.uf-text-muted{color:hsl(var(--uf-muted))}.uf-text-muted-foreground{color:hsl(var(--uf-muted-foreground))}.uf-text-popover-foreground{color:hsl(var(--uf-popover-foreground))}.uf-text-primary{color:hsl(var(--uf-primary))}.uf-text-primary-foreground{color:hsl(var(--uf-primary-foreground))}.uf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.uf-text-secondary-foreground{color:hsl(var(--uf-secondary-foreground))}.uf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.uf-text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity,1))}.uf-underline{text-decoration-line:underline}.uf-underline-offset-4{text-underline-offset:4px}.uf-placeholder-muted-foreground::-moz-placeholder{color:hsl(var(--uf-muted-foreground))}.uf-placeholder-muted-foreground::placeholder{color:hsl(var(--uf-muted-foreground))}.uf-opacity-0{opacity:0}.uf-opacity-100{opacity:1}.uf-opacity-50{opacity:.5}.uf-opacity-70{opacity:.7}.uf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.uf-outline-none{outline:2px solid transparent;outline-offset:2px}.uf-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.uf-ring-inset{--tw-ring-inset:inset}.uf-ring-primary{--tw-ring-color:hsl(var(--uf-primary))}.uf-ring-offset-background{--tw-ring-offset-color:hsl(var(--uf-background))}.uf-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.uf-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.uf-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.uf-duration-1000{transition-duration:1s}.uf-duration-200{transition-duration:.2s}.uf-duration-300{transition-duration:.3s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.uf-animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.uf-fade-in,.uf-fade-in-0{--tw-enter-opacity:0}.uf-zoom-in-95{--tw-enter-scale:.95}.uf-slide-in-from-bottom-2{--tw-enter-translate-y:0.5rem}.uf-slide-in-from-right-8{--tw-enter-translate-x:2rem}.uf-duration-1000{animation-duration:1s}.uf-duration-200{animation-duration:.2s}.uf-duration-300{animation-duration:.3s}.\[scrollbar-width\:none\]{scrollbar-width:none}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Thin.ttf) format("truetype");font-weight:100;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-ThinItalic.ttf) format("truetype");font-weight:100;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Light.ttf) format("truetype");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-LightItalic.ttf) format("truetype");font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-RegularItalic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-MediumItalic.ttf) format("truetype");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Semibold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-SemiboldItalic.ttf) format("truetype");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Extrabold.ttf) format("truetype");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-ExtraboldItalic.ttf) format("truetype");font-weight:800;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Black.ttf) format("truetype");font-weight:900;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-BlackItalic.ttf) format("truetype");font-weight:900;font-style:italic;font-display:swap}.placeholder\:uf-text-muted-foreground::-moz-placeholder{color:hsl(var(--uf-muted-foreground))}.placeholder\:uf-text-muted-foreground::placeholder{color:hsl(var(--uf-muted-foreground))}.hover\:uf-bg-accent:hover{background-color:hsl(var(--uf-accent))}.hover\:uf-bg-card\/50:hover{background-color:hsl(var(--uf-card)/.5)}.hover\:uf-bg-destructive\/90:hover{background-color:hsl(var(--uf-destructive)/.9)}.hover\:uf-bg-primary\/90:hover{background-color:hsl(var(--uf-primary)/.9)}.hover\:uf-bg-secondary:hover{background-color:hsl(var(--uf-secondary))}.hover\:uf-bg-secondary\/80:hover{background-color:hsl(var(--uf-secondary)/.8)}.hover\:uf-text-accent-foreground:hover{color:hsl(var(--uf-accent-foreground))}.hover\:uf-text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:uf-text-foreground:hover{color:hsl(var(--uf-foreground))}.hover\:uf-text-muted-foreground:hover{color:hsl(var(--uf-muted-foreground))}.hover\:uf-underline:hover{text-decoration-line:underline}.hover\:uf-opacity-100:hover{opacity:1}.hover\:uf-opacity-90:hover{opacity:.9}.focus\:uf-bg-accent:focus{background-color:hsl(var(--uf-accent))}.focus\:uf-text-accent-foreground:focus{color:hsl(var(--uf-accent-foreground))}.focus\:uf-text-foreground:focus{color:hsl(var(--uf-foreground))}.focus\:uf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:uf-ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:uf-ring-1:focus,.focus\:uf-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:uf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:uf-ring-ring:focus{--tw-ring-color:hsl(var(--uf-ring))}.focus\:uf-ring-ring\/30:focus{--tw-ring-color:hsl(var(--uf-ring)/0.3)}.focus\:uf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:uf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:uf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:uf-ring-ring:focus-visible{--tw-ring-color:hsl(var(--uf-ring))}.focus-visible\:uf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:uf-pointer-events-none:disabled{pointer-events:none}.disabled\:uf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:\!uf-bg-muted:disabled{background-color:hsl(var(--uf-muted))!important}.disabled\:uf-text-muted-foreground:disabled{color:hsl(var(--uf-muted-foreground))}.disabled\:uf-opacity-50:disabled{opacity:.5}.uf-group:hover .group-hover\:uf-text-foreground{color:hsl(var(--uf-foreground))}.data-\[disabled\]\:uf-pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:uf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:uf-translate-y-1[data-side=bottom],.data-\[side\=left\]\:uf--translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:uf--translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:uf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:uf-translate-x-1[data-side=right],.data-\[side\=top\]\:uf--translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:uf--translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=open\]\:uf-bg-accent[data-state=open]{background-color:hsl(var(--uf-accent))}.data-\[state\=open\]\:uf-text-muted-foreground[data-state=open]{color:hsl(var(--uf-muted-foreground))}.data-\[disabled\]\:uf-opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:uf-animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:uf-animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:uf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:uf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:uf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:uf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:uf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:uf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:uf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:uf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:uf-slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=open\]\:uf-slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.dark\:uf-border-zinc-700:is([class=uf-dark] *){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity,1))}.dark\:uf-bg-black:is([class=uf-dark] *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.dark\:uf-text-white:is([class=uf-dark] *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:uf-text-zinc-400:is([class=uf-dark] *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\:hover\:uf-text-white:hover:is([class=uf-dark] *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:uf-bottom-auto{bottom:auto}.sm\:uf-left-\[50\%\]{left:50%}.sm\:uf-right-auto{right:auto}.sm\:uf-top-\[50\%\]{top:50%}.sm\:uf-max-w-\[400px\]{max-width:400px}.sm\:uf-translate-x-\[-50\%\]{--tw-translate-x:-50%}.sm\:uf-translate-x-\[-50\%\],.sm\:uf-translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:uf-translate-y-\[-50\%\]{--tw-translate-y:-50%}.sm\:uf-flex-row{flex-direction:row}.sm\:uf-justify-end{justify-content:flex-end}.sm\:uf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sm\:uf-rounded-3xl{border-radius:1.5rem}.sm\:uf-text-left{text-align:left}.sm\:data-\[state\=closed\]\:uf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.sm\:data-\[state\=open\]\:uf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.sm\:data-\[state\=closed\]\:uf-slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.sm\:data-\[state\=closed\]\:uf-slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.sm\:data-\[state\=open\]\:uf-slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.sm\:data-\[state\=open\]\:uf-slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}}.\[\&\:\:-webkit-scrollbar\]\:uf-hidden::-webkit-scrollbar{display:none}.\[\&\>button\]\:uf-hidden>button{display:none}.\[\&\>span\]\:uf-line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>span\]\:uf-flex-1>span{flex:1 1 0%}
|
|
1
|
+
@layer base, components, utilities;*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
|
|
2
|
+
/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.uf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.uf-pointer-events-none{pointer-events:none}.uf-invisible{visibility:hidden}.uf-fixed{position:fixed}.uf-absolute{position:absolute}.uf-relative{position:relative}.uf-inset-0{inset:0}.-uf-bottom-0\.5{bottom:-.125rem}.-uf-bottom-1{bottom:-.25rem}.-uf-right-0\.5{right:-.125rem}.-uf-right-1{right:-.25rem}.-uf-top-1{top:-.25rem}.uf--bottom-0\.5{bottom:-.125rem}.uf--right-0\.5{right:-.125rem}.uf-bottom-0{bottom:0}.uf-bottom-4{bottom:1rem}.uf-left-0{left:0}.uf-left-2{left:.5rem}.uf-left-4{left:1rem}.uf-right-0{right:0}.uf-right-6{right:1.5rem}.uf-top-1\/2{top:50%}.uf-top-6{top:1.5rem}.uf-z-50{z-index:50}.uf-z-\[100\]{z-index:100}.uf-z-\[1\]{z-index:1}.uf-z-\[9999\]{z-index:9999}.uf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.uf-mx-1{margin-left:.25rem;margin-right:.25rem}.uf-my-1{margin-top:.25rem;margin-bottom:.25rem}.uf-mb-0\.5{margin-bottom:.125rem}.uf-mb-1{margin-bottom:.25rem}.uf-mb-1\.5{margin-bottom:.375rem}.uf-mb-2{margin-bottom:.5rem}.uf-mb-3{margin-bottom:.75rem}.uf-mb-4{margin-bottom:1rem}.uf-mb-6{margin-bottom:1.5rem}.uf-mb-8{margin-bottom:2rem}.uf-mr-1{margin-right:.25rem}.uf-mt-0\.5{margin-top:.125rem}.uf-mt-2{margin-top:.5rem}.uf-mt-8{margin-top:2rem}.uf-block{display:block}.uf-flex{display:flex}.uf-inline-flex{display:inline-flex}.uf-grid{display:grid}.uf-h-10{height:2.5rem}.uf-h-11{height:2.75rem}.uf-h-16{height:4rem}.uf-h-2{height:.5rem}.uf-h-3{height:.75rem}.uf-h-3\.5{height:.875rem}.uf-h-4{height:1rem}.uf-h-5{height:1.25rem}.uf-h-6{height:1.5rem}.uf-h-7{height:1.75rem}.uf-h-8{height:2rem}.uf-h-9{height:2.25rem}.uf-h-\[18px\]{height:18px}.uf-h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.uf-h-full{height:100%}.uf-h-px{height:1px}.uf-max-h-96{max-height:24rem}.uf-max-h-\[300px\]{max-height:300px}.uf-max-h-\[400px\]{max-height:400px}.uf-max-h-\[500px\]{max-height:500px}.uf-min-h-\[420px\]{min-height:420px}.uf-w-10{width:2.5rem}.uf-w-16{width:4rem}.uf-w-2{width:.5rem}.uf-w-24{width:6rem}.uf-w-28{width:7rem}.uf-w-3{width:.75rem}.uf-w-3\.5{width:.875rem}.uf-w-32{width:8rem}.uf-w-4{width:1rem}.uf-w-40{width:10rem}.uf-w-5{width:1.25rem}.uf-w-6{width:1.5rem}.uf-w-7{width:1.75rem}.uf-w-8{width:2rem}.uf-w-9{width:2.25rem}.uf-w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.uf-w-full{width:100%}.uf-min-w-0{min-width:0}.uf-min-w-\[18px\]{min-width:18px}.uf-min-w-\[1ch\]{min-width:1ch}.uf-min-w-\[200px\]{min-width:200px}.uf-min-w-\[72px\]{min-width:72px}.uf-min-w-\[8rem\]{min-width:8rem}.uf-min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.uf-max-w-\[200px\]{max-width:200px}.uf-max-w-\[240px\]{max-width:240px}.uf-max-w-\[280px\]{max-width:280px}.uf-max-w-\[360px\]{max-width:360px}.uf-max-w-full{max-width:100%}.uf-flex-1{flex:1 1 0%}.uf-flex-shrink-0{flex-shrink:0}.uf--translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes uf-pulse{50%{opacity:.5}}.uf-animate-pulse{animation:uf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes uf-spin{to{transform:rotate(1turn)}}.uf-animate-spin{animation:uf-spin 1s linear infinite}.uf-cursor-default{cursor:default}.uf-cursor-pointer{cursor:pointer}.uf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.uf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.uf-grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.uf-flex-col{flex-direction:column}.uf-flex-col-reverse{flex-direction:column-reverse}.uf-items-center{align-items:center}.uf-justify-end{justify-content:flex-end}.uf-justify-center{justify-content:center}.uf-justify-between{justify-content:space-between}.uf-gap-0{gap:0}.uf-gap-1{gap:.25rem}.uf-gap-1\.5{gap:.375rem}.uf-gap-2{gap:.5rem}.uf-gap-2\.5{gap:.625rem}.uf-gap-3{gap:.75rem}.uf-gap-4{gap:1rem}.uf--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.25rem*var(--tw-space-x-reverse));margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)))}.uf--space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.5rem*var(--tw-space-x-reverse));margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)))}.uf-space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.uf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.uf-space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.uf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.uf-self-start{align-self:flex-start}.uf-overflow-hidden{overflow:hidden}.uf-overflow-visible{overflow:visible}.uf-overflow-y-auto{overflow-y:auto}.uf-whitespace-nowrap{white-space:nowrap}.uf-break-all{word-break:break-all}.uf-rounded{border-radius:.25rem}.uf-rounded-2xl{border-radius:1rem}.uf-rounded-full{border-radius:9999px}.uf-rounded-lg{border-radius:var(--uf-radius)}.uf-rounded-md{border-radius:calc(var(--uf-radius) - 2px)}.uf-rounded-sm{border-radius:calc(var(--uf-radius) - 4px)}.uf-rounded-xl{border-radius:.75rem}.uf-rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.uf-border{border-width:1px}.uf-border-2{border-width:2px}.uf-border-b{border-bottom-width:1px}.uf-border-none{border-style:none}.uf-border-border{border-color:hsl(var(--uf-border))}.uf-border-border\/50{border-color:hsl(var(--uf-border)/.5)}.uf-border-input{border-color:hsl(var(--uf-input))}.uf-border-secondary{border-color:hsl(var(--uf-secondary))}.uf-border-zinc-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity,1))}.\!uf-bg-card{background-color:hsl(var(--uf-card))!important}.\!uf-bg-popover{background-color:hsl(var(--uf-popover))!important}.\!uf-bg-secondary{background-color:hsl(var(--uf-secondary))!important}.uf-bg-background{background-color:hsl(var(--uf-background))}.uf-bg-black\/40{background-color:rgba(0,0,0,.4)}.uf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.uf-bg-card{background-color:hsl(var(--uf-card))}.uf-bg-destructive{background-color:hsl(var(--uf-destructive))}.uf-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.uf-bg-muted{background-color:hsl(var(--uf-muted))}.uf-bg-popover{background-color:hsl(var(--uf-popover))}.uf-bg-primary{background-color:hsl(var(--uf-primary))}.uf-bg-secondary{background-color:hsl(var(--uf-secondary))}.uf-bg-transparent{background-color:transparent}.uf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.uf-bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.uf-p-0{padding:0}.uf-p-0\.5{padding:.125rem}.uf-p-1{padding:.25rem}.uf-p-2{padding:.5rem}.uf-p-3{padding:.75rem}.uf-p-4{padding:1rem}.uf-p-6{padding:1.5rem}.uf-px-1{padding-left:.25rem;padding-right:.25rem}.uf-px-2{padding-left:.5rem;padding-right:.5rem}.uf-px-3{padding-left:.75rem;padding-right:.75rem}.uf-px-4{padding-left:1rem;padding-right:1rem}.uf-px-8{padding-left:2rem;padding-right:2rem}.uf-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.uf-py-1{padding-top:.25rem;padding-bottom:.25rem}.uf-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.uf-py-2{padding-top:.5rem;padding-bottom:.5rem}.uf-py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.uf-py-3{padding-top:.75rem;padding-bottom:.75rem}.uf-py-4{padding-top:1rem;padding-bottom:1rem}.uf-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.uf-py-8{padding-top:2rem;padding-bottom:2rem}.uf-pb-1{padding-bottom:.25rem}.uf-pb-2{padding-bottom:.5rem}.uf-pb-3{padding-bottom:.75rem}.uf-pb-4{padding-bottom:1rem}.uf-pl-11{padding-left:2.75rem}.uf-pl-8{padding-left:2rem}.uf-pr-2{padding-right:.5rem}.uf-pr-4{padding-right:1rem}.uf-pt-2{padding-top:.5rem}.uf-pt-4{padding-top:1rem}.uf-pt-6{padding-top:1.5rem}.uf-text-left{text-align:left}.uf-text-center{text-align:center}.uf-text-right{text-align:right}.uf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.uf-text-\[10px\]{font-size:10px}.uf-text-base{font-size:1rem;line-height:1.5rem}.uf-text-lg{font-size:1.125rem;line-height:1.75rem}.uf-text-sm{font-size:.875rem;line-height:1.25rem}.uf-text-xl{font-size:1.25rem;line-height:1.75rem}.uf-text-xs{font-size:.75rem;line-height:1rem}.uf-font-light{font-weight:300}.uf-font-medium{font-weight:500}.uf-font-normal{font-weight:400}.uf-font-semibold{font-weight:600}.uf-capitalize{text-transform:capitalize}.uf-leading-none{line-height:1}.uf-leading-relaxed{line-height:1.625}.uf-leading-tight{line-height:1.25}.uf-tracking-tight{letter-spacing:-.025em}.uf-text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.uf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.uf-text-destructive-foreground{color:hsl(var(--uf-destructive-foreground))}.uf-text-foreground{color:hsl(var(--uf-foreground))}.uf-text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.uf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.uf-text-muted{color:hsl(var(--uf-muted))}.uf-text-muted-foreground{color:hsl(var(--uf-muted-foreground))}.uf-text-popover-foreground{color:hsl(var(--uf-popover-foreground))}.uf-text-primary{color:hsl(var(--uf-primary))}.uf-text-primary-foreground{color:hsl(var(--uf-primary-foreground))}.uf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.uf-text-secondary-foreground{color:hsl(var(--uf-secondary-foreground))}.uf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.uf-text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity,1))}.uf-underline{text-decoration-line:underline}.uf-underline-offset-4{text-underline-offset:4px}.uf-placeholder-muted-foreground::-moz-placeholder{color:hsl(var(--uf-muted-foreground))}.uf-placeholder-muted-foreground::placeholder{color:hsl(var(--uf-muted-foreground))}.uf-opacity-0{opacity:0}.uf-opacity-100{opacity:1}.uf-opacity-50{opacity:.5}.uf-opacity-70{opacity:.7}.uf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.uf-outline-none{outline:2px solid transparent;outline-offset:2px}.uf-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.uf-ring-inset{--tw-ring-inset:inset}.uf-ring-primary{--tw-ring-color:hsl(var(--uf-primary))}.uf-ring-offset-background{--tw-ring-offset-color:hsl(var(--uf-background))}.uf-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.uf-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.uf-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.uf-duration-1000{transition-duration:1s}.uf-duration-200{transition-duration:.2s}.uf-duration-300{transition-duration:.3s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.uf-animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.uf-fade-in,.uf-fade-in-0{--tw-enter-opacity:0}.uf-zoom-in-95{--tw-enter-scale:.95}.uf-slide-in-from-bottom-2{--tw-enter-translate-y:0.5rem}.uf-slide-in-from-right-8{--tw-enter-translate-x:2rem}.uf-duration-1000{animation-duration:1s}.uf-duration-200{animation-duration:.2s}.uf-duration-300{animation-duration:.3s}.\[scrollbar-width\:none\]{scrollbar-width:none}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Thin.ttf) format("truetype");font-weight:100;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-ThinItalic.ttf) format("truetype");font-weight:100;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Light.ttf) format("truetype");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-LightItalic.ttf) format("truetype");font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-RegularItalic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-MediumItalic.ttf) format("truetype");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Semibold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-SemiboldItalic.ttf) format("truetype");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Extrabold.ttf) format("truetype");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-ExtraboldItalic.ttf) format("truetype");font-weight:800;font-style:italic;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-Black.ttf) format("truetype");font-weight:900;font-style:normal;font-display:swap}@font-face{font-family:Sons;src:url(assets/fonts/Sons-BlackItalic.ttf) format("truetype");font-weight:900;font-style:italic;font-display:swap}:root{--uf-background:0 0% 100%;--uf-foreground:0 0% 3.9%;--uf-card:0 0% 98%;--uf-card-foreground:0 0% 3.9%;--uf-popover:0 0% 100%;--uf-popover-foreground:0 0% 3.9%;--uf-primary:0 0% 9%;--uf-primary-foreground:0 0% 98%;--uf-secondary:0 0% 95%;--uf-secondary-foreground:0 0% 9%;--uf-muted:0 0% 92%;--uf-muted-foreground:0 0% 40%;--uf-accent:0 0% 90%;--uf-accent-foreground:0 0% 9%;--uf-destructive:0 84.2% 60.2%;--uf-destructive-foreground:0 0% 98%;--uf-border:0 0% 85%;--uf-input:0 0% 89.8%;--uf-ring:0 0% 3.9%;--uf-radius:0.5rem}.uf-dark{--uf-background:0 0% 5%;--uf-foreground:0 0% 98%;--uf-card:0 0% 10%;--uf-card-foreground:0 0% 98%;--uf-popover:0 0% 10%;--uf-popover-foreground:0 0% 98%;--uf-primary:0 0% 98%;--uf-primary-foreground:0 0% 9%;--uf-secondary:0 0% 16%;--uf-secondary-foreground:0 0% 98%;--uf-muted:0 0% 20%;--uf-muted-foreground:0 0% 60%;--uf-accent:0 0% 20%;--uf-accent-foreground:0 0% 98%;--uf-destructive:0 62.8% 30.6%;--uf-destructive-foreground:0 0% 98%;--uf-border:0 0% 20%;--uf-input:0 0% 20%;--uf-ring:0 0% 83.1%}[class*=uf-],[data-radix-popper-content-wrapper],[data-radix-portal]{font-family:Sons,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif!important}[class*=uf-] *,[data-radix-popper-content-wrapper] *,[data-radix-portal] *{font-family:inherit}.placeholder\:uf-text-muted-foreground::-moz-placeholder{color:hsl(var(--uf-muted-foreground))}.placeholder\:uf-text-muted-foreground::placeholder{color:hsl(var(--uf-muted-foreground))}.hover\:uf-bg-accent:hover{background-color:hsl(var(--uf-accent))}.hover\:uf-bg-card\/50:hover{background-color:hsl(var(--uf-card)/.5)}.hover\:uf-bg-destructive\/90:hover{background-color:hsl(var(--uf-destructive)/.9)}.hover\:uf-bg-primary\/90:hover{background-color:hsl(var(--uf-primary)/.9)}.hover\:uf-bg-secondary:hover{background-color:hsl(var(--uf-secondary))}.hover\:uf-bg-secondary\/80:hover{background-color:hsl(var(--uf-secondary)/.8)}.hover\:uf-text-accent-foreground:hover{color:hsl(var(--uf-accent-foreground))}.hover\:uf-text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:uf-text-foreground:hover{color:hsl(var(--uf-foreground))}.hover\:uf-text-muted-foreground:hover{color:hsl(var(--uf-muted-foreground))}.hover\:uf-underline:hover{text-decoration-line:underline}.hover\:uf-opacity-100:hover{opacity:1}.hover\:uf-opacity-90:hover{opacity:.9}.focus\:uf-bg-accent:focus{background-color:hsl(var(--uf-accent))}.focus\:uf-text-accent-foreground:focus{color:hsl(var(--uf-accent-foreground))}.focus\:uf-text-foreground:focus{color:hsl(var(--uf-foreground))}.focus\:uf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:uf-ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:uf-ring-1:focus,.focus\:uf-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:uf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:uf-ring-ring:focus{--tw-ring-color:hsl(var(--uf-ring))}.focus\:uf-ring-ring\/30:focus{--tw-ring-color:hsl(var(--uf-ring)/0.3)}.focus\:uf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:uf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:uf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:uf-ring-ring:focus-visible{--tw-ring-color:hsl(var(--uf-ring))}.focus-visible\:uf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:uf-pointer-events-none:disabled{pointer-events:none}.disabled\:uf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:\!uf-bg-muted:disabled{background-color:hsl(var(--uf-muted))!important}.disabled\:uf-text-muted-foreground:disabled{color:hsl(var(--uf-muted-foreground))}.disabled\:uf-opacity-50:disabled{opacity:.5}.uf-group:hover .group-hover\:uf-text-foreground{color:hsl(var(--uf-foreground))}.data-\[disabled\]\:uf-pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:uf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:uf-translate-y-1[data-side=bottom],.data-\[side\=left\]\:uf--translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:uf--translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:uf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:uf-translate-x-1[data-side=right],.data-\[side\=top\]\:uf--translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:uf--translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=open\]\:uf-bg-accent[data-state=open]{background-color:hsl(var(--uf-accent))}.data-\[state\=open\]\:uf-text-muted-foreground[data-state=open]{color:hsl(var(--uf-muted-foreground))}.data-\[disabled\]\:uf-opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:uf-animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:uf-animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:uf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:uf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:uf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:uf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:uf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:uf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:uf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:uf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:uf-slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=open\]\:uf-slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.dark\:uf-border-zinc-700:is([class=uf-dark] *){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity,1))}.dark\:uf-bg-black:is([class=uf-dark] *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.dark\:uf-text-white:is([class=uf-dark] *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:uf-text-zinc-400:is([class=uf-dark] *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\:hover\:uf-text-white:hover:is([class=uf-dark] *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:uf-bottom-auto{bottom:auto}.sm\:uf-left-\[50\%\]{left:50%}.sm\:uf-right-auto{right:auto}.sm\:uf-top-\[50\%\]{top:50%}.sm\:uf-max-w-\[400px\]{max-width:400px}.sm\:uf-translate-x-\[-50\%\]{--tw-translate-x:-50%}.sm\:uf-translate-x-\[-50\%\],.sm\:uf-translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:uf-translate-y-\[-50\%\]{--tw-translate-y:-50%}.sm\:uf-flex-row{flex-direction:row}.sm\:uf-justify-end{justify-content:flex-end}.sm\:uf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sm\:uf-rounded-3xl{border-radius:1.5rem}.sm\:uf-text-left{text-align:left}.sm\:data-\[state\=closed\]\:uf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.sm\:data-\[state\=open\]\:uf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.sm\:data-\[state\=closed\]\:uf-slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.sm\:data-\[state\=closed\]\:uf-slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.sm\:data-\[state\=open\]\:uf-slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.sm\:data-\[state\=open\]\:uf-slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}}.\[\&\:\:-webkit-scrollbar\]\:uf-hidden::-webkit-scrollbar{display:none}.\[\&\>button\]\:uf-hidden>button{display:none}.\[\&\>span\]\:uf-line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>span\]\:uf-flex-1>span{flex:1 1 0%}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unifold/connect-react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "Unifold Connect React - Complete React SDK with UI components for crypto deposits",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@tanstack/react-query": "^5.62.15",
|
|
27
|
-
"@unifold/core": "0.1.
|
|
28
|
-
"@unifold/react-provider": "0.1.
|
|
29
|
-
"@unifold/ui-react": "0.1.
|
|
27
|
+
"@unifold/core": "0.1.16",
|
|
28
|
+
"@unifold/react-provider": "0.1.16",
|
|
29
|
+
"@unifold/ui-react": "0.1.16"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/react": "^19.0.0",
|