@unifold/connect-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 CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React from 'react';
3
- export { Button, ButtonProps } from '@unifold/ui-react';
4
- export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
3
+ export { AllowedCountryResult, Button, ButtonProps, useAllowedCountry } from '@unifold/ui-react';
4
+ export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, IpAddressResponse, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
5
5
 
6
6
  interface UnifoldConnectProviderConfig {
7
7
  publishableKey: string;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React from 'react';
3
- export { Button, ButtonProps } from '@unifold/ui-react';
4
- export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
3
+ export { AllowedCountryResult, Button, ButtonProps, useAllowedCountry } from '@unifold/ui-react';
4
+ export { AutoSwapRequest, AutoSwapResponse, CreateDepositAddressRequest, DepositAddressResponse, ExecutionStatus, FeaturedToken, FiatCurrenciesResponse, FiatCurrency, I18nStrings, IconUrl, IpAddressResponse, MeldQuote, MeldQuotesRequest, MeldQuotesResponse, MeldSessionRequest, MeldSessionResponse, PaymentNetwork, ProjectConfigResponse, QueryExecutionsRequest, QueryExecutionsResponse, SOLANA_USDC_ADDRESS, SupportedChain, SupportedDepositTokensResponse, SupportedToken, TokenChain, TokenChainIconUrl, TokenChainsResponse, UserIpInfo, Wallet, createDepositAddress, createMeldSession, getApiBaseUrl, getChainName, getFiatCurrencies, getIconUrl, getIconUrlWithCdn, getIpAddress, getMeldQuotes, getPreferredIconUrl, getProjectConfig, getSupportedDepositTokens, getTokenChains, getWalletByChainType, i18n, queryExecutions, setApiConfig, useUserIp } from '@unifold/core';
5
5
 
6
6
  interface UnifoldConnectProviderConfig {
7
7
  publishableKey: string;
package/dist/index.js CHANGED
@@ -1163,6 +1163,7 @@ __export(index_exports, {
1163
1163
  getFiatCurrencies: () => getFiatCurrencies,
1164
1164
  getIconUrl: () => getIconUrl,
1165
1165
  getIconUrlWithCdn: () => getIconUrlWithCdn,
1166
+ getIpAddress: () => getIpAddress,
1166
1167
  getMeldQuotes: () => getMeldQuotes,
1167
1168
  getPreferredIconUrl: () => getPreferredIconUrl,
1168
1169
  getProjectConfig: () => getProjectConfig,
@@ -1172,6 +1173,7 @@ __export(index_exports, {
1172
1173
  i18n: () => i18n,
1173
1174
  queryExecutions: () => queryExecutions,
1174
1175
  setApiConfig: () => setApiConfig,
1176
+ useAllowedCountry: () => useAllowedCountry,
1175
1177
  useUnifold: () => useUnifold2,
1176
1178
  useUserIp: () => useUserIp
1177
1179
  });
@@ -1380,6 +1382,21 @@ var Info = createLucideIcon("Info", [
1380
1382
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
1381
1383
  ]);
1382
1384
 
1385
+ // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/map-pin-off.js
1386
+ var MapPinOff = createLucideIcon("MapPinOff", [
1387
+ ["path", { d: "M12.75 7.09a3 3 0 0 1 2.16 2.16", key: "1d4wjd" }],
1388
+ [
1389
+ "path",
1390
+ {
1391
+ d: "M17.072 17.072c-1.634 2.17-3.527 3.912-4.471 4.727a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 1.432-4.568",
1392
+ key: "12yil7"
1393
+ }
1394
+ ],
1395
+ ["path", { d: "m2 2 20 20", key: "1ooewy" }],
1396
+ ["path", { d: "M8.475 2.818A8 8 0 0 1 20 10c0 1.183-.31 2.377-.81 3.533", key: "lhrkcz" }],
1397
+ ["path", { d: "M9.13 9.13a3 3 0 0 0 3.74 3.74", key: "13wojd" }]
1398
+ ]);
1399
+
1383
1400
  // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js
1384
1401
  var Search = createLucideIcon("Search", [
1385
1402
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }],
@@ -1398,6 +1415,19 @@ var ShieldCheck = createLucideIcon("ShieldCheck", [
1398
1415
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
1399
1416
  ]);
1400
1417
 
1418
+ // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/triangle-alert.js
1419
+ var TriangleAlert = createLucideIcon("TriangleAlert", [
1420
+ [
1421
+ "path",
1422
+ {
1423
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
1424
+ key: "wmoenq"
1425
+ }
1426
+ ],
1427
+ ["path", { d: "M12 9v4", key: "juzpu7" }],
1428
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
1429
+ ]);
1430
+
1401
1431
  // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js
1402
1432
  var X = createLucideIcon("X", [
1403
1433
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
@@ -6232,7 +6262,9 @@ function getChainName(chains, chainType, chainId) {
6232
6262
  async function getProjectConfig(publishableKey) {
6233
6263
  const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
6234
6264
  validatePublishableKey(pk);
6235
- const response = await fetch(`${API_BASE_URL}/v1/public/projects/config`, {
6265
+ const url = `${API_BASE_URL}/v1/public/projects/config`;
6266
+ console.log("[getProjectConfig] Fetching from:", url, "with key:", pk);
6267
+ const response = await fetch(url, {
6236
6268
  method: "GET",
6237
6269
  headers: {
6238
6270
  accept: "application/json",
@@ -6242,19 +6274,22 @@ async function getProjectConfig(publishableKey) {
6242
6274
  if (!response.ok) {
6243
6275
  throw new Error(`Failed to fetch project config: ${response.statusText}`);
6244
6276
  }
6245
- return response.json();
6277
+ const data = await response.json();
6278
+ return data;
6246
6279
  }
6247
- async function getIpViaIpApi() {
6248
- const url = "https://ipapi.co/json";
6249
- const response = await fetch(url);
6280
+ async function getIpAddress() {
6281
+ const response = await fetch(`${API_BASE_URL}/v1/public/ip_address`, {
6282
+ method: "GET",
6283
+ headers: {
6284
+ accept: "application/json"
6285
+ }
6286
+ });
6250
6287
  if (!response.ok) {
6251
- throw new Error(`ipapi.co failed: ${response.statusText}`);
6288
+ throw new Error(
6289
+ `Failed to fetch IP address information: ${response.statusText}`
6290
+ );
6252
6291
  }
6253
- const data = await response.json();
6254
- return {
6255
- alpha2: data.country_code.toLowerCase(),
6256
- state: data.region_code?.toLowerCase()
6257
- };
6292
+ return response.json();
6258
6293
  }
6259
6294
  function useUserIp() {
6260
6295
  const {
@@ -6262,22 +6297,21 @@ function useUserIp() {
6262
6297
  isLoading,
6263
6298
  error
6264
6299
  } = (0, import_react_query2.useQuery)({
6265
- queryKey: ["getUserIpInfo"],
6300
+ queryKey: ["unifold", "userIpInfo"],
6266
6301
  queryFn: async () => {
6267
- try {
6268
- const ipApiData = await getIpViaIpApi();
6269
- console.log("IP detected via ipapi.co:", ipApiData);
6270
- return ipApiData;
6271
- } catch (ipApiError) {
6272
- console.error("IP detection failed:", ipApiError);
6273
- throw ipApiError;
6274
- }
6302
+ const data = await getIpAddress();
6303
+ return {
6304
+ alpha2: data.alpha2.toLowerCase(),
6305
+ alpha3: data.alpha3?.toLowerCase(),
6306
+ country: data.country,
6307
+ state: data.state?.toLowerCase() ?? null,
6308
+ ipAddress: data.ip_address
6309
+ };
6275
6310
  },
6276
6311
  // Cache configuration to reduce API calls
6277
6312
  refetchOnMount: false,
6278
6313
  refetchOnReconnect: true,
6279
6314
  refetchOnWindowFocus: false,
6280
- // Optional: Increase cache duration to 1 hour for even better rate limit protection
6281
6315
  staleTime: 1e3 * 60 * 60,
6282
6316
  // 1 hour - data considered fresh for 1 hour
6283
6317
  gcTime: 1e3 * 60 * 60 * 24
@@ -10347,6 +10381,7 @@ var import_jsx_runtime33 = require("react/jsx-runtime");
10347
10381
  var import_jsx_runtime34 = require("react/jsx-runtime");
10348
10382
  var import_jsx_runtime35 = require("react/jsx-runtime");
10349
10383
  var import_jsx_runtime36 = require("react/jsx-runtime");
10384
+ var import_react_query4 = require("@tanstack/react-query");
10350
10385
  var import_jsx_runtime37 = require("react/jsx-runtime");
10351
10386
  var import_jsx_runtime38 = require("react/jsx-runtime");
10352
10387
  var React52 = __toESM(require("react"), 1);
@@ -10863,9 +10898,24 @@ function DepositDetailContent({ execution }) {
10863
10898
  }
10864
10899
  };
10865
10900
  const formatAmount = (baseUnitAmount, decimals = 6) => {
10901
+ if (!baseUnitAmount) return "\u2014";
10866
10902
  try {
10867
- const amount = Number(baseUnitAmount) / Math.pow(10, decimals);
10868
- return amount.toFixed(2);
10903
+ const value = Number(baseUnitAmount) / Math.pow(10, decimals);
10904
+ if (value === 0) {
10905
+ return "0.00";
10906
+ }
10907
+ if (value >= 1) {
10908
+ return value.toLocaleString("en-US", {
10909
+ minimumFractionDigits: 2,
10910
+ maximumFractionDigits: 2
10911
+ });
10912
+ }
10913
+ return value.toLocaleString("en-US", {
10914
+ minimumFractionDigits: 2,
10915
+ maximumFractionDigits: 8,
10916
+ minimumSignificantDigits: 2,
10917
+ maximumSignificantDigits: 6
10918
+ });
10869
10919
  } catch {
10870
10920
  return "0.00";
10871
10921
  }
@@ -10971,7 +11021,7 @@ function DepositDetailContent({ execution }) {
10971
11021
  /* @__PURE__ */ (0, import_jsx_runtime23.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: [
10972
11022
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Sent" }),
10973
11023
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "uf-text-foreground uf-font-medium", children: [
10974
- formatAmount(execution.source_amount_base_unit),
11024
+ formatAmount(execution.source_amount_base_unit, execution.source_token_metadata?.decimals),
10975
11025
  " ",
10976
11026
  formatCurrency(execution.source_currency)
10977
11027
  ] })
@@ -10979,7 +11029,7 @@ function DepositDetailContent({ execution }) {
10979
11029
  /* @__PURE__ */ (0, import_jsx_runtime23.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: [
10980
11030
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Received" }),
10981
11031
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "uf-text-foreground uf-font-medium", children: [
10982
- formatAmount(execution.destination_amount_base_unit),
11032
+ formatAmount(execution.destination_amount_base_unit, execution.destination_token_metadata?.decimals),
10983
11033
  " ",
10984
11034
  formatCurrency(execution.destination_currency)
10985
11035
  ] })
@@ -12246,40 +12296,28 @@ function CurrencyModal({
12246
12296
  ] }) })
12247
12297
  ] }) });
12248
12298
  }
12249
- async function getIpViaIpApi2() {
12250
- const url = "https://ipapi.co/json";
12251
- const response = await fetch(url);
12252
- if (!response.ok) {
12253
- throw new Error(`ipapi.co failed: ${response.statusText}`);
12254
- }
12255
- const data = await response.json();
12256
- return {
12257
- alpha2: data.country_code.toLowerCase(),
12258
- state: data.region_code?.toLowerCase()
12259
- };
12260
- }
12261
12299
  function useUserIp2() {
12262
12300
  const {
12263
12301
  data: userIpInfo,
12264
12302
  isLoading,
12265
12303
  error
12266
12304
  } = (0, import_react_query3.useQuery)({
12267
- queryKey: ["getUserIpInfo"],
12305
+ queryKey: ["unifold", "userIpInfo"],
12268
12306
  queryFn: async () => {
12269
- try {
12270
- const ipApiData = await getIpViaIpApi2();
12271
- console.log("IP detected via ipapi.co:", ipApiData);
12272
- return ipApiData;
12273
- } catch (ipApiError) {
12274
- console.error("IP detection failed:", ipApiError);
12275
- throw ipApiError;
12276
- }
12307
+ const data = await getIpAddress();
12308
+ console.log("[useUserIp] IP detected:", data);
12309
+ return {
12310
+ alpha2: data.alpha2.toLowerCase(),
12311
+ alpha3: data.alpha3?.toLowerCase(),
12312
+ country: data.country,
12313
+ state: data.state?.toLowerCase() ?? null,
12314
+ ipAddress: data.ip_address
12315
+ };
12277
12316
  },
12278
12317
  // Cache configuration to reduce API calls
12279
12318
  refetchOnMount: false,
12280
12319
  refetchOnReconnect: true,
12281
12320
  refetchOnWindowFocus: false,
12282
- // Optional: Increase cache duration to 1 hour for even better rate limit protection
12283
12321
  staleTime: 1e3 * 60 * 60,
12284
12322
  // 1 hour - data considered fresh for 1 hour
12285
12323
  gcTime: 1e3 * 60 * 60 * 24
@@ -13014,6 +13052,54 @@ function DepositTrackerButton({
13014
13052
  }
13015
13053
  );
13016
13054
  }
13055
+ function useAllowedCountry(publishableKey) {
13056
+ const {
13057
+ data: ipData,
13058
+ isLoading: isIpLoading,
13059
+ error: ipError
13060
+ } = (0, import_react_query4.useQuery)({
13061
+ queryKey: ["unifold", "ipAddress"],
13062
+ queryFn: () => getIpAddress(),
13063
+ refetchOnMount: false,
13064
+ refetchOnReconnect: true,
13065
+ refetchOnWindowFocus: false,
13066
+ staleTime: 1e3 * 60 * 60,
13067
+ // 1 hour
13068
+ gcTime: 1e3 * 60 * 60 * 24
13069
+ // 24 hours
13070
+ });
13071
+ const {
13072
+ data: configData,
13073
+ isLoading: isConfigLoading,
13074
+ error: configError
13075
+ } = (0, import_react_query4.useQuery)({
13076
+ queryKey: ["unifold", "projectConfig", publishableKey],
13077
+ queryFn: () => getProjectConfig(publishableKey),
13078
+ refetchOnMount: false,
13079
+ refetchOnReconnect: true,
13080
+ refetchOnWindowFocus: false,
13081
+ staleTime: 1e3 * 60 * 5,
13082
+ // 5 minutes
13083
+ gcTime: 1e3 * 60 * 60
13084
+ // 1 hour
13085
+ });
13086
+ const isLoading = isIpLoading || isConfigLoading;
13087
+ const error = ipError || configError || null;
13088
+ let isAllowed = null;
13089
+ if (ipData && configData) {
13090
+ const blockedCodes = configData.blocked_country_codes || [];
13091
+ const userCountryUpper = ipData.alpha2.toUpperCase();
13092
+ isAllowed = !blockedCodes.some((code) => code.toUpperCase() === userCountryUpper);
13093
+ }
13094
+ return {
13095
+ isAllowed,
13096
+ // Return lowercase for consistency with useUserIp hook
13097
+ alpha2: ipData?.alpha2?.toLowerCase() ?? null,
13098
+ country: ipData?.country ?? null,
13099
+ isLoading,
13100
+ error
13101
+ };
13102
+ }
13017
13103
  function SkeletonButton({ variant = "default" }) {
13018
13104
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-w-full uf-bg-secondary uf-rounded-xl uf-p-3 uf-flex uf-items-center uf-justify-between uf-animate-pulse", children: [
13019
13105
  /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-flex uf-items-center uf-gap-3", children: [
@@ -13081,6 +13167,7 @@ function DepositModal({
13081
13167
  getProjectConfig(publishableKey).then(setProjectConfig).catch(console.error);
13082
13168
  }
13083
13169
  }, [open, publishableKey, projectConfig]);
13170
+ const { isAllowed, isLoading: isCountryLoading, error: countryError } = useAllowedCountry(publishableKey);
13084
13171
  (0, import_react8.useEffect)(() => {
13085
13172
  if (!open || wallets.length > 0) return;
13086
13173
  let retryTimeout = null;
@@ -13158,39 +13245,56 @@ function DepositModal({
13158
13245
  onClose: handleClose
13159
13246
  }
13160
13247
  ),
13161
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-pb-4 uf-space-y-3", children: !projectConfig ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
13248
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-pb-4 uf-space-y-3", children: isCountryLoading || !projectConfig ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
13162
13249
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SkeletonButton, { variant: "with-icons" }),
13163
13250
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SkeletonButton, { variant: "with-icons" }),
13164
13251
  !hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SkeletonButton, {})
13165
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
13166
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13167
- TransferCryptoButton,
13168
- {
13169
- onClick: () => setView("transfer"),
13170
- title: t3.transferCrypto.title,
13171
- subtitle: t3.transferCrypto.subtitle,
13172
- featuredTokens: projectConfig.transfer_crypto.networks
13173
- }
13174
- ),
13175
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13176
- DepositWithCardButton,
13177
- {
13178
- onClick: () => setView("card"),
13179
- title: t3.depositWithCard.title,
13180
- subtitle: t3.depositWithCard.subtitle,
13181
- paymentNetworks: projectConfig.payment_networks.networks
13182
- }
13183
- ),
13184
- !hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13185
- DepositTrackerButton,
13186
- {
13187
- onClick: () => setDepositsModalOpen(true),
13188
- title: "Deposit Tracker",
13189
- subtitle: "Track your deposit progress",
13190
- badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
13191
- }
13192
- )
13193
- ] }) })
13252
+ ] }) : countryError ? (
13253
+ /* Error state - couldn't verify location */
13254
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
13255
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TriangleAlert, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
13256
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "Unable to Verify Location" }),
13257
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "We couldn't verify your location. Please check your connection and try again." })
13258
+ ] })
13259
+ ) : !isAllowed ? (
13260
+ /* Blocked country state (isAllowed is false or null without error) */
13261
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
13262
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MapPinOff, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
13263
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "No Tokens Available" }),
13264
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "There are no supported tokens available from your current location." })
13265
+ ] })
13266
+ ) : (
13267
+ /* Normal deposit options */
13268
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
13269
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13270
+ TransferCryptoButton,
13271
+ {
13272
+ onClick: () => setView("transfer"),
13273
+ title: t3.transferCrypto.title,
13274
+ subtitle: t3.transferCrypto.subtitle,
13275
+ featuredTokens: projectConfig.transfer_crypto.networks
13276
+ }
13277
+ ),
13278
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13279
+ DepositWithCardButton,
13280
+ {
13281
+ onClick: () => setView("card"),
13282
+ title: t3.depositWithCard.title,
13283
+ subtitle: t3.depositWithCard.subtitle,
13284
+ paymentNetworks: projectConfig.payment_networks.networks
13285
+ }
13286
+ ),
13287
+ !hideDepositTracker && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13288
+ DepositTrackerButton,
13289
+ {
13290
+ onClick: () => setDepositsModalOpen(true),
13291
+ title: "Deposit Tracker",
13292
+ subtitle: "Track your deposit progress",
13293
+ badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
13294
+ }
13295
+ )
13296
+ ] })
13297
+ ) })
13194
13298
  ] }) : view === "transfer" ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
13195
13299
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
13196
13300
  DepositHeader,
@@ -13453,6 +13557,7 @@ function useUnifold2() {
13453
13557
  getFiatCurrencies,
13454
13558
  getIconUrl,
13455
13559
  getIconUrlWithCdn,
13560
+ getIpAddress,
13456
13561
  getMeldQuotes,
13457
13562
  getPreferredIconUrl,
13458
13563
  getProjectConfig,
@@ -13462,6 +13567,7 @@ function useUnifold2() {
13462
13567
  i18n,
13463
13568
  queryExecutions,
13464
13569
  setApiConfig,
13570
+ useAllowedCountry,
13465
13571
  useUnifold,
13466
13572
  useUserIp
13467
13573
  });
@@ -13482,8 +13588,10 @@ lucide-react/dist/esm/icons/dollar-sign.js:
13482
13588
  lucide-react/dist/esm/icons/external-link.js:
13483
13589
  lucide-react/dist/esm/icons/file-text.js:
13484
13590
  lucide-react/dist/esm/icons/info.js:
13591
+ lucide-react/dist/esm/icons/map-pin-off.js:
13485
13592
  lucide-react/dist/esm/icons/search.js:
13486
13593
  lucide-react/dist/esm/icons/shield-check.js:
13594
+ lucide-react/dist/esm/icons/triangle-alert.js:
13487
13595
  lucide-react/dist/esm/icons/x.js:
13488
13596
  lucide-react/dist/esm/icons/zap.js:
13489
13597
  lucide-react/dist/esm/lucide-react.js:
package/dist/index.mjs CHANGED
@@ -1357,6 +1357,21 @@ var Info = createLucideIcon("Info", [
1357
1357
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
1358
1358
  ]);
1359
1359
 
1360
+ // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/map-pin-off.js
1361
+ var MapPinOff = createLucideIcon("MapPinOff", [
1362
+ ["path", { d: "M12.75 7.09a3 3 0 0 1 2.16 2.16", key: "1d4wjd" }],
1363
+ [
1364
+ "path",
1365
+ {
1366
+ d: "M17.072 17.072c-1.634 2.17-3.527 3.912-4.471 4.727a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 1.432-4.568",
1367
+ key: "12yil7"
1368
+ }
1369
+ ],
1370
+ ["path", { d: "m2 2 20 20", key: "1ooewy" }],
1371
+ ["path", { d: "M8.475 2.818A8 8 0 0 1 20 10c0 1.183-.31 2.377-.81 3.533", key: "lhrkcz" }],
1372
+ ["path", { d: "M9.13 9.13a3 3 0 0 0 3.74 3.74", key: "13wojd" }]
1373
+ ]);
1374
+
1360
1375
  // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js
1361
1376
  var Search = createLucideIcon("Search", [
1362
1377
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }],
@@ -1375,6 +1390,19 @@ var ShieldCheck = createLucideIcon("ShieldCheck", [
1375
1390
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
1376
1391
  ]);
1377
1392
 
1393
+ // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/triangle-alert.js
1394
+ var TriangleAlert = createLucideIcon("TriangleAlert", [
1395
+ [
1396
+ "path",
1397
+ {
1398
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
1399
+ key: "wmoenq"
1400
+ }
1401
+ ],
1402
+ ["path", { d: "M12 9v4", key: "juzpu7" }],
1403
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
1404
+ ]);
1405
+
1378
1406
  // ../../node_modules/.pnpm/lucide-react@0.454.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js
1379
1407
  var X = createLucideIcon("X", [
1380
1408
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
@@ -6209,7 +6237,9 @@ function getChainName(chains, chainType, chainId) {
6209
6237
  async function getProjectConfig(publishableKey) {
6210
6238
  const pk = publishableKey || DEFAULT_PUBLISHABLE_KEY;
6211
6239
  validatePublishableKey(pk);
6212
- const response = await fetch(`${API_BASE_URL}/v1/public/projects/config`, {
6240
+ const url = `${API_BASE_URL}/v1/public/projects/config`;
6241
+ console.log("[getProjectConfig] Fetching from:", url, "with key:", pk);
6242
+ const response = await fetch(url, {
6213
6243
  method: "GET",
6214
6244
  headers: {
6215
6245
  accept: "application/json",
@@ -6219,19 +6249,22 @@ async function getProjectConfig(publishableKey) {
6219
6249
  if (!response.ok) {
6220
6250
  throw new Error(`Failed to fetch project config: ${response.statusText}`);
6221
6251
  }
6222
- return response.json();
6252
+ const data = await response.json();
6253
+ return data;
6223
6254
  }
6224
- async function getIpViaIpApi() {
6225
- const url = "https://ipapi.co/json";
6226
- const response = await fetch(url);
6255
+ async function getIpAddress() {
6256
+ const response = await fetch(`${API_BASE_URL}/v1/public/ip_address`, {
6257
+ method: "GET",
6258
+ headers: {
6259
+ accept: "application/json"
6260
+ }
6261
+ });
6227
6262
  if (!response.ok) {
6228
- throw new Error(`ipapi.co failed: ${response.statusText}`);
6263
+ throw new Error(
6264
+ `Failed to fetch IP address information: ${response.statusText}`
6265
+ );
6229
6266
  }
6230
- const data = await response.json();
6231
- return {
6232
- alpha2: data.country_code.toLowerCase(),
6233
- state: data.region_code?.toLowerCase()
6234
- };
6267
+ return response.json();
6235
6268
  }
6236
6269
  function useUserIp() {
6237
6270
  const {
@@ -6239,22 +6272,21 @@ function useUserIp() {
6239
6272
  isLoading,
6240
6273
  error
6241
6274
  } = useQuery({
6242
- queryKey: ["getUserIpInfo"],
6275
+ queryKey: ["unifold", "userIpInfo"],
6243
6276
  queryFn: async () => {
6244
- try {
6245
- const ipApiData = await getIpViaIpApi();
6246
- console.log("IP detected via ipapi.co:", ipApiData);
6247
- return ipApiData;
6248
- } catch (ipApiError) {
6249
- console.error("IP detection failed:", ipApiError);
6250
- throw ipApiError;
6251
- }
6277
+ const data = await getIpAddress();
6278
+ return {
6279
+ alpha2: data.alpha2.toLowerCase(),
6280
+ alpha3: data.alpha3?.toLowerCase(),
6281
+ country: data.country,
6282
+ state: data.state?.toLowerCase() ?? null,
6283
+ ipAddress: data.ip_address
6284
+ };
6252
6285
  },
6253
6286
  // Cache configuration to reduce API calls
6254
6287
  refetchOnMount: false,
6255
6288
  refetchOnReconnect: true,
6256
6289
  refetchOnWindowFocus: false,
6257
- // Optional: Increase cache duration to 1 hour for even better rate limit protection
6258
6290
  staleTime: 1e3 * 60 * 60,
6259
6291
  // 1 hour - data considered fresh for 1 hour
6260
6292
  gcTime: 1e3 * 60 * 60 * 24
@@ -10324,6 +10356,7 @@ import { jsx as jsx162, jsxs as jsxs12 } from "react/jsx-runtime";
10324
10356
  import { jsx as jsx172, jsxs as jsxs13 } from "react/jsx-runtime";
10325
10357
  import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
10326
10358
  import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
10359
+ import { useQuery as useQuery22 } from "@tanstack/react-query";
10327
10360
  import { Fragment as Fragment42, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
10328
10361
  import { jsx as jsx21 } from "react/jsx-runtime";
10329
10362
  import * as React52 from "react";
@@ -10840,9 +10873,24 @@ function DepositDetailContent({ execution }) {
10840
10873
  }
10841
10874
  };
10842
10875
  const formatAmount = (baseUnitAmount, decimals = 6) => {
10876
+ if (!baseUnitAmount) return "\u2014";
10843
10877
  try {
10844
- const amount = Number(baseUnitAmount) / Math.pow(10, decimals);
10845
- return amount.toFixed(2);
10878
+ const value = Number(baseUnitAmount) / Math.pow(10, decimals);
10879
+ if (value === 0) {
10880
+ return "0.00";
10881
+ }
10882
+ if (value >= 1) {
10883
+ return value.toLocaleString("en-US", {
10884
+ minimumFractionDigits: 2,
10885
+ maximumFractionDigits: 2
10886
+ });
10887
+ }
10888
+ return value.toLocaleString("en-US", {
10889
+ minimumFractionDigits: 2,
10890
+ maximumFractionDigits: 8,
10891
+ minimumSignificantDigits: 2,
10892
+ maximumSignificantDigits: 6
10893
+ });
10846
10894
  } catch {
10847
10895
  return "0.00";
10848
10896
  }
@@ -10948,7 +10996,7 @@ function DepositDetailContent({ execution }) {
10948
10996
  /* @__PURE__ */ jsxs42("div", { className: "uf-flex uf-justify-between uf-items-center uf-px-4 uf-py-3 uf-border-b uf-border-border/50", children: [
10949
10997
  /* @__PURE__ */ jsx62("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Sent" }),
10950
10998
  /* @__PURE__ */ jsxs42("span", { className: "uf-text-foreground uf-font-medium", children: [
10951
- formatAmount(execution.source_amount_base_unit),
10999
+ formatAmount(execution.source_amount_base_unit, execution.source_token_metadata?.decimals),
10952
11000
  " ",
10953
11001
  formatCurrency(execution.source_currency)
10954
11002
  ] })
@@ -10956,7 +11004,7 @@ function DepositDetailContent({ execution }) {
10956
11004
  /* @__PURE__ */ jsxs42("div", { className: "uf-flex uf-justify-between uf-items-center uf-px-4 uf-py-3 uf-border-b uf-border-border/50", children: [
10957
11005
  /* @__PURE__ */ jsx62("span", { className: "uf-text-muted-foreground uf-text-sm", children: "Amount Received" }),
10958
11006
  /* @__PURE__ */ jsxs42("span", { className: "uf-text-foreground uf-font-medium", children: [
10959
- formatAmount(execution.destination_amount_base_unit),
11007
+ formatAmount(execution.destination_amount_base_unit, execution.destination_token_metadata?.decimals),
10960
11008
  " ",
10961
11009
  formatCurrency(execution.destination_currency)
10962
11010
  ] })
@@ -12223,40 +12271,28 @@ function CurrencyModal({
12223
12271
  ] }) })
12224
12272
  ] }) });
12225
12273
  }
12226
- async function getIpViaIpApi2() {
12227
- const url = "https://ipapi.co/json";
12228
- const response = await fetch(url);
12229
- if (!response.ok) {
12230
- throw new Error(`ipapi.co failed: ${response.statusText}`);
12231
- }
12232
- const data = await response.json();
12233
- return {
12234
- alpha2: data.country_code.toLowerCase(),
12235
- state: data.region_code?.toLowerCase()
12236
- };
12237
- }
12238
12274
  function useUserIp2() {
12239
12275
  const {
12240
12276
  data: userIpInfo,
12241
12277
  isLoading,
12242
12278
  error
12243
12279
  } = useQuery2({
12244
- queryKey: ["getUserIpInfo"],
12280
+ queryKey: ["unifold", "userIpInfo"],
12245
12281
  queryFn: async () => {
12246
- try {
12247
- const ipApiData = await getIpViaIpApi2();
12248
- console.log("IP detected via ipapi.co:", ipApiData);
12249
- return ipApiData;
12250
- } catch (ipApiError) {
12251
- console.error("IP detection failed:", ipApiError);
12252
- throw ipApiError;
12253
- }
12282
+ const data = await getIpAddress();
12283
+ console.log("[useUserIp] IP detected:", data);
12284
+ return {
12285
+ alpha2: data.alpha2.toLowerCase(),
12286
+ alpha3: data.alpha3?.toLowerCase(),
12287
+ country: data.country,
12288
+ state: data.state?.toLowerCase() ?? null,
12289
+ ipAddress: data.ip_address
12290
+ };
12254
12291
  },
12255
12292
  // Cache configuration to reduce API calls
12256
12293
  refetchOnMount: false,
12257
12294
  refetchOnReconnect: true,
12258
12295
  refetchOnWindowFocus: false,
12259
- // Optional: Increase cache duration to 1 hour for even better rate limit protection
12260
12296
  staleTime: 1e3 * 60 * 60,
12261
12297
  // 1 hour - data considered fresh for 1 hour
12262
12298
  gcTime: 1e3 * 60 * 60 * 24
@@ -12991,6 +13027,54 @@ function DepositTrackerButton({
12991
13027
  }
12992
13028
  );
12993
13029
  }
13030
+ function useAllowedCountry(publishableKey) {
13031
+ const {
13032
+ data: ipData,
13033
+ isLoading: isIpLoading,
13034
+ error: ipError
13035
+ } = useQuery22({
13036
+ queryKey: ["unifold", "ipAddress"],
13037
+ queryFn: () => getIpAddress(),
13038
+ refetchOnMount: false,
13039
+ refetchOnReconnect: true,
13040
+ refetchOnWindowFocus: false,
13041
+ staleTime: 1e3 * 60 * 60,
13042
+ // 1 hour
13043
+ gcTime: 1e3 * 60 * 60 * 24
13044
+ // 24 hours
13045
+ });
13046
+ const {
13047
+ data: configData,
13048
+ isLoading: isConfigLoading,
13049
+ error: configError
13050
+ } = useQuery22({
13051
+ queryKey: ["unifold", "projectConfig", publishableKey],
13052
+ queryFn: () => getProjectConfig(publishableKey),
13053
+ refetchOnMount: false,
13054
+ refetchOnReconnect: true,
13055
+ refetchOnWindowFocus: false,
13056
+ staleTime: 1e3 * 60 * 5,
13057
+ // 5 minutes
13058
+ gcTime: 1e3 * 60 * 60
13059
+ // 1 hour
13060
+ });
13061
+ const isLoading = isIpLoading || isConfigLoading;
13062
+ const error = ipError || configError || null;
13063
+ let isAllowed = null;
13064
+ if (ipData && configData) {
13065
+ const blockedCodes = configData.blocked_country_codes || [];
13066
+ const userCountryUpper = ipData.alpha2.toUpperCase();
13067
+ isAllowed = !blockedCodes.some((code) => code.toUpperCase() === userCountryUpper);
13068
+ }
13069
+ return {
13070
+ isAllowed,
13071
+ // Return lowercase for consistency with useUserIp hook
13072
+ alpha2: ipData?.alpha2?.toLowerCase() ?? null,
13073
+ country: ipData?.country ?? null,
13074
+ isLoading,
13075
+ error
13076
+ };
13077
+ }
12994
13078
  function SkeletonButton({ variant = "default" }) {
12995
13079
  return /* @__PURE__ */ jsxs16("div", { className: "uf-w-full uf-bg-secondary uf-rounded-xl uf-p-3 uf-flex uf-items-center uf-justify-between uf-animate-pulse", children: [
12996
13080
  /* @__PURE__ */ jsxs16("div", { className: "uf-flex uf-items-center uf-gap-3", children: [
@@ -13058,6 +13142,7 @@ function DepositModal({
13058
13142
  getProjectConfig(publishableKey).then(setProjectConfig).catch(console.error);
13059
13143
  }
13060
13144
  }, [open, publishableKey, projectConfig]);
13145
+ const { isAllowed, isLoading: isCountryLoading, error: countryError } = useAllowedCountry(publishableKey);
13061
13146
  useEffect62(() => {
13062
13147
  if (!open || wallets.length > 0) return;
13063
13148
  let retryTimeout = null;
@@ -13135,39 +13220,56 @@ function DepositModal({
13135
13220
  onClose: handleClose
13136
13221
  }
13137
13222
  ),
13138
- /* @__PURE__ */ jsx20("div", { className: "uf-pb-4 uf-space-y-3", children: !projectConfig ? /* @__PURE__ */ jsxs16(Fragment42, { children: [
13223
+ /* @__PURE__ */ jsx20("div", { className: "uf-pb-4 uf-space-y-3", children: isCountryLoading || !projectConfig ? /* @__PURE__ */ jsxs16(Fragment42, { children: [
13139
13224
  /* @__PURE__ */ jsx20(SkeletonButton, { variant: "with-icons" }),
13140
13225
  /* @__PURE__ */ jsx20(SkeletonButton, { variant: "with-icons" }),
13141
13226
  !hideDepositTracker && /* @__PURE__ */ jsx20(SkeletonButton, {})
13142
- ] }) : /* @__PURE__ */ jsxs16(Fragment42, { children: [
13143
- /* @__PURE__ */ jsx20(
13144
- TransferCryptoButton,
13145
- {
13146
- onClick: () => setView("transfer"),
13147
- title: t3.transferCrypto.title,
13148
- subtitle: t3.transferCrypto.subtitle,
13149
- featuredTokens: projectConfig.transfer_crypto.networks
13150
- }
13151
- ),
13152
- /* @__PURE__ */ jsx20(
13153
- DepositWithCardButton,
13154
- {
13155
- onClick: () => setView("card"),
13156
- title: t3.depositWithCard.title,
13157
- subtitle: t3.depositWithCard.subtitle,
13158
- paymentNetworks: projectConfig.payment_networks.networks
13159
- }
13160
- ),
13161
- !hideDepositTracker && /* @__PURE__ */ jsx20(
13162
- DepositTrackerButton,
13163
- {
13164
- onClick: () => setDepositsModalOpen(true),
13165
- title: "Deposit Tracker",
13166
- subtitle: "Track your deposit progress",
13167
- badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
13168
- }
13169
- )
13170
- ] }) })
13227
+ ] }) : countryError ? (
13228
+ /* Error state - couldn't verify location */
13229
+ /* @__PURE__ */ jsxs16("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
13230
+ /* @__PURE__ */ jsx20("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ jsx20(TriangleAlert, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
13231
+ /* @__PURE__ */ jsx20("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "Unable to Verify Location" }),
13232
+ /* @__PURE__ */ jsx20("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "We couldn't verify your location. Please check your connection and try again." })
13233
+ ] })
13234
+ ) : !isAllowed ? (
13235
+ /* Blocked country state (isAllowed is false or null without error) */
13236
+ /* @__PURE__ */ jsxs16("div", { className: "uf-flex uf-flex-col uf-items-center uf-justify-center uf-py-8 uf-px-4 uf-text-center", children: [
13237
+ /* @__PURE__ */ jsx20("div", { className: "uf-w-16 uf-h-16 uf-rounded-full uf-bg-muted uf-flex uf-items-center uf-justify-center uf-mb-4", children: /* @__PURE__ */ jsx20(MapPinOff, { className: "uf-w-8 uf-h-8 uf-text-muted-foreground" }) }),
13238
+ /* @__PURE__ */ jsx20("h3", { className: "uf-text-lg uf-font-semibold uf-text-foreground uf-mb-2", children: "No Tokens Available" }),
13239
+ /* @__PURE__ */ jsx20("p", { className: "uf-text-sm uf-text-muted-foreground uf-max-w-[280px]", children: "There are no supported tokens available from your current location." })
13240
+ ] })
13241
+ ) : (
13242
+ /* Normal deposit options */
13243
+ /* @__PURE__ */ jsxs16(Fragment42, { children: [
13244
+ /* @__PURE__ */ jsx20(
13245
+ TransferCryptoButton,
13246
+ {
13247
+ onClick: () => setView("transfer"),
13248
+ title: t3.transferCrypto.title,
13249
+ subtitle: t3.transferCrypto.subtitle,
13250
+ featuredTokens: projectConfig.transfer_crypto.networks
13251
+ }
13252
+ ),
13253
+ /* @__PURE__ */ jsx20(
13254
+ DepositWithCardButton,
13255
+ {
13256
+ onClick: () => setView("card"),
13257
+ title: t3.depositWithCard.title,
13258
+ subtitle: t3.depositWithCard.subtitle,
13259
+ paymentNetworks: projectConfig.payment_networks.networks
13260
+ }
13261
+ ),
13262
+ !hideDepositTracker && /* @__PURE__ */ jsx20(
13263
+ DepositTrackerButton,
13264
+ {
13265
+ onClick: () => setDepositsModalOpen(true),
13266
+ title: "Deposit Tracker",
13267
+ subtitle: "Track your deposit progress",
13268
+ badge: depositExecutions.length > 0 ? depositExecutions.length : void 0
13269
+ }
13270
+ )
13271
+ ] })
13272
+ ) })
13171
13273
  ] }) : view === "transfer" ? /* @__PURE__ */ jsxs16(Fragment42, { children: [
13172
13274
  /* @__PURE__ */ jsx20(
13173
13275
  DepositHeader,
@@ -13429,6 +13531,7 @@ export {
13429
13531
  getFiatCurrencies,
13430
13532
  getIconUrl,
13431
13533
  getIconUrlWithCdn,
13534
+ getIpAddress,
13432
13535
  getMeldQuotes,
13433
13536
  getPreferredIconUrl,
13434
13537
  getProjectConfig,
@@ -13438,6 +13541,7 @@ export {
13438
13541
  i18n,
13439
13542
  queryExecutions,
13440
13543
  setApiConfig,
13544
+ useAllowedCountry,
13441
13545
  useUnifold2 as useUnifold,
13442
13546
  useUserIp
13443
13547
  };
@@ -13458,8 +13562,10 @@ lucide-react/dist/esm/icons/dollar-sign.js:
13458
13562
  lucide-react/dist/esm/icons/external-link.js:
13459
13563
  lucide-react/dist/esm/icons/file-text.js:
13460
13564
  lucide-react/dist/esm/icons/info.js:
13565
+ lucide-react/dist/esm/icons/map-pin-off.js:
13461
13566
  lucide-react/dist/esm/icons/search.js:
13462
13567
  lucide-react/dist/esm/icons/shield-check.js:
13568
+ lucide-react/dist/esm/icons/triangle-alert.js:
13463
13569
  lucide-react/dist/esm/icons/x.js:
13464
13570
  lucide-react/dist/esm/icons/zap.js:
13465
13571
  lucide-react/dist/esm/lucide-react.js:
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/connect-react",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "Unifold Connect React - Complete React SDK with UI components for crypto deposits",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -24,9 +24,9 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@tanstack/react-query": "^5.62.15",
27
- "@unifold/core": "0.1.13",
28
- "@unifold/react-provider": "0.1.13",
29
- "@unifold/ui-react": "0.1.13"
27
+ "@unifold/core": "0.1.15",
28
+ "@unifold/react-provider": "0.1.15",
29
+ "@unifold/ui-react": "0.1.15"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/react": "^19.0.0",