@unifold/ui-react 0.1.13 → 0.1.15
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 +40 -1
- package/dist/index.d.ts +40 -1
- package/dist/index.js +150 -72
- package/dist/index.mjs +139 -59
- package/dist/styles.css +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -271,6 +271,45 @@ declare const Tooltip: React.FC<TooltipPrimitive.TooltipProps>;
|
|
|
271
271
|
declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
272
272
|
declare const TooltipContent: React.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
273
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Result of the useAllowedCountry hook
|
|
276
|
+
*/
|
|
277
|
+
interface AllowedCountryResult {
|
|
278
|
+
/** Whether the user is in an allowed country. null while loading. */
|
|
279
|
+
isAllowed: boolean | null;
|
|
280
|
+
/** ISO 3166-1 alpha-2 country code in lowercase (e.g., "us", "pt") */
|
|
281
|
+
alpha2: string | null;
|
|
282
|
+
/** Full country name (e.g., "United States", "Portugal") */
|
|
283
|
+
country: string | null;
|
|
284
|
+
/** Whether the hook is still loading data */
|
|
285
|
+
isLoading: boolean;
|
|
286
|
+
/** Error if either API call failed */
|
|
287
|
+
error: Error | null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Hook to determine if the current user is in an allowed country
|
|
291
|
+
*
|
|
292
|
+
* Combines the IP geolocation API with the project's blocked countries configuration
|
|
293
|
+
* to determine if the user should be allowed to access geo-restricted features.
|
|
294
|
+
*
|
|
295
|
+
* @param publishableKey - Optional publishable key for API calls
|
|
296
|
+
* @returns AllowedCountryResult with isAllowed status and location info
|
|
297
|
+
*
|
|
298
|
+
* @example
|
|
299
|
+
* ```tsx
|
|
300
|
+
* function MyComponent() {
|
|
301
|
+
* const { isAllowed, alpha2, country, isLoading, error } = useAllowedCountry();
|
|
302
|
+
*
|
|
303
|
+
* if (isLoading) return <LoadingSpinner />;
|
|
304
|
+
* if (error) return <ErrorMessage error={error} />;
|
|
305
|
+
* if (!isAllowed) return <GeoBlockedModal country={country} />;
|
|
306
|
+
*
|
|
307
|
+
* return <YourContent />;
|
|
308
|
+
* }
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
declare function useAllowedCountry(publishableKey?: string): AllowedCountryResult;
|
|
312
|
+
|
|
274
313
|
interface ThemeContextValue {
|
|
275
314
|
themeClass: string;
|
|
276
315
|
}
|
|
@@ -282,4 +321,4 @@ declare function useTheme(): ThemeContextValue;
|
|
|
282
321
|
|
|
283
322
|
declare function cn(...inputs: ClassValue[]): string;
|
|
284
323
|
|
|
285
|
-
export { Button, type ButtonProps, BuyWithCard, CurrencyListItem, CurrencyListSection, CurrencyModal, DepositDetailContent, DepositExecutionItem, DepositHeader, DepositModal, DepositSuccessToast, DepositTrackerButton, DepositWithCardButton, DepositsModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, StyledQRCode, ThemeProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCrypto, TransferCrypto2, TransferCryptoBase, TransferCryptoButton, buttonVariants, cn, useTheme };
|
|
324
|
+
export { type AllowedCountryResult, Button, type ButtonProps, BuyWithCard, CurrencyListItem, CurrencyListSection, CurrencyModal, DepositDetailContent, DepositExecutionItem, DepositHeader, DepositModal, DepositSuccessToast, DepositTrackerButton, DepositWithCardButton, DepositsModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, StyledQRCode, ThemeProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCrypto, TransferCrypto2, TransferCryptoBase, TransferCryptoButton, buttonVariants, cn, useAllowedCountry, useTheme };
|
package/dist/index.d.ts
CHANGED
|
@@ -271,6 +271,45 @@ declare const Tooltip: React.FC<TooltipPrimitive.TooltipProps>;
|
|
|
271
271
|
declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
272
272
|
declare const TooltipContent: React.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
273
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Result of the useAllowedCountry hook
|
|
276
|
+
*/
|
|
277
|
+
interface AllowedCountryResult {
|
|
278
|
+
/** Whether the user is in an allowed country. null while loading. */
|
|
279
|
+
isAllowed: boolean | null;
|
|
280
|
+
/** ISO 3166-1 alpha-2 country code in lowercase (e.g., "us", "pt") */
|
|
281
|
+
alpha2: string | null;
|
|
282
|
+
/** Full country name (e.g., "United States", "Portugal") */
|
|
283
|
+
country: string | null;
|
|
284
|
+
/** Whether the hook is still loading data */
|
|
285
|
+
isLoading: boolean;
|
|
286
|
+
/** Error if either API call failed */
|
|
287
|
+
error: Error | null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Hook to determine if the current user is in an allowed country
|
|
291
|
+
*
|
|
292
|
+
* Combines the IP geolocation API with the project's blocked countries configuration
|
|
293
|
+
* to determine if the user should be allowed to access geo-restricted features.
|
|
294
|
+
*
|
|
295
|
+
* @param publishableKey - Optional publishable key for API calls
|
|
296
|
+
* @returns AllowedCountryResult with isAllowed status and location info
|
|
297
|
+
*
|
|
298
|
+
* @example
|
|
299
|
+
* ```tsx
|
|
300
|
+
* function MyComponent() {
|
|
301
|
+
* const { isAllowed, alpha2, country, isLoading, error } = useAllowedCountry();
|
|
302
|
+
*
|
|
303
|
+
* if (isLoading) return <LoadingSpinner />;
|
|
304
|
+
* if (error) return <ErrorMessage error={error} />;
|
|
305
|
+
* if (!isAllowed) return <GeoBlockedModal country={country} />;
|
|
306
|
+
*
|
|
307
|
+
* return <YourContent />;
|
|
308
|
+
* }
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
declare function useAllowedCountry(publishableKey?: string): AllowedCountryResult;
|
|
312
|
+
|
|
274
313
|
interface ThemeContextValue {
|
|
275
314
|
themeClass: string;
|
|
276
315
|
}
|
|
@@ -282,4 +321,4 @@ declare function useTheme(): ThemeContextValue;
|
|
|
282
321
|
|
|
283
322
|
declare function cn(...inputs: ClassValue[]): string;
|
|
284
323
|
|
|
285
|
-
export { Button, type ButtonProps, BuyWithCard, CurrencyListItem, CurrencyListSection, CurrencyModal, DepositDetailContent, DepositExecutionItem, DepositHeader, DepositModal, DepositSuccessToast, DepositTrackerButton, DepositWithCardButton, DepositsModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, StyledQRCode, ThemeProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCrypto, TransferCrypto2, TransferCryptoBase, TransferCryptoButton, buttonVariants, cn, useTheme };
|
|
324
|
+
export { type AllowedCountryResult, Button, type ButtonProps, BuyWithCard, CurrencyListItem, CurrencyListSection, CurrencyModal, DepositDetailContent, DepositExecutionItem, DepositHeader, DepositModal, DepositSuccessToast, DepositTrackerButton, DepositWithCardButton, DepositsModal, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, StyledQRCode, ThemeProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCrypto, TransferCrypto2, TransferCryptoBase, TransferCryptoButton, buttonVariants, cn, useAllowedCountry, useTheme };
|
package/dist/index.js
CHANGED
|
@@ -75,6 +75,7 @@ __export(index_exports, {
|
|
|
75
75
|
TransferCryptoButton: () => TransferCryptoButton,
|
|
76
76
|
buttonVariants: () => buttonVariants,
|
|
77
77
|
cn: () => cn,
|
|
78
|
+
useAllowedCountry: () => useAllowedCountry,
|
|
78
79
|
useTheme: () => useTheme
|
|
79
80
|
});
|
|
80
81
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -494,9 +495,24 @@ function DepositDetailContent({ execution }) {
|
|
|
494
495
|
}
|
|
495
496
|
};
|
|
496
497
|
const formatAmount = (baseUnitAmount, decimals = 6) => {
|
|
498
|
+
if (!baseUnitAmount) return "\u2014";
|
|
497
499
|
try {
|
|
498
|
-
const
|
|
499
|
-
|
|
500
|
+
const value = Number(baseUnitAmount) / Math.pow(10, decimals);
|
|
501
|
+
if (value === 0) {
|
|
502
|
+
return "0.00";
|
|
503
|
+
}
|
|
504
|
+
if (value >= 1) {
|
|
505
|
+
return value.toLocaleString("en-US", {
|
|
506
|
+
minimumFractionDigits: 2,
|
|
507
|
+
maximumFractionDigits: 2
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
return value.toLocaleString("en-US", {
|
|
511
|
+
minimumFractionDigits: 2,
|
|
512
|
+
maximumFractionDigits: 8,
|
|
513
|
+
minimumSignificantDigits: 2,
|
|
514
|
+
maximumSignificantDigits: 6
|
|
515
|
+
});
|
|
500
516
|
} catch {
|
|
501
517
|
return "0.00";
|
|
502
518
|
}
|
|
@@ -602,7 +618,7 @@ function DepositDetailContent({ execution }) {
|
|
|
602
618
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "uf-flex uf-justify-between uf-items-center uf-px-4 uf-py-3 uf-border-b uf-border-border/50", children: [
|
|
603
619
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Sent" }),
|
|
604
620
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "uf-text-foreground uf-font-medium", children: [
|
|
605
|
-
formatAmount(execution.source_amount_base_unit),
|
|
621
|
+
formatAmount(execution.source_amount_base_unit, execution.source_token_metadata?.decimals),
|
|
606
622
|
" ",
|
|
607
623
|
formatCurrency(execution.source_currency)
|
|
608
624
|
] })
|
|
@@ -610,7 +626,7 @@ function DepositDetailContent({ execution }) {
|
|
|
610
626
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "uf-flex uf-justify-between uf-items-center uf-px-4 uf-py-3 uf-border-b uf-border-border/50", children: [
|
|
611
627
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Received" }),
|
|
612
628
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "uf-text-foreground uf-font-medium", children: [
|
|
613
|
-
formatAmount(execution.destination_amount_base_unit),
|
|
629
|
+
formatAmount(execution.destination_amount_base_unit, execution.destination_token_metadata?.decimals),
|
|
614
630
|
" ",
|
|
615
631
|
formatCurrency(execution.destination_currency)
|
|
616
632
|
] })
|
|
@@ -1782,7 +1798,7 @@ function TransferCrypto(props) {
|
|
|
1782
1798
|
// src/components/deposits/BuyWithCard.tsx
|
|
1783
1799
|
var import_react7 = require("react");
|
|
1784
1800
|
var import_lucide_react10 = require("lucide-react");
|
|
1785
|
-
var
|
|
1801
|
+
var import_core8 = require("@unifold/core");
|
|
1786
1802
|
|
|
1787
1803
|
// src/components/deposits/CurrencyModal.tsx
|
|
1788
1804
|
var import_react6 = require("react");
|
|
@@ -1935,40 +1951,29 @@ function CurrencyModal({
|
|
|
1935
1951
|
|
|
1936
1952
|
// src/hooks/use-user-ip.ts
|
|
1937
1953
|
var import_react_query = require("@tanstack/react-query");
|
|
1938
|
-
|
|
1939
|
-
const url = "https://ipapi.co/json";
|
|
1940
|
-
const response = await fetch(url);
|
|
1941
|
-
if (!response.ok) {
|
|
1942
|
-
throw new Error(`ipapi.co failed: ${response.statusText}`);
|
|
1943
|
-
}
|
|
1944
|
-
const data = await response.json();
|
|
1945
|
-
return {
|
|
1946
|
-
alpha2: data.country_code.toLowerCase(),
|
|
1947
|
-
state: data.region_code?.toLowerCase()
|
|
1948
|
-
};
|
|
1949
|
-
}
|
|
1954
|
+
var import_core7 = require("@unifold/core");
|
|
1950
1955
|
function useUserIp() {
|
|
1951
1956
|
const {
|
|
1952
1957
|
data: userIpInfo,
|
|
1953
1958
|
isLoading,
|
|
1954
1959
|
error
|
|
1955
1960
|
} = (0, import_react_query.useQuery)({
|
|
1956
|
-
queryKey: ["
|
|
1961
|
+
queryKey: ["unifold", "userIpInfo"],
|
|
1957
1962
|
queryFn: async () => {
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1963
|
+
const data = await (0, import_core7.getIpAddress)();
|
|
1964
|
+
console.log("[useUserIp] IP detected:", data);
|
|
1965
|
+
return {
|
|
1966
|
+
alpha2: data.alpha2.toLowerCase(),
|
|
1967
|
+
alpha3: data.alpha3?.toLowerCase(),
|
|
1968
|
+
country: data.country,
|
|
1969
|
+
state: data.state?.toLowerCase() ?? null,
|
|
1970
|
+
ipAddress: data.ip_address
|
|
1971
|
+
};
|
|
1966
1972
|
},
|
|
1967
1973
|
// Cache configuration to reduce API calls
|
|
1968
1974
|
refetchOnMount: false,
|
|
1969
1975
|
refetchOnReconnect: true,
|
|
1970
1976
|
refetchOnWindowFocus: false,
|
|
1971
|
-
// Optional: Increase cache duration to 1 hour for even better rate limit protection
|
|
1972
1977
|
staleTime: 1e3 * 60 * 60,
|
|
1973
1978
|
// 1 hour - data considered fresh for 1 hour
|
|
1974
1979
|
gcTime: 1e3 * 60 * 60 * 24
|
|
@@ -2054,7 +2059,7 @@ function BuyWithCard({
|
|
|
2054
2059
|
const [preferredCurrencyCodes, setPreferredCurrencyCodes] = (0, import_react7.useState)([]);
|
|
2055
2060
|
const [currenciesLoading, setCurrenciesLoading] = (0, import_react7.useState)(true);
|
|
2056
2061
|
const [supportedTokens, setSupportedTokens] = (0, import_react7.useState)([]);
|
|
2057
|
-
const destinationWallet = (0,
|
|
2062
|
+
const destinationWallet = (0, import_core8.getWalletByChainType)(wallets, "ethereum");
|
|
2058
2063
|
const walletDestinationChainId = destinationWallet?.destination_chain_id;
|
|
2059
2064
|
const resolvedDestinationChainId = destinationChainId || walletDestinationChainId;
|
|
2060
2065
|
const displayTokenSymbol = destinationTokenSymbol || supportedTokens[0]?.symbol || "USDC";
|
|
@@ -2065,7 +2070,7 @@ function BuyWithCard({
|
|
|
2065
2070
|
(0, import_react7.useEffect)(() => {
|
|
2066
2071
|
async function fetchFiatCurrencies() {
|
|
2067
2072
|
try {
|
|
2068
|
-
const response = await (0,
|
|
2073
|
+
const response = await (0, import_core8.getFiatCurrencies)(publishableKey);
|
|
2069
2074
|
setFiatCurrencies(response.data);
|
|
2070
2075
|
setPreferredCurrencyCodes(response.preferred || []);
|
|
2071
2076
|
} catch (err) {
|
|
@@ -2091,7 +2096,7 @@ function BuyWithCard({
|
|
|
2091
2096
|
if (isCancelled) return;
|
|
2092
2097
|
setWalletsLoading(true);
|
|
2093
2098
|
try {
|
|
2094
|
-
const response = await (0,
|
|
2099
|
+
const response = await (0, import_core8.createDepositAddress)(
|
|
2095
2100
|
{
|
|
2096
2101
|
external_user_id: userId,
|
|
2097
2102
|
recipient_address: recipientAddress,
|
|
@@ -2124,7 +2129,7 @@ function BuyWithCard({
|
|
|
2124
2129
|
(0, import_react7.useEffect)(() => {
|
|
2125
2130
|
async function fetchSupportedTokens() {
|
|
2126
2131
|
try {
|
|
2127
|
-
const response = await (0,
|
|
2132
|
+
const response = await (0, import_core8.getSupportedDepositTokens)(publishableKey);
|
|
2128
2133
|
setSupportedTokens(response.data);
|
|
2129
2134
|
} catch (err) {
|
|
2130
2135
|
console.error("Error fetching supported tokens:", err);
|
|
@@ -2167,7 +2172,7 @@ function BuyWithCard({
|
|
|
2167
2172
|
source_amount: sourceAmount.toString(),
|
|
2168
2173
|
source_currency_code: currency.toLowerCase()
|
|
2169
2174
|
};
|
|
2170
|
-
const response = await (0,
|
|
2175
|
+
const response = await (0, import_core8.getMeldQuotes)(request, publishableKey);
|
|
2171
2176
|
setQuotes(response.data);
|
|
2172
2177
|
if (hasManualSelection && selectedProvider) {
|
|
2173
2178
|
const manualProviderStillExists = response.data.find(
|
|
@@ -2247,7 +2252,7 @@ function BuyWithCard({
|
|
|
2247
2252
|
const handleContinue = async () => {
|
|
2248
2253
|
if (!selectedProvider) return;
|
|
2249
2254
|
try {
|
|
2250
|
-
const wallet = (0,
|
|
2255
|
+
const wallet = (0, import_core8.getWalletByChainType)(wallets, "ethereum");
|
|
2251
2256
|
if (!wallet?.address) {
|
|
2252
2257
|
setQuotesError("Wallet address not available");
|
|
2253
2258
|
return;
|
|
@@ -2260,7 +2265,7 @@ function BuyWithCard({
|
|
|
2260
2265
|
wallet_address: wallet.address,
|
|
2261
2266
|
source_amount: amount
|
|
2262
2267
|
};
|
|
2263
|
-
const session = await (0,
|
|
2268
|
+
const session = await (0, import_core8.createMeldSession)(sessionRequest, publishableKey);
|
|
2264
2269
|
setOnrampSession({
|
|
2265
2270
|
provider: selectedProvider,
|
|
2266
2271
|
sourceCurrency: currency,
|
|
@@ -2304,7 +2309,7 @@ function BuyWithCard({
|
|
|
2304
2309
|
selectedCurrencyData && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2305
2310
|
"img",
|
|
2306
2311
|
{
|
|
2307
|
-
src: (0,
|
|
2312
|
+
src: (0, import_core8.getPreferredIconUrl)(selectedCurrencyData.icon_urls, "png") || selectedCurrencyData.icon_url,
|
|
2308
2313
|
alt: selectedCurrencyData.name,
|
|
2309
2314
|
className: "uf-w-4 uf-h-4"
|
|
2310
2315
|
}
|
|
@@ -2520,7 +2525,7 @@ function BuyWithCard({
|
|
|
2520
2525
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "uf-h-8 uf-flex uf-items-center uf-justify-center uf-mb-1.5", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2521
2526
|
"img",
|
|
2522
2527
|
{
|
|
2523
|
-
src: (0,
|
|
2528
|
+
src: (0, import_core8.getIconUrlWithCdn)(
|
|
2524
2529
|
`/icons/currencies/png/${onrampSession.sourceCurrency.toLowerCase()}.png`,
|
|
2525
2530
|
assetCdnUrl
|
|
2526
2531
|
),
|
|
@@ -2537,7 +2542,7 @@ function BuyWithCard({
|
|
|
2537
2542
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2538
2543
|
"img",
|
|
2539
2544
|
{
|
|
2540
|
-
src: (0,
|
|
2545
|
+
src: (0, import_core8.getIconUrlWithCdn)("/icons/tokens/png/usdc.png", assetCdnUrl),
|
|
2541
2546
|
alt: "USDC",
|
|
2542
2547
|
className: "uf-w-7 uf-h-7 uf-rounded-full"
|
|
2543
2548
|
}
|
|
@@ -2545,7 +2550,7 @@ function BuyWithCard({
|
|
|
2545
2550
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2546
2551
|
"img",
|
|
2547
2552
|
{
|
|
2548
|
-
src: (0,
|
|
2553
|
+
src: (0, import_core8.getIconUrlWithCdn)("/icons/networks/png/polygon.png", assetCdnUrl),
|
|
2549
2554
|
alt: "Polygon",
|
|
2550
2555
|
className: "uf-w-3.5 uf-h-3.5 uf-absolute -uf-bottom-0.5 -uf-right-0.5 uf-rounded-full"
|
|
2551
2556
|
}
|
|
@@ -2560,7 +2565,7 @@ function BuyWithCard({
|
|
|
2560
2565
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2561
2566
|
"img",
|
|
2562
2567
|
{
|
|
2563
|
-
src: destinationToken?.icon_url || (0,
|
|
2568
|
+
src: destinationToken?.icon_url || (0, import_core8.getIconUrlWithCdn)("/icons/tokens/png/usdc.png", assetCdnUrl),
|
|
2564
2569
|
alt: displayTokenSymbol,
|
|
2565
2570
|
className: "uf-w-7 uf-h-7 uf-rounded-full"
|
|
2566
2571
|
}
|
|
@@ -2720,7 +2725,61 @@ function DepositTrackerButton({
|
|
|
2720
2725
|
}
|
|
2721
2726
|
|
|
2722
2727
|
// src/components/deposits/DepositModal.tsx
|
|
2723
|
-
var
|
|
2728
|
+
var import_core10 = require("@unifold/core");
|
|
2729
|
+
|
|
2730
|
+
// src/hooks/use-allowed-country.ts
|
|
2731
|
+
var import_react_query2 = require("@tanstack/react-query");
|
|
2732
|
+
var import_core9 = require("@unifold/core");
|
|
2733
|
+
function useAllowedCountry(publishableKey) {
|
|
2734
|
+
const {
|
|
2735
|
+
data: ipData,
|
|
2736
|
+
isLoading: isIpLoading,
|
|
2737
|
+
error: ipError
|
|
2738
|
+
} = (0, import_react_query2.useQuery)({
|
|
2739
|
+
queryKey: ["unifold", "ipAddress"],
|
|
2740
|
+
queryFn: () => (0, import_core9.getIpAddress)(),
|
|
2741
|
+
refetchOnMount: false,
|
|
2742
|
+
refetchOnReconnect: true,
|
|
2743
|
+
refetchOnWindowFocus: false,
|
|
2744
|
+
staleTime: 1e3 * 60 * 60,
|
|
2745
|
+
// 1 hour
|
|
2746
|
+
gcTime: 1e3 * 60 * 60 * 24
|
|
2747
|
+
// 24 hours
|
|
2748
|
+
});
|
|
2749
|
+
const {
|
|
2750
|
+
data: configData,
|
|
2751
|
+
isLoading: isConfigLoading,
|
|
2752
|
+
error: configError
|
|
2753
|
+
} = (0, import_react_query2.useQuery)({
|
|
2754
|
+
queryKey: ["unifold", "projectConfig", publishableKey],
|
|
2755
|
+
queryFn: () => (0, import_core9.getProjectConfig)(publishableKey),
|
|
2756
|
+
refetchOnMount: false,
|
|
2757
|
+
refetchOnReconnect: true,
|
|
2758
|
+
refetchOnWindowFocus: false,
|
|
2759
|
+
staleTime: 1e3 * 60 * 5,
|
|
2760
|
+
// 5 minutes
|
|
2761
|
+
gcTime: 1e3 * 60 * 60
|
|
2762
|
+
// 1 hour
|
|
2763
|
+
});
|
|
2764
|
+
const isLoading = isIpLoading || isConfigLoading;
|
|
2765
|
+
const error = ipError || configError || null;
|
|
2766
|
+
let isAllowed = null;
|
|
2767
|
+
if (ipData && configData) {
|
|
2768
|
+
const blockedCodes = configData.blocked_country_codes || [];
|
|
2769
|
+
const userCountryUpper = ipData.alpha2.toUpperCase();
|
|
2770
|
+
isAllowed = !blockedCodes.some((code) => code.toUpperCase() === userCountryUpper);
|
|
2771
|
+
}
|
|
2772
|
+
return {
|
|
2773
|
+
isAllowed,
|
|
2774
|
+
// Return lowercase for consistency with useUserIp hook
|
|
2775
|
+
alpha2: ipData?.alpha2?.toLowerCase() ?? null,
|
|
2776
|
+
country: ipData?.country ?? null,
|
|
2777
|
+
isLoading,
|
|
2778
|
+
error
|
|
2779
|
+
};
|
|
2780
|
+
}
|
|
2781
|
+
|
|
2782
|
+
// src/components/deposits/DepositModal.tsx
|
|
2724
2783
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
2725
2784
|
function SkeletonButton({ variant = "default" }) {
|
|
2726
2785
|
return /* @__PURE__ */ (0, import_jsx_runtime20.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: [
|
|
@@ -2786,9 +2845,10 @@ function DepositModal({
|
|
|
2786
2845
|
}, [theme]);
|
|
2787
2846
|
(0, import_react8.useEffect)(() => {
|
|
2788
2847
|
if (open && !projectConfig) {
|
|
2789
|
-
(0,
|
|
2848
|
+
(0, import_core10.getProjectConfig)(publishableKey).then(setProjectConfig).catch(console.error);
|
|
2790
2849
|
}
|
|
2791
2850
|
}, [open, publishableKey, projectConfig]);
|
|
2851
|
+
const { isAllowed, isLoading: isCountryLoading, error: countryError } = useAllowedCountry(publishableKey);
|
|
2792
2852
|
(0, import_react8.useEffect)(() => {
|
|
2793
2853
|
if (!open || wallets.length > 0) return;
|
|
2794
2854
|
let retryTimeout = null;
|
|
@@ -2797,7 +2857,7 @@ function DepositModal({
|
|
|
2797
2857
|
if (isCancelled) return;
|
|
2798
2858
|
setWalletsLoading(true);
|
|
2799
2859
|
try {
|
|
2800
|
-
const response = await (0,
|
|
2860
|
+
const response = await (0, import_core10.createDepositAddress)(
|
|
2801
2861
|
{
|
|
2802
2862
|
external_user_id: userId,
|
|
2803
2863
|
recipient_address: recipientAddress,
|
|
@@ -2866,39 +2926,56 @@ function DepositModal({
|
|
|
2866
2926
|
onClose: handleClose
|
|
2867
2927
|
}
|
|
2868
2928
|
),
|
|
2869
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "uf-pb-4 uf-space-y-3", children: !projectConfig ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
2929
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "uf-pb-4 uf-space-y-3", children: isCountryLoading || !projectConfig ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
2870
2930
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SkeletonButton, { variant: "with-icons" }),
|
|
2871
2931
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SkeletonButton, { variant: "with-icons" }),
|
|
2872
2932
|
!hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SkeletonButton, {})
|
|
2873
|
-
] }) :
|
|
2874
|
-
/*
|
|
2875
|
-
|
|
2876
|
-
{
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
),
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
{
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2933
|
+
] }) : countryError ? (
|
|
2934
|
+
/* Error state - couldn't verify location */
|
|
2935
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
|
|
2936
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.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_runtime20.jsx)(import_lucide_react14.AlertTriangle, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
2937
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "Unable to Verify Location" }),
|
|
2938
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.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." })
|
|
2939
|
+
] })
|
|
2940
|
+
) : !isAllowed ? (
|
|
2941
|
+
/* Blocked country state (isAllowed is false or null without error) */
|
|
2942
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
|
|
2943
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.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_runtime20.jsx)(import_lucide_react14.MapPinOff, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
2944
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "No Tokens Available" }),
|
|
2945
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.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." })
|
|
2946
|
+
] })
|
|
2947
|
+
) : (
|
|
2948
|
+
/* Normal deposit options */
|
|
2949
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
2950
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2951
|
+
TransferCryptoButton,
|
|
2952
|
+
{
|
|
2953
|
+
onClick: () => setView("transfer"),
|
|
2954
|
+
title: t3.transferCrypto.title,
|
|
2955
|
+
subtitle: t3.transferCrypto.subtitle,
|
|
2956
|
+
featuredTokens: projectConfig.transfer_crypto.networks
|
|
2957
|
+
}
|
|
2958
|
+
),
|
|
2959
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2960
|
+
DepositWithCardButton,
|
|
2961
|
+
{
|
|
2962
|
+
onClick: () => setView("card"),
|
|
2963
|
+
title: t3.depositWithCard.title,
|
|
2964
|
+
subtitle: t3.depositWithCard.subtitle,
|
|
2965
|
+
paymentNetworks: projectConfig.payment_networks.networks
|
|
2966
|
+
}
|
|
2967
|
+
),
|
|
2968
|
+
!hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2969
|
+
DepositTrackerButton,
|
|
2970
|
+
{
|
|
2971
|
+
onClick: () => setDepositsModalOpen(true),
|
|
2972
|
+
title: "Deposit Tracker",
|
|
2973
|
+
subtitle: "Track your deposit progress",
|
|
2974
|
+
badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
|
|
2975
|
+
}
|
|
2976
|
+
)
|
|
2977
|
+
] })
|
|
2978
|
+
) })
|
|
2902
2979
|
] }) : view === "transfer" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
2903
2980
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2904
2981
|
DepositHeader,
|
|
@@ -3076,5 +3153,6 @@ Button.displayName = "Button";
|
|
|
3076
3153
|
TransferCryptoButton,
|
|
3077
3154
|
buttonVariants,
|
|
3078
3155
|
cn,
|
|
3156
|
+
useAllowedCountry,
|
|
3079
3157
|
useTheme
|
|
3080
3158
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/components/deposits/DepositModal.tsx
|
|
2
2
|
import { useState as useState7, useEffect as useEffect6 } from "react";
|
|
3
|
-
import { ChevronRight as ChevronRight7 } from "lucide-react";
|
|
3
|
+
import { ChevronRight as ChevronRight7, MapPinOff, AlertTriangle } from "lucide-react";
|
|
4
4
|
|
|
5
5
|
// src/components/shared/dialog.tsx
|
|
6
6
|
import * as React2 from "react";
|
|
@@ -428,9 +428,24 @@ function DepositDetailContent({ execution }) {
|
|
|
428
428
|
}
|
|
429
429
|
};
|
|
430
430
|
const formatAmount = (baseUnitAmount, decimals = 6) => {
|
|
431
|
+
if (!baseUnitAmount) return "\u2014";
|
|
431
432
|
try {
|
|
432
|
-
const
|
|
433
|
-
|
|
433
|
+
const value = Number(baseUnitAmount) / Math.pow(10, decimals);
|
|
434
|
+
if (value === 0) {
|
|
435
|
+
return "0.00";
|
|
436
|
+
}
|
|
437
|
+
if (value >= 1) {
|
|
438
|
+
return value.toLocaleString("en-US", {
|
|
439
|
+
minimumFractionDigits: 2,
|
|
440
|
+
maximumFractionDigits: 2
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
return value.toLocaleString("en-US", {
|
|
444
|
+
minimumFractionDigits: 2,
|
|
445
|
+
maximumFractionDigits: 8,
|
|
446
|
+
minimumSignificantDigits: 2,
|
|
447
|
+
maximumSignificantDigits: 6
|
|
448
|
+
});
|
|
434
449
|
} catch {
|
|
435
450
|
return "0.00";
|
|
436
451
|
}
|
|
@@ -536,7 +551,7 @@ function DepositDetailContent({ execution }) {
|
|
|
536
551
|
/* @__PURE__ */ jsxs4("div", { className: "uf-flex uf-justify-between uf-items-center uf-px-4 uf-py-3 uf-border-b uf-border-border/50", children: [
|
|
537
552
|
/* @__PURE__ */ jsx6("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Sent" }),
|
|
538
553
|
/* @__PURE__ */ jsxs4("span", { className: "uf-text-foreground uf-font-medium", children: [
|
|
539
|
-
formatAmount(execution.source_amount_base_unit),
|
|
554
|
+
formatAmount(execution.source_amount_base_unit, execution.source_token_metadata?.decimals),
|
|
540
555
|
" ",
|
|
541
556
|
formatCurrency(execution.source_currency)
|
|
542
557
|
] })
|
|
@@ -544,7 +559,7 @@ function DepositDetailContent({ execution }) {
|
|
|
544
559
|
/* @__PURE__ */ jsxs4("div", { className: "uf-flex uf-justify-between uf-items-center uf-px-4 uf-py-3 uf-border-b uf-border-border/50", children: [
|
|
545
560
|
/* @__PURE__ */ jsx6("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Received" }),
|
|
546
561
|
/* @__PURE__ */ jsxs4("span", { className: "uf-text-foreground uf-font-medium", children: [
|
|
547
|
-
formatAmount(execution.destination_amount_base_unit),
|
|
562
|
+
formatAmount(execution.destination_amount_base_unit, execution.destination_token_metadata?.decimals),
|
|
548
563
|
" ",
|
|
549
564
|
formatCurrency(execution.destination_currency)
|
|
550
565
|
] })
|
|
@@ -1884,40 +1899,29 @@ function CurrencyModal({
|
|
|
1884
1899
|
|
|
1885
1900
|
// src/hooks/use-user-ip.ts
|
|
1886
1901
|
import { useQuery } from "@tanstack/react-query";
|
|
1887
|
-
|
|
1888
|
-
const url = "https://ipapi.co/json";
|
|
1889
|
-
const response = await fetch(url);
|
|
1890
|
-
if (!response.ok) {
|
|
1891
|
-
throw new Error(`ipapi.co failed: ${response.statusText}`);
|
|
1892
|
-
}
|
|
1893
|
-
const data = await response.json();
|
|
1894
|
-
return {
|
|
1895
|
-
alpha2: data.country_code.toLowerCase(),
|
|
1896
|
-
state: data.region_code?.toLowerCase()
|
|
1897
|
-
};
|
|
1898
|
-
}
|
|
1902
|
+
import { getIpAddress } from "@unifold/core";
|
|
1899
1903
|
function useUserIp() {
|
|
1900
1904
|
const {
|
|
1901
1905
|
data: userIpInfo,
|
|
1902
1906
|
isLoading,
|
|
1903
1907
|
error
|
|
1904
1908
|
} = useQuery({
|
|
1905
|
-
queryKey: ["
|
|
1909
|
+
queryKey: ["unifold", "userIpInfo"],
|
|
1906
1910
|
queryFn: async () => {
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1911
|
+
const data = await getIpAddress();
|
|
1912
|
+
console.log("[useUserIp] IP detected:", data);
|
|
1913
|
+
return {
|
|
1914
|
+
alpha2: data.alpha2.toLowerCase(),
|
|
1915
|
+
alpha3: data.alpha3?.toLowerCase(),
|
|
1916
|
+
country: data.country,
|
|
1917
|
+
state: data.state?.toLowerCase() ?? null,
|
|
1918
|
+
ipAddress: data.ip_address
|
|
1919
|
+
};
|
|
1915
1920
|
},
|
|
1916
1921
|
// Cache configuration to reduce API calls
|
|
1917
1922
|
refetchOnMount: false,
|
|
1918
1923
|
refetchOnReconnect: true,
|
|
1919
1924
|
refetchOnWindowFocus: false,
|
|
1920
|
-
// Optional: Increase cache duration to 1 hour for even better rate limit protection
|
|
1921
1925
|
staleTime: 1e3 * 60 * 60,
|
|
1922
1926
|
// 1 hour - data considered fresh for 1 hour
|
|
1923
1927
|
gcTime: 1e3 * 60 * 60 * 24
|
|
@@ -2669,7 +2673,64 @@ function DepositTrackerButton({
|
|
|
2669
2673
|
}
|
|
2670
2674
|
|
|
2671
2675
|
// src/components/deposits/DepositModal.tsx
|
|
2672
|
-
import { getProjectConfig, createDepositAddress as createDepositAddress3 } from "@unifold/core";
|
|
2676
|
+
import { getProjectConfig as getProjectConfig2, createDepositAddress as createDepositAddress3 } from "@unifold/core";
|
|
2677
|
+
|
|
2678
|
+
// src/hooks/use-allowed-country.ts
|
|
2679
|
+
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
2680
|
+
import {
|
|
2681
|
+
getIpAddress as getIpAddress2,
|
|
2682
|
+
getProjectConfig
|
|
2683
|
+
} from "@unifold/core";
|
|
2684
|
+
function useAllowedCountry(publishableKey) {
|
|
2685
|
+
const {
|
|
2686
|
+
data: ipData,
|
|
2687
|
+
isLoading: isIpLoading,
|
|
2688
|
+
error: ipError
|
|
2689
|
+
} = useQuery2({
|
|
2690
|
+
queryKey: ["unifold", "ipAddress"],
|
|
2691
|
+
queryFn: () => getIpAddress2(),
|
|
2692
|
+
refetchOnMount: false,
|
|
2693
|
+
refetchOnReconnect: true,
|
|
2694
|
+
refetchOnWindowFocus: false,
|
|
2695
|
+
staleTime: 1e3 * 60 * 60,
|
|
2696
|
+
// 1 hour
|
|
2697
|
+
gcTime: 1e3 * 60 * 60 * 24
|
|
2698
|
+
// 24 hours
|
|
2699
|
+
});
|
|
2700
|
+
const {
|
|
2701
|
+
data: configData,
|
|
2702
|
+
isLoading: isConfigLoading,
|
|
2703
|
+
error: configError
|
|
2704
|
+
} = useQuery2({
|
|
2705
|
+
queryKey: ["unifold", "projectConfig", publishableKey],
|
|
2706
|
+
queryFn: () => getProjectConfig(publishableKey),
|
|
2707
|
+
refetchOnMount: false,
|
|
2708
|
+
refetchOnReconnect: true,
|
|
2709
|
+
refetchOnWindowFocus: false,
|
|
2710
|
+
staleTime: 1e3 * 60 * 5,
|
|
2711
|
+
// 5 minutes
|
|
2712
|
+
gcTime: 1e3 * 60 * 60
|
|
2713
|
+
// 1 hour
|
|
2714
|
+
});
|
|
2715
|
+
const isLoading = isIpLoading || isConfigLoading;
|
|
2716
|
+
const error = ipError || configError || null;
|
|
2717
|
+
let isAllowed = null;
|
|
2718
|
+
if (ipData && configData) {
|
|
2719
|
+
const blockedCodes = configData.blocked_country_codes || [];
|
|
2720
|
+
const userCountryUpper = ipData.alpha2.toUpperCase();
|
|
2721
|
+
isAllowed = !blockedCodes.some((code) => code.toUpperCase() === userCountryUpper);
|
|
2722
|
+
}
|
|
2723
|
+
return {
|
|
2724
|
+
isAllowed,
|
|
2725
|
+
// Return lowercase for consistency with useUserIp hook
|
|
2726
|
+
alpha2: ipData?.alpha2?.toLowerCase() ?? null,
|
|
2727
|
+
country: ipData?.country ?? null,
|
|
2728
|
+
isLoading,
|
|
2729
|
+
error
|
|
2730
|
+
};
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
// src/components/deposits/DepositModal.tsx
|
|
2673
2734
|
import { Fragment as Fragment4, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2674
2735
|
function SkeletonButton({ variant = "default" }) {
|
|
2675
2736
|
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: [
|
|
@@ -2735,9 +2796,10 @@ function DepositModal({
|
|
|
2735
2796
|
}, [theme]);
|
|
2736
2797
|
useEffect6(() => {
|
|
2737
2798
|
if (open && !projectConfig) {
|
|
2738
|
-
|
|
2799
|
+
getProjectConfig2(publishableKey).then(setProjectConfig).catch(console.error);
|
|
2739
2800
|
}
|
|
2740
2801
|
}, [open, publishableKey, projectConfig]);
|
|
2802
|
+
const { isAllowed, isLoading: isCountryLoading, error: countryError } = useAllowedCountry(publishableKey);
|
|
2741
2803
|
useEffect6(() => {
|
|
2742
2804
|
if (!open || wallets.length > 0) return;
|
|
2743
2805
|
let retryTimeout = null;
|
|
@@ -2815,39 +2877,56 @@ function DepositModal({
|
|
|
2815
2877
|
onClose: handleClose
|
|
2816
2878
|
}
|
|
2817
2879
|
),
|
|
2818
|
-
/* @__PURE__ */ jsx20("div", { className: "uf-pb-4 uf-space-y-3", children: !projectConfig ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
|
|
2880
|
+
/* @__PURE__ */ jsx20("div", { className: "uf-pb-4 uf-space-y-3", children: isCountryLoading || !projectConfig ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
|
|
2819
2881
|
/* @__PURE__ */ jsx20(SkeletonButton, { variant: "with-icons" }),
|
|
2820
2882
|
/* @__PURE__ */ jsx20(SkeletonButton, { variant: "with-icons" }),
|
|
2821
2883
|
!hideDepositTracker && /* @__PURE__ */ jsx20(SkeletonButton, {})
|
|
2822
|
-
] }) :
|
|
2823
|
-
/*
|
|
2824
|
-
|
|
2825
|
-
{
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
{
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2884
|
+
] }) : countryError ? (
|
|
2885
|
+
/* Error state - couldn't verify location */
|
|
2886
|
+
/* @__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: [
|
|
2887
|
+
/* @__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(AlertTriangle, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
|
|
2888
|
+
/* @__PURE__ */ jsx20("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "Unable to Verify Location" }),
|
|
2889
|
+
/* @__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." })
|
|
2890
|
+
] })
|
|
2891
|
+
) : !isAllowed ? (
|
|
2892
|
+
/* Blocked country state (isAllowed is false or null without error) */
|
|
2893
|
+
/* @__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: [
|
|
2894
|
+
/* @__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" }) }),
|
|
2895
|
+
/* @__PURE__ */ jsx20("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "No Tokens Available" }),
|
|
2896
|
+
/* @__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." })
|
|
2897
|
+
] })
|
|
2898
|
+
) : (
|
|
2899
|
+
/* Normal deposit options */
|
|
2900
|
+
/* @__PURE__ */ jsxs16(Fragment4, { children: [
|
|
2901
|
+
/* @__PURE__ */ jsx20(
|
|
2902
|
+
TransferCryptoButton,
|
|
2903
|
+
{
|
|
2904
|
+
onClick: () => setView("transfer"),
|
|
2905
|
+
title: t3.transferCrypto.title,
|
|
2906
|
+
subtitle: t3.transferCrypto.subtitle,
|
|
2907
|
+
featuredTokens: projectConfig.transfer_crypto.networks
|
|
2908
|
+
}
|
|
2909
|
+
),
|
|
2910
|
+
/* @__PURE__ */ jsx20(
|
|
2911
|
+
DepositWithCardButton,
|
|
2912
|
+
{
|
|
2913
|
+
onClick: () => setView("card"),
|
|
2914
|
+
title: t3.depositWithCard.title,
|
|
2915
|
+
subtitle: t3.depositWithCard.subtitle,
|
|
2916
|
+
paymentNetworks: projectConfig.payment_networks.networks
|
|
2917
|
+
}
|
|
2918
|
+
),
|
|
2919
|
+
!hideDepositTracker && /* @__PURE__ */ jsx20(
|
|
2920
|
+
DepositTrackerButton,
|
|
2921
|
+
{
|
|
2922
|
+
onClick: () => setDepositsModalOpen(true),
|
|
2923
|
+
title: "Deposit Tracker",
|
|
2924
|
+
subtitle: "Track your deposit progress",
|
|
2925
|
+
badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
|
|
2926
|
+
}
|
|
2927
|
+
)
|
|
2928
|
+
] })
|
|
2929
|
+
) })
|
|
2851
2930
|
] }) : view === "transfer" ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
|
|
2852
2931
|
/* @__PURE__ */ jsx20(
|
|
2853
2932
|
DepositHeader,
|
|
@@ -3024,5 +3103,6 @@ export {
|
|
|
3024
3103
|
TransferCryptoButton,
|
|
3025
3104
|
buttonVariants,
|
|
3026
3105
|
cn,
|
|
3106
|
+
useAllowedCountry,
|
|
3027
3107
|
useTheme
|
|
3028
3108
|
};
|
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
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;.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-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-\[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}: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/ui-react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "Unifold UI React - Deposit and onramp components for React applications",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"lucide-react": "^0.454.0",
|
|
32
32
|
"qr-code-styling": "^1.6.0-rc.1",
|
|
33
33
|
"tailwind-merge": "^2.0.0",
|
|
34
|
-
"@unifold/core": "0.1.
|
|
34
|
+
"@unifold/core": "0.1.15"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/react": "^19.0.0",
|