@coinlist-co/react 0.12.1-rc.6b77fc6 → 0.12.1-rc.9aec85a
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/{chunk-DOSABR7Q.js → chunk-DCW7NQXH.js} +2 -2
- package/dist/{chunk-2YEJXE2V.js → chunk-MOE5S6CE.js} +193 -109
- package/dist/chunk-MOE5S6CE.js.map +1 -0
- package/dist/{chunk-DX4VTV7L.js → chunk-VH34YC3Q.js} +56 -4
- package/dist/chunk-VH34YC3Q.js.map +1 -0
- package/dist/client/index.cjs +1016 -517
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +318 -143
- package/dist/client/index.d.ts +318 -143
- package/dist/client/index.js +804 -437
- package/dist/client/index.js.map +1 -1
- package/dist/server/index.cjs +149 -71
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.cts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +2 -2
- package/dist/{collections-C6b-rJpx.d.ts → token-registry-snapshot-BNBNuDu1.d.ts} +65 -2
- package/dist/{collections-UYVlXbEh.d.cts → token-registry-snapshot-CqI6dXM_.d.cts} +65 -2
- package/dist/{tokens-namespace-C-BxcYMj.d.cts → tokens-namespace-CIWBtgt2.d.cts} +171 -46
- package/dist/{tokens-namespace-C-BxcYMj.d.ts → tokens-namespace-CIWBtgt2.d.ts} +171 -46
- package/dist/universal/index.cjs +218 -77
- package/dist/universal/index.cjs.map +1 -1
- package/dist/universal/index.d.cts +9 -14
- package/dist/universal/index.d.ts +9 -14
- package/dist/universal/index.js +14 -4
- package/package.json +1 -1
- package/dist/chunk-2YEJXE2V.js.map +0 -1
- package/dist/chunk-DX4VTV7L.js.map +0 -1
- /package/dist/{chunk-DOSABR7Q.js.map → chunk-DCW7NQXH.js.map} +0 -0
package/dist/client/index.cjs
CHANGED
|
@@ -59,6 +59,7 @@ __export(client_exports, {
|
|
|
59
59
|
OAUTH_STATE_KEY: () => OAUTH_STATE_KEY,
|
|
60
60
|
OfferAssetCard: () => OfferAssetCard,
|
|
61
61
|
OfferAssetCardUi: () => OfferAssetCardUi,
|
|
62
|
+
OfferLogoUi: () => OfferLogoUi,
|
|
62
63
|
OfferSaleCard: () => OfferSaleCard,
|
|
63
64
|
OfferSaleCardUi: () => OfferSaleCardUi,
|
|
64
65
|
OffersAssetGrid: () => OffersAssetGrid,
|
|
@@ -120,6 +121,7 @@ __export(client_exports, {
|
|
|
120
121
|
quoteOverAsks: () => quoteOverAsks,
|
|
121
122
|
stablecoinIconUrl: () => stablecoinIconUrl,
|
|
122
123
|
submitErc20Approval: () => submitErc20Approval,
|
|
124
|
+
tokenLogoSrcSet: () => tokenLogoSrcSet,
|
|
123
125
|
tokenLogoUrl: () => tokenLogoUrl,
|
|
124
126
|
tokenMetadataOf: () => tokenMetadataOf,
|
|
125
127
|
useCheckoutOfferTokenMetadata: () => useCheckoutOfferTokenMetadata,
|
|
@@ -162,6 +164,7 @@ __export(client_exports, {
|
|
|
162
164
|
useTaxDocument: () => useTaxDocument,
|
|
163
165
|
useTaxDocumentModalViewModel: () => useTaxDocumentModalViewModel,
|
|
164
166
|
useTokenMetadata: () => useTokenMetadata,
|
|
167
|
+
useTokenRegistry: () => useTokenRegistry,
|
|
165
168
|
validateAmount: () => validateAmount,
|
|
166
169
|
validateSellAmount: () => validateSellAmount,
|
|
167
170
|
validateSuperstateAmount: () => validateSuperstateAmount
|
|
@@ -1317,8 +1320,15 @@ async function fetchAllPages(fetchPage, baseParams) {
|
|
|
1317
1320
|
// src/universal/types/pagination.ts
|
|
1318
1321
|
var Cursor = (value) => value;
|
|
1319
1322
|
var PaginatedResponse = {
|
|
1320
|
-
fromDto: (dto, itemMapper) => (
|
|
1321
|
-
|
|
1323
|
+
fromDto: (dto, itemMapper) => PaginatedResponse.fromDtoPage(dto, (items) => items.map(itemMapper)),
|
|
1324
|
+
/**
|
|
1325
|
+
* For a mapper that decides the page as a whole - one that drops items it
|
|
1326
|
+
* cannot map, such as `Offer.listFromDto` - rather than item by item. The
|
|
1327
|
+
* cursors are the wire's either way: dropping an item changes what the
|
|
1328
|
+
* page holds, not where the next page starts.
|
|
1329
|
+
*/
|
|
1330
|
+
fromDtoPage: (dto, pageMapper) => ({
|
|
1331
|
+
data: pageMapper(dto.data),
|
|
1322
1332
|
startingAfter: dto.starting_after ? Cursor(dto.starting_after) : null,
|
|
1323
1333
|
startingBefore: dto.starting_before ? Cursor(dto.starting_before) : null
|
|
1324
1334
|
})
|
|
@@ -1351,6 +1361,40 @@ var Asset = {
|
|
|
1351
1361
|
})
|
|
1352
1362
|
};
|
|
1353
1363
|
|
|
1364
|
+
// src/universal/core/shared/utils/wire.ts
|
|
1365
|
+
function unknownTypeError(dto, model) {
|
|
1366
|
+
const type = dto.type;
|
|
1367
|
+
throw new ValidationError(
|
|
1368
|
+
`${model}.type: unknown type ${JSON.stringify(type)}`
|
|
1369
|
+
);
|
|
1370
|
+
}
|
|
1371
|
+
function requiredString(value, field) {
|
|
1372
|
+
const text = notBlankStringOrNull(value);
|
|
1373
|
+
if (text === null) {
|
|
1374
|
+
throw new ValidationError(
|
|
1375
|
+
`${field}: expected a non-blank string, got ${typeof value === "string" ? "a blank string" : String(value)}`
|
|
1376
|
+
);
|
|
1377
|
+
}
|
|
1378
|
+
return text;
|
|
1379
|
+
}
|
|
1380
|
+
function requiredDate(value, field) {
|
|
1381
|
+
const date = typeof value === "string" ? new Date(value) : null;
|
|
1382
|
+
if (date === null || Number.isNaN(date.getTime())) {
|
|
1383
|
+
throw new ValidationError(
|
|
1384
|
+
`${field}: expected a date, got ${JSON.stringify(value)}`
|
|
1385
|
+
);
|
|
1386
|
+
}
|
|
1387
|
+
return date;
|
|
1388
|
+
}
|
|
1389
|
+
function requiredArray(value, field) {
|
|
1390
|
+
if (!Array.isArray(value)) {
|
|
1391
|
+
throw new ValidationError(
|
|
1392
|
+
`${field}: expected an array, got ${typeof value}`
|
|
1393
|
+
);
|
|
1394
|
+
}
|
|
1395
|
+
return value;
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1354
1398
|
// src/universal/types/blockchain/core.ts
|
|
1355
1399
|
var ETHEREUM_CHAINS = {
|
|
1356
1400
|
ethereum_mainnet: true,
|
|
@@ -1444,25 +1488,69 @@ var Bps = (value) => value;
|
|
|
1444
1488
|
// src/universal/types/offer.ts
|
|
1445
1489
|
var OfferId = (value) => value;
|
|
1446
1490
|
var OfferSlug = (value) => value;
|
|
1491
|
+
var OFFER_TYPES = {
|
|
1492
|
+
"coinlist::token_sale": true,
|
|
1493
|
+
"superstate::swap": true,
|
|
1494
|
+
"ondo::swap": true
|
|
1495
|
+
};
|
|
1496
|
+
var isOfferType = (value) => Object.keys(OFFER_TYPES).includes(value);
|
|
1497
|
+
var OfferEditorial = {
|
|
1498
|
+
/**
|
|
1499
|
+
* `model` prefixes the field in the error (`'Offer'`, `'OfferDetail'`), so
|
|
1500
|
+
* the same three checks name the payload that failed them.
|
|
1501
|
+
*/
|
|
1502
|
+
fromDto: (dto, model) => ({
|
|
1503
|
+
tagline: requiredString(dto.tagline, `${model}.tagline`),
|
|
1504
|
+
bannerUrl: requiredString(dto.banner_url, `${model}.banner_url`),
|
|
1505
|
+
startsAt: requiredDate(dto.starts_at, `${model}.starts_at`)
|
|
1506
|
+
})
|
|
1507
|
+
};
|
|
1447
1508
|
var Offer = {
|
|
1448
1509
|
fromDto: (dto) => {
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
`Offer.tokens: expected an array, got ${typeof dto.tokens}`
|
|
1452
|
-
);
|
|
1453
|
-
}
|
|
1454
|
-
return {
|
|
1510
|
+
const tokens = requiredArray(dto.tokens, "Offer.tokens");
|
|
1511
|
+
const base2 = {
|
|
1455
1512
|
id: OfferId(dto.id),
|
|
1456
1513
|
slug: OfferSlug(dto.slug),
|
|
1457
|
-
type: dto.type,
|
|
1458
|
-
tagline: dto.tagline,
|
|
1459
|
-
bannerUrl: dto.banner_url,
|
|
1460
|
-
logoUrl: dto.logo_url,
|
|
1461
|
-
startsAt: new Date(dto.starts_at),
|
|
1462
1514
|
endsAt: dto.ends_at ? new Date(dto.ends_at) : null,
|
|
1463
|
-
tokens: OfferToken.listFromDto(
|
|
1515
|
+
tokens: OfferToken.listFromDto(tokens)
|
|
1464
1516
|
};
|
|
1465
|
-
|
|
1517
|
+
switch (dto.type) {
|
|
1518
|
+
case "coinlist::token_sale":
|
|
1519
|
+
return {
|
|
1520
|
+
...base2,
|
|
1521
|
+
...OfferEditorial.fromDto(dto, "Offer"),
|
|
1522
|
+
type: dto.type,
|
|
1523
|
+
logoUrl: requiredString(dto.logo_url, "Offer.logo_url")
|
|
1524
|
+
};
|
|
1525
|
+
case "superstate::swap":
|
|
1526
|
+
return {
|
|
1527
|
+
...base2,
|
|
1528
|
+
...OfferEditorial.fromDto(dto, "Offer"),
|
|
1529
|
+
type: dto.type,
|
|
1530
|
+
logoUrl: notBlankStringOrNull(dto.logo_url)
|
|
1531
|
+
};
|
|
1532
|
+
// `tagline`, `banner_url` and `starts_at` arrive as `null` and are left
|
|
1533
|
+
// on the wire: copying them would hand every consumer a `startsAt` that
|
|
1534
|
+
// is 1970 for one variant and a date for the others.
|
|
1535
|
+
case "ondo::swap":
|
|
1536
|
+
return {
|
|
1537
|
+
...base2,
|
|
1538
|
+
type: dto.type,
|
|
1539
|
+
logoUrl: notBlankStringOrNull(dto.logo_url)
|
|
1540
|
+
};
|
|
1541
|
+
default:
|
|
1542
|
+
return unknownTypeError(dto, "Offer");
|
|
1543
|
+
}
|
|
1544
|
+
},
|
|
1545
|
+
/**
|
|
1546
|
+
* Maps a page of offers, dropping every offer whose `type` this SDK does not
|
|
1547
|
+
* name. The same reasoning as {@link OfferToken.listFromDto}: a plain `.map`
|
|
1548
|
+
* would throw out of `fromDto` and, through `PaginatedResponse.fromDto`,
|
|
1549
|
+
* reject the whole page, so one offer of an unknown type would blank the
|
|
1550
|
+
* grid for every offer beside it. A single offer fetched by id still
|
|
1551
|
+
* throws, because there is nothing beside it to keep.
|
|
1552
|
+
*/
|
|
1553
|
+
listFromDto: (dtos) => dtos.filter((dto) => isOfferType(dto.type)).map(Offer.fromDto)
|
|
1466
1554
|
};
|
|
1467
1555
|
var OfferToken = {
|
|
1468
1556
|
fromDto: (dto) => ({
|
|
@@ -1499,76 +1587,69 @@ var OfferSwapContract = {
|
|
|
1499
1587
|
};
|
|
1500
1588
|
var OfferDetail = {
|
|
1501
1589
|
fromDto: (dto) => {
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
if (!Array.isArray(dto.terms)) {
|
|
1513
|
-
throw new ValidationError(
|
|
1514
|
-
`OfferDetail.terms: expected an array, got ${typeof dto.terms}`
|
|
1515
|
-
);
|
|
1516
|
-
}
|
|
1517
|
-
if (!Array.isArray(dto.links)) {
|
|
1518
|
-
throw new ValidationError(
|
|
1519
|
-
`OfferDetail.links: expected an array, got ${typeof dto.links}`
|
|
1520
|
-
);
|
|
1521
|
-
}
|
|
1522
|
-
if (!Array.isArray(dto.faqs)) {
|
|
1523
|
-
throw new ValidationError(
|
|
1524
|
-
`OfferDetail.faqs: expected an array, got ${typeof dto.faqs}`
|
|
1525
|
-
);
|
|
1526
|
-
}
|
|
1527
|
-
if (!Array.isArray(dto.milestones)) {
|
|
1528
|
-
throw new ValidationError(
|
|
1529
|
-
`OfferDetail.milestones: expected an array, got ${typeof dto.milestones}`
|
|
1530
|
-
);
|
|
1531
|
-
}
|
|
1532
|
-
if (!Array.isArray(dto.tokens)) {
|
|
1533
|
-
throw new ValidationError(
|
|
1534
|
-
`OfferDetail.tokens: expected an array, got ${typeof dto.tokens}`
|
|
1535
|
-
);
|
|
1536
|
-
}
|
|
1537
|
-
const swapContracts = dto.swap_contracts === void 0 ? [] : dto.swap_contracts;
|
|
1538
|
-
if (!Array.isArray(swapContracts)) {
|
|
1539
|
-
throw new ValidationError(
|
|
1540
|
-
`OfferDetail.swap_contracts: expected an array, got ${typeof swapContracts}`
|
|
1541
|
-
);
|
|
1542
|
-
}
|
|
1590
|
+
const fundingAssets = requiredArray(
|
|
1591
|
+
dto.funding_assets,
|
|
1592
|
+
"OfferDetail.funding_assets"
|
|
1593
|
+
);
|
|
1594
|
+
const options = requiredArray(dto.options, "OfferDetail.options");
|
|
1595
|
+
const terms = requiredArray(dto.terms, "OfferDetail.terms");
|
|
1596
|
+
const links = requiredArray(dto.links, "OfferDetail.links");
|
|
1597
|
+
const faqs = requiredArray(dto.faqs, "OfferDetail.faqs");
|
|
1598
|
+
const milestones = requiredArray(dto.milestones, "OfferDetail.milestones");
|
|
1599
|
+
const tokens = requiredArray(dto.tokens, "OfferDetail.tokens");
|
|
1543
1600
|
const isin = notBlankStringOrNull(dto.isin);
|
|
1544
1601
|
const ticker = notBlankStringOrNull(dto.ticker);
|
|
1545
|
-
|
|
1602
|
+
const base2 = {
|
|
1546
1603
|
id: OfferId(dto.id),
|
|
1547
1604
|
slug: OfferSlug(dto.slug),
|
|
1548
|
-
type: dto.type,
|
|
1549
1605
|
name: dto.name,
|
|
1550
1606
|
asset: Asset.fromDto(dto.asset),
|
|
1551
|
-
fundingAssets:
|
|
1552
|
-
tokens: OfferToken.listFromDto(
|
|
1553
|
-
swapContracts: swapContracts.map(OfferSwapContract.fromDto),
|
|
1607
|
+
fundingAssets: fundingAssets.map(Asset.fromDto),
|
|
1608
|
+
tokens: OfferToken.listFromDto(tokens),
|
|
1554
1609
|
about: notBlankStringOrNull(dto.about),
|
|
1555
|
-
tagline: dto.tagline,
|
|
1556
|
-
bannerUrl: dto.banner_url,
|
|
1557
|
-
logoUrl: dto.logo_url,
|
|
1558
1610
|
category: dto.category,
|
|
1559
1611
|
issuer: notBlankStringOrNull(dto.issuer),
|
|
1560
1612
|
isin: isin === null ? null : Isin(isin),
|
|
1561
1613
|
ticker: ticker === null ? null : Ticker(ticker),
|
|
1562
1614
|
instrumentType: notBlankStringOrNull(dto.instrument_type),
|
|
1563
1615
|
listingVenue: notBlankStringOrNull(dto.listing_venue),
|
|
1564
|
-
startsAt: new Date(dto.starts_at),
|
|
1565
1616
|
endsAt: dto.ends_at ? new Date(dto.ends_at) : null,
|
|
1566
|
-
faqs:
|
|
1567
|
-
links:
|
|
1568
|
-
milestones:
|
|
1569
|
-
options:
|
|
1570
|
-
terms:
|
|
1617
|
+
faqs: faqs.map(FaqItem.fromDto),
|
|
1618
|
+
links: links.map(Link.fromDto),
|
|
1619
|
+
milestones: milestones.map(Milestone.fromDto),
|
|
1620
|
+
options: options.map(OfferOption.fromDto),
|
|
1621
|
+
terms: terms.map(TermItem.fromDto)
|
|
1571
1622
|
};
|
|
1623
|
+
switch (dto.type) {
|
|
1624
|
+
case "coinlist::token_sale":
|
|
1625
|
+
return {
|
|
1626
|
+
...base2,
|
|
1627
|
+
...OfferEditorial.fromDto(dto, "OfferDetail"),
|
|
1628
|
+
type: dto.type,
|
|
1629
|
+
logoUrl: requiredString(dto.logo_url, "OfferDetail.logo_url")
|
|
1630
|
+
};
|
|
1631
|
+
case "superstate::swap":
|
|
1632
|
+
return {
|
|
1633
|
+
...base2,
|
|
1634
|
+
...OfferEditorial.fromDto(dto, "OfferDetail"),
|
|
1635
|
+
type: dto.type,
|
|
1636
|
+
logoUrl: notBlankStringOrNull(dto.logo_url)
|
|
1637
|
+
};
|
|
1638
|
+
// `tagline`, `banner_url` and `starts_at` arrive as `null` and are left
|
|
1639
|
+
// on the wire, as in `Offer.fromDto`.
|
|
1640
|
+
case "ondo::swap":
|
|
1641
|
+
return {
|
|
1642
|
+
...base2,
|
|
1643
|
+
type: dto.type,
|
|
1644
|
+
logoUrl: notBlankStringOrNull(dto.logo_url),
|
|
1645
|
+
swapContracts: requiredArray(
|
|
1646
|
+
dto.swap_contracts,
|
|
1647
|
+
"OfferDetail.swap_contracts"
|
|
1648
|
+
).map(OfferSwapContract.fromDto)
|
|
1649
|
+
};
|
|
1650
|
+
default:
|
|
1651
|
+
return unknownTypeError(dto, "OfferDetail");
|
|
1652
|
+
}
|
|
1572
1653
|
}
|
|
1573
1654
|
};
|
|
1574
1655
|
var OfferOption = {
|
|
@@ -1787,7 +1868,7 @@ var TOKEN_REGISTRY = {
|
|
|
1787
1868
|
|
|
1788
1869
|
// src/universal/core/checkout/ondo/constants.ts
|
|
1789
1870
|
var ONDO_POLL_INTERVAL_MS = 15e3;
|
|
1790
|
-
var
|
|
1871
|
+
var ONDO_QUOTE_MAX_TTL_MS = 15e3;
|
|
1791
1872
|
var DEFAULT_ONDO_AMOUNT_TO_COMPUTE_PRICE = DecimalString("1000");
|
|
1792
1873
|
var ONDO_SETTLEMENT_ASSET = USDC_SYMBOL;
|
|
1793
1874
|
var DEFAULT_ONDO_SELL_TOKENS_TO_COMPUTE_PRICE = 1;
|
|
@@ -1810,6 +1891,9 @@ function computeOndoSellPrice(transaction) {
|
|
|
1810
1891
|
shares: spendInputAmount
|
|
1811
1892
|
});
|
|
1812
1893
|
}
|
|
1894
|
+
function ondoQuoteOfferDeadline(expiresAt, nowMs = Date.now()) {
|
|
1895
|
+
return new Date(Math.min(expiresAt.getTime(), nowMs + ONDO_QUOTE_MAX_TTL_MS));
|
|
1896
|
+
}
|
|
1813
1897
|
function grossProceeds(expected) {
|
|
1814
1898
|
const raw = expected.quantity.raw + expected.fee.raw;
|
|
1815
1899
|
if (raw > MAX_UINT_256) {
|
|
@@ -2019,10 +2103,14 @@ function parseBlockchainAmount(amount, decimals) {
|
|
|
2019
2103
|
if (/[eE]/.test(trimmed)) {
|
|
2020
2104
|
return { valid: false, reason: { type: "invalid-format" } };
|
|
2021
2105
|
}
|
|
2022
|
-
if (
|
|
2106
|
+
if (trimmed === ".") {
|
|
2023
2107
|
return { valid: false, reason: { type: "invalid-format" } };
|
|
2024
2108
|
}
|
|
2025
|
-
const
|
|
2109
|
+
const normalised = trimmed.replace(/^\./, "0.").replace(/\.$/, "");
|
|
2110
|
+
if (!/^\d+(\.\d+)?$/.test(normalised)) {
|
|
2111
|
+
return { valid: false, reason: { type: "invalid-format" } };
|
|
2112
|
+
}
|
|
2113
|
+
const [, fraction = ""] = normalised.split(".");
|
|
2026
2114
|
if (fraction.length > decimals) {
|
|
2027
2115
|
return {
|
|
2028
2116
|
valid: false,
|
|
@@ -2030,7 +2118,7 @@ function parseBlockchainAmount(amount, decimals) {
|
|
|
2030
2118
|
};
|
|
2031
2119
|
}
|
|
2032
2120
|
try {
|
|
2033
|
-
const raw = (0, import_viem4.parseUnits)(
|
|
2121
|
+
const raw = (0, import_viem4.parseUnits)(normalised, decimals);
|
|
2034
2122
|
if (raw > MAX_UINT_256) {
|
|
2035
2123
|
return { valid: false, reason: { type: "overflow" } };
|
|
2036
2124
|
}
|
|
@@ -3491,7 +3579,7 @@ async function fetchOffersPage(api, params, clientCreds) {
|
|
|
3491
3579
|
Attributes.clientCredentials(clientCreds)
|
|
3492
3580
|
)
|
|
3493
3581
|
});
|
|
3494
|
-
return PaginatedResponse.
|
|
3582
|
+
return PaginatedResponse.fromDtoPage(pageDto, Offer.listFromDto);
|
|
3495
3583
|
}
|
|
3496
3584
|
async function fetchOfferDetails(api, id, clientCreds) {
|
|
3497
3585
|
const dto = await api.send({
|
|
@@ -3753,6 +3841,52 @@ var Erc20NamespaceImpl = class {
|
|
|
3753
3841
|
}
|
|
3754
3842
|
};
|
|
3755
3843
|
|
|
3844
|
+
// src/universal/core/tokens/token-registry-snapshot.ts
|
|
3845
|
+
var TokenRegistrySnapshot = {
|
|
3846
|
+
/** Indexes a `tokens.list()` result. `[]` is a valid, empty snapshot. */
|
|
3847
|
+
fromTokens: (tokens) => ({
|
|
3848
|
+
tokens,
|
|
3849
|
+
byKey: new Map(
|
|
3850
|
+
tokens.map((token) => [registryKey(token.identifier), token])
|
|
3851
|
+
)
|
|
3852
|
+
}),
|
|
3853
|
+
/**
|
|
3854
|
+
* The registry's entry for one token, or `null` when it lists none. The
|
|
3855
|
+
* registry is curated, so `null` is an ordinary answer rather than an
|
|
3856
|
+
* error, and callers fall back to their own display defaults.
|
|
3857
|
+
*/
|
|
3858
|
+
get: (snapshot, token) => snapshot.byKey.get(registryKey(token)) ?? null,
|
|
3859
|
+
/**
|
|
3860
|
+
* The registry's entry for the token an offer is *about*, or `null` when
|
|
3861
|
+
* it lists none of them.
|
|
3862
|
+
*
|
|
3863
|
+
* Resolution follows {@link offerDisplayTokens}: the token a sale
|
|
3864
|
+
* distributes or a swap hands over, never the funding token the user pays
|
|
3865
|
+
* with. An offer deployed on several chains carries one such token per
|
|
3866
|
+
* chain, and the first the registry knows wins - they are the same asset,
|
|
3867
|
+
* so any listed one answers for the offer.
|
|
3868
|
+
*/
|
|
3869
|
+
forOffer: (snapshot, offer) => {
|
|
3870
|
+
for (const token of offerDisplayTokens(offer)) {
|
|
3871
|
+
const metadata = TokenRegistrySnapshot.get(snapshot, token);
|
|
3872
|
+
if (metadata !== null) {
|
|
3873
|
+
return metadata;
|
|
3874
|
+
}
|
|
3875
|
+
}
|
|
3876
|
+
return null;
|
|
3877
|
+
}
|
|
3878
|
+
};
|
|
3879
|
+
function offerDisplayTokens(offer) {
|
|
3880
|
+
const swaps = offer.tokens.filter((token) => token.role === "swap");
|
|
3881
|
+
const distributions = offer.tokens.filter(
|
|
3882
|
+
(token) => token.role === "distribution"
|
|
3883
|
+
);
|
|
3884
|
+
return [...swaps, ...distributions];
|
|
3885
|
+
}
|
|
3886
|
+
function registryKey(token) {
|
|
3887
|
+
return `${token.chain}:${token.address.toLowerCase()}`;
|
|
3888
|
+
}
|
|
3889
|
+
|
|
3756
3890
|
// src/universal/api/nabu/tokens.ts
|
|
3757
3891
|
var import_viem6 = require("viem");
|
|
3758
3892
|
|
|
@@ -4953,7 +5087,7 @@ var CoinListProvider = CoinListContextProvider;
|
|
|
4953
5087
|
var import_react4 = require("react");
|
|
4954
5088
|
|
|
4955
5089
|
// src/client/generated/sdk-styles.gen.ts
|
|
4956
|
-
var sdkStyles = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--clcosdk-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--clcosdk-color-red-400:oklch(70.4% .191 22.216);--clcosdk-color-red-500:oklch(63.7% .237 25.331);--clcosdk-color-amber-500:oklch(76.9% .188 70.08);--clcosdk-color-gray-400:oklch(70.7% .022 261.325);--clcosdk-color-gray-500:oklch(55.1% .027 264.364);--clcosdk-color-black:#000;--clcosdk-spacing:.25rem;--clcosdk-container-sm:24rem;--clcosdk-container-md:28rem;--clcosdk-container-xl:36rem;--clcosdk-text-xs:.75rem;--clcosdk-text-xs--line-height:calc(1 / .75);--clcosdk-text-sm:.875rem;--clcosdk-text-sm--line-height:calc(1.25 / .875);--clcosdk-text-base:1rem;--clcosdk-text-base--line-height:calc(1.5 / 1);--clcosdk-text-lg:1.125rem;--clcosdk-text-lg--line-height:calc(1.75 / 1.125);--clcosdk-font-weight-normal:400;--clcosdk-font-weight-medium:500;--clcosdk-font-weight-semibold:600;--clcosdk-radius-md:.375rem;--clcosdk-radius-lg:.5rem;--clcosdk-radius-xl:.75rem;--clcosdk-radius-2xl:1rem;--clcosdk-ease-out:cubic-bezier(0, 0, .2, 1);--clcosdk-ease-in-out:cubic-bezier(.4, 0, .2, 1);--clcosdk-animate-spin:spin 1s linear infinite;--clcosdk-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--clcosdk-color-brand-primary:var(--color-brand-primary)}}@layer base{.clco-sdk-root{--color-brand-primary:#171717;--color-brand-primary-hover:#000;--color-brand-primary-active:#262626;--color-accent:#2b3a67;--color-accent-hover:#243057;--color-accent-active:#1d2647;--color-accent-focus:#c7d2fe;--color-accent-subtle:#eef1f8;--color-text-primary:#171717;--color-text-secondary:#8c8c8c;--color-text-disabled:#d1d1d1;--color-text-inverse:#fff;--color-background:#fff;--color-surface:#fafafa;--color-section:#f3f3f3;--color-border:#e5e5e5;--color-divider:#ececec;--color-overlay:#00000080;--color-positive:#15803d;--color-positive-subtle:#dcfce7;--color-negative:#dc2626;--color-negative-subtle:#fee2e2;--color-success:#2c8c5e;--color-success-subtle:#e6f4ec;--color-success-border:#cfe9db;--color-warning:#e08a1a;--color-warning-subtle:#fff7ed;--color-warning-border:#fdead7;--color-error:#b42318;--color-error-subtle:#feeceb;--color-error-border:#fbd5d2;--shadow-step-active:0px 0px 10px 0px #0000001a;--shadow-dialog:0px 8px 32px 0px #0000001a;--btn-primary-gradient:linear-gradient(180deg, #262626 0%, #1c1c1c 50%, #0f0f0f 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #00000059, inset 0px 1px 2px 0px #ffffff2e, inset 0px 1px 0px 0px #ffffff1a;--sale-card-surface:linear-gradient(to top, #0a0a0a 0%, #1a1a1a 100%);--color-sale-card-text:#f4f4f5;--color-sale-card-text-muted:#a1a1aa;--color-sale-card-text-strong:#fff;--color-sale-card-border:#ffffff40;--color-sale-card-chrome-border:#ffffff4d;--color-sale-card-chrome-bg:#ffffff26;--color-sale-card-chrome-emphasis-border:#fff6;--color-sale-card-chrome-emphasis-bg:#ffffff40;--color-sale-card-focus-ring:#ffffff80}@media (prefers-color-scheme:dark){.clco-sdk-root:not(:where(.light,.light *)){--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6}}:where(.dark,.dark *) .clco-sdk-root{--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6}.clco-sdk-root{color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.clco-sdk-root *,.clco-sdk-root :before,.clco-sdk-root :after{box-sizing:border-box}.clco-sdk-root button{appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;padding:0}.clco-sdk-root input,.clco-sdk-root textarea,.clco-sdk-root select{font:inherit;color:inherit;background:0 0;border:none;border-radius:0;padding:0}.clco-sdk-root a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.clco-sdk-root ul,.clco-sdk-root ol{margin:0;padding:0;list-style:none}.clco-sdk-root h1,.clco-sdk-root h2,.clco-sdk-root h3,.clco-sdk-root h4,.clco-sdk-root h5,.clco-sdk-root h6,.clco-sdk-root p,.clco-sdk-root figure,.clco-sdk-root blockquote,.clco-sdk-root dl,.clco-sdk-root dd,.clco-sdk-root pre{margin:0}.clco-sdk-root img,.clco-sdk-root svg{max-width:100%;display:block}@keyframes clco-status-ping{0%{opacity:.7;transform:scale(1)}75%,to{opacity:0;transform:scale(3.25)}}.clco-sdk-root .clcosdk-status-dot-ping{animation:1.6s cubic-bezier(0,0,.2,1) infinite clco-status-ping}@media (prefers-reduced-motion:reduce){.clco-sdk-root .clcosdk-status-dot-ping{opacity:0;animation:none}}}@layer components;@layer utilities{.clcosdk\\:pointer-events-none{pointer-events:none}.clcosdk\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.clcosdk\\:absolute{position:absolute}.clcosdk\\:fixed{position:fixed}.clcosdk\\:relative{position:relative}.clcosdk\\:inset-0{inset:0}.clcosdk\\:top-1\\/2{top:50%}.clcosdk\\:top-4{top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:top-full{top:100%}.clcosdk\\:-right-0\\.5{right:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:right-4{right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:right-\\[-14\\%\\]{right:-14%}.clcosdk\\:-bottom-0\\.5{bottom:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:bottom-full{bottom:100%}.clcosdk\\:left-1\\/2{left:50%}.clcosdk\\:z-0{z-index:0}.clcosdk\\:z-10{z-index:10}.clcosdk\\:z-50{z-index:50}.clcosdk\\:order-1{order:1}.clcosdk\\:order-2{order:2}.clcosdk\\:mt-2{margin-top:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-auto{margin-top:auto}.clcosdk\\:mb-2{margin-bottom:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.clcosdk\\:size-2{width:calc(var(--clcosdk-spacing) * 2);height:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:size-3{width:calc(var(--clcosdk-spacing) * 3);height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:size-3\\.5{width:calc(var(--clcosdk-spacing) * 3.5);height:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:size-4{width:calc(var(--clcosdk-spacing) * 4);height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:size-5{width:calc(var(--clcosdk-spacing) * 5);height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:size-10{width:calc(var(--clcosdk-spacing) * 10);height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:size-16{width:calc(var(--clcosdk-spacing) * 16);height:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:size-24{width:calc(var(--clcosdk-spacing) * 24);height:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:size-\\[15rem\\]{width:15rem;height:15rem}.clcosdk\\:size-full{width:100%;height:100%}.clcosdk\\:h-1{height:var(--clcosdk-spacing)}.clcosdk\\:h-3{height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:h-4{height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:h-5{height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:h-6{height:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:h-8{height:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:h-10{height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:h-11{height:calc(var(--clcosdk-spacing) * 11)}.clcosdk\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:h-14{height:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-4{width:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:w-5{width:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:w-6{width:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:w-8{width:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:w-10{width:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-20{width:calc(var(--clcosdk-spacing) * 20)}.clcosdk\\:w-24{width:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:w-32{width:calc(var(--clcosdk-spacing) * 32)}.clcosdk\\:w-40{width:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:w-48{width:calc(var(--clcosdk-spacing) * 48)}.clcosdk\\:w-80{width:calc(var(--clcosdk-spacing) * 80)}.clcosdk\\:w-96{width:calc(var(--clcosdk-spacing) * 96)}.clcosdk\\:w-\\[16px\\]{width:16px}.clcosdk\\:w-\\[28rem\\]{width:28rem}.clcosdk\\:w-\\[448px\\]{width:448px}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-component{width:448px}.clcosdk\\:w-fit{width:fit-content}.clcosdk\\:w-full{width:100%}.clcosdk\\:w-max{width:max-content}.clcosdk\\:max-w-\\[16rem\\]{max-width:16rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[40rem\\]{max-width:40rem}.clcosdk\\:max-w-\\[56rem\\]{max-width:56rem}.clcosdk\\:max-w-\\[64rem\\]{max-width:64rem}.clcosdk\\:max-w-\\[760px\\]{max-width:760px}.clcosdk\\:max-w-full{max-width:100%}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:max-w-sm{max-width:var(--clcosdk-container-sm)}.clcosdk\\:max-w-xl{max-width:var(--clcosdk-container-xl)}.clcosdk\\:min-w-0{min-width:0}.clcosdk\\:flex-1{flex:1}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:rotate-180{rotate:180deg}.clcosdk\\:animate-pulse{animation:var(--clcosdk-animate-pulse)}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.clcosdk\\:grid-rows-\\[0fr\\]{grid-template-rows:0fr}.clcosdk\\:grid-rows-\\[1fr\\]{grid-template-rows:1fr}.clcosdk\\:flex-col{flex-direction:column}.clcosdk\\:flex-wrap{flex-wrap:wrap}.clcosdk\\:items-center{align-items:center}.clcosdk\\:items-end{align-items:flex-end}.clcosdk\\:items-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:justify-end{justify-content:flex-end}.clcosdk\\:gap-1{gap:var(--clcosdk-spacing)}.clcosdk\\:gap-1\\.5{gap:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-2\\.5{gap:calc(var(--clcosdk-spacing) * 2.5)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-\\[5px\\]{gap:5px}:where(.clcosdk\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.clcosdk\\:divide-border>:not(:last-child)){border-color:var(--color-border)}:where(.clcosdk\\:divide-divider>:not(:last-child)){border-color:var(--color-divider)}.clcosdk\\:self-start{align-self:flex-start}.clcosdk\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clcosdk\\:overflow-hidden{overflow:hidden}.clcosdk\\:overflow-y-auto{overflow-y:auto}.clcosdk\\:rounded{border-radius:.25rem}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.clcosdk\\:rounded-\\[20px\\]{border-radius:20px}.clcosdk\\:rounded-\\[28px\\]{border-radius:28px}.clcosdk\\:rounded-btn{border-radius:12px}.clcosdk\\:rounded-card{border-radius:24px}.clcosdk\\:rounded-full{border-radius:3.40282e38px}.clcosdk\\:rounded-lg{border-radius:var(--clcosdk-radius-lg)}.clcosdk\\:rounded-md{border-radius:var(--clcosdk-radius-md)}.clcosdk\\:rounded-xl{border-radius:var(--clcosdk-radius-xl)}.clcosdk\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-accent\\/60{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/60{border-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.clcosdk\\:border-amber-500{border-color:var(--clcosdk-color-amber-500)}.clcosdk\\:border-background{border-color:var(--color-background)}.clcosdk\\:border-border{border-color:var(--color-border)}.clcosdk\\:border-brand-primary{border-color:var(--color-brand-primary)}.clcosdk\\:border-current{border-color:currentColor}.clcosdk\\:border-divider{border-color:var(--color-divider)}.clcosdk\\:border-error-border{border-color:var(--color-error-border)}.clcosdk\\:border-sale-card-border{border-color:var(--color-sale-card-border)}.clcosdk\\:border-sale-card-chrome-border{border-color:var(--color-sale-card-chrome-border)}.clcosdk\\:border-success-border{border-color:var(--color-success-border)}.clcosdk\\:border-warning-border{border-color:var(--color-warning-border)}.clcosdk\\:border-t-transparent{border-top-color:#0000}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-black\\/50{background-color:var(--clcosdk-color-black)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-black\\/50{background-color:color-mix(in oklab, var(--clcosdk-color-black) 50%, transparent)}}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-divider{background-color:var(--color-divider)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.clcosdk\\:bg-overlay{background-color:var(--color-overlay)}.clcosdk\\:bg-positive{background-color:var(--color-positive)}.clcosdk\\:bg-positive-subtle{background-color:var(--color-positive-subtle)}.clcosdk\\:bg-sale-card-chrome-bg{background-color:var(--color-sale-card-chrome-bg)}.clcosdk\\:bg-section{background-color:var(--color-section)}.clcosdk\\:bg-success-subtle{background-color:var(--color-success-subtle)}.clcosdk\\:bg-surface{background-color:var(--color-surface)}.clcosdk\\:bg-text-disabled{background-color:var(--color-text-disabled)}.clcosdk\\:bg-text-primary{background-color:var(--color-text-primary)}.clcosdk\\:bg-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-\\[image\\:var\\(--btn-primary-gradient\\)\\]{background-image:var(--btn-primary-gradient)}.clcosdk\\:bg-\\[image\\:var\\(--sale-card-surface\\)\\]{background-image:var(--sale-card-surface)}.clcosdk\\:object-contain{object-fit:contain}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:0}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-3\\.5{padding:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:p-5{padding:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:p-16{padding:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:px-3{padding-inline:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:px-4{padding-inline:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:px-5{padding-inline:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:py-1\\.5{padding-block:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:py-3{padding-block:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:py-8{padding-block:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:py-12{padding-block:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:pt-1{padding-top:var(--clcosdk-spacing)}.clcosdk\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pt-14{padding-top:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:pr-1\\.5{padding-right:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:pr-3{padding-right:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pl-3{padding-left:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-right{text-align:right}.clcosdk\\:font-mono{font-family:var(--clcosdk-font-mono)}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:text-lg{font-size:var(--clcosdk-text-lg);line-height:var(--tw-leading,var(--clcosdk-text-lg--line-height))}.clcosdk\\:text-sm{font-size:var(--clcosdk-text-sm);line-height:var(--tw-leading,var(--clcosdk-text-sm--line-height))}.clcosdk\\:text-xs{font-size:var(--clcosdk-text-xs);line-height:var(--tw-leading,var(--clcosdk-text-xs--line-height))}.clcosdk\\:text-\\[11px\\]{font-size:11px}.clcosdk\\:text-\\[12px\\]{font-size:12px}.clcosdk\\:text-\\[13px\\]{font-size:13px}.clcosdk\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:text-\\[15px\\]{font-size:15px}.clcosdk\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:text-\\[22px\\]{font-size:22px}.clcosdk\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:text-\\[36px\\]{font-size:36px}.clcosdk\\:text-\\[48px\\]{font-size:48px}.clcosdk\\:text-\\[64px\\]{font-size:64px}.clcosdk\\:leading-\\[105\\%\\]{--tw-leading:105%;line-height:105%}.clcosdk\\:leading-\\[108\\%\\]{--tw-leading:108%;line-height:108%}.clcosdk\\:leading-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.clcosdk\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}.clcosdk\\:font-medium{--tw-font-weight:var(--clcosdk-font-weight-medium);font-weight:var(--clcosdk-font-weight-medium)}.clcosdk\\:font-normal{--tw-font-weight:var(--clcosdk-font-weight-normal);font-weight:var(--clcosdk-font-weight-normal)}.clcosdk\\:font-semibold{--tw-font-weight:var(--clcosdk-font-weight-semibold);font-weight:var(--clcosdk-font-weight-semibold)}.clcosdk\\:tracking-\\[0\\.12px\\]{--tw-tracking:.12px;letter-spacing:.12px}.clcosdk\\:tracking-\\[0\\.28px\\]{--tw-tracking:.28px;letter-spacing:.28px}.clcosdk\\:break-words{overflow-wrap:break-word}.clcosdk\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-background{color:var(--color-background)}.clcosdk\\:text-brand-primary{color:var(--color-brand-primary)}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-positive{color:var(--color-positive)}.clcosdk\\:text-sale-card-text{color:var(--color-sale-card-text)}.clcosdk\\:text-sale-card-text-muted{color:var(--color-sale-card-text-muted)}.clcosdk\\:text-sale-card-text-strong{color:var(--color-sale-card-text-strong)}.clcosdk\\:text-success{color:var(--color-success)}.clcosdk\\:text-text-disabled{color:var(--color-text-disabled)}.clcosdk\\:text-text-inverse{color:var(--color-text-inverse)}.clcosdk\\:text-text-primary{color:var(--color-text-primary)}.clcosdk\\:text-text-secondary{color:var(--color-text-secondary)}.clcosdk\\:text-warning{color:var(--color-warning)}.clcosdk\\:capitalize{text-transform:capitalize}.clcosdk\\:lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:no-underline{text-decoration-line:none}.clcosdk\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.clcosdk\\:opacity-0{opacity:0}.clcosdk\\:opacity-60{opacity:.6}.clcosdk\\:shadow-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.2\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f633);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_1px_1px_0px_rgba\\(10\\,10\\,10\\,0\\.04\\)\\,0px_8px_12px_0px_rgba\\(10\\,10\\,10\\,0\\.08\\)\\]{--tw-shadow:0px 1px 1px 0px var(--tw-shadow-color,#0a0a0a0a), 0px 8px 12px 0px var(--tw-shadow-color,#0a0a0a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_4px_12px_0px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\,0px_12px_28px_0px_rgba\\(0\\,0\\,0\\,0\\.13\\)\\]{--tw-shadow:0px 4px 12px 0px var(--tw-shadow-color,#00000014), 0px 12px 28px 0px var(--tw-shadow-color,#00000021);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[var\\(--btn-primary-shadow\\)\\]{--tw-shadow:var(--btn-primary-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-card{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#0000000d), 0px 12px 24px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-dialog{--tw-shadow:var(--shadow-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-step-active{--tw-shadow:var(--shadow-step-active);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:transition-\\[background-color\\,border-color\\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.clcosdk\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.clcosdk\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.clcosdk\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}.clcosdk\\:ease-out{--tw-ease:var(--clcosdk-ease-out);transition-timing-function:var(--clcosdk-ease-out)}.clcosdk\\:outline-none{--tw-outline-style:none;outline-style:none}.clcosdk\\:group-focus-within\\:opacity-100:is(:where(.clcosdk\\:group):focus-within *){opacity:1}@media (hover:hover){.clcosdk\\:group-hover\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):hover *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-hover\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):hover *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:group-hover\\:opacity-100:is(:where(.clcosdk\\:group):hover *){opacity:1}}.clcosdk\\:group-focus-visible\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):focus-visible *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-focus-visible\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):focus-visible *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:placeholder\\:text-text-disabled::placeholder{color:var(--color-text-disabled)}@media (hover:hover){.clcosdk\\:hover\\:scale-\\[1\\.02\\]:hover{scale:1.02}.clcosdk\\:hover\\:border-text-disabled:hover{border-color:var(--color-text-disabled)}.clcosdk\\:hover\\:bg-\\[\\#fcdcd8\\]:hover{background-color:#fcdcd8}.clcosdk\\:hover\\:bg-border:hover{background-color:var(--color-border)}.clcosdk\\:hover\\:bg-brand-primary:hover{background-color:var(--color-brand-primary)}.clcosdk\\:hover\\:bg-brand-primary-hover:hover{background-color:var(--color-brand-primary-hover)}.clcosdk\\:hover\\:bg-section:hover{background-color:var(--color-section)}.clcosdk\\:hover\\:bg-surface:hover{background-color:var(--color-surface)}.clcosdk\\:hover\\:text-\\[\\#8b1a13\\]:hover{color:#8b1a13}.clcosdk\\:hover\\:text-text-primary:hover{color:var(--color-text-primary)}.clcosdk\\:hover\\:underline:hover{text-decoration-line:underline}.clcosdk\\:hover\\:opacity-80:hover{opacity:.8}.clcosdk\\:hover\\:opacity-90:hover{opacity:.9}}.clcosdk\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:focus-visible\\:ring-gray-400:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-400)}.clcosdk\\:focus-visible\\:ring-gray-500:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-500)}.clcosdk\\:focus-visible\\:ring-red-400:focus-visible{--tw-ring-color:var(--clcosdk-color-red-400)}.clcosdk\\:focus-visible\\:ring-red-500:focus-visible{--tw-ring-color:var(--clcosdk-color-red-500)}.clcosdk\\:focus-visible\\:ring-sale-card-focus-ring:focus-visible{--tw-ring-color:var(--color-sale-card-focus-ring)}.clcosdk\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.clcosdk\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.clcosdk\\:active\\:bg-\\[\\#d9d9d9\\]:active{background-color:#d9d9d9}.clcosdk\\:active\\:bg-\\[\\#f9c9c4\\]:active{background-color:#f9c9c4}.clcosdk\\:active\\:bg-border:active{background-color:var(--color-border)}.clcosdk\\:active\\:bg-brand-primary-active:active{background-color:var(--color-brand-primary-active)}.clcosdk\\:active\\:text-\\[\\#6d1510\\]:active{color:#6d1510}.clcosdk\\:active\\:opacity-80:active{opacity:.8}.clcosdk\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}.clcosdk\\:disabled\\:opacity-50:disabled{opacity:.5}.clcosdk\\:aria-disabled\\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.clcosdk\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}@media not all and (min-width:48rem){.clcosdk\\:max-md\\:hidden{display:none}.clcosdk\\:max-md\\:w-full{width:100%}.clcosdk\\:max-md\\:justify-start{justify-content:flex-start}.clcosdk\\:max-md\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:max-md\\:rounded-none{border-radius:0}.clcosdk\\:max-md\\:border-0{border-style:var(--tw-border-style);border-width:0}.clcosdk\\:max-md\\:bg-transparent{background-color:#0000}.clcosdk\\:max-md\\:p-0{padding:0}@media (hover:hover){.clcosdk\\:max-md\\:hover\\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@media (min-width:40rem){.clcosdk\\:sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.clcosdk\\:md\\:right-\\[-10\\%\\]{right:-10%}.clcosdk\\:md\\:order-1{order:1}.clcosdk\\:md\\:order-2{order:2}.clcosdk\\:md\\:hidden{display:none}.clcosdk\\:md\\:size-\\[20rem\\]{width:20rem;height:20rem}.clcosdk\\:md\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:h-\\[54px\\]{height:54px}.clcosdk\\:md\\:w-9{width:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-\\[minmax\\(0\\,11fr\\)_minmax\\(0\\,8fr\\)\\]{grid-template-columns:minmax(0,11fr) minmax(0,8fr)}.clcosdk\\:md\\:flex-row{flex-direction:row}.clcosdk\\:md\\:items-center{align-items:center}.clcosdk\\:md\\:items-end{align-items:flex-end}.clcosdk\\:md\\:justify-between{justify-content:space-between}.clcosdk\\:md\\:justify-end{justify-content:flex-end}.clcosdk\\:md\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:md\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:gap-x-12{column-gap:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:self-end{align-self:flex-end}.clcosdk\\:md\\:rounded-\\[40px\\]{border-radius:40px}.clcosdk\\:md\\:rounded-card{border-radius:24px}.clcosdk\\:md\\:rounded-dialog{border-radius:32px}.clcosdk\\:md\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:px-8{padding-inline:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-2{padding-right:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:pl-4{padding-left:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:md\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:md\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:md\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:md\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:md\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:md\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:not(:where(.light,.light *)):hover{background-color:#f8717133}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:where(.dark,.dark *):hover{background-color:#f8717133}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:not(:where(.light,.light *)):hover{color:#fca5a5}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:where(.dark,.dark *):hover{color:#fca5a5}}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:not(:where(.light,.light *)):active{background-color:#f871714d}}.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:where(.dark,.dark *):active{background-color:#f871714d}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-divider:not(:where(.light,.light *)):active{background-color:var(--color-divider)}}.clcosdk\\:dark\\:active\\:bg-divider:where(.dark,.dark *):active{background-color:var(--color-divider)}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:not(:where(.light,.light *)):active{color:#f87171}}.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:where(.dark,.dark *):active{color:#f87171}.clcosdk\\:\\[\\&_circle\\]\\:fill-error-subtle circle{fill:var(--color-error-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-success-subtle circle{fill:var(--color-success-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-warning-subtle circle{fill:var(--color-warning-subtle)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
|
|
5090
|
+
var sdkStyles = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--clcosdk-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--clcosdk-color-red-400:oklch(70.4% .191 22.216);--clcosdk-color-red-500:oklch(63.7% .237 25.331);--clcosdk-color-amber-500:oklch(76.9% .188 70.08);--clcosdk-color-gray-400:oklch(70.7% .022 261.325);--clcosdk-color-gray-500:oklch(55.1% .027 264.364);--clcosdk-color-black:#000;--clcosdk-spacing:.25rem;--clcosdk-container-sm:24rem;--clcosdk-container-md:28rem;--clcosdk-container-xl:36rem;--clcosdk-text-xs:.75rem;--clcosdk-text-xs--line-height:calc(1 / .75);--clcosdk-text-sm:.875rem;--clcosdk-text-sm--line-height:calc(1.25 / .875);--clcosdk-text-base:1rem;--clcosdk-text-base--line-height:calc(1.5 / 1);--clcosdk-text-lg:1.125rem;--clcosdk-text-lg--line-height:calc(1.75 / 1.125);--clcosdk-font-weight-normal:400;--clcosdk-font-weight-medium:500;--clcosdk-font-weight-semibold:600;--clcosdk-radius-md:.375rem;--clcosdk-radius-lg:.5rem;--clcosdk-radius-xl:.75rem;--clcosdk-radius-2xl:1rem;--clcosdk-ease-out:cubic-bezier(0, 0, .2, 1);--clcosdk-ease-in-out:cubic-bezier(.4, 0, .2, 1);--clcosdk-animate-spin:spin 1s linear infinite;--clcosdk-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--clcosdk-color-brand-primary:var(--color-brand-primary)}}@layer base{.clco-sdk-root{--color-brand-primary:#171717;--color-brand-primary-hover:#000;--color-brand-primary-active:#262626;--color-accent:#2b3a67;--color-accent-hover:#243057;--color-accent-active:#1d2647;--color-accent-focus:#c7d2fe;--color-accent-subtle:#eef1f8;--color-text-primary:#171717;--color-text-secondary:#8c8c8c;--color-text-disabled:#d1d1d1;--color-text-inverse:#fff;--color-background:#fff;--color-surface:#fafafa;--color-section:#f3f3f3;--color-border:#e5e5e5;--color-divider:#ececec;--color-overlay:#00000080;--color-positive:#15803d;--color-positive-subtle:#dcfce7;--color-negative:#dc2626;--color-negative-subtle:#fee2e2;--color-success:#2c8c5e;--color-success-subtle:#e6f4ec;--color-success-border:#cfe9db;--color-warning:#e08a1a;--color-warning-subtle:#fff7ed;--color-warning-border:#fdead7;--color-error:#b42318;--color-error-subtle:#feeceb;--color-error-border:#fbd5d2;--shadow-step-active:0px 0px 10px 0px #0000001a;--shadow-dialog:0px 8px 32px 0px #0000001a;--btn-primary-gradient:linear-gradient(180deg, #262626 0%, #1c1c1c 50%, #0f0f0f 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #00000059, inset 0px 1px 2px 0px #ffffff2e, inset 0px 1px 0px 0px #ffffff1a;--sale-card-surface:linear-gradient(to top, #0a0a0a 0%, #1a1a1a 100%);--color-sale-card-text:#f4f4f5;--color-sale-card-text-muted:#a1a1aa;--color-sale-card-text-strong:#fff;--color-sale-card-border:#ffffff40;--color-sale-card-chrome-border:#ffffff4d;--color-sale-card-chrome-bg:#ffffff26;--color-sale-card-chrome-emphasis-border:#fff6;--color-sale-card-chrome-emphasis-bg:#ffffff40;--color-sale-card-focus-ring:#ffffff80;--display-on-light:block;--display-on-dark:none}@media (prefers-color-scheme:dark){.clco-sdk-root:not(:where(.light,.light *)){--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6;--display-on-light:none;--display-on-dark:block}}:where(.dark,.dark *) .clco-sdk-root{--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6;--display-on-light:none;--display-on-dark:block}.clco-sdk-root{color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.clco-sdk-root *,.clco-sdk-root :before,.clco-sdk-root :after{box-sizing:border-box}.clco-sdk-root button{appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;padding:0}.clco-sdk-root input,.clco-sdk-root textarea,.clco-sdk-root select{font:inherit;color:inherit;background:0 0;border:none;border-radius:0;padding:0}.clco-sdk-root a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.clco-sdk-root ul,.clco-sdk-root ol{margin:0;padding:0;list-style:none}.clco-sdk-root h1,.clco-sdk-root h2,.clco-sdk-root h3,.clco-sdk-root h4,.clco-sdk-root h5,.clco-sdk-root h6,.clco-sdk-root p,.clco-sdk-root figure,.clco-sdk-root blockquote,.clco-sdk-root dl,.clco-sdk-root dd,.clco-sdk-root pre{margin:0}.clco-sdk-root img,.clco-sdk-root svg{max-width:100%;display:block}@keyframes clco-status-ping{0%{opacity:.7;transform:scale(1)}75%,to{opacity:0;transform:scale(3.25)}}.clco-sdk-root .clcosdk-status-dot-ping{animation:1.6s cubic-bezier(0,0,.2,1) infinite clco-status-ping}.clco-sdk-root .clcosdk-on-light{display:var(--display-on-light)}.clco-sdk-root .clcosdk-on-dark{display:var(--display-on-dark)}@media (prefers-reduced-motion:reduce){.clco-sdk-root .clcosdk-status-dot-ping{opacity:0;animation:none}}}@layer components;@layer utilities{.clcosdk\\:pointer-events-none{pointer-events:none}.clcosdk\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.clcosdk\\:absolute{position:absolute}.clcosdk\\:fixed{position:fixed}.clcosdk\\:relative{position:relative}.clcosdk\\:inset-0{inset:0}.clcosdk\\:top-1\\/2{top:50%}.clcosdk\\:top-4{top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:top-full{top:100%}.clcosdk\\:-right-0\\.5{right:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:right-4{right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:right-\\[-14\\%\\]{right:-14%}.clcosdk\\:-bottom-0\\.5{bottom:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:bottom-full{bottom:100%}.clcosdk\\:left-1\\/2{left:50%}.clcosdk\\:z-0{z-index:0}.clcosdk\\:z-10{z-index:10}.clcosdk\\:z-50{z-index:50}.clcosdk\\:order-1{order:1}.clcosdk\\:order-2{order:2}.clcosdk\\:-mx-2{margin-inline:calc(var(--clcosdk-spacing) * -2)}.clcosdk\\:mt-2{margin-top:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-auto{margin-top:auto}.clcosdk\\:mb-2{margin-bottom:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.clcosdk\\:size-2{width:calc(var(--clcosdk-spacing) * 2);height:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:size-3{width:calc(var(--clcosdk-spacing) * 3);height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:size-3\\.5{width:calc(var(--clcosdk-spacing) * 3.5);height:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:size-4{width:calc(var(--clcosdk-spacing) * 4);height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:size-5{width:calc(var(--clcosdk-spacing) * 5);height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:size-10{width:calc(var(--clcosdk-spacing) * 10);height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:size-12{width:calc(var(--clcosdk-spacing) * 12);height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:size-16{width:calc(var(--clcosdk-spacing) * 16);height:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:size-24{width:calc(var(--clcosdk-spacing) * 24);height:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:size-\\[15rem\\]{width:15rem;height:15rem}.clcosdk\\:size-full{width:100%;height:100%}.clcosdk\\:h-1{height:var(--clcosdk-spacing)}.clcosdk\\:h-3{height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:h-4{height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:h-5{height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:h-6{height:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:h-8{height:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:h-10{height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:h-11{height:calc(var(--clcosdk-spacing) * 11)}.clcosdk\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:h-14{height:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:h-\\[1em\\]{height:1em}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[1lh\\]{min-height:1lh}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-1\\/2{width:50%}.clcosdk\\:w-2\\/5{width:40%}.clcosdk\\:w-3\\/5{width:60%}.clcosdk\\:w-4{width:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:w-5{width:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:w-6{width:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:w-8{width:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:w-10{width:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-20{width:calc(var(--clcosdk-spacing) * 20)}.clcosdk\\:w-24{width:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:w-32{width:calc(var(--clcosdk-spacing) * 32)}.clcosdk\\:w-40{width:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:w-48{width:calc(var(--clcosdk-spacing) * 48)}.clcosdk\\:w-80{width:calc(var(--clcosdk-spacing) * 80)}.clcosdk\\:w-96{width:calc(var(--clcosdk-spacing) * 96)}.clcosdk\\:w-\\[16px\\]{width:16px}.clcosdk\\:w-\\[28rem\\]{width:28rem}.clcosdk\\:w-\\[448px\\]{width:448px}.clcosdk\\:w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-component{width:448px}.clcosdk\\:w-fit{width:fit-content}.clcosdk\\:w-full{width:100%}.clcosdk\\:w-max{width:max-content}.clcosdk\\:max-w-\\[16rem\\]{max-width:16rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[40rem\\]{max-width:40rem}.clcosdk\\:max-w-\\[56rem\\]{max-width:56rem}.clcosdk\\:max-w-\\[64rem\\]{max-width:64rem}.clcosdk\\:max-w-\\[760px\\]{max-width:760px}.clcosdk\\:max-w-full{max-width:100%}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:max-w-sm{max-width:var(--clcosdk-container-sm)}.clcosdk\\:max-w-xl{max-width:var(--clcosdk-container-xl)}.clcosdk\\:min-w-0{min-width:0}.clcosdk\\:flex-1{flex:1}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:rotate-180{rotate:180deg}.clcosdk\\:animate-pulse{animation:var(--clcosdk-animate-pulse)}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.clcosdk\\:grid-rows-\\[0fr\\]{grid-template-rows:0fr}.clcosdk\\:grid-rows-\\[1fr\\]{grid-template-rows:1fr}.clcosdk\\:flex-col{flex-direction:column}.clcosdk\\:flex-row{flex-direction:row}.clcosdk\\:flex-wrap{flex-wrap:wrap}.clcosdk\\:items-center{align-items:center}.clcosdk\\:items-end{align-items:flex-end}.clcosdk\\:items-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:justify-end{justify-content:flex-end}.clcosdk\\:justify-start{justify-content:flex-start}.clcosdk\\:gap-1{gap:var(--clcosdk-spacing)}.clcosdk\\:gap-1\\.5{gap:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-2\\.5{gap:calc(var(--clcosdk-spacing) * 2.5)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-\\[5px\\]{gap:5px}:where(.clcosdk\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.clcosdk\\:divide-divider>:not(:last-child)){border-color:var(--color-divider)}.clcosdk\\:self-start{align-self:flex-start}.clcosdk\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clcosdk\\:overflow-hidden{overflow:hidden}.clcosdk\\:overflow-y-auto{overflow-y:auto}.clcosdk\\:rounded{border-radius:.25rem}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.clcosdk\\:rounded-\\[20px\\]{border-radius:20px}.clcosdk\\:rounded-\\[28px\\]{border-radius:28px}.clcosdk\\:rounded-btn{border-radius:12px}.clcosdk\\:rounded-card{border-radius:24px}.clcosdk\\:rounded-full{border-radius:3.40282e38px}.clcosdk\\:rounded-lg{border-radius:var(--clcosdk-radius-lg)}.clcosdk\\:rounded-md{border-radius:var(--clcosdk-radius-md)}.clcosdk\\:rounded-xl{border-radius:var(--clcosdk-radius-xl)}.clcosdk\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.clcosdk\\:border-accent\\/60{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/60{border-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.clcosdk\\:border-amber-500{border-color:var(--clcosdk-color-amber-500)}.clcosdk\\:border-background{border-color:var(--color-background)}.clcosdk\\:border-border{border-color:var(--color-border)}.clcosdk\\:border-brand-primary{border-color:var(--color-brand-primary)}.clcosdk\\:border-current{border-color:currentColor}.clcosdk\\:border-divider{border-color:var(--color-divider)}.clcosdk\\:border-error-border{border-color:var(--color-error-border)}.clcosdk\\:border-sale-card-border{border-color:var(--color-sale-card-border)}.clcosdk\\:border-sale-card-chrome-border{border-color:var(--color-sale-card-chrome-border)}.clcosdk\\:border-success-border{border-color:var(--color-success-border)}.clcosdk\\:border-text-primary{border-color:var(--color-text-primary)}.clcosdk\\:border-transparent{border-color:#0000}.clcosdk\\:border-warning-border{border-color:var(--color-warning-border)}.clcosdk\\:border-t-transparent{border-top-color:#0000}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-black\\/50{background-color:var(--clcosdk-color-black)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-black\\/50{background-color:color-mix(in oklab, var(--clcosdk-color-black) 50%, transparent)}}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-divider{background-color:var(--color-divider)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.clcosdk\\:bg-overlay{background-color:var(--color-overlay)}.clcosdk\\:bg-positive{background-color:var(--color-positive)}.clcosdk\\:bg-positive-subtle{background-color:var(--color-positive-subtle)}.clcosdk\\:bg-sale-card-chrome-bg{background-color:var(--color-sale-card-chrome-bg)}.clcosdk\\:bg-section{background-color:var(--color-section)}.clcosdk\\:bg-success-subtle{background-color:var(--color-success-subtle)}.clcosdk\\:bg-surface{background-color:var(--color-surface)}.clcosdk\\:bg-text-disabled{background-color:var(--color-text-disabled)}.clcosdk\\:bg-text-primary{background-color:var(--color-text-primary)}.clcosdk\\:bg-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-\\[image\\:var\\(--btn-primary-gradient\\)\\]{background-image:var(--btn-primary-gradient)}.clcosdk\\:bg-\\[image\\:var\\(--sale-card-surface\\)\\]{background-image:var(--sale-card-surface)}.clcosdk\\:object-contain{object-fit:contain}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:0}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-3\\.5{padding:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:p-5{padding:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:p-16{padding:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:px-3{padding-inline:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:px-4{padding-inline:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:px-5{padding-inline:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:py-1\\.5{padding-block:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:py-3{padding-block:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:py-8{padding-block:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:py-12{padding-block:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:pt-1{padding-top:var(--clcosdk-spacing)}.clcosdk\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pt-14{padding-top:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:pr-1\\.5{padding-right:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:pr-3{padding-right:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-1{padding-bottom:var(--clcosdk-spacing)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pl-3{padding-left:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-right{text-align:right}.clcosdk\\:font-mono{font-family:var(--clcosdk-font-mono)}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:text-lg{font-size:var(--clcosdk-text-lg);line-height:var(--tw-leading,var(--clcosdk-text-lg--line-height))}.clcosdk\\:text-sm{font-size:var(--clcosdk-text-sm);line-height:var(--tw-leading,var(--clcosdk-text-sm--line-height))}.clcosdk\\:text-xs{font-size:var(--clcosdk-text-xs);line-height:var(--tw-leading,var(--clcosdk-text-xs--line-height))}.clcosdk\\:text-\\[11px\\]{font-size:11px}.clcosdk\\:text-\\[12px\\]{font-size:12px}.clcosdk\\:text-\\[13px\\]{font-size:13px}.clcosdk\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:text-\\[15px\\]{font-size:15px}.clcosdk\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:text-\\[22px\\]{font-size:22px}.clcosdk\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:text-\\[36px\\]{font-size:36px}.clcosdk\\:text-\\[48px\\]{font-size:48px}.clcosdk\\:text-\\[64px\\]{font-size:64px}.clcosdk\\:leading-\\[105\\%\\]{--tw-leading:105%;line-height:105%}.clcosdk\\:leading-\\[108\\%\\]{--tw-leading:108%;line-height:108%}.clcosdk\\:leading-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.clcosdk\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}.clcosdk\\:font-medium{--tw-font-weight:var(--clcosdk-font-weight-medium);font-weight:var(--clcosdk-font-weight-medium)}.clcosdk\\:font-normal{--tw-font-weight:var(--clcosdk-font-weight-normal);font-weight:var(--clcosdk-font-weight-normal)}.clcosdk\\:font-semibold{--tw-font-weight:var(--clcosdk-font-weight-semibold);font-weight:var(--clcosdk-font-weight-semibold)}.clcosdk\\:tracking-\\[0\\.12px\\]{--tw-tracking:.12px;letter-spacing:.12px}.clcosdk\\:tracking-\\[0\\.28px\\]{--tw-tracking:.28px;letter-spacing:.28px}.clcosdk\\:break-words{overflow-wrap:break-word}.clcosdk\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-background{color:var(--color-background)}.clcosdk\\:text-brand-primary{color:var(--color-brand-primary)}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-positive{color:var(--color-positive)}.clcosdk\\:text-sale-card-text{color:var(--color-sale-card-text)}.clcosdk\\:text-sale-card-text-muted{color:var(--color-sale-card-text-muted)}.clcosdk\\:text-sale-card-text-strong{color:var(--color-sale-card-text-strong)}.clcosdk\\:text-success{color:var(--color-success)}.clcosdk\\:text-text-disabled{color:var(--color-text-disabled)}.clcosdk\\:text-text-inverse{color:var(--color-text-inverse)}.clcosdk\\:text-text-primary{color:var(--color-text-primary)}.clcosdk\\:text-text-secondary{color:var(--color-text-secondary)}.clcosdk\\:text-warning{color:var(--color-warning)}.clcosdk\\:capitalize{text-transform:capitalize}.clcosdk\\:lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:no-underline{text-decoration-line:none}.clcosdk\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.clcosdk\\:opacity-0{opacity:0}.clcosdk\\:opacity-60{opacity:.6}.clcosdk\\:shadow-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.2\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f633);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_1px_1px_0px_rgba\\(10\\,10\\,10\\,0\\.04\\)\\,0px_8px_12px_0px_rgba\\(10\\,10\\,10\\,0\\.08\\)\\]{--tw-shadow:0px 1px 1px 0px var(--tw-shadow-color,#0a0a0a0a), 0px 8px 12px 0px var(--tw-shadow-color,#0a0a0a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_4px_12px_0px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\,0px_12px_28px_0px_rgba\\(0\\,0\\,0\\,0\\.13\\)\\]{--tw-shadow:0px 4px 12px 0px var(--tw-shadow-color,#00000014), 0px 12px 28px 0px var(--tw-shadow-color,#00000021);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[var\\(--btn-primary-shadow\\)\\]{--tw-shadow:var(--btn-primary-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-card{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#0000000d), 0px 12px 24px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-dialog{--tw-shadow:var(--shadow-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-step-active{--tw-shadow:var(--shadow-step-active);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:transition-\\[background-color\\,border-color\\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.clcosdk\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.clcosdk\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.clcosdk\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}.clcosdk\\:ease-out{--tw-ease:var(--clcosdk-ease-out);transition-timing-function:var(--clcosdk-ease-out)}.clcosdk\\:outline-none{--tw-outline-style:none;outline-style:none}.clcosdk\\:group-focus-within\\:opacity-100:is(:where(.clcosdk\\:group):focus-within *){opacity:1}@media (hover:hover){.clcosdk\\:group-hover\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):hover *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-hover\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):hover *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:group-hover\\:opacity-100:is(:where(.clcosdk\\:group):hover *){opacity:1}}.clcosdk\\:group-focus-visible\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):focus-visible *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-focus-visible\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):focus-visible *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:placeholder\\:text-text-disabled::placeholder{color:var(--color-text-disabled)}@media (hover:hover){.clcosdk\\:hover\\:scale-\\[1\\.02\\]:hover{scale:1.02}.clcosdk\\:hover\\:border-text-disabled:hover{border-color:var(--color-text-disabled)}.clcosdk\\:hover\\:bg-\\[\\#fcdcd8\\]:hover{background-color:#fcdcd8}.clcosdk\\:hover\\:bg-border:hover{background-color:var(--color-border)}.clcosdk\\:hover\\:bg-brand-primary:hover{background-color:var(--color-brand-primary)}.clcosdk\\:hover\\:bg-brand-primary-hover:hover{background-color:var(--color-brand-primary-hover)}.clcosdk\\:hover\\:bg-section:hover{background-color:var(--color-section)}.clcosdk\\:hover\\:bg-surface:hover{background-color:var(--color-surface)}.clcosdk\\:hover\\:text-\\[\\#8b1a13\\]:hover{color:#8b1a13}.clcosdk\\:hover\\:text-text-primary:hover{color:var(--color-text-primary)}.clcosdk\\:hover\\:underline:hover{text-decoration-line:underline}.clcosdk\\:hover\\:opacity-80:hover{opacity:.8}.clcosdk\\:hover\\:opacity-90:hover{opacity:.9}}.clcosdk\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:focus-visible\\:ring-gray-400:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-400)}.clcosdk\\:focus-visible\\:ring-gray-500:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-500)}.clcosdk\\:focus-visible\\:ring-red-400:focus-visible{--tw-ring-color:var(--clcosdk-color-red-400)}.clcosdk\\:focus-visible\\:ring-red-500:focus-visible{--tw-ring-color:var(--clcosdk-color-red-500)}.clcosdk\\:focus-visible\\:ring-sale-card-focus-ring:focus-visible{--tw-ring-color:var(--color-sale-card-focus-ring)}.clcosdk\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.clcosdk\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.clcosdk\\:active\\:bg-\\[\\#d9d9d9\\]:active{background-color:#d9d9d9}.clcosdk\\:active\\:bg-\\[\\#f9c9c4\\]:active{background-color:#f9c9c4}.clcosdk\\:active\\:bg-border:active{background-color:var(--color-border)}.clcosdk\\:active\\:bg-brand-primary-active:active{background-color:var(--color-brand-primary-active)}.clcosdk\\:active\\:text-\\[\\#6d1510\\]:active{color:#6d1510}.clcosdk\\:active\\:opacity-80:active{opacity:.8}.clcosdk\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}.clcosdk\\:disabled\\:opacity-50:disabled{opacity:.5}.clcosdk\\:aria-disabled\\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.clcosdk\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}@media not all and (min-width:48rem){.clcosdk\\:max-md\\:hidden{display:none}.clcosdk\\:max-md\\:w-full{width:100%}.clcosdk\\:max-md\\:justify-start{justify-content:flex-start}.clcosdk\\:max-md\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:max-md\\:rounded-none{border-radius:0}.clcosdk\\:max-md\\:border-0{border-style:var(--tw-border-style);border-width:0}.clcosdk\\:max-md\\:bg-transparent{background-color:#0000}.clcosdk\\:max-md\\:p-0{padding:0}@media (hover:hover){.clcosdk\\:max-md\\:hover\\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@media (min-width:40rem){.clcosdk\\:sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.clcosdk\\:md\\:right-\\[-10\\%\\]{right:-10%}.clcosdk\\:md\\:order-1{order:1}.clcosdk\\:md\\:order-2{order:2}.clcosdk\\:md\\:hidden{display:none}.clcosdk\\:md\\:size-\\[20rem\\]{width:20rem;height:20rem}.clcosdk\\:md\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:h-\\[54px\\]{height:54px}.clcosdk\\:md\\:w-9{width:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-\\[minmax\\(0\\,11fr\\)_minmax\\(0\\,8fr\\)\\]{grid-template-columns:minmax(0,11fr) minmax(0,8fr)}.clcosdk\\:md\\:flex-row{flex-direction:row}.clcosdk\\:md\\:items-center{align-items:center}.clcosdk\\:md\\:items-end{align-items:flex-end}.clcosdk\\:md\\:justify-between{justify-content:space-between}.clcosdk\\:md\\:justify-end{justify-content:flex-end}.clcosdk\\:md\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:md\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:gap-x-12{column-gap:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:self-end{align-self:flex-end}.clcosdk\\:md\\:rounded-\\[40px\\]{border-radius:40px}.clcosdk\\:md\\:rounded-card{border-radius:24px}.clcosdk\\:md\\:rounded-dialog{border-radius:32px}.clcosdk\\:md\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:px-8{padding-inline:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-2{padding-right:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:pl-4{padding-left:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:md\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:md\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:md\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:md\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:md\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:md\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:not(:where(.light,.light *)):hover{background-color:#f8717133}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:where(.dark,.dark *):hover{background-color:#f8717133}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:not(:where(.light,.light *)):hover{color:#fca5a5}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:where(.dark,.dark *):hover{color:#fca5a5}}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:not(:where(.light,.light *)):active{background-color:#f871714d}}.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:where(.dark,.dark *):active{background-color:#f871714d}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-divider:not(:where(.light,.light *)):active{background-color:var(--color-divider)}}.clcosdk\\:dark\\:active\\:bg-divider:where(.dark,.dark *):active{background-color:var(--color-divider)}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:not(:where(.light,.light *)):active{color:#f87171}}.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:where(.dark,.dark *):active{color:#f87171}.clcosdk\\:\\[\\&_circle\\]\\:fill-error-subtle circle{fill:var(--color-error-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-success-subtle circle{fill:var(--color-success-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-warning-subtle circle{fill:var(--color-warning-subtle)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
|
|
4957
5091
|
|
|
4958
5092
|
// src/client/CoinListStyleScope.tsx
|
|
4959
5093
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
@@ -5255,7 +5389,7 @@ function AlertBanner({
|
|
|
5255
5389
|
"aria-hidden": "true"
|
|
5256
5390
|
}
|
|
5257
5391
|
),
|
|
5258
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: cn(typeClasses.
|
|
5392
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: cn(typeClasses.bodySm, text), children: content })
|
|
5259
5393
|
]
|
|
5260
5394
|
}
|
|
5261
5395
|
);
|
|
@@ -6251,12 +6385,16 @@ function AssetSummaryRow({
|
|
|
6251
6385
|
] })
|
|
6252
6386
|
] }),
|
|
6253
6387
|
(value || caption) && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "clcosdk:flex clcosdk:shrink-0 clcosdk:flex-col clcosdk:items-end clcosdk:justify-center", children: [
|
|
6254
|
-
value &&
|
|
6388
|
+
value && // `min-h-[1lh]` + flex center: a Skeleton sized to `1em` (cap
|
|
6389
|
+
// height) sits in the same line box as loaded copy, so leading
|
|
6390
|
+
// keeps the two rows apart instead of two full-lh bars colliding.
|
|
6391
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
6255
6392
|
"div",
|
|
6256
6393
|
{
|
|
6257
6394
|
className: cn(
|
|
6258
6395
|
typeClasses.h4,
|
|
6259
|
-
"clcosdk:
|
|
6396
|
+
"clcosdk:flex clcosdk:min-h-[1lh] clcosdk:items-center",
|
|
6397
|
+
"clcosdk:justify-end clcosdk:text-text-primary"
|
|
6260
6398
|
),
|
|
6261
6399
|
children: value
|
|
6262
6400
|
}
|
|
@@ -6269,7 +6407,8 @@ function AssetSummaryRow({
|
|
|
6269
6407
|
{
|
|
6270
6408
|
className: cn(
|
|
6271
6409
|
typeClasses.subhead,
|
|
6272
|
-
"clcosdk:
|
|
6410
|
+
"clcosdk:flex clcosdk:min-h-[1lh] clcosdk:items-center",
|
|
6411
|
+
"clcosdk:justify-end clcosdk:text-text-secondary"
|
|
6273
6412
|
),
|
|
6274
6413
|
children: caption
|
|
6275
6414
|
}
|
|
@@ -6989,7 +7128,7 @@ function detailRows2(state) {
|
|
|
6989
7128
|
function PriceValue({ price }) {
|
|
6990
7129
|
switch (price.type) {
|
|
6991
7130
|
case "loading":
|
|
6992
|
-
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Skeleton, { className: "clcosdk:h-
|
|
7131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Skeleton, { className: "clcosdk:h-[1em] clcosdk:w-24" });
|
|
6993
7132
|
case "known":
|
|
6994
7133
|
return price.price;
|
|
6995
7134
|
case "unavailable":
|
|
@@ -7003,7 +7142,7 @@ function PriceValue({ price }) {
|
|
|
7003
7142
|
function PriceCaption({ price }) {
|
|
7004
7143
|
switch (price.type) {
|
|
7005
7144
|
case "loading":
|
|
7006
|
-
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Skeleton, { className: "clcosdk:h-
|
|
7145
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Skeleton, { className: "clcosdk:h-[1em] clcosdk:w-20" });
|
|
7007
7146
|
case "known":
|
|
7008
7147
|
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(StatusIndicator, { status: price.market });
|
|
7009
7148
|
// Nothing to say about a market whose price never arrived: the order steps
|
|
@@ -7456,7 +7595,7 @@ function stablecoinIconUrl(symbol) {
|
|
|
7456
7595
|
}
|
|
7457
7596
|
}
|
|
7458
7597
|
function offerIconUrl(offer) {
|
|
7459
|
-
return offer.logoUrl
|
|
7598
|
+
return offer.logoUrl ? AssetIconUrl(offer.logoUrl) : null;
|
|
7460
7599
|
}
|
|
7461
7600
|
function tokenLogoUrl(logo, minWidth = 40) {
|
|
7462
7601
|
switch (logo.kind) {
|
|
@@ -7475,6 +7614,20 @@ function tokenLogoUrl(logo, minWidth = 40) {
|
|
|
7475
7614
|
}
|
|
7476
7615
|
}
|
|
7477
7616
|
}
|
|
7617
|
+
function tokenLogoSrcSet(logo) {
|
|
7618
|
+
switch (logo.kind) {
|
|
7619
|
+
case "VECTOR":
|
|
7620
|
+
return null;
|
|
7621
|
+
case "RASTER": {
|
|
7622
|
+
const candidates = logo.variants.length > 0 ? logo.variants : [logo.original];
|
|
7623
|
+
return [...candidates].sort((a, b) => a.width - b.width).map((image) => `${image.url} ${image.width}w`).join(", ");
|
|
7624
|
+
}
|
|
7625
|
+
default: {
|
|
7626
|
+
const exhaustive = logo;
|
|
7627
|
+
return exhaustive;
|
|
7628
|
+
}
|
|
7629
|
+
}
|
|
7630
|
+
}
|
|
7478
7631
|
function offerAssetIconUrl(offer, tokenMetadata) {
|
|
7479
7632
|
return (tokenMetadata ? tokenLogoUrl(tokenMetadata.logo) : null) ?? offerIconUrl(offer);
|
|
7480
7633
|
}
|
|
@@ -8081,8 +8234,12 @@ function useOndoBuyReviewViewModel({
|
|
|
8081
8234
|
}
|
|
8082
8235
|
}, [stepInput.type]);
|
|
8083
8236
|
const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
|
|
8237
|
+
const offerUntil = (0, import_react17.useMemo)(
|
|
8238
|
+
() => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
|
|
8239
|
+
[transaction]
|
|
8240
|
+
);
|
|
8084
8241
|
const secondsLeft = useCountdown({
|
|
8085
|
-
until:
|
|
8242
|
+
until: offerUntil,
|
|
8086
8243
|
enabled
|
|
8087
8244
|
});
|
|
8088
8245
|
const quoteStatus = toQuoteStatusUi(transactionState, secondsLeft);
|
|
@@ -8206,14 +8363,11 @@ function toQuoteStatusUi(state, secondsLeft) {
|
|
|
8206
8363
|
message: refreshErrorMessage(state.refreshError)
|
|
8207
8364
|
};
|
|
8208
8365
|
}
|
|
8209
|
-
if (secondsLeft === null ||
|
|
8366
|
+
if (secondsLeft === null || secondsLeft === 0) {
|
|
8210
8367
|
return { type: "expired" };
|
|
8211
8368
|
}
|
|
8212
8369
|
return { type: "valid", expiresInLabel: expiresInLabel(secondsLeft) };
|
|
8213
8370
|
}
|
|
8214
|
-
function isTooCloseToExpiry(secondsLeft) {
|
|
8215
|
-
return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
|
|
8216
|
-
}
|
|
8217
8371
|
function expiresInLabel(secondsLeft) {
|
|
8218
8372
|
const unit = secondsLeft === 1 ? "second" : "seconds";
|
|
8219
8373
|
return `Quote expires in ${secondsLeft} ${unit}`;
|
|
@@ -8705,8 +8859,9 @@ var NO_TOKEN_ADDRESS = EvmContractAddress(
|
|
|
8705
8859
|
"0x0000000000000000000000000000000000000000"
|
|
8706
8860
|
);
|
|
8707
8861
|
function offerTokenIdentifier(offer, chain) {
|
|
8708
|
-
const
|
|
8709
|
-
|
|
8862
|
+
const asset = offerDisplayTokens(offer).find(
|
|
8863
|
+
(token) => token.chain === chain
|
|
8864
|
+
);
|
|
8710
8865
|
return asset === void 0 ? null : { chain, address: asset.address };
|
|
8711
8866
|
}
|
|
8712
8867
|
function tokenMetadataOf(state) {
|
|
@@ -10143,8 +10298,12 @@ function useOndoSellReviewViewModel({
|
|
|
10143
10298
|
}
|
|
10144
10299
|
}, [stepInput.type]);
|
|
10145
10300
|
const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
|
|
10301
|
+
const offerUntil = (0, import_react26.useMemo)(
|
|
10302
|
+
() => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
|
|
10303
|
+
[transaction]
|
|
10304
|
+
);
|
|
10146
10305
|
const secondsLeft = useCountdown({
|
|
10147
|
-
until:
|
|
10306
|
+
until: offerUntil,
|
|
10148
10307
|
enabled
|
|
10149
10308
|
});
|
|
10150
10309
|
const quoteStatus = toQuoteStatusUi2(transactionState, secondsLeft);
|
|
@@ -10273,14 +10432,11 @@ function toQuoteStatusUi2(state, secondsLeft) {
|
|
|
10273
10432
|
message: refreshErrorMessage2(state.refreshError)
|
|
10274
10433
|
};
|
|
10275
10434
|
}
|
|
10276
|
-
if (secondsLeft === null ||
|
|
10435
|
+
if (secondsLeft === null || secondsLeft === 0) {
|
|
10277
10436
|
return { type: "expired" };
|
|
10278
10437
|
}
|
|
10279
10438
|
return { type: "valid", expiresInLabel: expiresInLabel2(secondsLeft) };
|
|
10280
10439
|
}
|
|
10281
|
-
function isTooCloseToExpiry2(secondsLeft) {
|
|
10282
|
-
return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
|
|
10283
|
-
}
|
|
10284
10440
|
function expiresInLabel2(secondsLeft) {
|
|
10285
10441
|
const unit = secondsLeft === 1 ? "second" : "seconds";
|
|
10286
10442
|
return `Quote expires in ${secondsLeft} ${unit}`;
|
|
@@ -11368,7 +11524,7 @@ function LiveDot() {
|
|
|
11368
11524
|
function PriceValue2({ price }) {
|
|
11369
11525
|
switch (price.type) {
|
|
11370
11526
|
case "loading":
|
|
11371
|
-
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "clcosdk:h-
|
|
11527
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "clcosdk:h-[1em] clcosdk:w-24" });
|
|
11372
11528
|
case "known":
|
|
11373
11529
|
return price.price;
|
|
11374
11530
|
default: {
|
|
@@ -12964,11 +13120,11 @@ function CheckoutContainer({
|
|
|
12964
13120
|
enabled = true,
|
|
12965
13121
|
className
|
|
12966
13122
|
}) {
|
|
12967
|
-
return renderOffer(offer
|
|
12968
|
-
ondo: () => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
13123
|
+
return renderOffer(offer, {
|
|
13124
|
+
ondo: (ondoOffer) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
12969
13125
|
OndoCheckoutContainer,
|
|
12970
13126
|
{
|
|
12971
|
-
offer,
|
|
13127
|
+
offer: ondoOffer,
|
|
12972
13128
|
chain,
|
|
12973
13129
|
wallets,
|
|
12974
13130
|
config: config["ondo::swap"],
|
|
@@ -12976,10 +13132,10 @@ function CheckoutContainer({
|
|
|
12976
13132
|
className
|
|
12977
13133
|
}
|
|
12978
13134
|
),
|
|
12979
|
-
superstate: () => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
13135
|
+
superstate: (superstateOffer) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
12980
13136
|
SuperstateSwapCheckoutContainer,
|
|
12981
13137
|
{
|
|
12982
|
-
offer,
|
|
13138
|
+
offer: superstateOffer,
|
|
12983
13139
|
chain,
|
|
12984
13140
|
wallets,
|
|
12985
13141
|
enabled,
|
|
@@ -12987,7 +13143,7 @@ function CheckoutContainer({
|
|
|
12987
13143
|
className
|
|
12988
13144
|
}
|
|
12989
13145
|
),
|
|
12990
|
-
tokenSale: () => config["coinlist::token_sale"].render(
|
|
13146
|
+
tokenSale: (tokenSaleOffer) => config["coinlist::token_sale"].render(tokenSaleOffer)
|
|
12991
13147
|
});
|
|
12992
13148
|
}
|
|
12993
13149
|
function OndoCheckoutContainer({
|
|
@@ -13027,16 +13183,16 @@ function OndoCheckoutContainer({
|
|
|
13027
13183
|
)
|
|
13028
13184
|
});
|
|
13029
13185
|
}
|
|
13030
|
-
function renderOffer(
|
|
13031
|
-
switch (type) {
|
|
13186
|
+
function renderOffer(offer, branches) {
|
|
13187
|
+
switch (offer.type) {
|
|
13032
13188
|
case "ondo::swap":
|
|
13033
|
-
return branches.ondo();
|
|
13189
|
+
return branches.ondo(offer);
|
|
13034
13190
|
case "superstate::swap":
|
|
13035
|
-
return branches.superstate();
|
|
13191
|
+
return branches.superstate(offer);
|
|
13036
13192
|
case "coinlist::token_sale":
|
|
13037
|
-
return branches.tokenSale();
|
|
13193
|
+
return branches.tokenSale(offer);
|
|
13038
13194
|
default: {
|
|
13039
|
-
const exhaustive =
|
|
13195
|
+
const exhaustive = offer;
|
|
13040
13196
|
return exhaustive;
|
|
13041
13197
|
}
|
|
13042
13198
|
}
|
|
@@ -13054,6 +13210,58 @@ function renderOndoSide(side, branches) {
|
|
|
13054
13210
|
}
|
|
13055
13211
|
}
|
|
13056
13212
|
|
|
13213
|
+
// src/client/components/design-system/ThemedImage.tsx
|
|
13214
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
13215
|
+
function ThemedImage({
|
|
13216
|
+
light,
|
|
13217
|
+
dark,
|
|
13218
|
+
sizes,
|
|
13219
|
+
alt,
|
|
13220
|
+
width,
|
|
13221
|
+
height,
|
|
13222
|
+
className,
|
|
13223
|
+
style
|
|
13224
|
+
}) {
|
|
13225
|
+
const shared = { width, height, style };
|
|
13226
|
+
if (!dark) {
|
|
13227
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
13228
|
+
"img",
|
|
13229
|
+
{
|
|
13230
|
+
src: light.src,
|
|
13231
|
+
srcSet: light.srcSet,
|
|
13232
|
+
sizes: light.srcSet ? sizes : void 0,
|
|
13233
|
+
className,
|
|
13234
|
+
alt,
|
|
13235
|
+
...shared
|
|
13236
|
+
}
|
|
13237
|
+
);
|
|
13238
|
+
}
|
|
13239
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
|
|
13240
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
13241
|
+
"img",
|
|
13242
|
+
{
|
|
13243
|
+
src: light.src,
|
|
13244
|
+
srcSet: light.srcSet,
|
|
13245
|
+
sizes: light.srcSet ? sizes : void 0,
|
|
13246
|
+
className: cn("clcosdk-on-light", className),
|
|
13247
|
+
alt,
|
|
13248
|
+
...shared
|
|
13249
|
+
}
|
|
13250
|
+
),
|
|
13251
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
13252
|
+
"img",
|
|
13253
|
+
{
|
|
13254
|
+
src: dark.src,
|
|
13255
|
+
srcSet: dark.srcSet,
|
|
13256
|
+
sizes: dark.srcSet ? sizes : void 0,
|
|
13257
|
+
className: cn("clcosdk-on-dark", className),
|
|
13258
|
+
alt,
|
|
13259
|
+
...shared
|
|
13260
|
+
}
|
|
13261
|
+
)
|
|
13262
|
+
] });
|
|
13263
|
+
}
|
|
13264
|
+
|
|
13057
13265
|
// src/client/components/offers/shared/offer-card-keyboard.ts
|
|
13058
13266
|
function onOfferCardKeyDown(event, onClick) {
|
|
13059
13267
|
if (event.key !== "Enter" && event.key !== " ") return;
|
|
@@ -13062,7 +13270,8 @@ function onOfferCardKeyDown(event, onClick) {
|
|
|
13062
13270
|
}
|
|
13063
13271
|
|
|
13064
13272
|
// src/client/components/offers/shared/OfferAssetCard.tsx
|
|
13065
|
-
var
|
|
13273
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
13274
|
+
var LOGO_SIZES = "(min-width: 768px) 48px, 40px";
|
|
13066
13275
|
function OfferAssetCard({
|
|
13067
13276
|
offer,
|
|
13068
13277
|
onClick,
|
|
@@ -13070,7 +13279,7 @@ function OfferAssetCard({
|
|
|
13070
13279
|
containerClassName
|
|
13071
13280
|
}) {
|
|
13072
13281
|
const interactive = onClick !== void 0;
|
|
13073
|
-
const card = /* @__PURE__ */ (0,
|
|
13282
|
+
const card = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
13074
13283
|
"article",
|
|
13075
13284
|
{
|
|
13076
13285
|
className: cn(
|
|
@@ -13084,11 +13293,13 @@ function OfferAssetCard({
|
|
|
13084
13293
|
tabIndex: interactive ? 0 : void 0,
|
|
13085
13294
|
onClick,
|
|
13086
13295
|
onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
|
|
13087
|
-
children: /* @__PURE__ */ (0,
|
|
13088
|
-
offer.
|
|
13089
|
-
|
|
13296
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:items-center clcosdk:gap-2.5 clcosdk:pr-3 clcosdk:md:gap-3 clcosdk:md:pr-4", children: [
|
|
13297
|
+
offer.logo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "clcosdk:h-10 clcosdk:w-10 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-12 clcosdk:md:w-12", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
13298
|
+
ThemedImage,
|
|
13090
13299
|
{
|
|
13091
|
-
|
|
13300
|
+
light: offer.logo.light,
|
|
13301
|
+
dark: offer.logo.dark ?? void 0,
|
|
13302
|
+
sizes: LOGO_SIZES,
|
|
13092
13303
|
alt: "",
|
|
13093
13304
|
width: 48,
|
|
13094
13305
|
height: 48,
|
|
@@ -13096,8 +13307,8 @@ function OfferAssetCard({
|
|
|
13096
13307
|
style: { maxWidth: "none", width: "100%", height: "100%" }
|
|
13097
13308
|
}
|
|
13098
13309
|
) }) : null,
|
|
13099
|
-
/* @__PURE__ */ (0,
|
|
13100
|
-
offer.name ? /* @__PURE__ */ (0,
|
|
13310
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
|
|
13311
|
+
offer.name ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
13101
13312
|
"h2",
|
|
13102
13313
|
{
|
|
13103
13314
|
className: cn(
|
|
@@ -13106,13 +13317,13 @@ function OfferAssetCard({
|
|
|
13106
13317
|
children: offer.name
|
|
13107
13318
|
}
|
|
13108
13319
|
) : null,
|
|
13109
|
-
offer.symbol ? /* @__PURE__ */ (0,
|
|
13320
|
+
offer.symbol ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "clcosdk:w-full clcosdk:truncate clcosdk:text-[13px] clcosdk:leading-[150%] clcosdk:font-normal clcosdk:text-text-secondary clcosdk:md:text-[14px]", children: offer.symbol }) : null
|
|
13110
13321
|
] })
|
|
13111
13322
|
] })
|
|
13112
13323
|
}
|
|
13113
13324
|
);
|
|
13114
|
-
const wrapped = containerClassName ? /* @__PURE__ */ (0,
|
|
13115
|
-
return /* @__PURE__ */ (0,
|
|
13325
|
+
const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: containerClassName, children: card }) : card;
|
|
13326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CoinListStyleScope, { children: wrapped });
|
|
13116
13327
|
}
|
|
13117
13328
|
function cardActionLabel(offer) {
|
|
13118
13329
|
const parts = [offer.name, offer.symbol].filter(Boolean);
|
|
@@ -13120,7 +13331,7 @@ function cardActionLabel(offer) {
|
|
|
13120
13331
|
}
|
|
13121
13332
|
|
|
13122
13333
|
// src/client/components/offers/grid/OffersAssetGrid.tsx
|
|
13123
|
-
var
|
|
13334
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
13124
13335
|
var DEFAULT_MAX_COLUMNS = 3;
|
|
13125
13336
|
function OffersAssetGrid({
|
|
13126
13337
|
offers,
|
|
@@ -13135,14 +13346,14 @@ function OffersAssetGrid({
|
|
|
13135
13346
|
);
|
|
13136
13347
|
const maxGridWidth = `calc(${cols} * 20rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
|
|
13137
13348
|
const interactive = onOfferClick !== void 0;
|
|
13138
|
-
return /* @__PURE__ */ (0,
|
|
13349
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
13139
13350
|
"div",
|
|
13140
13351
|
{
|
|
13141
13352
|
className: cn(
|
|
13142
13353
|
"clcosdk:flex clcosdk:w-full clcosdk:justify-center",
|
|
13143
13354
|
containerClassName
|
|
13144
13355
|
),
|
|
13145
|
-
children: /* @__PURE__ */ (0,
|
|
13356
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
13146
13357
|
"div",
|
|
13147
13358
|
{
|
|
13148
13359
|
className: cn(
|
|
@@ -13152,7 +13363,7 @@ function OffersAssetGrid({
|
|
|
13152
13363
|
className
|
|
13153
13364
|
),
|
|
13154
13365
|
style: { maxWidth: maxGridWidth },
|
|
13155
|
-
children: offers.map((offer) => /* @__PURE__ */ (0,
|
|
13366
|
+
children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
13156
13367
|
OfferAssetCard,
|
|
13157
13368
|
{
|
|
13158
13369
|
offer,
|
|
@@ -13194,7 +13405,9 @@ function saleCardStatus({
|
|
|
13194
13405
|
}
|
|
13195
13406
|
|
|
13196
13407
|
// src/client/components/offers/shared/OfferSaleCard.tsx
|
|
13197
|
-
var
|
|
13408
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
13409
|
+
var HEADER_LOGO_SIZES = "(min-width: 768px) 36px, 32px";
|
|
13410
|
+
var WATERMARK_SIZES = "(min-width: 768px) 20rem, 15rem";
|
|
13198
13411
|
function OfferSaleCard({
|
|
13199
13412
|
offer,
|
|
13200
13413
|
onClick,
|
|
@@ -13209,7 +13422,8 @@ function OfferSaleCard({
|
|
|
13209
13422
|
secondsLeft
|
|
13210
13423
|
});
|
|
13211
13424
|
const interactive = onClick !== void 0;
|
|
13212
|
-
const
|
|
13425
|
+
const logo = offer.logo ? offer.logo.dark ?? offer.logo.light : null;
|
|
13426
|
+
const card = /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
13213
13427
|
"article",
|
|
13214
13428
|
{
|
|
13215
13429
|
className: cn(
|
|
@@ -13224,16 +13438,17 @@ function OfferSaleCard({
|
|
|
13224
13438
|
onClick,
|
|
13225
13439
|
onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
|
|
13226
13440
|
children: [
|
|
13227
|
-
|
|
13441
|
+
logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
13228
13442
|
"div",
|
|
13229
13443
|
{
|
|
13230
13444
|
"aria-hidden": "true",
|
|
13231
13445
|
className: "clcosdk:pointer-events-none clcosdk:absolute clcosdk:top-1/2 clcosdk:right-[-14%] clcosdk:z-0 clcosdk:size-[15rem] clcosdk:-translate-y-1/2 clcosdk:md:right-[-10%] clcosdk:md:size-[20rem]",
|
|
13232
13446
|
style: { mixBlendMode: "overlay" },
|
|
13233
|
-
children: /* @__PURE__ */ (0,
|
|
13234
|
-
|
|
13447
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
13448
|
+
ThemedImage,
|
|
13235
13449
|
{
|
|
13236
|
-
|
|
13450
|
+
light: logo,
|
|
13451
|
+
sizes: WATERMARK_SIZES,
|
|
13237
13452
|
alt: "",
|
|
13238
13453
|
className: "clcosdk:size-full clcosdk:rounded-full clcosdk:object-cover",
|
|
13239
13454
|
style: { maxWidth: "none", width: "100%", height: "100%" }
|
|
@@ -13241,12 +13456,13 @@ function OfferSaleCard({
|
|
|
13241
13456
|
)
|
|
13242
13457
|
}
|
|
13243
13458
|
) : null,
|
|
13244
|
-
/* @__PURE__ */ (0,
|
|
13245
|
-
/* @__PURE__ */ (0,
|
|
13246
|
-
|
|
13247
|
-
|
|
13459
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
|
|
13460
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
|
|
13461
|
+
logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "clcosdk:h-8 clcosdk:w-8 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-9 clcosdk:md:w-9", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
13462
|
+
ThemedImage,
|
|
13248
13463
|
{
|
|
13249
|
-
|
|
13464
|
+
light: logo,
|
|
13465
|
+
sizes: HEADER_LOGO_SIZES,
|
|
13250
13466
|
alt: "",
|
|
13251
13467
|
width: 36,
|
|
13252
13468
|
height: 36,
|
|
@@ -13254,7 +13470,7 @@ function OfferSaleCard({
|
|
|
13254
13470
|
style: { maxWidth: "none", width: "100%", height: "100%" }
|
|
13255
13471
|
}
|
|
13256
13472
|
) }) : null,
|
|
13257
|
-
offer.name ? /* @__PURE__ */ (0,
|
|
13473
|
+
offer.name ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
13258
13474
|
"h2",
|
|
13259
13475
|
{
|
|
13260
13476
|
className: cn(
|
|
@@ -13264,7 +13480,7 @@ function OfferSaleCard({
|
|
|
13264
13480
|
}
|
|
13265
13481
|
) : null
|
|
13266
13482
|
] }),
|
|
13267
|
-
offer.tagline ? /* @__PURE__ */ (0,
|
|
13483
|
+
offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
13268
13484
|
"p",
|
|
13269
13485
|
{
|
|
13270
13486
|
className: cn(
|
|
@@ -13275,20 +13491,20 @@ function OfferSaleCard({
|
|
|
13275
13491
|
}
|
|
13276
13492
|
) : null
|
|
13277
13493
|
] }),
|
|
13278
|
-
/* @__PURE__ */ (0,
|
|
13279
|
-
/* @__PURE__ */ (0,
|
|
13280
|
-
status.phase === "live" ? /* @__PURE__ */ (0,
|
|
13494
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:mt-auto clcosdk:flex clcosdk:h-11 clcosdk:w-full clcosdk:min-w-0 clcosdk:items-center clcosdk:justify-between clcosdk:gap-2 clcosdk:rounded-full clcosdk:border clcosdk:border-sale-card-chrome-border clcosdk:bg-sale-card-chrome-bg clcosdk:py-1.5 clcosdk:pr-1.5 clcosdk:pl-3 clcosdk:md:h-[54px] clcosdk:md:gap-3 clcosdk:md:py-2 clcosdk:md:pr-2 clcosdk:md:pl-4", children: [
|
|
13495
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
|
|
13496
|
+
status.phase === "live" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
13281
13497
|
"span",
|
|
13282
13498
|
{
|
|
13283
13499
|
className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-2 clcosdk:shrink-0",
|
|
13284
13500
|
"aria-hidden": "true",
|
|
13285
13501
|
children: [
|
|
13286
|
-
/* @__PURE__ */ (0,
|
|
13287
|
-
/* @__PURE__ */ (0,
|
|
13502
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
|
|
13503
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
|
|
13288
13504
|
]
|
|
13289
13505
|
}
|
|
13290
13506
|
) : null,
|
|
13291
|
-
/* @__PURE__ */ (0,
|
|
13507
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
13292
13508
|
"p",
|
|
13293
13509
|
{
|
|
13294
13510
|
className: cn(
|
|
@@ -13299,7 +13515,7 @@ function OfferSaleCard({
|
|
|
13299
13515
|
}
|
|
13300
13516
|
)
|
|
13301
13517
|
] }),
|
|
13302
|
-
/* @__PURE__ */ (0,
|
|
13518
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
13303
13519
|
"span",
|
|
13304
13520
|
{
|
|
13305
13521
|
className: cn(
|
|
@@ -13309,8 +13525,8 @@ function OfferSaleCard({
|
|
|
13309
13525
|
"aria-hidden": "true",
|
|
13310
13526
|
children: [
|
|
13311
13527
|
"View",
|
|
13312
|
-
/* @__PURE__ */ (0,
|
|
13313
|
-
/* @__PURE__ */ (0,
|
|
13528
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
|
|
13529
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react13.ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
|
|
13314
13530
|
]
|
|
13315
13531
|
}
|
|
13316
13532
|
)
|
|
@@ -13318,8 +13534,8 @@ function OfferSaleCard({
|
|
|
13318
13534
|
]
|
|
13319
13535
|
}
|
|
13320
13536
|
);
|
|
13321
|
-
const wrapped = containerClassName ? /* @__PURE__ */ (0,
|
|
13322
|
-
return /* @__PURE__ */ (0,
|
|
13537
|
+
const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: containerClassName, children: card }) : card;
|
|
13538
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CoinListStyleScope, { children: wrapped });
|
|
13323
13539
|
}
|
|
13324
13540
|
var SALE_PHASE_LABEL = {
|
|
13325
13541
|
upcoming: "Upcoming",
|
|
@@ -13332,10 +13548,10 @@ function cardActionLabel2(offer, phase) {
|
|
|
13332
13548
|
}
|
|
13333
13549
|
|
|
13334
13550
|
// src/client/components/offers/grid/OffersGridView.tsx
|
|
13335
|
-
var
|
|
13551
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
13336
13552
|
var DEFAULT_MAX_COLUMNS2 = 2;
|
|
13337
13553
|
function OffersGridView(props) {
|
|
13338
|
-
return /* @__PURE__ */ (0,
|
|
13554
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OffersGridViewBody, { ...props }) });
|
|
13339
13555
|
}
|
|
13340
13556
|
function OffersGridViewBody({
|
|
13341
13557
|
state,
|
|
@@ -13349,13 +13565,13 @@ function OffersGridViewBody({
|
|
|
13349
13565
|
}) {
|
|
13350
13566
|
switch (state.type) {
|
|
13351
13567
|
case "loading":
|
|
13352
|
-
return loading ?? /* @__PURE__ */ (0,
|
|
13568
|
+
return loading ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LoadingState, {});
|
|
13353
13569
|
case "error":
|
|
13354
|
-
return error ?? /* @__PURE__ */ (0,
|
|
13570
|
+
return error ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ErrorState, { message: state.message });
|
|
13355
13571
|
case "empty":
|
|
13356
|
-
return emptyState ?? /* @__PURE__ */ (0,
|
|
13572
|
+
return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(EmptyState, {});
|
|
13357
13573
|
case "content":
|
|
13358
|
-
return /* @__PURE__ */ (0,
|
|
13574
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13359
13575
|
OffersGridContent,
|
|
13360
13576
|
{
|
|
13361
13577
|
offers: state.offers,
|
|
@@ -13385,14 +13601,14 @@ function OffersGridContent({
|
|
|
13385
13601
|
Math.max(1, maxColumns ?? DEFAULT_MAX_COLUMNS2)
|
|
13386
13602
|
);
|
|
13387
13603
|
const maxGridWidth = `calc(${cols} * 28rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
|
|
13388
|
-
return /* @__PURE__ */ (0,
|
|
13604
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13389
13605
|
"div",
|
|
13390
13606
|
{
|
|
13391
13607
|
className: cn(
|
|
13392
13608
|
"clcosdk:flex clcosdk:w-full clcosdk:justify-center",
|
|
13393
13609
|
containerClassName
|
|
13394
13610
|
),
|
|
13395
|
-
children: /* @__PURE__ */ (0,
|
|
13611
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13396
13612
|
"div",
|
|
13397
13613
|
{
|
|
13398
13614
|
className: cn(
|
|
@@ -13401,7 +13617,7 @@ function OffersGridContent({
|
|
|
13401
13617
|
className
|
|
13402
13618
|
),
|
|
13403
13619
|
style: { maxWidth: maxGridWidth },
|
|
13404
|
-
children: offers.map((offer) => /* @__PURE__ */ (0,
|
|
13620
|
+
children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13405
13621
|
OfferSaleCard,
|
|
13406
13622
|
{
|
|
13407
13623
|
offer,
|
|
@@ -13415,17 +13631,17 @@ function OffersGridContent({
|
|
|
13415
13631
|
);
|
|
13416
13632
|
}
|
|
13417
13633
|
function LoadingState() {
|
|
13418
|
-
return /* @__PURE__ */ (0,
|
|
13634
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13419
13635
|
"output",
|
|
13420
13636
|
{
|
|
13421
13637
|
"aria-live": "polite",
|
|
13422
13638
|
className: "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6",
|
|
13423
|
-
children: /* @__PURE__ */ (0,
|
|
13639
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
|
|
13424
13640
|
}
|
|
13425
13641
|
);
|
|
13426
13642
|
}
|
|
13427
13643
|
function ErrorState({ message }) {
|
|
13428
|
-
return /* @__PURE__ */ (0,
|
|
13644
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13429
13645
|
AlertBanner,
|
|
13430
13646
|
{
|
|
13431
13647
|
variant: "error",
|
|
@@ -13436,13 +13652,13 @@ function ErrorState({ message }) {
|
|
|
13436
13652
|
);
|
|
13437
13653
|
}
|
|
13438
13654
|
function EmptyState() {
|
|
13439
|
-
return /* @__PURE__ */ (0,
|
|
13655
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
|
|
13440
13656
|
"output",
|
|
13441
13657
|
{
|
|
13442
13658
|
"aria-live": "polite",
|
|
13443
13659
|
className: "clcosdk:flex clcosdk:min-h-40 clcosdk:flex-col clcosdk:items-center clcosdk:justify-center clcosdk:gap-2 clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6 clcosdk:text-center",
|
|
13444
13660
|
children: [
|
|
13445
|
-
/* @__PURE__ */ (0,
|
|
13661
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
13446
13662
|
"p",
|
|
13447
13663
|
{
|
|
13448
13664
|
className: cn(
|
|
@@ -13452,14 +13668,14 @@ function EmptyState() {
|
|
|
13452
13668
|
children: "No offers available"
|
|
13453
13669
|
}
|
|
13454
13670
|
),
|
|
13455
|
-
/* @__PURE__ */ (0,
|
|
13671
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
|
|
13456
13672
|
]
|
|
13457
13673
|
}
|
|
13458
13674
|
);
|
|
13459
13675
|
}
|
|
13460
13676
|
|
|
13461
13677
|
// src/client/hooks/offers/grid/useOffersGridViewModel.ts
|
|
13462
|
-
var
|
|
13678
|
+
var import_react38 = require("react");
|
|
13463
13679
|
|
|
13464
13680
|
// src/client/hooks/offers/data/useOffers.ts
|
|
13465
13681
|
var import_react36 = require("react");
|
|
@@ -13517,36 +13733,147 @@ function useOffers(options = {}) {
|
|
|
13517
13733
|
return { offersState };
|
|
13518
13734
|
}
|
|
13519
13735
|
|
|
13736
|
+
// src/client/hooks/offers/shared/offer-logo.types.ts
|
|
13737
|
+
var CARD_LOGO_WIDTH = 96;
|
|
13738
|
+
var OfferLogoUi = {
|
|
13739
|
+
/**
|
|
13740
|
+
* The registry's logo for the token an offer is about, or the offer's own
|
|
13741
|
+
* artwork otherwise, or `null` when neither exists.
|
|
13742
|
+
*
|
|
13743
|
+
* The registry wins when both exist because it is the token's real artwork
|
|
13744
|
+
* where `Offer.logoUrl` is catalogue artwork, and because a swap publishes
|
|
13745
|
+
* without artwork more often than not - which is why `logoUrl` is `null`
|
|
13746
|
+
* on the swap variants.
|
|
13747
|
+
*/
|
|
13748
|
+
fromOffer: (offer, tokenMetadata) => {
|
|
13749
|
+
const light = tokenMetadata ? logoImage(tokenMetadata.logo) : null;
|
|
13750
|
+
if (light !== null) {
|
|
13751
|
+
const dark = tokenMetadata?.logoDark ? logoImage(tokenMetadata.logoDark) : null;
|
|
13752
|
+
return { light, dark };
|
|
13753
|
+
}
|
|
13754
|
+
return offer.logoUrl ? { light: { src: offer.logoUrl }, dark: null } : null;
|
|
13755
|
+
}
|
|
13756
|
+
};
|
|
13757
|
+
function logoImage(logo) {
|
|
13758
|
+
const src = tokenLogoUrl(logo, CARD_LOGO_WIDTH);
|
|
13759
|
+
if (src === null) {
|
|
13760
|
+
return null;
|
|
13761
|
+
}
|
|
13762
|
+
const srcSet = tokenLogoSrcSet(logo);
|
|
13763
|
+
return srcSet === null ? { src } : { src, srcSet };
|
|
13764
|
+
}
|
|
13765
|
+
|
|
13520
13766
|
// src/client/hooks/offers/shared/offer-sale-card.types.ts
|
|
13521
13767
|
var OfferSaleCardUi = {
|
|
13522
|
-
|
|
13768
|
+
/**
|
|
13769
|
+
* `tokenMetadata` is the registry's entry for the token the offer is about
|
|
13770
|
+
* (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
|
|
13771
|
+
* registry names win over the offer's own where both exist: they are the
|
|
13772
|
+
* token's canonical name and artwork, where the offer's are catalogue copy.
|
|
13773
|
+
*/
|
|
13774
|
+
fromOffer: (offer, tokenMetadata = null) => ({
|
|
13523
13775
|
id: offer.id,
|
|
13524
|
-
|
|
13525
|
-
|
|
13526
|
-
|
|
13776
|
+
...tokenMetadata ? { name: tokenMetadata.name } : {},
|
|
13777
|
+
...saleWindow(offer),
|
|
13778
|
+
logo: OfferLogoUi.fromOffer(offer, tokenMetadata),
|
|
13527
13779
|
endsAt: offer.endsAt
|
|
13528
13780
|
}),
|
|
13529
|
-
fromDetail: (detail) => ({
|
|
13781
|
+
fromDetail: (detail, tokenMetadata = null) => ({
|
|
13530
13782
|
id: detail.id,
|
|
13531
|
-
name: detail.name,
|
|
13532
|
-
|
|
13533
|
-
|
|
13534
|
-
startsAt: detail.startsAt,
|
|
13783
|
+
name: tokenMetadata?.name ?? detail.name,
|
|
13784
|
+
...saleWindow(detail),
|
|
13785
|
+
logo: OfferLogoUi.fromOffer(detail, tokenMetadata),
|
|
13535
13786
|
endsAt: detail.endsAt
|
|
13536
13787
|
})
|
|
13537
13788
|
};
|
|
13789
|
+
function saleWindow(offer) {
|
|
13790
|
+
switch (offer.type) {
|
|
13791
|
+
case "coinlist::token_sale":
|
|
13792
|
+
case "superstate::swap":
|
|
13793
|
+
return { tagline: offer.tagline, startsAt: offer.startsAt };
|
|
13794
|
+
case "ondo::swap":
|
|
13795
|
+
return { tagline: null, startsAt: null };
|
|
13796
|
+
default: {
|
|
13797
|
+
const exhaustive = offer;
|
|
13798
|
+
return exhaustive;
|
|
13799
|
+
}
|
|
13800
|
+
}
|
|
13801
|
+
}
|
|
13802
|
+
|
|
13803
|
+
// src/client/hooks/shared/useTokenRegistry.ts
|
|
13804
|
+
var import_react37 = require("react");
|
|
13805
|
+
var DISABLED_STATE2 = { type: "DISABLED" };
|
|
13806
|
+
var LOADING_STATE4 = { type: "LOADING" };
|
|
13807
|
+
function useTokenRegistry(options = {}) {
|
|
13808
|
+
const { data, enabled = true } = options;
|
|
13809
|
+
const { coinlist, isReady } = useCoinList();
|
|
13810
|
+
const log = useLogger("useTokenRegistry");
|
|
13811
|
+
const [state, setState] = (0, import_react37.useState)(
|
|
13812
|
+
() => data !== void 0 ? { type: "CONTENT", registry: TokenRegistrySnapshot.fromTokens(data) } : LOADING_STATE4
|
|
13813
|
+
);
|
|
13814
|
+
const [refetchCount, setRefetchCount] = (0, import_react37.useState)(0);
|
|
13815
|
+
const refetch = (0, import_react37.useCallback)(() => {
|
|
13816
|
+
setRefetchCount((count) => count + 1);
|
|
13817
|
+
}, []);
|
|
13818
|
+
(0, import_react37.useEffect)(() => {
|
|
13819
|
+
let isCancelled = false;
|
|
13820
|
+
const seedActive = data !== void 0 && refetchCount === 0;
|
|
13821
|
+
if (!isReady || !enabled || seedActive) {
|
|
13822
|
+
return () => {
|
|
13823
|
+
isCancelled = true;
|
|
13824
|
+
};
|
|
13825
|
+
}
|
|
13826
|
+
setState(LOADING_STATE4);
|
|
13827
|
+
coinlist.tokens.list().then((tokens) => {
|
|
13828
|
+
if (!isCancelled) {
|
|
13829
|
+
log.debug(() => ({
|
|
13830
|
+
msg: "settled",
|
|
13831
|
+
fields: { state: "CONTENT", count: tokens.length }
|
|
13832
|
+
}));
|
|
13833
|
+
setState({
|
|
13834
|
+
type: "CONTENT",
|
|
13835
|
+
registry: TokenRegistrySnapshot.fromTokens(tokens)
|
|
13836
|
+
});
|
|
13837
|
+
}
|
|
13838
|
+
}).catch((error) => {
|
|
13839
|
+
if (!isCancelled) {
|
|
13840
|
+
log.failure(
|
|
13841
|
+
() => ({
|
|
13842
|
+
msg: "settled",
|
|
13843
|
+
fields: { state: "ERROR", reason: "generic-error" }
|
|
13844
|
+
}),
|
|
13845
|
+
error
|
|
13846
|
+
);
|
|
13847
|
+
setState({ type: "ERROR", reason: "generic-error" });
|
|
13848
|
+
}
|
|
13849
|
+
});
|
|
13850
|
+
return () => {
|
|
13851
|
+
isCancelled = true;
|
|
13852
|
+
};
|
|
13853
|
+
}, [coinlist, isReady, enabled, data, refetchCount, log]);
|
|
13854
|
+
return {
|
|
13855
|
+
// LOADING would be a lie while disabled: nothing is in flight and nothing
|
|
13856
|
+
// will replace it. Settled states (a seed, a previous answer) survive.
|
|
13857
|
+
state: !enabled && state.type === "LOADING" ? DISABLED_STATE2 : state,
|
|
13858
|
+
refetch
|
|
13859
|
+
};
|
|
13860
|
+
}
|
|
13538
13861
|
|
|
13539
13862
|
// src/client/hooks/offers/grid/useOffersGridViewModel.ts
|
|
13540
13863
|
var NOT_AUTHENTICATED_MESSAGE = "Sign in to view available offers.";
|
|
13541
13864
|
var GENERIC_ERROR_MESSAGE = "Unable to load offers right now. Please try again.";
|
|
13542
13865
|
function useOffersGridViewModel(options = {}) {
|
|
13543
13866
|
const { data, onOfferClick, enabled = true } = options;
|
|
13544
|
-
const { offersState } = useOffers({ data, enabled });
|
|
13545
|
-
const state = (
|
|
13546
|
-
|
|
13547
|
-
|
|
13867
|
+
const { offersState } = useOffers({ data: data?.offers, enabled });
|
|
13868
|
+
const { state: registryState } = useTokenRegistry({
|
|
13869
|
+
data: data?.tokens,
|
|
13870
|
+
enabled
|
|
13871
|
+
});
|
|
13872
|
+
const state = (0, import_react38.useMemo)(
|
|
13873
|
+
() => toUiState(offersState, registryState, onOfferClick !== void 0),
|
|
13874
|
+
[offersState, registryState, onOfferClick]
|
|
13548
13875
|
);
|
|
13549
|
-
const onEvent = (0,
|
|
13876
|
+
const onEvent = (0, import_react38.useCallback)(
|
|
13550
13877
|
(event) => {
|
|
13551
13878
|
switch (event.type) {
|
|
13552
13879
|
case "ON_OFFER_CLICK": {
|
|
@@ -13569,7 +13896,7 @@ function useOffersGridViewModel(options = {}) {
|
|
|
13569
13896
|
);
|
|
13570
13897
|
return { state, onEvent };
|
|
13571
13898
|
}
|
|
13572
|
-
function toUiState(offersState, interactive) {
|
|
13899
|
+
function toUiState(offersState, registryState, interactive) {
|
|
13573
13900
|
switch (offersState.type) {
|
|
13574
13901
|
case "LOADING":
|
|
13575
13902
|
return { type: "loading" };
|
|
@@ -13582,9 +13909,18 @@ function toUiState(offersState, interactive) {
|
|
|
13582
13909
|
if (offersState.offers.length === 0) {
|
|
13583
13910
|
return { type: "empty" };
|
|
13584
13911
|
}
|
|
13912
|
+
if (registryState.type === "LOADING") {
|
|
13913
|
+
return { type: "loading" };
|
|
13914
|
+
}
|
|
13915
|
+
const registry = registryState.type === "CONTENT" ? registryState.registry : null;
|
|
13585
13916
|
return {
|
|
13586
13917
|
type: "content",
|
|
13587
|
-
offers: offersState.offers.map(
|
|
13918
|
+
offers: offersState.offers.map(
|
|
13919
|
+
(offer) => OfferSaleCardUi.fromOffer(
|
|
13920
|
+
offer,
|
|
13921
|
+
registry ? TokenRegistrySnapshot.forOffer(registry, offer) : null
|
|
13922
|
+
)
|
|
13923
|
+
),
|
|
13588
13924
|
interactive
|
|
13589
13925
|
};
|
|
13590
13926
|
}
|
|
@@ -13596,7 +13932,7 @@ function toUiState(offersState, interactive) {
|
|
|
13596
13932
|
}
|
|
13597
13933
|
|
|
13598
13934
|
// src/client/components/offers/grid/OffersGridContainer.tsx
|
|
13599
|
-
var
|
|
13935
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
13600
13936
|
function OffersGridContainer({
|
|
13601
13937
|
data,
|
|
13602
13938
|
onOfferClick,
|
|
@@ -13608,17 +13944,17 @@ function OffersGridContainer({
|
|
|
13608
13944
|
onOfferClick,
|
|
13609
13945
|
enabled
|
|
13610
13946
|
});
|
|
13611
|
-
return /* @__PURE__ */ (0,
|
|
13947
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(OffersGridView, { state, onEvent, ...viewProps });
|
|
13612
13948
|
}
|
|
13613
13949
|
|
|
13614
13950
|
// src/client/components/requirements/ConnectedWalletList.tsx
|
|
13615
|
-
var
|
|
13616
|
-
var
|
|
13951
|
+
var import_react39 = require("react");
|
|
13952
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
13617
13953
|
function ConnectedWalletRow({
|
|
13618
13954
|
wallet,
|
|
13619
13955
|
onRemove
|
|
13620
13956
|
}) {
|
|
13621
|
-
const [state, setState] = (0,
|
|
13957
|
+
const [state, setState] = (0, import_react39.useState)("idle");
|
|
13622
13958
|
const remove = async () => {
|
|
13623
13959
|
if (!onRemove) return;
|
|
13624
13960
|
setState("removing");
|
|
@@ -13629,8 +13965,8 @@ function ConnectedWalletRow({
|
|
|
13629
13965
|
setState("error");
|
|
13630
13966
|
}
|
|
13631
13967
|
};
|
|
13632
|
-
return /* @__PURE__ */ (0,
|
|
13633
|
-
/* @__PURE__ */ (0,
|
|
13968
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
|
|
13969
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13634
13970
|
"span",
|
|
13635
13971
|
{
|
|
13636
13972
|
title: wallet.address,
|
|
@@ -13641,16 +13977,16 @@ function ConnectedWalletRow({
|
|
|
13641
13977
|
children: wallet.shortAddress
|
|
13642
13978
|
}
|
|
13643
13979
|
),
|
|
13644
|
-
onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0,
|
|
13645
|
-
/* @__PURE__ */ (0,
|
|
13980
|
+
onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
|
|
13981
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13646
13982
|
"span",
|
|
13647
13983
|
{
|
|
13648
13984
|
className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
|
|
13649
13985
|
children: "Remove?"
|
|
13650
13986
|
}
|
|
13651
13987
|
),
|
|
13652
|
-
/* @__PURE__ */ (0,
|
|
13653
|
-
/* @__PURE__ */ (0,
|
|
13988
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
|
|
13989
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13654
13990
|
ClButton,
|
|
13655
13991
|
{
|
|
13656
13992
|
size: "sm",
|
|
@@ -13659,9 +13995,9 @@ function ConnectedWalletRow({
|
|
|
13659
13995
|
children: "Cancel"
|
|
13660
13996
|
}
|
|
13661
13997
|
)
|
|
13662
|
-
] }) : state === "error" ? /* @__PURE__ */ (0,
|
|
13663
|
-
/* @__PURE__ */ (0,
|
|
13664
|
-
/* @__PURE__ */ (0,
|
|
13998
|
+
] }) : state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
|
|
13999
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
|
|
14000
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13665
14001
|
ClButton,
|
|
13666
14002
|
{
|
|
13667
14003
|
size: "sm",
|
|
@@ -13670,7 +14006,7 @@ function ConnectedWalletRow({
|
|
|
13670
14006
|
children: "Try again"
|
|
13671
14007
|
}
|
|
13672
14008
|
)
|
|
13673
|
-
] }) : /* @__PURE__ */ (0,
|
|
14009
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13674
14010
|
ClButton,
|
|
13675
14011
|
{
|
|
13676
14012
|
size: "sm",
|
|
@@ -13683,7 +14019,7 @@ function ConnectedWalletRow({
|
|
|
13683
14019
|
] });
|
|
13684
14020
|
}
|
|
13685
14021
|
function ConnectedWalletList(props) {
|
|
13686
|
-
return /* @__PURE__ */ (0,
|
|
14022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ConnectedWalletListBody, { ...props }) });
|
|
13687
14023
|
}
|
|
13688
14024
|
function ConnectedWalletListBody({
|
|
13689
14025
|
wallets,
|
|
@@ -13693,18 +14029,18 @@ function ConnectedWalletListBody({
|
|
|
13693
14029
|
status = "ready",
|
|
13694
14030
|
className
|
|
13695
14031
|
}) {
|
|
13696
|
-
return /* @__PURE__ */ (0,
|
|
14032
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
|
|
13697
14033
|
"div",
|
|
13698
14034
|
{
|
|
13699
14035
|
className: cn("clcosdk:flex clcosdk:flex-col clcosdk:gap-2", className),
|
|
13700
14036
|
children: [
|
|
13701
|
-
status === "loading" ? /* @__PURE__ */ (0,
|
|
14037
|
+
status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13702
14038
|
AlertBanner,
|
|
13703
14039
|
{
|
|
13704
14040
|
variant: "error",
|
|
13705
14041
|
content: "Couldn't load your connected wallets."
|
|
13706
14042
|
}
|
|
13707
|
-
) : wallets.length === 0 ? /* @__PURE__ */ (0,
|
|
14043
|
+
) : wallets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13708
14044
|
ConnectedWalletRow,
|
|
13709
14045
|
{
|
|
13710
14046
|
wallet,
|
|
@@ -13712,7 +14048,7 @@ function ConnectedWalletListBody({
|
|
|
13712
14048
|
},
|
|
13713
14049
|
wallet.id
|
|
13714
14050
|
)) }),
|
|
13715
|
-
onAdd != null && status !== "loading" && /* @__PURE__ */ (0,
|
|
14051
|
+
onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
13716
14052
|
ClButton,
|
|
13717
14053
|
{
|
|
13718
14054
|
size: "sm",
|
|
@@ -13729,9 +14065,9 @@ function ConnectedWalletListBody({
|
|
|
13729
14065
|
|
|
13730
14066
|
// src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
|
|
13731
14067
|
var import_websdk_react = __toESM(require("@sumsub/websdk-react"), 1);
|
|
13732
|
-
var
|
|
14068
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
13733
14069
|
function IdentityVerificationView(props) {
|
|
13734
|
-
return /* @__PURE__ */ (0,
|
|
14070
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(IdentityVerificationViewBody, { ...props }) });
|
|
13735
14071
|
}
|
|
13736
14072
|
function IdentityVerificationViewBody({
|
|
13737
14073
|
state,
|
|
@@ -13740,7 +14076,7 @@ function IdentityVerificationViewBody({
|
|
|
13740
14076
|
}) {
|
|
13741
14077
|
switch (state.type) {
|
|
13742
14078
|
case "loading":
|
|
13743
|
-
return /* @__PURE__ */ (0,
|
|
14079
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
13744
14080
|
"output",
|
|
13745
14081
|
{
|
|
13746
14082
|
"aria-live": "polite",
|
|
@@ -13748,11 +14084,11 @@ function IdentityVerificationViewBody({
|
|
|
13748
14084
|
"clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
|
|
13749
14085
|
className
|
|
13750
14086
|
),
|
|
13751
|
-
children: /* @__PURE__ */ (0,
|
|
14087
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
|
|
13752
14088
|
}
|
|
13753
14089
|
);
|
|
13754
14090
|
case "error":
|
|
13755
|
-
return /* @__PURE__ */ (0,
|
|
14091
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
|
|
13756
14092
|
"div",
|
|
13757
14093
|
{
|
|
13758
14094
|
className: cn(
|
|
@@ -13760,13 +14096,13 @@ function IdentityVerificationViewBody({
|
|
|
13760
14096
|
className
|
|
13761
14097
|
),
|
|
13762
14098
|
children: [
|
|
13763
|
-
/* @__PURE__ */ (0,
|
|
13764
|
-
state.retryable && /* @__PURE__ */ (0,
|
|
14099
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AlertBanner, { variant: "error", icon: true, content: state.message }),
|
|
14100
|
+
state.retryable && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
|
|
13765
14101
|
]
|
|
13766
14102
|
}
|
|
13767
14103
|
);
|
|
13768
14104
|
case "ready":
|
|
13769
|
-
return /* @__PURE__ */ (0,
|
|
14105
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
13770
14106
|
import_websdk_react.default,
|
|
13771
14107
|
{
|
|
13772
14108
|
accessToken: state.accessToken,
|
|
@@ -13806,25 +14142,25 @@ function toError(error) {
|
|
|
13806
14142
|
}
|
|
13807
14143
|
|
|
13808
14144
|
// src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
|
|
13809
|
-
var
|
|
14145
|
+
var import_react41 = require("react");
|
|
13810
14146
|
|
|
13811
14147
|
// src/client/hooks/requirements/data/useKycToken.ts
|
|
13812
|
-
var
|
|
14148
|
+
var import_react40 = require("react");
|
|
13813
14149
|
var IDLE_STATE = { type: "IDLE" };
|
|
13814
|
-
var
|
|
14150
|
+
var LOADING_STATE5 = { type: "LOADING" };
|
|
13815
14151
|
function useKycToken(levelName, reset) {
|
|
13816
14152
|
const { coinlist } = useCoinList();
|
|
13817
14153
|
const log = useLogger("useKycToken");
|
|
13818
|
-
const [kycTokenState, setKycTokenState] = (0,
|
|
13819
|
-
const resetPendingRef = (0,
|
|
13820
|
-
const tokenIssuedRef = (0,
|
|
13821
|
-
(0,
|
|
14154
|
+
const [kycTokenState, setKycTokenState] = (0, import_react40.useState)(IDLE_STATE);
|
|
14155
|
+
const resetPendingRef = (0, import_react40.useRef)(reset === true);
|
|
14156
|
+
const tokenIssuedRef = (0, import_react40.useRef)(false);
|
|
14157
|
+
(0, import_react40.useEffect)(() => {
|
|
13822
14158
|
if (!tokenIssuedRef.current) {
|
|
13823
14159
|
resetPendingRef.current = reset === true;
|
|
13824
14160
|
}
|
|
13825
14161
|
}, [reset]);
|
|
13826
|
-
const fetchToken = (0,
|
|
13827
|
-
setKycTokenState(
|
|
14162
|
+
const fetchToken = (0, import_react40.useCallback)(async () => {
|
|
14163
|
+
setKycTokenState(LOADING_STATE5);
|
|
13828
14164
|
try {
|
|
13829
14165
|
const kycToken = await coinlist.requirements.createKycToken({
|
|
13830
14166
|
levelName,
|
|
@@ -13857,8 +14193,8 @@ var GENERIC_ERROR_MESSAGE2 = "Unable to start identity verification right now. P
|
|
|
13857
14193
|
function useIdentityVerificationViewModel(options = {}) {
|
|
13858
14194
|
const { levelName, reset, locale, onSubmitted, onError } = options;
|
|
13859
14195
|
const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
|
|
13860
|
-
const fetchedRef = (0,
|
|
13861
|
-
(0,
|
|
14196
|
+
const fetchedRef = (0, import_react41.useRef)(false);
|
|
14197
|
+
(0, import_react41.useEffect)(() => {
|
|
13862
14198
|
if (fetchedRef.current) {
|
|
13863
14199
|
return;
|
|
13864
14200
|
}
|
|
@@ -13866,7 +14202,7 @@ function useIdentityVerificationViewModel(options = {}) {
|
|
|
13866
14202
|
fetchToken().catch(() => {
|
|
13867
14203
|
});
|
|
13868
14204
|
}, [fetchToken]);
|
|
13869
|
-
const state = (0,
|
|
14205
|
+
const state = (0, import_react41.useMemo)(() => {
|
|
13870
14206
|
switch (kycTokenState.type) {
|
|
13871
14207
|
case "IDLE":
|
|
13872
14208
|
case "LOADING":
|
|
@@ -13892,7 +14228,7 @@ function useIdentityVerificationViewModel(options = {}) {
|
|
|
13892
14228
|
}
|
|
13893
14229
|
}
|
|
13894
14230
|
}, [kycTokenState, locale, fetchToken]);
|
|
13895
|
-
const onEvent = (0,
|
|
14231
|
+
const onEvent = (0, import_react41.useCallback)(
|
|
13896
14232
|
(event) => {
|
|
13897
14233
|
switch (event.type) {
|
|
13898
14234
|
case "ON_RETRY":
|
|
@@ -13917,7 +14253,7 @@ function useIdentityVerificationViewModel(options = {}) {
|
|
|
13917
14253
|
}
|
|
13918
14254
|
|
|
13919
14255
|
// src/client/components/requirements/identity-verification/IdentityVerificationContainer.tsx
|
|
13920
|
-
var
|
|
14256
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
13921
14257
|
function IdentityVerificationContainer({
|
|
13922
14258
|
levelName,
|
|
13923
14259
|
reset,
|
|
@@ -13933,7 +14269,7 @@ function IdentityVerificationContainer({
|
|
|
13933
14269
|
onSubmitted,
|
|
13934
14270
|
onError
|
|
13935
14271
|
});
|
|
13936
|
-
return /* @__PURE__ */ (0,
|
|
14272
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
13937
14273
|
IdentityVerificationView,
|
|
13938
14274
|
{
|
|
13939
14275
|
state,
|
|
@@ -13948,7 +14284,7 @@ var import_lucide_react15 = require("lucide-react");
|
|
|
13948
14284
|
|
|
13949
14285
|
// src/client/components/design-system/StepStatusIcon.tsx
|
|
13950
14286
|
var import_lucide_react14 = require("lucide-react");
|
|
13951
|
-
var
|
|
14287
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
13952
14288
|
var statusConfig = {
|
|
13953
14289
|
required: {
|
|
13954
14290
|
Icon: import_lucide_react14.Info,
|
|
@@ -13973,7 +14309,7 @@ var statusConfig = {
|
|
|
13973
14309
|
};
|
|
13974
14310
|
function StepStatusIcon({ status, className }) {
|
|
13975
14311
|
const { Icon, colorClass, fillClass } = statusConfig[status];
|
|
13976
|
-
return /* @__PURE__ */ (0,
|
|
14312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
13977
14313
|
Icon,
|
|
13978
14314
|
{
|
|
13979
14315
|
className: cn(
|
|
@@ -13988,49 +14324,90 @@ function StepStatusIcon({ status, className }) {
|
|
|
13988
14324
|
}
|
|
13989
14325
|
|
|
13990
14326
|
// src/client/components/requirements/RequirementItem.tsx
|
|
13991
|
-
var
|
|
14327
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
14328
|
+
var DEFAULT_PENDING = "Under review. We'll notify you when complete.";
|
|
14329
|
+
var DEFAULT_REJECTED = "Verification rejected.";
|
|
14330
|
+
var SUPPORT_LINK = "Contact support";
|
|
13992
14331
|
function VerificationActionZone({
|
|
13993
14332
|
status,
|
|
14333
|
+
statusMessages,
|
|
13994
14334
|
onAction,
|
|
13995
14335
|
onContactSupport
|
|
13996
14336
|
}) {
|
|
13997
14337
|
switch (status) {
|
|
13998
14338
|
case "required":
|
|
13999
14339
|
if (onAction === null) return null;
|
|
14000
|
-
return /* @__PURE__ */ (0,
|
|
14340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Continue" });
|
|
14001
14341
|
case "pending":
|
|
14002
|
-
return /* @__PURE__ */ (0,
|
|
14342
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14003
14343
|
AlertBanner,
|
|
14004
14344
|
{
|
|
14005
14345
|
variant: "warning",
|
|
14006
|
-
content:
|
|
14346
|
+
content: statusMessages?.pending ?? DEFAULT_PENDING
|
|
14007
14347
|
}
|
|
14008
14348
|
);
|
|
14009
14349
|
case "completed":
|
|
14010
|
-
return /* @__PURE__ */ (0,
|
|
14350
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14351
|
+
AlertBanner,
|
|
14352
|
+
{
|
|
14353
|
+
variant: "success",
|
|
14354
|
+
content: statusMessages?.completed ?? "Identity verified."
|
|
14355
|
+
}
|
|
14356
|
+
);
|
|
14011
14357
|
case "rejected":
|
|
14012
|
-
return /* @__PURE__ */ (0,
|
|
14358
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14013
14359
|
AlertBanner,
|
|
14014
14360
|
{
|
|
14015
14361
|
variant: "error",
|
|
14016
|
-
content:
|
|
14017
|
-
|
|
14018
|
-
|
|
14019
|
-
|
|
14020
|
-
|
|
14021
|
-
|
|
14022
|
-
|
|
14023
|
-
onClick: onContactSupport,
|
|
14024
|
-
className: "clcosdk:underline",
|
|
14025
|
-
children: "Contact support"
|
|
14026
|
-
}
|
|
14027
|
-
),
|
|
14028
|
-
"."
|
|
14029
|
-
] })
|
|
14362
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14363
|
+
RejectedMessage,
|
|
14364
|
+
{
|
|
14365
|
+
message: statusMessages?.rejected ?? DEFAULT_REJECTED,
|
|
14366
|
+
onContactSupport
|
|
14367
|
+
}
|
|
14368
|
+
)
|
|
14030
14369
|
}
|
|
14031
14370
|
);
|
|
14032
14371
|
}
|
|
14033
14372
|
}
|
|
14373
|
+
function RejectedMessage({
|
|
14374
|
+
message,
|
|
14375
|
+
onContactSupport
|
|
14376
|
+
}) {
|
|
14377
|
+
const linkAt = message.indexOf(SUPPORT_LINK);
|
|
14378
|
+
if (onContactSupport == null) {
|
|
14379
|
+
return message;
|
|
14380
|
+
}
|
|
14381
|
+
if (linkAt === -1) {
|
|
14382
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
14383
|
+
message,
|
|
14384
|
+
" ",
|
|
14385
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14386
|
+
"button",
|
|
14387
|
+
{
|
|
14388
|
+
type: "button",
|
|
14389
|
+
onClick: onContactSupport,
|
|
14390
|
+
className: "clcosdk:underline",
|
|
14391
|
+
children: SUPPORT_LINK
|
|
14392
|
+
}
|
|
14393
|
+
),
|
|
14394
|
+
"."
|
|
14395
|
+
] });
|
|
14396
|
+
}
|
|
14397
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
14398
|
+
message.slice(0, linkAt),
|
|
14399
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14400
|
+
"button",
|
|
14401
|
+
{
|
|
14402
|
+
type: "button",
|
|
14403
|
+
onClick: onContactSupport,
|
|
14404
|
+
className: "clcosdk:underline",
|
|
14405
|
+
children: SUPPORT_LINK
|
|
14406
|
+
}
|
|
14407
|
+
),
|
|
14408
|
+
message.slice(linkAt + SUPPORT_LINK.length)
|
|
14409
|
+
] });
|
|
14410
|
+
}
|
|
14034
14411
|
function WalletActionZone({
|
|
14035
14412
|
status,
|
|
14036
14413
|
multiWallet,
|
|
@@ -14040,8 +14417,8 @@ function WalletActionZone({
|
|
|
14040
14417
|
onRemoveWallet
|
|
14041
14418
|
}) {
|
|
14042
14419
|
if (multiWallet) {
|
|
14043
|
-
return /* @__PURE__ */ (0,
|
|
14044
|
-
/* @__PURE__ */ (0,
|
|
14420
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
14421
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14045
14422
|
ConnectedWalletList,
|
|
14046
14423
|
{
|
|
14047
14424
|
wallets: connectedWallets,
|
|
@@ -14050,7 +14427,7 @@ function WalletActionZone({
|
|
|
14050
14427
|
status: walletsStatus
|
|
14051
14428
|
}
|
|
14052
14429
|
),
|
|
14053
|
-
status === "rejected" && /* @__PURE__ */ (0,
|
|
14430
|
+
status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14054
14431
|
AlertBanner,
|
|
14055
14432
|
{
|
|
14056
14433
|
variant: "error",
|
|
@@ -14061,21 +14438,30 @@ function WalletActionZone({
|
|
|
14061
14438
|
}
|
|
14062
14439
|
if (status === "completed") {
|
|
14063
14440
|
const connected = connectedWallets[0];
|
|
14064
|
-
return /* @__PURE__ */ (0,
|
|
14065
|
-
onAction !== null && /* @__PURE__ */ (0,
|
|
14066
|
-
|
|
14441
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
14442
|
+
onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14443
|
+
ClButton,
|
|
14444
|
+
{
|
|
14445
|
+
size: "sm",
|
|
14446
|
+
variant: "secondary",
|
|
14447
|
+
className: "clcosdk:self-start",
|
|
14448
|
+
onClick: onAction,
|
|
14449
|
+
children: "Change wallet"
|
|
14450
|
+
}
|
|
14451
|
+
),
|
|
14452
|
+
walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14067
14453
|
AlertBanner,
|
|
14068
14454
|
{
|
|
14069
14455
|
variant: "info",
|
|
14070
14456
|
content: "Loading your connected wallet\u2026"
|
|
14071
14457
|
}
|
|
14072
|
-
) : walletsStatus === "error" ? /* @__PURE__ */ (0,
|
|
14458
|
+
) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14073
14459
|
AlertBanner,
|
|
14074
14460
|
{
|
|
14075
14461
|
variant: "error",
|
|
14076
14462
|
content: "Couldn't load your connected wallet."
|
|
14077
14463
|
}
|
|
14078
|
-
) : /* @__PURE__ */ (0,
|
|
14464
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14079
14465
|
AlertBanner,
|
|
14080
14466
|
{
|
|
14081
14467
|
variant: "success",
|
|
@@ -14085,9 +14471,9 @@ function WalletActionZone({
|
|
|
14085
14471
|
] });
|
|
14086
14472
|
}
|
|
14087
14473
|
if (status === "rejected") {
|
|
14088
|
-
return /* @__PURE__ */ (0,
|
|
14089
|
-
onAction !== null && /* @__PURE__ */ (0,
|
|
14090
|
-
/* @__PURE__ */ (0,
|
|
14474
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
14475
|
+
onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Connect wallet" }),
|
|
14476
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14091
14477
|
AlertBanner,
|
|
14092
14478
|
{
|
|
14093
14479
|
variant: "error",
|
|
@@ -14097,7 +14483,7 @@ function WalletActionZone({
|
|
|
14097
14483
|
] });
|
|
14098
14484
|
}
|
|
14099
14485
|
if (onAction === null) return null;
|
|
14100
|
-
return /* @__PURE__ */ (0,
|
|
14486
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Connect wallet" });
|
|
14101
14487
|
}
|
|
14102
14488
|
function RequirementItem({
|
|
14103
14489
|
ui,
|
|
@@ -14107,9 +14493,10 @@ function RequirementItem({
|
|
|
14107
14493
|
onAction,
|
|
14108
14494
|
onRemoveWallet,
|
|
14109
14495
|
walletsStatus,
|
|
14110
|
-
onContactSupport
|
|
14496
|
+
onContactSupport,
|
|
14497
|
+
spaceBeforeNextRow = true
|
|
14111
14498
|
}) {
|
|
14112
|
-
return /* @__PURE__ */ (0,
|
|
14499
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
|
|
14113
14500
|
"div",
|
|
14114
14501
|
{
|
|
14115
14502
|
className: cn(
|
|
@@ -14117,17 +14504,17 @@ function RequirementItem({
|
|
|
14117
14504
|
className
|
|
14118
14505
|
),
|
|
14119
14506
|
children: [
|
|
14120
|
-
/* @__PURE__ */ (0,
|
|
14507
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
|
|
14121
14508
|
"button",
|
|
14122
14509
|
{
|
|
14123
14510
|
type: "button",
|
|
14124
14511
|
onClick: onToggle,
|
|
14125
14512
|
"aria-expanded": expanded,
|
|
14126
|
-
className: "clcosdk:flex clcosdk:h-14 clcosdk:w-
|
|
14513
|
+
className: "clcosdk:-mx-2 clcosdk:flex clcosdk:h-14 clcosdk:w-[calc(100%+16px)] clcosdk:cursor-pointer clcosdk:items-center clcosdk:justify-between clcosdk:rounded-2xl clcosdk:px-2 clcosdk:transition-colors clcosdk:hover:bg-surface",
|
|
14127
14514
|
children: [
|
|
14128
|
-
/* @__PURE__ */ (0,
|
|
14129
|
-
/* @__PURE__ */ (0,
|
|
14130
|
-
/* @__PURE__ */ (0,
|
|
14515
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
|
|
14516
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(StepStatusIcon, { status: ui.status }),
|
|
14517
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14131
14518
|
"span",
|
|
14132
14519
|
{
|
|
14133
14520
|
className: cn(
|
|
@@ -14138,7 +14525,7 @@ function RequirementItem({
|
|
|
14138
14525
|
}
|
|
14139
14526
|
)
|
|
14140
14527
|
] }),
|
|
14141
|
-
/* @__PURE__ */ (0,
|
|
14528
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14142
14529
|
import_lucide_react15.ChevronRight,
|
|
14143
14530
|
{
|
|
14144
14531
|
className: cn(
|
|
@@ -14151,43 +14538,53 @@ function RequirementItem({
|
|
|
14151
14538
|
]
|
|
14152
14539
|
}
|
|
14153
14540
|
),
|
|
14154
|
-
/* @__PURE__ */ (0,
|
|
14541
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14155
14542
|
"div",
|
|
14156
14543
|
{
|
|
14157
14544
|
className: cn(
|
|
14158
14545
|
"clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
|
|
14159
14546
|
expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
|
|
14160
14547
|
),
|
|
14161
|
-
children: /* @__PURE__ */ (0,
|
|
14162
|
-
|
|
14163
|
-
|
|
14164
|
-
|
|
14165
|
-
|
|
14166
|
-
|
|
14167
|
-
|
|
14548
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
|
|
14549
|
+
"div",
|
|
14550
|
+
{
|
|
14551
|
+
className: cn(
|
|
14552
|
+
"clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
|
|
14553
|
+
spaceBeforeNextRow && "clcosdk:pb-4"
|
|
14554
|
+
),
|
|
14555
|
+
children: [
|
|
14556
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14557
|
+
"p",
|
|
14558
|
+
{
|
|
14559
|
+
className: cn(
|
|
14560
|
+
typeClasses.bodySm,
|
|
14561
|
+
"clcosdk:text-text-secondary"
|
|
14562
|
+
),
|
|
14563
|
+
children: ui.description
|
|
14564
|
+
}
|
|
14168
14565
|
),
|
|
14169
|
-
|
|
14170
|
-
|
|
14171
|
-
|
|
14172
|
-
|
|
14173
|
-
|
|
14174
|
-
|
|
14175
|
-
|
|
14176
|
-
|
|
14177
|
-
|
|
14178
|
-
|
|
14179
|
-
|
|
14180
|
-
|
|
14181
|
-
|
|
14182
|
-
|
|
14183
|
-
|
|
14184
|
-
|
|
14185
|
-
|
|
14186
|
-
|
|
14187
|
-
|
|
14188
|
-
|
|
14189
|
-
|
|
14190
|
-
|
|
14566
|
+
ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14567
|
+
VerificationActionZone,
|
|
14568
|
+
{
|
|
14569
|
+
status: ui.status,
|
|
14570
|
+
statusMessages: ui.statusMessages,
|
|
14571
|
+
onAction,
|
|
14572
|
+
onContactSupport
|
|
14573
|
+
}
|
|
14574
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14575
|
+
WalletActionZone,
|
|
14576
|
+
{
|
|
14577
|
+
status: ui.status,
|
|
14578
|
+
multiWallet: ui.multiWallet,
|
|
14579
|
+
connectedWallets: ui.connectedWallets,
|
|
14580
|
+
walletsStatus,
|
|
14581
|
+
onAction,
|
|
14582
|
+
onRemoveWallet
|
|
14583
|
+
}
|
|
14584
|
+
)
|
|
14585
|
+
]
|
|
14586
|
+
}
|
|
14587
|
+
) })
|
|
14191
14588
|
}
|
|
14192
14589
|
)
|
|
14193
14590
|
]
|
|
@@ -14196,35 +14593,29 @@ function RequirementItem({
|
|
|
14196
14593
|
}
|
|
14197
14594
|
|
|
14198
14595
|
// src/client/components/requirements/RequirementsChecklistView.tsx
|
|
14199
|
-
var
|
|
14596
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
14200
14597
|
function RequirementsChecklistView(props) {
|
|
14201
|
-
return /* @__PURE__ */ (0,
|
|
14598
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(RequirementsChecklistViewBody, { ...props }) });
|
|
14202
14599
|
}
|
|
14203
14600
|
function RequirementsChecklistViewBody({
|
|
14204
14601
|
state,
|
|
14205
14602
|
onEvent,
|
|
14206
14603
|
loading,
|
|
14207
14604
|
error,
|
|
14208
|
-
unauthenticatedState,
|
|
14209
14605
|
className
|
|
14210
14606
|
}) {
|
|
14211
14607
|
switch (state.type) {
|
|
14212
14608
|
case "loading":
|
|
14213
|
-
return loading ?? /* @__PURE__ */ (0,
|
|
14214
|
-
|
|
14215
|
-
return unauthenticatedState ?? null;
|
|
14216
|
-
case "error":
|
|
14217
|
-
return error ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14218
|
-
AlertBanner,
|
|
14609
|
+
return loading ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14610
|
+
LoadingState2,
|
|
14219
14611
|
{
|
|
14220
|
-
|
|
14221
|
-
|
|
14222
|
-
|
|
14223
|
-
className: "clcosdk:w-full clcosdk:max-w-[28rem]"
|
|
14612
|
+
title: state.title,
|
|
14613
|
+
description: state.description,
|
|
14614
|
+
className
|
|
14224
14615
|
}
|
|
14225
14616
|
);
|
|
14226
|
-
case "
|
|
14227
|
-
return /* @__PURE__ */ (0,
|
|
14617
|
+
case "error":
|
|
14618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
14228
14619
|
"div",
|
|
14229
14620
|
{
|
|
14230
14621
|
className: cn(
|
|
@@ -14232,46 +14623,91 @@ function RequirementsChecklistViewBody({
|
|
|
14232
14623
|
className
|
|
14233
14624
|
),
|
|
14234
14625
|
children: [
|
|
14235
|
-
/* @__PURE__ */ (0,
|
|
14236
|
-
|
|
14237
|
-
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
|
|
14238
|
-
] }),
|
|
14239
|
-
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14240
|
-
RequirementItem,
|
|
14241
|
-
{
|
|
14242
|
-
ui: row.item,
|
|
14243
|
-
expanded: row.expanded,
|
|
14244
|
-
onToggle: () => onEvent({ type: "ON_TOGGLE_ITEM", requirementId: row.id }),
|
|
14245
|
-
onAction: row.actionEnabled ? () => onEvent({
|
|
14246
|
-
type: "ON_REQUIREMENT_ACTION",
|
|
14247
|
-
requirementId: row.id
|
|
14248
|
-
}) : null,
|
|
14249
|
-
onRemoveWallet: row.wallets ? (id) => state.removeWallet(id) : void 0,
|
|
14250
|
-
walletsStatus: row.wallets?.status,
|
|
14251
|
-
onContactSupport: row.contactSupportEnabled ? () => onEvent({
|
|
14252
|
-
type: "ON_CONTACT_SUPPORT",
|
|
14253
|
-
requirementId: row.id
|
|
14254
|
-
}) : null
|
|
14255
|
-
},
|
|
14256
|
-
row.id
|
|
14257
|
-
)) }),
|
|
14258
|
-
state.ineligible && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
14626
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
|
|
14627
|
+
error ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14259
14628
|
AlertBanner,
|
|
14260
14629
|
{
|
|
14261
14630
|
variant: "error",
|
|
14262
14631
|
icon: true,
|
|
14263
|
-
content: "
|
|
14632
|
+
content: "Unable to load requirements. Refresh the page to try again."
|
|
14264
14633
|
}
|
|
14265
|
-
)
|
|
14266
|
-
|
|
14634
|
+
)
|
|
14635
|
+
]
|
|
14636
|
+
}
|
|
14637
|
+
);
|
|
14638
|
+
case "content":
|
|
14639
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
14640
|
+
"div",
|
|
14641
|
+
{
|
|
14642
|
+
className: cn(
|
|
14643
|
+
"clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
|
|
14644
|
+
className
|
|
14645
|
+
),
|
|
14646
|
+
children: [
|
|
14647
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
14648
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
|
|
14649
|
+
state.blockedMessage == null && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14650
|
+
"p",
|
|
14651
|
+
{
|
|
14652
|
+
className: cn(typeClasses.body, "clcosdk:text-text-secondary"),
|
|
14653
|
+
children: state.items.length === 0 ? "No requirements to complete." : state.description
|
|
14654
|
+
}
|
|
14655
|
+
)
|
|
14656
|
+
] }),
|
|
14657
|
+
state.blockedMessage != null ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "info", icon: true, content: state.blockedMessage }) : state.items.length === 0 ? state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14267
14658
|
ClButton,
|
|
14268
14659
|
{
|
|
14660
|
+
variant: "primary",
|
|
14269
14661
|
fullWidth: true,
|
|
14270
14662
|
disabled: !state.continueAction.enabled,
|
|
14271
14663
|
onClick: () => onEvent({ type: "ON_CONTINUE" }),
|
|
14272
14664
|
children: "Continue"
|
|
14273
14665
|
}
|
|
14274
|
-
)
|
|
14666
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
|
|
14667
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14668
|
+
RequirementItem,
|
|
14669
|
+
{
|
|
14670
|
+
ui: row.item,
|
|
14671
|
+
expanded: row.expanded,
|
|
14672
|
+
spaceBeforeNextRow: index < state.items.length - 1,
|
|
14673
|
+
onToggle: () => onEvent({ type: "ON_TOGGLE_ITEM", requirementId: row.id }),
|
|
14674
|
+
onAction: row.actionEnabled ? () => onEvent({
|
|
14675
|
+
type: "ON_REQUIREMENT_ACTION",
|
|
14676
|
+
requirementId: row.id
|
|
14677
|
+
}) : null,
|
|
14678
|
+
onRemoveWallet: row.wallets ? (id) => state.removeWallet(id) : void 0,
|
|
14679
|
+
walletsStatus: row.wallets?.status,
|
|
14680
|
+
onContactSupport: row.contactSupportEnabled ? () => onEvent({
|
|
14681
|
+
type: "ON_CONTACT_SUPPORT",
|
|
14682
|
+
requirementId: row.id
|
|
14683
|
+
}) : null
|
|
14684
|
+
},
|
|
14685
|
+
row.id
|
|
14686
|
+
)) }),
|
|
14687
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-row clcosdk:items-center clcosdk:justify-between clcosdk:gap-6", children: [
|
|
14688
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14689
|
+
"span",
|
|
14690
|
+
{
|
|
14691
|
+
className: cn(
|
|
14692
|
+
typeClasses.subhead,
|
|
14693
|
+
"clcosdk:min-w-0",
|
|
14694
|
+
state.ineligible ? "clcosdk:text-error" : "clcosdk:text-text-secondary"
|
|
14695
|
+
),
|
|
14696
|
+
children: state.ineligible ? "You are not eligible to invest." : completedLabel(state.items)
|
|
14697
|
+
}
|
|
14698
|
+
),
|
|
14699
|
+
state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
14700
|
+
ClButton,
|
|
14701
|
+
{
|
|
14702
|
+
variant: "primary",
|
|
14703
|
+
disabled: !state.continueAction.enabled,
|
|
14704
|
+
onClick: () => onEvent({ type: "ON_CONTINUE" }),
|
|
14705
|
+
className: "clcosdk:shrink-0",
|
|
14706
|
+
children: "Continue"
|
|
14707
|
+
}
|
|
14708
|
+
)
|
|
14709
|
+
] })
|
|
14710
|
+
] })
|
|
14275
14711
|
]
|
|
14276
14712
|
}
|
|
14277
14713
|
);
|
|
@@ -14281,19 +14717,43 @@ function RequirementsChecklistViewBody({
|
|
|
14281
14717
|
}
|
|
14282
14718
|
}
|
|
14283
14719
|
}
|
|
14284
|
-
function
|
|
14285
|
-
|
|
14286
|
-
"
|
|
14720
|
+
function completedLabel(items) {
|
|
14721
|
+
const completed = items.filter(
|
|
14722
|
+
(row) => row.item.status === "completed"
|
|
14723
|
+
).length;
|
|
14724
|
+
return `${completed}/${items.length} completed`;
|
|
14725
|
+
}
|
|
14726
|
+
var LOADING_ROW_WIDTHS = [
|
|
14727
|
+
"clcosdk:w-3/5",
|
|
14728
|
+
"clcosdk:w-2/5",
|
|
14729
|
+
"clcosdk:w-1/2"
|
|
14730
|
+
];
|
|
14731
|
+
function LoadingState2({
|
|
14732
|
+
title: title2,
|
|
14733
|
+
description: description2,
|
|
14734
|
+
className
|
|
14735
|
+
}) {
|
|
14736
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
14737
|
+
"div",
|
|
14287
14738
|
{
|
|
14288
|
-
|
|
14289
|
-
|
|
14290
|
-
|
|
14739
|
+
className: cn(
|
|
14740
|
+
"clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
|
|
14741
|
+
className
|
|
14742
|
+
),
|
|
14743
|
+
children: [
|
|
14744
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("output", { className: "clcosdk:sr-only", children: "Loading requirements..." }),
|
|
14745
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
14746
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: title2 }),
|
|
14747
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: description2 })
|
|
14748
|
+
] }),
|
|
14749
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-3", children: LOADING_ROW_WIDTHS.map((width) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Skeleton, { className: cn("clcosdk:h-8", width) }, width)) })
|
|
14750
|
+
]
|
|
14291
14751
|
}
|
|
14292
14752
|
);
|
|
14293
14753
|
}
|
|
14294
14754
|
|
|
14295
14755
|
// src/client/components/requirements/tax-document/TaxDocumentModalView.tsx
|
|
14296
|
-
var
|
|
14756
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
14297
14757
|
function TaxDocumentModalView({
|
|
14298
14758
|
state,
|
|
14299
14759
|
onEvent,
|
|
@@ -14302,7 +14762,7 @@ function TaxDocumentModalView({
|
|
|
14302
14762
|
if (state.type === "hidden") {
|
|
14303
14763
|
return null;
|
|
14304
14764
|
}
|
|
14305
|
-
return /* @__PURE__ */ (0,
|
|
14765
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
14306
14766
|
"div",
|
|
14307
14767
|
{
|
|
14308
14768
|
className: cn(
|
|
@@ -14310,11 +14770,11 @@ function TaxDocumentModalView({
|
|
|
14310
14770
|
className
|
|
14311
14771
|
),
|
|
14312
14772
|
children: [
|
|
14313
|
-
/* @__PURE__ */ (0,
|
|
14314
|
-
/* @__PURE__ */ (0,
|
|
14315
|
-
/* @__PURE__ */ (0,
|
|
14773
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
|
|
14774
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
|
|
14775
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
|
|
14316
14776
|
] }),
|
|
14317
|
-
/* @__PURE__ */ (0,
|
|
14777
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Screen, { screen: state.screen, onEvent })
|
|
14318
14778
|
]
|
|
14319
14779
|
}
|
|
14320
14780
|
) }) });
|
|
@@ -14325,11 +14785,11 @@ function Screen({
|
|
|
14325
14785
|
}) {
|
|
14326
14786
|
switch (screen.type) {
|
|
14327
14787
|
case "loading":
|
|
14328
|
-
return /* @__PURE__ */ (0,
|
|
14788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(LoadingScreen, {});
|
|
14329
14789
|
case "error":
|
|
14330
|
-
return /* @__PURE__ */ (0,
|
|
14790
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
|
|
14331
14791
|
case "review":
|
|
14332
|
-
return /* @__PURE__ */ (0,
|
|
14792
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14333
14793
|
ReviewScreen,
|
|
14334
14794
|
{
|
|
14335
14795
|
fields: screen.fields,
|
|
@@ -14340,9 +14800,9 @@ function Screen({
|
|
|
14340
14800
|
}
|
|
14341
14801
|
);
|
|
14342
14802
|
case "editing":
|
|
14343
|
-
return /* @__PURE__ */ (0,
|
|
14803
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(EditScreen, { fields: screen.fields, onEvent });
|
|
14344
14804
|
case "sign-only":
|
|
14345
|
-
return /* @__PURE__ */ (0,
|
|
14805
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14346
14806
|
SignOnlyScreen,
|
|
14347
14807
|
{
|
|
14348
14808
|
signing: screen.signing,
|
|
@@ -14357,14 +14817,14 @@ function Screen({
|
|
|
14357
14817
|
}
|
|
14358
14818
|
}
|
|
14359
14819
|
function LoadingScreen() {
|
|
14360
|
-
return /* @__PURE__ */ (0,
|
|
14820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14361
14821
|
"output",
|
|
14362
14822
|
{
|
|
14363
14823
|
"aria-live": "polite",
|
|
14364
14824
|
className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
|
|
14365
|
-
children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0,
|
|
14366
|
-
/* @__PURE__ */ (0,
|
|
14367
|
-
/* @__PURE__ */ (0,
|
|
14825
|
+
children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
|
|
14826
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
|
|
14827
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
|
|
14368
14828
|
] }, row))
|
|
14369
14829
|
}
|
|
14370
14830
|
);
|
|
@@ -14376,9 +14836,9 @@ function ReviewScreen({
|
|
|
14376
14836
|
signError,
|
|
14377
14837
|
onEvent
|
|
14378
14838
|
}) {
|
|
14379
|
-
return /* @__PURE__ */ (0,
|
|
14380
|
-
/* @__PURE__ */ (0,
|
|
14381
|
-
piiUnavailable && /* @__PURE__ */ (0,
|
|
14839
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
14840
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
|
|
14841
|
+
piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14382
14842
|
AlertBanner,
|
|
14383
14843
|
{
|
|
14384
14844
|
variant: "info",
|
|
@@ -14386,27 +14846,27 @@ function ReviewScreen({
|
|
|
14386
14846
|
content: "We don't have this information on file yet \u2014 please fill it in below."
|
|
14387
14847
|
}
|
|
14388
14848
|
),
|
|
14389
|
-
/* @__PURE__ */ (0,
|
|
14849
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, displayValue }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
14390
14850
|
"div",
|
|
14391
14851
|
{
|
|
14392
14852
|
className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
|
|
14393
14853
|
children: [
|
|
14394
|
-
/* @__PURE__ */ (0,
|
|
14854
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14395
14855
|
"span",
|
|
14396
14856
|
{
|
|
14397
14857
|
className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
|
|
14398
14858
|
children: label
|
|
14399
14859
|
}
|
|
14400
14860
|
),
|
|
14401
|
-
/* @__PURE__ */ (0,
|
|
14861
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
|
|
14402
14862
|
]
|
|
14403
14863
|
},
|
|
14404
14864
|
field
|
|
14405
14865
|
)) }),
|
|
14406
|
-
/* @__PURE__ */ (0,
|
|
14407
|
-
signError && /* @__PURE__ */ (0,
|
|
14408
|
-
/* @__PURE__ */ (0,
|
|
14409
|
-
/* @__PURE__ */ (0,
|
|
14866
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.caption, "clcosdk:text-text-secondary"), children: "By signing, you certify that the information above is accurate and that you are the beneficial owner of the income this form relates to. This document cannot be edited once signed." }),
|
|
14867
|
+
signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
|
|
14868
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
14869
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14410
14870
|
ClButton,
|
|
14411
14871
|
{
|
|
14412
14872
|
fullWidth: true,
|
|
@@ -14416,7 +14876,7 @@ function ReviewScreen({
|
|
|
14416
14876
|
children: "Sign W-8BEN"
|
|
14417
14877
|
}
|
|
14418
14878
|
),
|
|
14419
|
-
/* @__PURE__ */ (0,
|
|
14879
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14420
14880
|
ClButton,
|
|
14421
14881
|
{
|
|
14422
14882
|
fullWidth: true,
|
|
@@ -14433,20 +14893,20 @@ function EditScreen({
|
|
|
14433
14893
|
fields,
|
|
14434
14894
|
onEvent
|
|
14435
14895
|
}) {
|
|
14436
|
-
return /* @__PURE__ */ (0,
|
|
14437
|
-
/* @__PURE__ */ (0,
|
|
14896
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
14897
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, placeholder, value }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
14438
14898
|
"label",
|
|
14439
14899
|
{
|
|
14440
14900
|
className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
|
|
14441
14901
|
children: [
|
|
14442
|
-
/* @__PURE__ */ (0,
|
|
14902
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14443
14903
|
"span",
|
|
14444
14904
|
{
|
|
14445
14905
|
className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
|
|
14446
14906
|
children: label
|
|
14447
14907
|
}
|
|
14448
14908
|
),
|
|
14449
|
-
/* @__PURE__ */ (0,
|
|
14909
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14450
14910
|
"input",
|
|
14451
14911
|
{
|
|
14452
14912
|
type: "text",
|
|
@@ -14467,9 +14927,9 @@ function EditScreen({
|
|
|
14467
14927
|
},
|
|
14468
14928
|
field
|
|
14469
14929
|
)) }),
|
|
14470
|
-
/* @__PURE__ */ (0,
|
|
14471
|
-
/* @__PURE__ */ (0,
|
|
14472
|
-
/* @__PURE__ */ (0,
|
|
14930
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
14931
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
|
|
14932
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14473
14933
|
ClButton,
|
|
14474
14934
|
{
|
|
14475
14935
|
fullWidth: true,
|
|
@@ -14486,10 +14946,10 @@ function SignOnlyScreen({
|
|
|
14486
14946
|
signError,
|
|
14487
14947
|
onEvent
|
|
14488
14948
|
}) {
|
|
14489
|
-
return /* @__PURE__ */ (0,
|
|
14490
|
-
/* @__PURE__ */ (0,
|
|
14491
|
-
signError && /* @__PURE__ */ (0,
|
|
14492
|
-
/* @__PURE__ */ (0,
|
|
14949
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
14950
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "As an entity investor, you must complete a W-8BEN-E to confirm your foreign tax status and claim applicable treaty benefits. You'll receive an email to complete the signing." }),
|
|
14951
|
+
signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
|
|
14952
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
14493
14953
|
ClButton,
|
|
14494
14954
|
{
|
|
14495
14955
|
fullWidth: true,
|
|
@@ -14503,12 +14963,12 @@ function SignOnlyScreen({
|
|
|
14503
14963
|
}
|
|
14504
14964
|
|
|
14505
14965
|
// src/client/hooks/requirements/tax-document/useTaxDocumentModalViewModel.ts
|
|
14506
|
-
var
|
|
14966
|
+
var import_react43 = require("react");
|
|
14507
14967
|
|
|
14508
14968
|
// src/client/hooks/requirements/data/useTaxDocument.ts
|
|
14509
|
-
var
|
|
14969
|
+
var import_react42 = require("react");
|
|
14510
14970
|
var IDLE_SIGN = { type: "idle", error: null };
|
|
14511
|
-
var
|
|
14971
|
+
var LOADING_STATE6 = { type: "LOADING" };
|
|
14512
14972
|
var SIGN_FAILED_MESSAGE = "Unable to sign document. Please try again.";
|
|
14513
14973
|
var DOB_INVALID_MESSAGE = "Enter your date of birth as MM/DD/YYYY.";
|
|
14514
14974
|
var FIELD_KEYS = {
|
|
@@ -14581,8 +15041,8 @@ function useTaxDocument({
|
|
|
14581
15041
|
}) {
|
|
14582
15042
|
const { coinlist, isReady } = useCoinList();
|
|
14583
15043
|
const log = useLogger("useTaxDocument");
|
|
14584
|
-
const [state, setState] = (0,
|
|
14585
|
-
(0,
|
|
15044
|
+
const [state, setState] = (0, import_react42.useState)(LOADING_STATE6);
|
|
15045
|
+
(0, import_react42.useEffect)(() => {
|
|
14586
15046
|
let isCancelled = false;
|
|
14587
15047
|
if (!isOpen) {
|
|
14588
15048
|
return () => {
|
|
@@ -14590,12 +15050,12 @@ function useTaxDocument({
|
|
|
14590
15050
|
};
|
|
14591
15051
|
}
|
|
14592
15052
|
if (!isReady) {
|
|
14593
|
-
setState(
|
|
15053
|
+
setState(LOADING_STATE6);
|
|
14594
15054
|
return () => {
|
|
14595
15055
|
isCancelled = true;
|
|
14596
15056
|
};
|
|
14597
15057
|
}
|
|
14598
|
-
setState(
|
|
15058
|
+
setState(LOADING_STATE6);
|
|
14599
15059
|
coinlist.requirements.getPii().then((pii) => {
|
|
14600
15060
|
if (isCancelled) return;
|
|
14601
15061
|
if (pii.kind === "company") {
|
|
@@ -14623,7 +15083,7 @@ function useTaxDocument({
|
|
|
14623
15083
|
isCancelled = true;
|
|
14624
15084
|
};
|
|
14625
15085
|
}, [coinlist, isReady, isOpen, log]);
|
|
14626
|
-
const onEditField = (0,
|
|
15086
|
+
const onEditField = (0, import_react42.useCallback)(
|
|
14627
15087
|
(field, value) => {
|
|
14628
15088
|
setState(
|
|
14629
15089
|
(prev) => prev.type === "EDITING" ? { ...prev, fields: { ...prev.fields, [field]: value } } : prev
|
|
@@ -14631,7 +15091,7 @@ function useTaxDocument({
|
|
|
14631
15091
|
},
|
|
14632
15092
|
[]
|
|
14633
15093
|
);
|
|
14634
|
-
const onStartEdit = (0,
|
|
15094
|
+
const onStartEdit = (0, import_react42.useCallback)(() => {
|
|
14635
15095
|
setState(
|
|
14636
15096
|
(prev) => prev.type === "REVIEW" ? {
|
|
14637
15097
|
type: "EDITING",
|
|
@@ -14642,7 +15102,7 @@ function useTaxDocument({
|
|
|
14642
15102
|
} : prev
|
|
14643
15103
|
);
|
|
14644
15104
|
}, []);
|
|
14645
|
-
const onSaveEdit = (0,
|
|
15105
|
+
const onSaveEdit = (0, import_react42.useCallback)(() => {
|
|
14646
15106
|
setState(
|
|
14647
15107
|
(prev) => prev.type === "EDITING" ? {
|
|
14648
15108
|
type: "REVIEW",
|
|
@@ -14653,7 +15113,7 @@ function useTaxDocument({
|
|
|
14653
15113
|
} : prev
|
|
14654
15114
|
);
|
|
14655
15115
|
}, []);
|
|
14656
|
-
const onCancelEdit = (0,
|
|
15116
|
+
const onCancelEdit = (0, import_react42.useCallback)(() => {
|
|
14657
15117
|
setState(
|
|
14658
15118
|
(prev) => prev.type === "EDITING" ? {
|
|
14659
15119
|
type: "REVIEW",
|
|
@@ -14664,7 +15124,7 @@ function useTaxDocument({
|
|
|
14664
15124
|
} : prev
|
|
14665
15125
|
);
|
|
14666
15126
|
}, []);
|
|
14667
|
-
const onSign = (0,
|
|
15127
|
+
const onSign = (0, import_react42.useCallback)(() => {
|
|
14668
15128
|
if (state.type !== "REVIEW" && state.type !== "SIGN_ONLY") return;
|
|
14669
15129
|
if (state.type === "REVIEW" && state.fields.dob.trim() !== "" && !isValidUsDate(state.fields.dob)) {
|
|
14670
15130
|
setState({
|
|
@@ -14706,19 +15166,19 @@ function useTaxDocumentModalViewModel({
|
|
|
14706
15166
|
onSubmitted
|
|
14707
15167
|
}) {
|
|
14708
15168
|
const { state, onEditField, onStartEdit, onSaveEdit, onCancelEdit, onSign } = useTaxDocument({ isOpen });
|
|
14709
|
-
(0,
|
|
15169
|
+
(0, import_react43.useEffect)(() => {
|
|
14710
15170
|
if (state.type === "SUBMITTED") {
|
|
14711
15171
|
onSubmitted?.(state.submission);
|
|
14712
15172
|
onClose();
|
|
14713
15173
|
}
|
|
14714
15174
|
}, [state]);
|
|
14715
|
-
const uiState = (0,
|
|
15175
|
+
const uiState = (0, import_react43.useMemo)(() => {
|
|
14716
15176
|
if (!isOpen || state.type === "SUBMITTED") {
|
|
14717
15177
|
return { type: "hidden" };
|
|
14718
15178
|
}
|
|
14719
15179
|
return { type: "content", title: toTitle(state), screen: toScreen(state) };
|
|
14720
15180
|
}, [isOpen, state]);
|
|
14721
|
-
const onEvent = (0,
|
|
15181
|
+
const onEvent = (0, import_react43.useCallback)(
|
|
14722
15182
|
(event) => {
|
|
14723
15183
|
switch (event.type) {
|
|
14724
15184
|
case "ON_CLOSE":
|
|
@@ -14801,7 +15261,7 @@ function toFieldsUi(fields) {
|
|
|
14801
15261
|
}
|
|
14802
15262
|
|
|
14803
15263
|
// src/client/components/requirements/tax-document/TaxDocumentModalContainer.tsx
|
|
14804
|
-
var
|
|
15264
|
+
var import_jsx_runtime64 = require("react/jsx-runtime");
|
|
14805
15265
|
function TaxDocumentModalContainer({
|
|
14806
15266
|
isOpen,
|
|
14807
15267
|
onClose,
|
|
@@ -14813,7 +15273,7 @@ function TaxDocumentModalContainer({
|
|
|
14813
15273
|
onClose,
|
|
14814
15274
|
onSubmitted
|
|
14815
15275
|
});
|
|
14816
|
-
return /* @__PURE__ */ (0,
|
|
15276
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
14817
15277
|
TaxDocumentModalView,
|
|
14818
15278
|
{
|
|
14819
15279
|
state,
|
|
@@ -14824,26 +15284,26 @@ function TaxDocumentModalContainer({
|
|
|
14824
15284
|
}
|
|
14825
15285
|
|
|
14826
15286
|
// src/client/components/requirements/VerificationOverlay.tsx
|
|
14827
|
-
var
|
|
15287
|
+
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
14828
15288
|
function VerificationOverlay({
|
|
14829
15289
|
onClose,
|
|
14830
15290
|
children
|
|
14831
15291
|
}) {
|
|
14832
|
-
return /* @__PURE__ */ (0,
|
|
15292
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(VerificationOverlayBody, { onClose, children }) });
|
|
14833
15293
|
}
|
|
14834
15294
|
function VerificationOverlayBody({
|
|
14835
15295
|
onClose,
|
|
14836
15296
|
children
|
|
14837
15297
|
}) {
|
|
14838
|
-
return /* @__PURE__ */ (0,
|
|
15298
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
14839
15299
|
"div",
|
|
14840
15300
|
{
|
|
14841
15301
|
role: "dialog",
|
|
14842
15302
|
"aria-modal": "true",
|
|
14843
15303
|
"aria-label": "Identity verification",
|
|
14844
15304
|
className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
|
|
14845
|
-
children: /* @__PURE__ */ (0,
|
|
14846
|
-
/* @__PURE__ */ (0,
|
|
15305
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:relative clcosdk:flex clcosdk:max-h-[92vh] clcosdk:w-full clcosdk:max-w-[760px] clcosdk:flex-col clcosdk:overflow-y-auto clcosdk:rounded-2xl clcosdk:bg-background clcosdk:p-6 clcosdk:pt-14", children: [
|
|
15306
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
14847
15307
|
CloseButton,
|
|
14848
15308
|
{
|
|
14849
15309
|
onClick: onClose,
|
|
@@ -14857,18 +15317,18 @@ function VerificationOverlayBody({
|
|
|
14857
15317
|
}
|
|
14858
15318
|
|
|
14859
15319
|
// src/client/components/requirements/wallet/ConnectWalletModalView.tsx
|
|
14860
|
-
var
|
|
14861
|
-
var
|
|
15320
|
+
var import_react44 = require("react");
|
|
15321
|
+
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
14862
15322
|
function ConnectWalletModalView({
|
|
14863
15323
|
state,
|
|
14864
15324
|
onEvent,
|
|
14865
15325
|
className
|
|
14866
15326
|
}) {
|
|
14867
|
-
const titleId = (0,
|
|
15327
|
+
const titleId = (0, import_react44.useId)();
|
|
14868
15328
|
if (state.type === "hidden") {
|
|
14869
15329
|
return null;
|
|
14870
15330
|
}
|
|
14871
|
-
return /* @__PURE__ */ (0,
|
|
15331
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
|
|
14872
15332
|
"div",
|
|
14873
15333
|
{
|
|
14874
15334
|
role: "dialog",
|
|
@@ -14879,8 +15339,8 @@ function ConnectWalletModalView({
|
|
|
14879
15339
|
className
|
|
14880
15340
|
),
|
|
14881
15341
|
children: [
|
|
14882
|
-
/* @__PURE__ */ (0,
|
|
14883
|
-
/* @__PURE__ */ (0,
|
|
15342
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
|
|
15343
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
14884
15344
|
"h3",
|
|
14885
15345
|
{
|
|
14886
15346
|
id: titleId,
|
|
@@ -14888,9 +15348,9 @@ function ConnectWalletModalView({
|
|
|
14888
15348
|
children: "Connect your wallet"
|
|
14889
15349
|
}
|
|
14890
15350
|
),
|
|
14891
|
-
/* @__PURE__ */ (0,
|
|
15351
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
|
|
14892
15352
|
] }),
|
|
14893
|
-
/* @__PURE__ */ (0,
|
|
15353
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
14894
15354
|
Screen2,
|
|
14895
15355
|
{
|
|
14896
15356
|
screen: state.screen,
|
|
@@ -14909,9 +15369,9 @@ function Screen2({
|
|
|
14909
15369
|
}) {
|
|
14910
15370
|
switch (screen.type) {
|
|
14911
15371
|
case "needs-wallet":
|
|
14912
|
-
return /* @__PURE__ */ (0,
|
|
14913
|
-
/* @__PURE__ */ (0,
|
|
14914
|
-
canRequestConnect && /* @__PURE__ */ (0,
|
|
15372
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
15373
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
|
|
15374
|
+
canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
14915
15375
|
ClButton,
|
|
14916
15376
|
{
|
|
14917
15377
|
fullWidth: true,
|
|
@@ -14921,23 +15381,23 @@ function Screen2({
|
|
|
14921
15381
|
)
|
|
14922
15382
|
] });
|
|
14923
15383
|
case "ready":
|
|
14924
|
-
return /* @__PURE__ */ (0,
|
|
14925
|
-
/* @__PURE__ */ (0,
|
|
14926
|
-
/* @__PURE__ */ (0,
|
|
14927
|
-
/* @__PURE__ */ (0,
|
|
15384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
15385
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Sign a message with your connected wallet to prove you own it. This does not cost gas or move any funds." }),
|
|
15386
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
|
|
15387
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
14928
15388
|
"span",
|
|
14929
15389
|
{
|
|
14930
15390
|
className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
|
|
14931
15391
|
children: "Wallet address"
|
|
14932
15392
|
}
|
|
14933
15393
|
),
|
|
14934
|
-
/* @__PURE__ */ (0,
|
|
15394
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
|
|
14935
15395
|
] }),
|
|
14936
15396
|
screen.signError && // Live region: the error is inserted async after a failed attempt,
|
|
14937
15397
|
// so screen readers need it announced rather than silently
|
|
14938
15398
|
// rendered.
|
|
14939
|
-
/* @__PURE__ */ (0,
|
|
14940
|
-
/* @__PURE__ */ (0,
|
|
15399
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
|
|
15400
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
14941
15401
|
ClButton,
|
|
14942
15402
|
{
|
|
14943
15403
|
fullWidth: true,
|
|
@@ -14948,7 +15408,7 @@ function Screen2({
|
|
|
14948
15408
|
children: "Sign & connect"
|
|
14949
15409
|
}
|
|
14950
15410
|
),
|
|
14951
|
-
canRequestConnect && /* @__PURE__ */ (0,
|
|
15411
|
+
canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
14952
15412
|
ClButton,
|
|
14953
15413
|
{
|
|
14954
15414
|
fullWidth: true,
|
|
@@ -14967,10 +15427,10 @@ function Screen2({
|
|
|
14967
15427
|
}
|
|
14968
15428
|
|
|
14969
15429
|
// src/client/hooks/requirements/wallet/useConnectWalletModalViewModel.ts
|
|
14970
|
-
var
|
|
15430
|
+
var import_react46 = require("react");
|
|
14971
15431
|
|
|
14972
15432
|
// src/client/hooks/requirements/data/useConnectWallet.ts
|
|
14973
|
-
var
|
|
15433
|
+
var import_react45 = require("react");
|
|
14974
15434
|
|
|
14975
15435
|
// src/client/core/wallets/connect-external-wallet.ts
|
|
14976
15436
|
var DEFAULT_STATEMENT = "Sign this message to prove you own this wallet. This does not cost gas or move funds.";
|
|
@@ -15101,24 +15561,24 @@ function useConnectWallet({
|
|
|
15101
15561
|
statement
|
|
15102
15562
|
}) {
|
|
15103
15563
|
const { coinlist } = useCoinList();
|
|
15104
|
-
const [state, setState] = (0,
|
|
15564
|
+
const [state, setState] = (0, import_react45.useState)(
|
|
15105
15565
|
() => wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
|
|
15106
15566
|
);
|
|
15107
|
-
const attempt = (0,
|
|
15108
|
-
(0,
|
|
15567
|
+
const attempt = (0, import_react45.useRef)(0);
|
|
15568
|
+
(0, import_react45.useEffect)(() => {
|
|
15109
15569
|
attempt.current += 1;
|
|
15110
15570
|
if (!isOpen) return;
|
|
15111
15571
|
setState(
|
|
15112
15572
|
wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
|
|
15113
15573
|
);
|
|
15114
15574
|
}, [isOpen, wallet?.address]);
|
|
15115
|
-
(0,
|
|
15575
|
+
(0, import_react45.useEffect)(
|
|
15116
15576
|
() => () => {
|
|
15117
15577
|
attempt.current += 1;
|
|
15118
15578
|
},
|
|
15119
15579
|
[]
|
|
15120
15580
|
);
|
|
15121
|
-
const onSign = (0,
|
|
15581
|
+
const onSign = (0, import_react45.useCallback)(() => {
|
|
15122
15582
|
if (!wallet || state.type !== "READY") return;
|
|
15123
15583
|
attempt.current += 1;
|
|
15124
15584
|
const gen = attempt.current;
|
|
@@ -15180,13 +15640,13 @@ function useConnectWalletModalViewModel({
|
|
|
15180
15640
|
challengeType,
|
|
15181
15641
|
statement
|
|
15182
15642
|
});
|
|
15183
|
-
(0,
|
|
15643
|
+
(0, import_react46.useEffect)(() => {
|
|
15184
15644
|
if (state.type === "CONNECTED") {
|
|
15185
15645
|
onConnected?.(state.binding);
|
|
15186
15646
|
onClose();
|
|
15187
15647
|
}
|
|
15188
15648
|
}, [state]);
|
|
15189
|
-
const uiState = (0,
|
|
15649
|
+
const uiState = (0, import_react46.useMemo)(() => {
|
|
15190
15650
|
if (!isOpen || state.type === "CONNECTED") {
|
|
15191
15651
|
return { type: "hidden" };
|
|
15192
15652
|
}
|
|
@@ -15211,7 +15671,7 @@ function useConnectWalletModalViewModel({
|
|
|
15211
15671
|
canRequestConnect
|
|
15212
15672
|
};
|
|
15213
15673
|
}, [isOpen, state, onRequestConnect]);
|
|
15214
|
-
const onEvent = (0,
|
|
15674
|
+
const onEvent = (0, import_react46.useCallback)(
|
|
15215
15675
|
(event) => {
|
|
15216
15676
|
switch (event.type) {
|
|
15217
15677
|
case "ON_CLOSE":
|
|
@@ -15235,13 +15695,13 @@ function useConnectWalletModalViewModel({
|
|
|
15235
15695
|
}
|
|
15236
15696
|
|
|
15237
15697
|
// src/client/components/requirements/wallet/ConnectWalletModalContainer.tsx
|
|
15238
|
-
var
|
|
15698
|
+
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
15239
15699
|
function ConnectWalletModalContainer({
|
|
15240
15700
|
className,
|
|
15241
15701
|
...options
|
|
15242
15702
|
}) {
|
|
15243
15703
|
const { state, onEvent } = useConnectWalletModalViewModel(options);
|
|
15244
|
-
return /* @__PURE__ */ (0,
|
|
15704
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
15245
15705
|
ConnectWalletModalView,
|
|
15246
15706
|
{
|
|
15247
15707
|
state,
|
|
@@ -15252,11 +15712,11 @@ function ConnectWalletModalContainer({
|
|
|
15252
15712
|
}
|
|
15253
15713
|
|
|
15254
15714
|
// src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
|
|
15255
|
-
var
|
|
15715
|
+
var import_react49 = require("react");
|
|
15256
15716
|
|
|
15257
15717
|
// src/client/hooks/requirements/data/useOptionAddresses.ts
|
|
15258
|
-
var
|
|
15259
|
-
var
|
|
15718
|
+
var import_react47 = require("react");
|
|
15719
|
+
var LOADING_STATE7 = { type: "LOADING" };
|
|
15260
15720
|
var EMPTY_STATE = {
|
|
15261
15721
|
type: "CONTENT",
|
|
15262
15722
|
addresses: []
|
|
@@ -15265,19 +15725,19 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
15265
15725
|
const { coinlist, isReady } = useCoinList();
|
|
15266
15726
|
const log = useLogger("useOptionAddresses");
|
|
15267
15727
|
const { data, enabled = true } = options;
|
|
15268
|
-
const [addressesState, setAddressesState] = (0,
|
|
15269
|
-
data !== void 0 ? { type: "CONTENT", addresses: data } :
|
|
15728
|
+
const [addressesState, setAddressesState] = (0, import_react47.useState)(
|
|
15729
|
+
data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE7
|
|
15270
15730
|
);
|
|
15271
|
-
const [fetchKey, setFetchKey] = (0,
|
|
15272
|
-
const refetch = (0,
|
|
15273
|
-
const disconnect = (0,
|
|
15731
|
+
const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
|
|
15732
|
+
const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
|
|
15733
|
+
const disconnect = (0, import_react47.useCallback)(
|
|
15274
15734
|
async (addressId) => {
|
|
15275
15735
|
await coinlist.wallets.remove({ offerId, addressId });
|
|
15276
15736
|
refetch();
|
|
15277
15737
|
},
|
|
15278
15738
|
[coinlist, offerId, refetch]
|
|
15279
15739
|
);
|
|
15280
|
-
(0,
|
|
15740
|
+
(0, import_react47.useEffect)(() => {
|
|
15281
15741
|
let isCancelled = false;
|
|
15282
15742
|
if (!enabled) {
|
|
15283
15743
|
setAddressesState(
|
|
@@ -15289,7 +15749,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
15289
15749
|
}
|
|
15290
15750
|
if (!isReady) {
|
|
15291
15751
|
if (data === void 0) {
|
|
15292
|
-
setAddressesState(
|
|
15752
|
+
setAddressesState(LOADING_STATE7);
|
|
15293
15753
|
}
|
|
15294
15754
|
return () => {
|
|
15295
15755
|
isCancelled = true;
|
|
@@ -15306,7 +15766,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
15306
15766
|
isCancelled = true;
|
|
15307
15767
|
};
|
|
15308
15768
|
}
|
|
15309
|
-
setAddressesState(
|
|
15769
|
+
setAddressesState(LOADING_STATE7);
|
|
15310
15770
|
coinlist.wallets.list({ offerId, offerOptionId }).then((addresses) => {
|
|
15311
15771
|
if (!isCancelled) {
|
|
15312
15772
|
log.debug(() => ({
|
|
@@ -15333,18 +15793,18 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
15333
15793
|
}
|
|
15334
15794
|
|
|
15335
15795
|
// src/client/hooks/requirements/data/useRequirements.ts
|
|
15336
|
-
var
|
|
15337
|
-
var
|
|
15796
|
+
var import_react48 = require("react");
|
|
15797
|
+
var LOADING_STATE8 = { type: "LOADING" };
|
|
15338
15798
|
function useRequirements(offerId, options = {}) {
|
|
15339
15799
|
const { coinlist, isReady } = useCoinList();
|
|
15340
15800
|
const log = useLogger("useRequirements");
|
|
15341
15801
|
const { data, enabled = true } = options;
|
|
15342
|
-
const [requirementsState, setRequirementsState] = (0,
|
|
15343
|
-
data !== void 0 ? { type: "CONTENT", ...data } :
|
|
15802
|
+
const [requirementsState, setRequirementsState] = (0, import_react48.useState)(
|
|
15803
|
+
data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE8
|
|
15344
15804
|
);
|
|
15345
|
-
const [fetchKey, setFetchKey] = (0,
|
|
15346
|
-
const refetch = (0,
|
|
15347
|
-
(0,
|
|
15805
|
+
const [fetchKey, setFetchKey] = (0, import_react48.useState)(0);
|
|
15806
|
+
const refetch = (0, import_react48.useCallback)(() => setFetchKey((k) => k + 1), []);
|
|
15807
|
+
(0, import_react48.useEffect)(() => {
|
|
15348
15808
|
let isCancelled = false;
|
|
15349
15809
|
if (!enabled) {
|
|
15350
15810
|
return () => {
|
|
@@ -15353,7 +15813,7 @@ function useRequirements(offerId, options = {}) {
|
|
|
15353
15813
|
}
|
|
15354
15814
|
if (!isReady) {
|
|
15355
15815
|
if (data === void 0) {
|
|
15356
|
-
setRequirementsState(
|
|
15816
|
+
setRequirementsState(LOADING_STATE8);
|
|
15357
15817
|
}
|
|
15358
15818
|
return () => {
|
|
15359
15819
|
isCancelled = true;
|
|
@@ -15370,7 +15830,7 @@ function useRequirements(offerId, options = {}) {
|
|
|
15370
15830
|
isCancelled = true;
|
|
15371
15831
|
};
|
|
15372
15832
|
}
|
|
15373
|
-
setRequirementsState(
|
|
15833
|
+
setRequirementsState(LOADING_STATE8);
|
|
15374
15834
|
Promise.all([
|
|
15375
15835
|
coinlist.requirements.forOffer(offerId),
|
|
15376
15836
|
coinlist.requirements.statuses(offerId)
|
|
@@ -15412,7 +15872,7 @@ var RequirementItemUi = {
|
|
|
15412
15872
|
fromDomain(req, statusInfo, label, description2, addresses = []) {
|
|
15413
15873
|
return {
|
|
15414
15874
|
variant: RequirementVariant.fromType(req.type),
|
|
15415
|
-
status:
|
|
15875
|
+
status: requirementStatus(req, statusInfo),
|
|
15416
15876
|
label,
|
|
15417
15877
|
description: description2,
|
|
15418
15878
|
multiWallet: req.type === "whitelisted_wallet",
|
|
@@ -15420,10 +15880,44 @@ var RequirementItemUi = {
|
|
|
15420
15880
|
id: address.id,
|
|
15421
15881
|
address: address.address,
|
|
15422
15882
|
shortAddress: shortenAddress(address.address)
|
|
15423
|
-
}))
|
|
15883
|
+
})),
|
|
15884
|
+
statusMessages: statusMessagesFor(req.type)
|
|
15424
15885
|
};
|
|
15425
15886
|
}
|
|
15426
15887
|
};
|
|
15888
|
+
var IDENTITY_STATUS_MESSAGES = {
|
|
15889
|
+
pending: "Verification under review. We'll notify you when it's complete.",
|
|
15890
|
+
completed: "Identity verified.",
|
|
15891
|
+
rejected: "We couldn't verify your identity. Contact support for help."
|
|
15892
|
+
};
|
|
15893
|
+
var ACCREDITATION_STATUS_MESSAGES = {
|
|
15894
|
+
pending: "Accreditation under review. We'll notify you when it's complete.",
|
|
15895
|
+
completed: "Accreditation verified.",
|
|
15896
|
+
rejected: "We couldn't verify your accreditation. Contact support for help."
|
|
15897
|
+
};
|
|
15898
|
+
var TAX_DOCUMENTATION_STATUS_MESSAGES = {
|
|
15899
|
+
completed: "Tax documentation completed.",
|
|
15900
|
+
rejected: "We couldn't accept your tax documentation. Contact support for help."
|
|
15901
|
+
};
|
|
15902
|
+
function statusMessagesFor(type) {
|
|
15903
|
+
switch (type) {
|
|
15904
|
+
case "kyc_approved":
|
|
15905
|
+
return IDENTITY_STATUS_MESSAGES;
|
|
15906
|
+
case "accreditation":
|
|
15907
|
+
return ACCREDITATION_STATUS_MESSAGES;
|
|
15908
|
+
case "document":
|
|
15909
|
+
return TAX_DOCUMENTATION_STATUS_MESSAGES;
|
|
15910
|
+
default:
|
|
15911
|
+
return void 0;
|
|
15912
|
+
}
|
|
15913
|
+
}
|
|
15914
|
+
function requirementStatus(req, statusInfo) {
|
|
15915
|
+
if (!statusInfo) return "required";
|
|
15916
|
+
if (req.type === "document" && statusInfo.status === "in_progress") {
|
|
15917
|
+
return "required";
|
|
15918
|
+
}
|
|
15919
|
+
return RequirementStatus.fromStatusValue(statusInfo.status);
|
|
15920
|
+
}
|
|
15427
15921
|
var RequirementVariant = {
|
|
15428
15922
|
fromType(type) {
|
|
15429
15923
|
switch (type) {
|
|
@@ -15460,20 +15954,20 @@ var ChecklistStatus = {
|
|
|
15460
15954
|
|
|
15461
15955
|
// src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
|
|
15462
15956
|
var DEFAULT_LABELS = {
|
|
15463
|
-
kyc_approved: "
|
|
15957
|
+
kyc_approved: "Identity Verification",
|
|
15464
15958
|
external_wallet: "External Wallet",
|
|
15465
15959
|
whitelisted_wallet: "Whitelisted Wallet",
|
|
15466
15960
|
jurisdiction: "Jurisdiction Check",
|
|
15467
15961
|
accreditation: "Accreditation",
|
|
15468
|
-
document: "
|
|
15962
|
+
document: "Tax Documentation"
|
|
15469
15963
|
};
|
|
15470
15964
|
var DEFAULT_DESCRIPTIONS = {
|
|
15471
|
-
kyc_approved: "Complete Know Your Customer verification.",
|
|
15965
|
+
kyc_approved: "Complete Know Your Customer (KYC) verification.",
|
|
15472
15966
|
external_wallet: "Connect an external wallet.",
|
|
15473
15967
|
whitelisted_wallet: "Connect a whitelisted wallet.",
|
|
15474
15968
|
jurisdiction: "Confirm your jurisdiction eligibility.",
|
|
15475
|
-
accreditation: "
|
|
15476
|
-
document: "
|
|
15969
|
+
accreditation: "Confirm that you meet accredited investor requirements.",
|
|
15970
|
+
document: "Review and sign the required tax documentation."
|
|
15477
15971
|
};
|
|
15478
15972
|
var VERIFICATION_POLL_INTERVAL_MS = 5e3;
|
|
15479
15973
|
var VERIFICATION_POLL_TIMEOUT_MS = 12e4;
|
|
@@ -15504,19 +15998,19 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
15504
15998
|
data,
|
|
15505
15999
|
enabled
|
|
15506
16000
|
});
|
|
15507
|
-
const [expandedId, setExpandedId] = (0,
|
|
15508
|
-
const [taxDocumentOpen, setTaxDocumentOpen] = (0,
|
|
15509
|
-
const [connectWalletOpen, setConnectWalletOpen] = (0,
|
|
15510
|
-
const [verifyingRequirementId, setVerifyingRequirementId] = (0,
|
|
15511
|
-
const isMountedRef = (0,
|
|
15512
|
-
(0,
|
|
16001
|
+
const [expandedId, setExpandedId] = (0, import_react49.useState)(null);
|
|
16002
|
+
const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react49.useState)(false);
|
|
16003
|
+
const [connectWalletOpen, setConnectWalletOpen] = (0, import_react49.useState)(false);
|
|
16004
|
+
const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react49.useState)(null);
|
|
16005
|
+
const isMountedRef = (0, import_react49.useRef)(true);
|
|
16006
|
+
(0, import_react49.useEffect)(() => {
|
|
15513
16007
|
isMountedRef.current = true;
|
|
15514
16008
|
return () => {
|
|
15515
16009
|
isMountedRef.current = false;
|
|
15516
16010
|
};
|
|
15517
16011
|
}, []);
|
|
15518
|
-
const [hasWalletRequirement, setHasWalletRequirement] = (0,
|
|
15519
|
-
(0,
|
|
16012
|
+
const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react49.useState)(false);
|
|
16013
|
+
(0, import_react49.useEffect)(() => {
|
|
15520
16014
|
if (requirementsState.type === "CONTENT") {
|
|
15521
16015
|
setHasWalletRequirement(
|
|
15522
16016
|
(requirementsState.requirements[optionId] ?? []).some(
|
|
@@ -15532,14 +16026,14 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
15532
16026
|
} = useOptionAddresses(offerId, optionId, {
|
|
15533
16027
|
enabled: enabled && hasWalletRequirement
|
|
15534
16028
|
});
|
|
15535
|
-
const removeWallet = (0,
|
|
16029
|
+
const removeWallet = (0, import_react49.useCallback)(
|
|
15536
16030
|
async (addressId) => {
|
|
15537
16031
|
await disconnect(OfferOptionAddressId(addressId));
|
|
15538
16032
|
refetch();
|
|
15539
16033
|
},
|
|
15540
16034
|
[disconnect, refetch]
|
|
15541
16035
|
);
|
|
15542
|
-
const awaitVerificationResult = (0,
|
|
16036
|
+
const awaitVerificationResult = (0, import_react49.useCallback)(
|
|
15543
16037
|
(requirementId, statusBeforeSubmit) => {
|
|
15544
16038
|
void (async () => {
|
|
15545
16039
|
const deadline = Date.now() + VERIFICATION_POLL_TIMEOUT_MS;
|
|
@@ -15566,11 +16060,11 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
15566
16060
|
},
|
|
15567
16061
|
[coinlist, offerId, refetch, log]
|
|
15568
16062
|
);
|
|
15569
|
-
const requirements = (0,
|
|
16063
|
+
const requirements = (0, import_react49.useMemo)(
|
|
15570
16064
|
() => requirementsState.type === "CONTENT" ? requirementsState.requirements[optionId] ?? [] : [],
|
|
15571
16065
|
[requirementsState, optionId]
|
|
15572
16066
|
);
|
|
15573
|
-
const statusById = (0,
|
|
16067
|
+
const statusById = (0, import_react49.useMemo)(() => {
|
|
15574
16068
|
if (requirementsState.type !== "CONTENT") {
|
|
15575
16069
|
return /* @__PURE__ */ new Map();
|
|
15576
16070
|
}
|
|
@@ -15579,12 +16073,12 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
15579
16073
|
requirementsState.statuses.filter((s) => ids.has(s.id)).map((s) => [s.id, s])
|
|
15580
16074
|
);
|
|
15581
16075
|
}, [requirementsState, requirements]);
|
|
15582
|
-
const state = (0,
|
|
16076
|
+
const state = (0, import_react49.useMemo)(() => {
|
|
15583
16077
|
switch (requirementsState.type) {
|
|
15584
16078
|
case "LOADING":
|
|
15585
|
-
return { type: "loading" };
|
|
16079
|
+
return { type: "loading", title: title2, description: description2 };
|
|
15586
16080
|
case "ERROR":
|
|
15587
|
-
return
|
|
16081
|
+
return { type: "error", title: title2 };
|
|
15588
16082
|
case "CONTENT": {
|
|
15589
16083
|
const optionStatuses = [...statusById.values()];
|
|
15590
16084
|
const checklistStatus = ChecklistStatus.derive(optionStatuses);
|
|
@@ -15648,7 +16142,7 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
15648
16142
|
identityVerificationOptions,
|
|
15649
16143
|
removeWallet
|
|
15650
16144
|
]);
|
|
15651
|
-
const handleRequirementAction = (0,
|
|
16145
|
+
const handleRequirementAction = (0, import_react49.useCallback)(
|
|
15652
16146
|
(requirement) => {
|
|
15653
16147
|
const inlineVerification = statusById.get(requirement.id)?.kycLevel !== void 0 && onRequirementActionOverride === void 0;
|
|
15654
16148
|
if (inlineVerification) {
|
|
@@ -15680,7 +16174,7 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
15680
16174
|
coinlist
|
|
15681
16175
|
]
|
|
15682
16176
|
);
|
|
15683
|
-
const onEvent = (0,
|
|
16177
|
+
const onEvent = (0, import_react49.useCallback)(
|
|
15684
16178
|
(event) => {
|
|
15685
16179
|
switch (event.type) {
|
|
15686
16180
|
case "ON_TOGGLE_ITEM":
|
|
@@ -15778,11 +16272,10 @@ function toVerificationUi(verifyingRequirementId, statusById, identityVerificati
|
|
|
15778
16272
|
}
|
|
15779
16273
|
|
|
15780
16274
|
// src/client/components/requirements/RequirementsChecklistContainer.tsx
|
|
15781
|
-
var
|
|
16275
|
+
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
15782
16276
|
function RequirementsChecklistContainer({
|
|
15783
16277
|
loading,
|
|
15784
16278
|
error,
|
|
15785
|
-
unauthenticatedState,
|
|
15786
16279
|
className,
|
|
15787
16280
|
enabled = true,
|
|
15788
16281
|
...options
|
|
@@ -15791,24 +16284,19 @@ function RequirementsChecklistContainer({
|
|
|
15791
16284
|
...options,
|
|
15792
16285
|
enabled
|
|
15793
16286
|
});
|
|
15794
|
-
return /* @__PURE__ */ (0,
|
|
15795
|
-
/* @__PURE__ */ (0,
|
|
16287
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
|
|
16288
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
15796
16289
|
RequirementsChecklistView,
|
|
15797
16290
|
{
|
|
15798
16291
|
state,
|
|
15799
16292
|
onEvent,
|
|
15800
16293
|
loading,
|
|
15801
16294
|
error,
|
|
15802
|
-
unauthenticatedState: (
|
|
15803
|
-
// The sign-in default lives here, not in the View: it is a connected
|
|
15804
|
-
// component, and a View must render from what it is handed.
|
|
15805
|
-
unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CoinListSignInCardContainer, {})
|
|
15806
|
-
),
|
|
15807
16295
|
className
|
|
15808
16296
|
}
|
|
15809
16297
|
),
|
|
15810
|
-
state.type === "content" && /* @__PURE__ */ (0,
|
|
15811
|
-
/* @__PURE__ */ (0,
|
|
16298
|
+
state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
|
|
16299
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
15812
16300
|
TaxDocumentModalContainer,
|
|
15813
16301
|
{
|
|
15814
16302
|
isOpen: state.taxDocumentOpen,
|
|
@@ -15816,11 +16304,11 @@ function RequirementsChecklistContainer({
|
|
|
15816
16304
|
onSubmitted: () => onEvent({ type: "ON_TAX_DOCUMENT_SUBMITTED" })
|
|
15817
16305
|
}
|
|
15818
16306
|
),
|
|
15819
|
-
state.verification && /* @__PURE__ */ (0,
|
|
16307
|
+
state.verification && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
15820
16308
|
VerificationOverlay,
|
|
15821
16309
|
{
|
|
15822
16310
|
onClose: () => onEvent({ type: "ON_CLOSE_VERIFICATION" }),
|
|
15823
|
-
children: /* @__PURE__ */ (0,
|
|
16311
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
15824
16312
|
IdentityVerificationContainer,
|
|
15825
16313
|
{
|
|
15826
16314
|
levelName: state.verification.levelName,
|
|
@@ -15831,7 +16319,7 @@ function RequirementsChecklistContainer({
|
|
|
15831
16319
|
)
|
|
15832
16320
|
}
|
|
15833
16321
|
),
|
|
15834
|
-
/* @__PURE__ */ (0,
|
|
16322
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
15835
16323
|
ConnectWalletModalContainer,
|
|
15836
16324
|
{
|
|
15837
16325
|
isOpen: state.connectWalletOpen,
|
|
@@ -15992,18 +16480,18 @@ function pinoClientLogger(options) {
|
|
|
15992
16480
|
}
|
|
15993
16481
|
|
|
15994
16482
|
// src/client/hooks/auth/useCompleteOAuth.ts
|
|
15995
|
-
var
|
|
16483
|
+
var import_react50 = require("react");
|
|
15996
16484
|
function useCompleteOAuth(options) {
|
|
15997
16485
|
const { coinlist } = useCoinList();
|
|
15998
16486
|
const log = useLogger("useCompleteOAuth");
|
|
15999
|
-
const postOAuthCompleteRef = (0,
|
|
16000
|
-
const onFailureRef = (0,
|
|
16001
|
-
const onSuccessRef = (0,
|
|
16487
|
+
const postOAuthCompleteRef = (0, import_react50.useRef)(options.postOAuthComplete);
|
|
16488
|
+
const onFailureRef = (0, import_react50.useRef)(options.onFailure);
|
|
16489
|
+
const onSuccessRef = (0, import_react50.useRef)(options.onSuccess);
|
|
16002
16490
|
postOAuthCompleteRef.current = options.postOAuthComplete;
|
|
16003
16491
|
onFailureRef.current = options.onFailure;
|
|
16004
16492
|
onSuccessRef.current = options.onSuccess;
|
|
16005
|
-
const hasStartedExchangeRef = (0,
|
|
16006
|
-
(0,
|
|
16493
|
+
const hasStartedExchangeRef = (0, import_react50.useRef)(false);
|
|
16494
|
+
(0, import_react50.useEffect)(() => {
|
|
16007
16495
|
if (typeof window === "undefined") return;
|
|
16008
16496
|
const params = new URLSearchParams(window.location.search);
|
|
16009
16497
|
if (!params.has("code") && !params.has("error")) return;
|
|
@@ -16067,16 +16555,16 @@ function useCompleteOAuth(options) {
|
|
|
16067
16555
|
}
|
|
16068
16556
|
|
|
16069
16557
|
// src/client/hooks/checkout/coin-list/token-sale/data/useParticipations.ts
|
|
16070
|
-
var
|
|
16071
|
-
var
|
|
16558
|
+
var import_react51 = require("react");
|
|
16559
|
+
var LOADING_STATE9 = { type: "LOADING" };
|
|
16072
16560
|
function useParticipations(offerId, options = {}) {
|
|
16073
16561
|
const { coinlist, isReady } = useCoinList();
|
|
16074
16562
|
const log = useLogger("useParticipations");
|
|
16075
16563
|
const { data, enabled = true } = options;
|
|
16076
|
-
const [participationsState, setParticipationsState] = (0,
|
|
16077
|
-
data !== void 0 ? { type: "CONTENT", participations: data } :
|
|
16564
|
+
const [participationsState, setParticipationsState] = (0, import_react51.useState)(
|
|
16565
|
+
data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE9
|
|
16078
16566
|
);
|
|
16079
|
-
(0,
|
|
16567
|
+
(0, import_react51.useEffect)(() => {
|
|
16080
16568
|
let isCancelled = false;
|
|
16081
16569
|
if (!enabled) {
|
|
16082
16570
|
return () => {
|
|
@@ -16085,7 +16573,7 @@ function useParticipations(offerId, options = {}) {
|
|
|
16085
16573
|
}
|
|
16086
16574
|
if (!isReady) {
|
|
16087
16575
|
if (data === void 0) {
|
|
16088
|
-
setParticipationsState(
|
|
16576
|
+
setParticipationsState(LOADING_STATE9);
|
|
16089
16577
|
}
|
|
16090
16578
|
return () => {
|
|
16091
16579
|
isCancelled = true;
|
|
@@ -16096,7 +16584,7 @@ function useParticipations(offerId, options = {}) {
|
|
|
16096
16584
|
isCancelled = true;
|
|
16097
16585
|
};
|
|
16098
16586
|
}
|
|
16099
|
-
setParticipationsState(
|
|
16587
|
+
setParticipationsState(LOADING_STATE9);
|
|
16100
16588
|
coinlist.tokenSale.list(offerId).then((participations) => {
|
|
16101
16589
|
if (!isCancelled) {
|
|
16102
16590
|
log.debug(() => ({
|
|
@@ -16123,16 +16611,16 @@ function useParticipations(offerId, options = {}) {
|
|
|
16123
16611
|
}
|
|
16124
16612
|
|
|
16125
16613
|
// src/client/hooks/offers/data/useOfferDetails.ts
|
|
16126
|
-
var
|
|
16127
|
-
var
|
|
16614
|
+
var import_react52 = require("react");
|
|
16615
|
+
var LOADING_STATE10 = { type: "LOADING" };
|
|
16128
16616
|
function useOfferDetails(offerId, options = {}) {
|
|
16129
16617
|
const { coinlist, isReady } = useCoinList();
|
|
16130
16618
|
const log = useLogger("useOfferDetails");
|
|
16131
16619
|
const { data, enabled = true } = options;
|
|
16132
|
-
const [offerDetailsState, setOfferDetailsState] = (0,
|
|
16133
|
-
data !== void 0 ? { type: "CONTENT", offerDetail: data } :
|
|
16620
|
+
const [offerDetailsState, setOfferDetailsState] = (0, import_react52.useState)(
|
|
16621
|
+
data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE10
|
|
16134
16622
|
);
|
|
16135
|
-
(0,
|
|
16623
|
+
(0, import_react52.useEffect)(() => {
|
|
16136
16624
|
let isCancelled = false;
|
|
16137
16625
|
if (!enabled) {
|
|
16138
16626
|
return () => {
|
|
@@ -16141,7 +16629,7 @@ function useOfferDetails(offerId, options = {}) {
|
|
|
16141
16629
|
}
|
|
16142
16630
|
if (!isReady) {
|
|
16143
16631
|
if (data === void 0) {
|
|
16144
|
-
setOfferDetailsState(
|
|
16632
|
+
setOfferDetailsState(LOADING_STATE10);
|
|
16145
16633
|
}
|
|
16146
16634
|
return () => {
|
|
16147
16635
|
isCancelled = true;
|
|
@@ -16152,7 +16640,7 @@ function useOfferDetails(offerId, options = {}) {
|
|
|
16152
16640
|
isCancelled = true;
|
|
16153
16641
|
};
|
|
16154
16642
|
}
|
|
16155
|
-
setOfferDetailsState(
|
|
16643
|
+
setOfferDetailsState(LOADING_STATE10);
|
|
16156
16644
|
coinlist.offers.get(offerId).then((offerDetail) => {
|
|
16157
16645
|
if (!isCancelled) {
|
|
16158
16646
|
log.debug(() => ({
|
|
@@ -16180,15 +16668,23 @@ function useOfferDetails(offerId, options = {}) {
|
|
|
16180
16668
|
|
|
16181
16669
|
// src/client/hooks/offers/shared/offer-asset-card.types.ts
|
|
16182
16670
|
var OfferAssetCardUi = {
|
|
16183
|
-
|
|
16671
|
+
/**
|
|
16672
|
+
* `tokenMetadata` is the registry's entry for the token the offer is about
|
|
16673
|
+
* (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
|
|
16674
|
+
* registry names win over the offer's own where both exist: they are the
|
|
16675
|
+
* token's canonical name, ticker and artwork, where the offer's are
|
|
16676
|
+
* catalogue copy.
|
|
16677
|
+
*/
|
|
16678
|
+
fromOffer: (offer, tokenMetadata = null) => ({
|
|
16184
16679
|
id: offer.id,
|
|
16185
|
-
|
|
16680
|
+
...tokenMetadata ? { name: tokenMetadata.name, symbol: String(tokenMetadata.symbol) } : {},
|
|
16681
|
+
logo: OfferLogoUi.fromOffer(offer, tokenMetadata)
|
|
16186
16682
|
}),
|
|
16187
|
-
fromDetail: (detail) => ({
|
|
16683
|
+
fromDetail: (detail, tokenMetadata = null) => ({
|
|
16188
16684
|
id: detail.id,
|
|
16189
|
-
name: detail.name,
|
|
16190
|
-
symbol: detail.asset.code,
|
|
16191
|
-
|
|
16685
|
+
name: tokenMetadata?.name ?? detail.name,
|
|
16686
|
+
symbol: tokenMetadata ? String(tokenMetadata.symbol) : detail.asset.code,
|
|
16687
|
+
logo: OfferLogoUi.fromOffer(detail, tokenMetadata)
|
|
16192
16688
|
})
|
|
16193
16689
|
};
|
|
16194
16690
|
|
|
@@ -16231,6 +16727,7 @@ function formatMonthYear(date, locale) {
|
|
|
16231
16727
|
OAUTH_STATE_KEY,
|
|
16232
16728
|
OfferAssetCard,
|
|
16233
16729
|
OfferAssetCardUi,
|
|
16730
|
+
OfferLogoUi,
|
|
16234
16731
|
OfferSaleCard,
|
|
16235
16732
|
OfferSaleCardUi,
|
|
16236
16733
|
OffersAssetGrid,
|
|
@@ -16292,6 +16789,7 @@ function formatMonthYear(date, locale) {
|
|
|
16292
16789
|
quoteOverAsks,
|
|
16293
16790
|
stablecoinIconUrl,
|
|
16294
16791
|
submitErc20Approval,
|
|
16792
|
+
tokenLogoSrcSet,
|
|
16295
16793
|
tokenLogoUrl,
|
|
16296
16794
|
tokenMetadataOf,
|
|
16297
16795
|
useCheckoutOfferTokenMetadata,
|
|
@@ -16334,6 +16832,7 @@ function formatMonthYear(date, locale) {
|
|
|
16334
16832
|
useTaxDocument,
|
|
16335
16833
|
useTaxDocumentModalViewModel,
|
|
16336
16834
|
useTokenMetadata,
|
|
16835
|
+
useTokenRegistry,
|
|
16337
16836
|
validateAmount,
|
|
16338
16837
|
validateSellAmount,
|
|
16339
16838
|
validateSuperstateAmount
|