@coinlist-co/react 0.11.1-rc.e102bdb → 0.12.0
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-7CTH4KPU.js → chunk-6CQHDASY.js} +648 -620
- package/dist/chunk-6CQHDASY.js.map +1 -0
- package/dist/{chunk-UZUQALFY.js → chunk-F6WGUKZC.js} +9 -9
- package/dist/chunk-F6WGUKZC.js.map +1 -0
- package/dist/{chunk-LSPZETDH.js → chunk-ZFBEI3BW.js} +131 -134
- package/dist/chunk-ZFBEI3BW.js.map +1 -0
- package/dist/client/index.cjs +1489 -1346
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +395 -254
- package/dist/client/index.d.ts +395 -254
- package/dist/client/index.js +852 -739
- package/dist/client/index.js.map +1 -1
- package/dist/{collections-BBI_XydI.d.cts → collections-DOm9VKVm.d.cts} +1 -1
- package/dist/{collections-BrX9rRWc.d.ts → collections-aCv-Wr2a.d.ts} +1 -1
- package/dist/{config-CMl1bR3F.d.cts → config-DIaFzrMW.d.cts} +56 -13
- package/dist/{config-CMl1bR3F.d.ts → config-DIaFzrMW.d.ts} +56 -13
- package/dist/server/index.cjs +262 -236
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.cts +4 -4
- package/dist/server/index.d.ts +4 -4
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/{shared → universal}/index.cjs +948 -919
- package/dist/universal/index.cjs.map +1 -0
- package/dist/{shared → universal}/index.d.cts +566 -536
- package/dist/{shared → universal}/index.d.ts +566 -536
- package/dist/{shared → universal}/index.js +9 -5
- package/package.json +23 -17
- package/dist/chunk-7CTH4KPU.js.map +0 -1
- package/dist/chunk-LSPZETDH.js.map +0 -1
- package/dist/chunk-UZUQALFY.js.map +0 -1
- package/dist/shared/index.cjs.map +0 -1
- /package/dist/{shared → universal}/index.js.map +0 -0
package/dist/client/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
PINO_LEVEL,
|
|
5
5
|
SDK_LOGGER_NAME,
|
|
6
6
|
loggerOverPino
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-F6WGUKZC.js";
|
|
8
8
|
import {
|
|
9
9
|
AuthorizationCode,
|
|
10
10
|
CodeVerifier,
|
|
@@ -36,9 +36,9 @@ import {
|
|
|
36
36
|
formattedPricePerShare,
|
|
37
37
|
generatePKCEParams,
|
|
38
38
|
isStopped,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
} from "../chunk-
|
|
39
|
+
superstateSwapContractAddress,
|
|
40
|
+
swapSpender
|
|
41
|
+
} from "../chunk-ZFBEI3BW.js";
|
|
42
42
|
import {
|
|
43
43
|
API_VERSION,
|
|
44
44
|
AssetDecimals,
|
|
@@ -85,7 +85,7 @@ import {
|
|
|
85
85
|
shortenAddress,
|
|
86
86
|
txExplorerUrl,
|
|
87
87
|
usdAmount
|
|
88
|
-
} from "../chunk-
|
|
88
|
+
} from "../chunk-6CQHDASY.js";
|
|
89
89
|
|
|
90
90
|
// src/client/CoinListProvider.tsx
|
|
91
91
|
import {
|
|
@@ -233,7 +233,7 @@ var ClientAuthNamespaceImpl = class {
|
|
|
233
233
|
}
|
|
234
234
|
};
|
|
235
235
|
|
|
236
|
-
// src/client/core/blockchain/wallet-error.ts
|
|
236
|
+
// src/client/core/shared/blockchain/wallet-error.ts
|
|
237
237
|
import {
|
|
238
238
|
BaseError,
|
|
239
239
|
ContractFunctionRevertedError,
|
|
@@ -268,7 +268,7 @@ function revertReason(error) {
|
|
|
268
268
|
return error.reason ?? error.data?.errorName ?? error.signature ?? null;
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
-
// src/client/core/blockchain/erc20/approval.ts
|
|
271
|
+
// src/client/core/shared/blockchain/erc20/approval.ts
|
|
272
272
|
async function ensureErc20Allowance({
|
|
273
273
|
erc20,
|
|
274
274
|
chain,
|
|
@@ -445,7 +445,7 @@ async function executeTokenSale(params) {
|
|
|
445
445
|
return { type: "success", participation, approvalTxHash };
|
|
446
446
|
}
|
|
447
447
|
|
|
448
|
-
// src/client/core/observability/flow-logging.ts
|
|
448
|
+
// src/client/core/shared/observability/flow-logging.ts
|
|
449
449
|
async function withFlowLogging(log, flow, fields, onProgress, run) {
|
|
450
450
|
const flowLog = log.child({ flow });
|
|
451
451
|
flowLog.info(() => ({ msg: "flow started", fields }));
|
|
@@ -537,16 +537,6 @@ var ClientCoinListTokenSaleNamespaceImpl = class extends CoinListTokenSaleNamesp
|
|
|
537
537
|
}
|
|
538
538
|
};
|
|
539
539
|
|
|
540
|
-
// src/shared/core/blockchain/address.ts
|
|
541
|
-
import { isAddressEqual } from "viem";
|
|
542
|
-
function isSameEvmAddress(a, b) {
|
|
543
|
-
try {
|
|
544
|
-
return isAddressEqual(a, b);
|
|
545
|
-
} catch {
|
|
546
|
-
return false;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
540
|
// src/client/core/checkout/ondo/ondo-flows.ts
|
|
551
541
|
async function prepareOndoBuy(params) {
|
|
552
542
|
const { ondo, symbol, chain, wallet, amount } = params;
|
|
@@ -573,9 +563,17 @@ async function prepareOndoSell(params) {
|
|
|
573
563
|
);
|
|
574
564
|
}
|
|
575
565
|
async function prepare(params, build) {
|
|
576
|
-
const {
|
|
566
|
+
const {
|
|
567
|
+
erc20,
|
|
568
|
+
wallet,
|
|
569
|
+
chain,
|
|
570
|
+
swapContracts,
|
|
571
|
+
tokenAddress,
|
|
572
|
+
amount,
|
|
573
|
+
onProgress
|
|
574
|
+
} = params;
|
|
577
575
|
const emit = (phase) => onProgress?.(phase);
|
|
578
|
-
const spender =
|
|
576
|
+
const spender = swapSpender(swapContracts, chain);
|
|
579
577
|
if (spender === null) {
|
|
580
578
|
return { type: "error", error: { step: "unsupported-chain", chain } };
|
|
581
579
|
}
|
|
@@ -606,16 +604,6 @@ async function executeOndoSwap(params) {
|
|
|
606
604
|
if (now.getTime() >= transaction.expiresAt.getTime()) {
|
|
607
605
|
return { type: "error", error: { step: "quote-expired" } };
|
|
608
606
|
}
|
|
609
|
-
const spender = ondoSwapContractAddress(chain);
|
|
610
|
-
if (spender === null || !isSameEvmAddress(transaction.tx.to, spender)) {
|
|
611
|
-
return {
|
|
612
|
-
type: "error",
|
|
613
|
-
error: {
|
|
614
|
-
step: "spender-mismatch",
|
|
615
|
-
expected: spender ?? transaction.tx.to
|
|
616
|
-
}
|
|
617
|
-
};
|
|
618
|
-
}
|
|
619
607
|
emit("broadcasting-swap");
|
|
620
608
|
let txHash;
|
|
621
609
|
try {
|
|
@@ -907,7 +895,7 @@ var ClientSuperstateSwapNamespaceImpl = class extends SuperstateSwapNamespaceImp
|
|
|
907
895
|
}
|
|
908
896
|
};
|
|
909
897
|
|
|
910
|
-
// src/client/core/utils/open-in-new-tab.ts
|
|
898
|
+
// src/client/core/shared/utils/open-in-new-tab.ts
|
|
911
899
|
function openInNewTab(url) {
|
|
912
900
|
window.open(url, "_blank", "noopener,noreferrer");
|
|
913
901
|
}
|
|
@@ -1100,7 +1088,7 @@ var CoinListProvider = CoinListContextProvider;
|
|
|
1100
1088
|
import { createContext as createContext4, useContext as useContext3 } from "react";
|
|
1101
1089
|
|
|
1102
1090
|
// src/client/generated/sdk-styles.gen.ts
|
|
1103
|
-
var sdkStyles = '/*! tailwindcss v4.2.1 | 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:calc(var(--clcosdk-spacing) * 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:calc(var(--clcosdk-spacing) * 1)}.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:calc(var(--clcosdk-spacing) * 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:calc(var(--clcosdk-spacing) * 1)}.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:calc(var(--clcosdk-spacing) * 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:calc(var(--clcosdk-spacing) * 1)}.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:calc(var(--clcosdk-spacing) * 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:calc(var(--clcosdk-spacing) * 1)}.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:calc(var(--clcosdk-spacing) * 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}}';
|
|
1091
|
+
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}}';
|
|
1104
1092
|
|
|
1105
1093
|
// src/client/CoinListStyleScope.tsx
|
|
1106
1094
|
import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
@@ -1633,7 +1621,7 @@ function CoinListSignInCardContainer({
|
|
|
1633
1621
|
}
|
|
1634
1622
|
|
|
1635
1623
|
// src/client/components/checkout/CheckoutContainer.tsx
|
|
1636
|
-
import { useState as
|
|
1624
|
+
import { useState as useState23 } from "react";
|
|
1637
1625
|
|
|
1638
1626
|
// src/client/components/checkout/shared/amount/CheckoutAmountInput.tsx
|
|
1639
1627
|
import { useId } from "react";
|
|
@@ -5431,7 +5419,7 @@ function ErrorView4({
|
|
|
5431
5419
|
}
|
|
5432
5420
|
|
|
5433
5421
|
// src/client/hooks/checkout/ondo/buy/useOndoBuyCheckoutViewModel.ts
|
|
5434
|
-
import { useState as
|
|
5422
|
+
import { useState as useState11 } from "react";
|
|
5435
5423
|
|
|
5436
5424
|
// src/client/hooks/checkout/ondo/buy/amount/useOndoBuyAmountViewModel.ts
|
|
5437
5425
|
import { useEffect as useEffect4, useRef as useRef3, useState as useState4 } from "react";
|
|
@@ -5458,6 +5446,26 @@ function stablecoinIconUrl(symbol) {
|
|
|
5458
5446
|
function offerIconUrl(offer) {
|
|
5459
5447
|
return offer.logoUrl === "" ? null : AssetIconUrl(offer.logoUrl);
|
|
5460
5448
|
}
|
|
5449
|
+
function tokenLogoUrl(logo, minWidth = 40) {
|
|
5450
|
+
switch (logo.kind) {
|
|
5451
|
+
case "VECTOR":
|
|
5452
|
+
return AssetIconUrl(logo.url);
|
|
5453
|
+
case "RASTER": {
|
|
5454
|
+
const chosen = logo.variants.reduce(
|
|
5455
|
+
(smallest, variant) => variant.width >= minWidth && (smallest === null || variant.width < smallest.width) ? variant : smallest,
|
|
5456
|
+
null
|
|
5457
|
+
);
|
|
5458
|
+
return AssetIconUrl((chosen ?? logo.original).url);
|
|
5459
|
+
}
|
|
5460
|
+
default: {
|
|
5461
|
+
const exhaustive = logo;
|
|
5462
|
+
return exhaustive;
|
|
5463
|
+
}
|
|
5464
|
+
}
|
|
5465
|
+
}
|
|
5466
|
+
function offerAssetIconUrl(offer, tokenMetadata) {
|
|
5467
|
+
return (tokenMetadata ? tokenLogoUrl(tokenMetadata.logo) : null) ?? offerIconUrl(offer);
|
|
5468
|
+
}
|
|
5461
5469
|
|
|
5462
5470
|
// src/client/hooks/checkout/shared/checkout-ui.types.ts
|
|
5463
5471
|
var CheckoutAssetUi = {
|
|
@@ -5466,10 +5474,10 @@ var CheckoutAssetUi = {
|
|
|
5466
5474
|
* name and symbol, the caller supplies the chain it is being traded on and
|
|
5467
5475
|
* whatever icon it has for it.
|
|
5468
5476
|
*
|
|
5469
|
-
* `iconUrl` is a caller's parameter rather than the token's own because
|
|
5470
|
-
*
|
|
5471
|
-
*
|
|
5472
|
-
*
|
|
5477
|
+
* `iconUrl` is a caller's parameter rather than the token's own because an
|
|
5478
|
+
* `Erc20Asset` does not carry one, and which source supplies it is the
|
|
5479
|
+
* caller's to decide. Which is also why it defaults to `null`: the input
|
|
5480
|
+
* asset a user pays with has no offer behind it.
|
|
5473
5481
|
*
|
|
5474
5482
|
* An asset sourced from the offer rather than from a token has its own
|
|
5475
5483
|
* companion, {@link fromOffer}. One companion per source, not one per call
|
|
@@ -5486,7 +5494,7 @@ var CheckoutAssetUi = {
|
|
|
5486
5494
|
}),
|
|
5487
5495
|
/**
|
|
5488
5496
|
* The view of the asset an offer sells: the offer supplies its name and the
|
|
5489
|
-
*
|
|
5497
|
+
* fallback artwork, the caller supplies the symbol and the chain.
|
|
5490
5498
|
*
|
|
5491
5499
|
* `symbol` is a parameter rather than `offer.asset.code` because the symbol a
|
|
5492
5500
|
* provider trades under is the provider's, not the catalogue's - Ondo's
|
|
@@ -5494,14 +5502,26 @@ var CheckoutAssetUi = {
|
|
|
5494
5502
|
* asset stands in. Keeping it out here is what lets one companion serve every
|
|
5495
5503
|
* provider instead of forking per provider.
|
|
5496
5504
|
*
|
|
5505
|
+
* The icon is resolved from the public token registry when `tokenMetadata`
|
|
5506
|
+
* carries a listed token — `useCheckoutOfferTokenMetadata` fetches it,
|
|
5507
|
+
* keyed by the token `OfferDetail.tokens` lists for this chain — and falls
|
|
5508
|
+
* back to the offer's own logo otherwise. `null` covers every way the
|
|
5509
|
+
* registry answer can be absent (unlisted, not settled, lookup failed);
|
|
5510
|
+
* which one it is stays the concern of the hook's state machine, not of
|
|
5511
|
+
* this model, because the icon is the same either way.
|
|
5512
|
+
*
|
|
5497
5513
|
* Deliberately no decimals. An offer names an asset; it does not answer for
|
|
5498
5514
|
* the scale of any particular quantity, and every amount a checkout renders
|
|
5499
5515
|
* arrives as a `BlockchainAmount` carrying its own.
|
|
5500
5516
|
*/
|
|
5501
|
-
fromOffer: (offer, {
|
|
5517
|
+
fromOffer: (offer, {
|
|
5518
|
+
symbol,
|
|
5519
|
+
networkName,
|
|
5520
|
+
tokenMetadata
|
|
5521
|
+
}) => ({
|
|
5502
5522
|
name: offer.name,
|
|
5503
5523
|
symbol,
|
|
5504
|
-
iconUrl:
|
|
5524
|
+
iconUrl: offerAssetIconUrl(offer, tokenMetadata),
|
|
5505
5525
|
network: { name: networkName, iconUrl: null }
|
|
5506
5526
|
})
|
|
5507
5527
|
};
|
|
@@ -5586,6 +5606,7 @@ function useOndoBuyAmountViewModel({
|
|
|
5586
5606
|
stepInput,
|
|
5587
5607
|
ondoSymbol,
|
|
5588
5608
|
chain,
|
|
5609
|
+
swapContracts,
|
|
5589
5610
|
enabled = true,
|
|
5590
5611
|
onComplete,
|
|
5591
5612
|
onEdit
|
|
@@ -5690,6 +5711,7 @@ function useOndoBuyAmountViewModel({
|
|
|
5690
5711
|
wallet: stepInput.wallet,
|
|
5691
5712
|
symbol: ondoSymbol,
|
|
5692
5713
|
chain,
|
|
5714
|
+
swapContracts,
|
|
5693
5715
|
// The input asset is USDC on every chain the SDK models (it is the
|
|
5694
5716
|
// only member of `ONDO_SUPPORTED_INPUT_ASSETS`), and its registry
|
|
5695
5717
|
// table is total, so the address is never null.
|
|
@@ -6020,6 +6042,7 @@ function useOndoBuyReviewViewModel({
|
|
|
6020
6042
|
ondoSymbol,
|
|
6021
6043
|
chain,
|
|
6022
6044
|
offer,
|
|
6045
|
+
outputTokenMetadata,
|
|
6023
6046
|
enabled = true,
|
|
6024
6047
|
onComplete
|
|
6025
6048
|
}) {
|
|
@@ -6072,7 +6095,8 @@ function useOndoBuyReviewViewModel({
|
|
|
6072
6095
|
type: "active",
|
|
6073
6096
|
outputAsset: CheckoutAssetUi.fromOffer(offer, {
|
|
6074
6097
|
symbol: ondoSymbol,
|
|
6075
|
-
networkName: getNetworkName(chain)
|
|
6098
|
+
networkName: getNetworkName(chain),
|
|
6099
|
+
tokenMetadata: outputTokenMetadata
|
|
6076
6100
|
}),
|
|
6077
6101
|
outputAmount: assetAmount(
|
|
6078
6102
|
formatAmount(built.receiveOutputAmount, locale),
|
|
@@ -6210,8 +6234,6 @@ function executionErrorMessage(error) {
|
|
|
6210
6234
|
switch (error.step) {
|
|
6211
6235
|
case "quote-expired":
|
|
6212
6236
|
return "That quote expired. Get a new one to place your order.";
|
|
6213
|
-
case "spender-mismatch":
|
|
6214
|
-
return "This quote does not match the approval you gave. Get a new one.";
|
|
6215
6237
|
case "swap":
|
|
6216
6238
|
switch (error.cause.type) {
|
|
6217
6239
|
case "user_rejected":
|
|
@@ -6405,6 +6427,7 @@ function useOndoSidebarViewModel({
|
|
|
6405
6427
|
offer,
|
|
6406
6428
|
ondoSymbol,
|
|
6407
6429
|
chain,
|
|
6430
|
+
tokenMetadata,
|
|
6408
6431
|
priceState,
|
|
6409
6432
|
tradingStatusState
|
|
6410
6433
|
}) {
|
|
@@ -6412,7 +6435,8 @@ function useOndoSidebarViewModel({
|
|
|
6412
6435
|
const state = {
|
|
6413
6436
|
asset: CheckoutAssetUi.fromOffer(offer, {
|
|
6414
6437
|
symbol: ondoSymbol,
|
|
6415
|
-
networkName: getNetworkName(chain)
|
|
6438
|
+
networkName: getNetworkName(chain),
|
|
6439
|
+
tokenMetadata
|
|
6416
6440
|
}),
|
|
6417
6441
|
// No frontline endpoint carries any of these today, and the detail list
|
|
6418
6442
|
// drops a null row rather than dashing it.
|
|
@@ -6602,6 +6626,99 @@ function toConfirmedWalletUi(wallets, wallet) {
|
|
|
6602
6626
|
};
|
|
6603
6627
|
}
|
|
6604
6628
|
|
|
6629
|
+
// src/client/hooks/shared/useTokenMetadata.ts
|
|
6630
|
+
import { useCallback as useCallback3, useEffect as useEffect10, useState as useState10 } from "react";
|
|
6631
|
+
var DISABLED_STATE = { type: "DISABLED" };
|
|
6632
|
+
var LOADING_STATE = { type: "LOADING" };
|
|
6633
|
+
function useTokenMetadata(options) {
|
|
6634
|
+
const { chain, address, data, enabled = true } = options;
|
|
6635
|
+
const { coinlist, isReady } = useCoinList();
|
|
6636
|
+
const log = useLogger("useTokenMetadata");
|
|
6637
|
+
const [state, setState] = useState10(
|
|
6638
|
+
() => data !== void 0 ? { type: "CONTENT", tokenMetadata: data } : LOADING_STATE
|
|
6639
|
+
);
|
|
6640
|
+
const [refetchCount, setRefetchCount] = useState10(0);
|
|
6641
|
+
const refetch = useCallback3(() => {
|
|
6642
|
+
setRefetchCount((count) => count + 1);
|
|
6643
|
+
}, []);
|
|
6644
|
+
useEffect10(() => {
|
|
6645
|
+
let isCancelled = false;
|
|
6646
|
+
const seedActive = data !== void 0 && refetchCount === 0;
|
|
6647
|
+
if (!isReady || !enabled || seedActive) {
|
|
6648
|
+
return () => {
|
|
6649
|
+
isCancelled = true;
|
|
6650
|
+
};
|
|
6651
|
+
}
|
|
6652
|
+
setState(LOADING_STATE);
|
|
6653
|
+
coinlist.tokens.get({ chain, address }).then((tokenMetadata) => {
|
|
6654
|
+
if (!isCancelled) {
|
|
6655
|
+
log.debug(() => ({
|
|
6656
|
+
msg: "settled",
|
|
6657
|
+
fields: {
|
|
6658
|
+
state: "CONTENT",
|
|
6659
|
+
listed: tokenMetadata !== null,
|
|
6660
|
+
symbol: tokenMetadata?.symbol ?? null
|
|
6661
|
+
}
|
|
6662
|
+
}));
|
|
6663
|
+
setState({ type: "CONTENT", tokenMetadata });
|
|
6664
|
+
}
|
|
6665
|
+
}).catch((error) => {
|
|
6666
|
+
if (!isCancelled) {
|
|
6667
|
+
log.failure(
|
|
6668
|
+
() => ({
|
|
6669
|
+
msg: "settled",
|
|
6670
|
+
fields: { state: "ERROR", reason: "generic-error" }
|
|
6671
|
+
}),
|
|
6672
|
+
error
|
|
6673
|
+
);
|
|
6674
|
+
setState({ type: "ERROR", reason: "generic-error" });
|
|
6675
|
+
}
|
|
6676
|
+
});
|
|
6677
|
+
return () => {
|
|
6678
|
+
isCancelled = true;
|
|
6679
|
+
};
|
|
6680
|
+
}, [coinlist, isReady, enabled, chain, address, data, refetchCount, log]);
|
|
6681
|
+
return {
|
|
6682
|
+
// LOADING would be a lie while disabled: nothing is in flight and nothing
|
|
6683
|
+
// will replace it. Settled states (a seed, a previous answer) survive.
|
|
6684
|
+
state: !enabled && state.type === "LOADING" ? DISABLED_STATE : state,
|
|
6685
|
+
refetch
|
|
6686
|
+
};
|
|
6687
|
+
}
|
|
6688
|
+
|
|
6689
|
+
// src/client/hooks/checkout/shared/data/useCheckoutOfferTokenMetadata.ts
|
|
6690
|
+
var NO_TOKEN_ADDRESS = EvmContractAddress(
|
|
6691
|
+
"0x0000000000000000000000000000000000000000"
|
|
6692
|
+
);
|
|
6693
|
+
function offerTokenIdentifier(offer, chain) {
|
|
6694
|
+
const byChain = offer.tokens.filter((token) => token.chain === chain);
|
|
6695
|
+
const asset = byChain.find((token) => token.role === "swap") ?? byChain.find((token) => token.role === "distribution");
|
|
6696
|
+
return asset === void 0 ? null : { chain, address: asset.address };
|
|
6697
|
+
}
|
|
6698
|
+
function tokenMetadataOf(state) {
|
|
6699
|
+
return state.type === "CONTENT" ? state.tokenMetadata : null;
|
|
6700
|
+
}
|
|
6701
|
+
function useCheckoutOfferTokenMetadata({
|
|
6702
|
+
offer,
|
|
6703
|
+
chain,
|
|
6704
|
+
data,
|
|
6705
|
+
enabled = true
|
|
6706
|
+
}) {
|
|
6707
|
+
const identifier = offerTokenIdentifier(offer, chain);
|
|
6708
|
+
const { state } = useTokenMetadata({
|
|
6709
|
+
// Primitive keys, not the identifier object: the underlying hook re-fetches
|
|
6710
|
+
// only when `(chain, address)` changes, so a host that rebuilds the offer
|
|
6711
|
+
// object per render does not refetch the registry per render.
|
|
6712
|
+
chain: identifier?.chain ?? chain,
|
|
6713
|
+
address: identifier?.address ?? NO_TOKEN_ADDRESS,
|
|
6714
|
+
// Nothing to look up when the offer lists no token here: seed "not
|
|
6715
|
+
// listed" and never fire a request against the placeholder address.
|
|
6716
|
+
enabled: enabled && identifier !== null,
|
|
6717
|
+
data: data !== void 0 ? data : identifier === null ? null : void 0
|
|
6718
|
+
});
|
|
6719
|
+
return { state };
|
|
6720
|
+
}
|
|
6721
|
+
|
|
6605
6722
|
// src/client/hooks/checkout/ondo/buy/useOndoBuyCheckoutViewModel.ts
|
|
6606
6723
|
function useOndoBuyCheckoutViewModel({
|
|
6607
6724
|
offer,
|
|
@@ -6612,9 +6729,10 @@ function useOndoBuyCheckoutViewModel({
|
|
|
6612
6729
|
onOrderConfirmed
|
|
6613
6730
|
}) {
|
|
6614
6731
|
const locale = useLocale();
|
|
6615
|
-
const [step, setStep] =
|
|
6616
|
-
const [orderConfirmed, setOrderConfirmed] =
|
|
6617
|
-
const
|
|
6732
|
+
const [step, setStep] = useState11({ type: "wallet" });
|
|
6733
|
+
const [orderConfirmed, setOrderConfirmed] = useState11(null);
|
|
6734
|
+
const swappableHere = swapSpender(offer.swapContracts, chain) !== null;
|
|
6735
|
+
const live = enabled && swappableHere;
|
|
6618
6736
|
const { state: priceState } = useOndoPrice({
|
|
6619
6737
|
symbol: ondoSymbol,
|
|
6620
6738
|
side: "buy",
|
|
@@ -6628,6 +6746,20 @@ function useOndoBuyCheckoutViewModel({
|
|
|
6628
6746
|
pollIntervalMs: ONDO_POLL_INTERVAL_MS,
|
|
6629
6747
|
enabled: live
|
|
6630
6748
|
});
|
|
6749
|
+
const { state: outputTokenMetadataState } = useCheckoutOfferTokenMetadata({
|
|
6750
|
+
offer,
|
|
6751
|
+
chain,
|
|
6752
|
+
enabled: live
|
|
6753
|
+
});
|
|
6754
|
+
const outputTokenMetadata = tokenMetadataOf(outputTokenMetadataState);
|
|
6755
|
+
const orderConfirmedUi = (order) => order === null ? { type: "hidden" } : toOrderConfirmedUi({
|
|
6756
|
+
order,
|
|
6757
|
+
chain,
|
|
6758
|
+
locale,
|
|
6759
|
+
offer,
|
|
6760
|
+
ondoSymbol,
|
|
6761
|
+
outputTokenMetadata
|
|
6762
|
+
});
|
|
6631
6763
|
const { state: walletState, onEvent: onWalletEvent } = useOndoWalletSelectViewModel({
|
|
6632
6764
|
stepInput: walletStepInput(step),
|
|
6633
6765
|
wallets,
|
|
@@ -6642,6 +6774,7 @@ function useOndoBuyCheckoutViewModel({
|
|
|
6642
6774
|
}),
|
|
6643
6775
|
ondoSymbol,
|
|
6644
6776
|
chain,
|
|
6777
|
+
swapContracts: offer.swapContracts,
|
|
6645
6778
|
enabled: live,
|
|
6646
6779
|
// Both transitions read the step through the updater rather than the one
|
|
6647
6780
|
// this render closed over. Preparing an amount takes an approval to mine,
|
|
@@ -6673,11 +6806,10 @@ function useOndoBuyCheckoutViewModel({
|
|
|
6673
6806
|
ondoSymbol,
|
|
6674
6807
|
chain,
|
|
6675
6808
|
offer,
|
|
6809
|
+
outputTokenMetadata,
|
|
6676
6810
|
enabled: live,
|
|
6677
6811
|
onComplete: (order) => {
|
|
6678
|
-
setOrderConfirmed(
|
|
6679
|
-
toOrderConfirmedUi({ order, chain, locale, offer, ondoSymbol })
|
|
6680
|
-
);
|
|
6812
|
+
setOrderConfirmed(order);
|
|
6681
6813
|
setStep({ type: "wallet" });
|
|
6682
6814
|
onOrderConfirmed?.(order);
|
|
6683
6815
|
}
|
|
@@ -6686,16 +6818,17 @@ function useOndoBuyCheckoutViewModel({
|
|
|
6686
6818
|
offer,
|
|
6687
6819
|
ondoSymbol,
|
|
6688
6820
|
chain,
|
|
6821
|
+
tokenMetadata: outputTokenMetadata,
|
|
6689
6822
|
priceState,
|
|
6690
6823
|
tradingStatusState
|
|
6691
6824
|
});
|
|
6692
|
-
const state =
|
|
6825
|
+
const state = !swappableHere ? { type: "error", reason: "unsupported-chain" } : {
|
|
6693
6826
|
type: "content",
|
|
6694
6827
|
wallet: walletState,
|
|
6695
6828
|
amount: amountState,
|
|
6696
6829
|
review: reviewState,
|
|
6697
6830
|
sidebar: sidebarState,
|
|
6698
|
-
orderConfirmed
|
|
6831
|
+
orderConfirmed: orderConfirmedUi(orderConfirmed)
|
|
6699
6832
|
};
|
|
6700
6833
|
const onEvent = (event) => {
|
|
6701
6834
|
switch (event.type) {
|
|
@@ -6719,7 +6852,7 @@ function useOndoBuyCheckoutViewModel({
|
|
|
6719
6852
|
onReviewEvent(event);
|
|
6720
6853
|
return;
|
|
6721
6854
|
case "ON_CLOSE_ORDER_CONFIRMED":
|
|
6722
|
-
setOrderConfirmed(
|
|
6855
|
+
setOrderConfirmed(null);
|
|
6723
6856
|
return;
|
|
6724
6857
|
default: {
|
|
6725
6858
|
const exhaustive = event;
|
|
@@ -6773,14 +6906,16 @@ function toOrderConfirmedUi({
|
|
|
6773
6906
|
chain,
|
|
6774
6907
|
locale,
|
|
6775
6908
|
offer,
|
|
6776
|
-
ondoSymbol
|
|
6909
|
+
ondoSymbol,
|
|
6910
|
+
outputTokenMetadata
|
|
6777
6911
|
}) {
|
|
6778
6912
|
const inputSymbol = TOKEN_REGISTRY.erc20(order.inputAsset).symbol;
|
|
6779
6913
|
return {
|
|
6780
6914
|
type: "visible",
|
|
6781
6915
|
outputAsset: CheckoutAssetUi.fromOffer(offer, {
|
|
6782
6916
|
symbol: ondoSymbol,
|
|
6783
|
-
networkName: getNetworkName(chain)
|
|
6917
|
+
networkName: getNetworkName(chain),
|
|
6918
|
+
tokenMetadata: outputTokenMetadata
|
|
6784
6919
|
}),
|
|
6785
6920
|
outputAmount: assetAmount(
|
|
6786
6921
|
formatAmount(order.transaction.receiveOutputAmount, locale),
|
|
@@ -6800,13 +6935,13 @@ function toOrderConfirmedUi({
|
|
|
6800
6935
|
}
|
|
6801
6936
|
|
|
6802
6937
|
// src/client/hooks/checkout/ondo/sell/useOndoSellCheckoutViewModel.ts
|
|
6803
|
-
import { useState as
|
|
6938
|
+
import { useState as useState16 } from "react";
|
|
6804
6939
|
|
|
6805
6940
|
// src/client/hooks/checkout/ondo/sell/amount/useOndoSellAmountViewModel.ts
|
|
6806
|
-
import { useEffect as
|
|
6941
|
+
import { useEffect as useEffect12, useRef as useRef9, useState as useState13 } from "react";
|
|
6807
6942
|
|
|
6808
6943
|
// src/client/hooks/shared/erc20/useErc20Balance.ts
|
|
6809
|
-
import { useEffect as
|
|
6944
|
+
import { useEffect as useEffect11, useRef as useRef8, useState as useState12 } from "react";
|
|
6810
6945
|
function useErc20Balance(options) {
|
|
6811
6946
|
const {
|
|
6812
6947
|
tokenAddress,
|
|
@@ -6817,12 +6952,12 @@ function useErc20Balance(options) {
|
|
|
6817
6952
|
} = options;
|
|
6818
6953
|
const { coinlist, isReady } = useCoinList();
|
|
6819
6954
|
const log = useLogger("useErc20Balance");
|
|
6820
|
-
const [balance, setBalance] =
|
|
6821
|
-
const [isLoading, setIsLoading] =
|
|
6955
|
+
const [balance, setBalance] = useState12(null);
|
|
6956
|
+
const [isLoading, setIsLoading] = useState12(true);
|
|
6822
6957
|
const fetchIdRef = useRef8(0);
|
|
6823
6958
|
const isFetchingRef = useRef8(false);
|
|
6824
6959
|
const hasReadRef = useRef8(false);
|
|
6825
|
-
|
|
6960
|
+
useEffect11(() => {
|
|
6826
6961
|
if (!isReady) return;
|
|
6827
6962
|
setBalance(null);
|
|
6828
6963
|
hasReadRef.current = false;
|
|
@@ -6899,15 +7034,16 @@ function useOndoSellAmountViewModel({
|
|
|
6899
7034
|
ondoSymbol,
|
|
6900
7035
|
chain,
|
|
6901
7036
|
offer,
|
|
7037
|
+
inputTokenMetadata,
|
|
6902
7038
|
enabled = true,
|
|
6903
7039
|
onComplete,
|
|
6904
7040
|
onEdit
|
|
6905
7041
|
}) {
|
|
6906
7042
|
const { coinlist } = useCoinList();
|
|
6907
7043
|
const locale = useLocale();
|
|
6908
|
-
const [amountInput, setAmountInput] =
|
|
6909
|
-
const [error, setError] =
|
|
6910
|
-
const [phase, setPhase] =
|
|
7044
|
+
const [amountInput, setAmountInput] = useState13("");
|
|
7045
|
+
const [error, setError] = useState13(null);
|
|
7046
|
+
const [phase, setPhase] = useState13(null);
|
|
6911
7047
|
const preparationIdRef = useRef9(0);
|
|
6912
7048
|
const isActive = stepInput.type === "active";
|
|
6913
7049
|
const networkName = getNetworkName(chain);
|
|
@@ -6919,7 +7055,7 @@ function useOndoSellAmountViewModel({
|
|
|
6919
7055
|
chain,
|
|
6920
7056
|
enabled: enabled && isActive && sellAsset2 !== null
|
|
6921
7057
|
});
|
|
6922
|
-
|
|
7058
|
+
useEffect12(() => {
|
|
6923
7059
|
if (stepInput.type === "incomplete") {
|
|
6924
7060
|
++preparationIdRef.current;
|
|
6925
7061
|
setAmountInput("");
|
|
@@ -6945,7 +7081,8 @@ function useOndoSellAmountViewModel({
|
|
|
6945
7081
|
type: "complete",
|
|
6946
7082
|
asset: CheckoutAssetUi.fromOffer(offer, {
|
|
6947
7083
|
symbol: stepInput.inputAsset,
|
|
6948
|
-
networkName
|
|
7084
|
+
networkName,
|
|
7085
|
+
tokenMetadata: inputTokenMetadata
|
|
6949
7086
|
}),
|
|
6950
7087
|
amountFormatted: assetAmount(
|
|
6951
7088
|
formatAmount(stepInput.amount, locale),
|
|
@@ -6967,7 +7104,8 @@ function useOndoSellAmountViewModel({
|
|
|
6967
7104
|
return {
|
|
6968
7105
|
asset: CheckoutAssetUi.fromOffer(offer, {
|
|
6969
7106
|
symbol: ondoSymbol,
|
|
6970
|
-
networkName
|
|
7107
|
+
networkName,
|
|
7108
|
+
tokenMetadata: inputTokenMetadata
|
|
6971
7109
|
}),
|
|
6972
7110
|
balance: assetAmount(formatAmount(amount, locale), ondoSymbol),
|
|
6973
7111
|
rawBalance: balance
|
|
@@ -7003,6 +7141,7 @@ function useOndoSellAmountViewModel({
|
|
|
7003
7141
|
wallet: stepInput.wallet,
|
|
7004
7142
|
symbol: ondoSymbol,
|
|
7005
7143
|
chain,
|
|
7144
|
+
swapContracts: offer.swapContracts,
|
|
7006
7145
|
// The asset, not a stablecoin: a sell spends what it is selling, so this
|
|
7007
7146
|
// is the contract the swap contract has to be allowed to pull from.
|
|
7008
7147
|
tokenAddress: asset.address,
|
|
@@ -7153,15 +7292,15 @@ function preparationErrorMessage2(error) {
|
|
|
7153
7292
|
}
|
|
7154
7293
|
|
|
7155
7294
|
// src/client/hooks/checkout/ondo/sell/review/useOndoSellReviewViewModel.ts
|
|
7156
|
-
import { useEffect as
|
|
7295
|
+
import { useEffect as useEffect14, useRef as useRef11, useState as useState15 } from "react";
|
|
7157
7296
|
|
|
7158
7297
|
// src/client/hooks/checkout/ondo/sell/data/useOndoSellTransaction.ts
|
|
7159
|
-
import { useCallback as
|
|
7298
|
+
import { useCallback as useCallback4, useEffect as useEffect13, useRef as useRef10, useState as useState14 } from "react";
|
|
7160
7299
|
function useOndoSellTransaction(options) {
|
|
7161
7300
|
const { request, data, enabled } = options;
|
|
7162
7301
|
const { coinlist, isReady } = useCoinList();
|
|
7163
7302
|
const log = useLogger("useOndoSellTransaction");
|
|
7164
|
-
const [state, setState] =
|
|
7303
|
+
const [state, setState] = useState14(
|
|
7165
7304
|
() => data === void 0 ? { type: "LOADING" } : {
|
|
7166
7305
|
type: "CONTENT",
|
|
7167
7306
|
transaction: data,
|
|
@@ -7174,7 +7313,7 @@ function useOndoSellTransaction(options) {
|
|
|
7174
7313
|
const requestKey = request === null ? null : stableKey2(request);
|
|
7175
7314
|
const requestRef = useRef10(request);
|
|
7176
7315
|
requestRef.current = request;
|
|
7177
|
-
const build =
|
|
7316
|
+
const build = useCallback4(async () => {
|
|
7178
7317
|
const params = requestRef.current;
|
|
7179
7318
|
if (!isReady || !enabled || params === null) return;
|
|
7180
7319
|
if (isFetchingRef.current) return;
|
|
@@ -7210,7 +7349,7 @@ function useOndoSellTransaction(options) {
|
|
|
7210
7349
|
isFetchingRef.current = false;
|
|
7211
7350
|
}
|
|
7212
7351
|
}, [coinlist, isReady, enabled, log]);
|
|
7213
|
-
|
|
7352
|
+
useEffect13(() => {
|
|
7214
7353
|
if (data === void 0) return;
|
|
7215
7354
|
++fetchIdRef.current;
|
|
7216
7355
|
setState({
|
|
@@ -7221,14 +7360,14 @@ function useOndoSellTransaction(options) {
|
|
|
7221
7360
|
});
|
|
7222
7361
|
}, [data]);
|
|
7223
7362
|
const hasSeed = data !== void 0;
|
|
7224
|
-
|
|
7363
|
+
useEffect13(() => {
|
|
7225
7364
|
if (hasSeed || requestKey === null) return;
|
|
7226
7365
|
build();
|
|
7227
7366
|
return () => {
|
|
7228
7367
|
++fetchIdRef.current;
|
|
7229
7368
|
};
|
|
7230
7369
|
}, [build, requestKey, hasSeed]);
|
|
7231
|
-
const refetch =
|
|
7370
|
+
const refetch = useCallback4(() => {
|
|
7232
7371
|
build();
|
|
7233
7372
|
}, [build]);
|
|
7234
7373
|
return { state, refetch };
|
|
@@ -7253,8 +7392,8 @@ function useOndoSellReviewViewModel({
|
|
|
7253
7392
|
}) {
|
|
7254
7393
|
const { coinlist } = useCoinList();
|
|
7255
7394
|
const locale = useLocale();
|
|
7256
|
-
const [phase, setPhase] =
|
|
7257
|
-
const [error, setError] =
|
|
7395
|
+
const [phase, setPhase] = useState15(null);
|
|
7396
|
+
const [error, setError] = useState15(null);
|
|
7258
7397
|
const isActive = stepInput.type === "active";
|
|
7259
7398
|
const { state: transactionState, refetch } = useOndoSellTransaction({
|
|
7260
7399
|
request: isActive ? {
|
|
@@ -7267,7 +7406,7 @@ function useOndoSellReviewViewModel({
|
|
|
7267
7406
|
enabled: enabled && isActive
|
|
7268
7407
|
});
|
|
7269
7408
|
const executionIdRef = useRef11(0);
|
|
7270
|
-
|
|
7409
|
+
useEffect14(() => {
|
|
7271
7410
|
if (stepInput.type === "incomplete") {
|
|
7272
7411
|
++executionIdRef.current;
|
|
7273
7412
|
setError(null);
|
|
@@ -7444,8 +7583,6 @@ function executionErrorMessage2(error) {
|
|
|
7444
7583
|
switch (error.step) {
|
|
7445
7584
|
case "quote-expired":
|
|
7446
7585
|
return "That quote expired. Get a new one to place your order.";
|
|
7447
|
-
case "spender-mismatch":
|
|
7448
|
-
return "This quote does not match the approval you gave. Get a new one.";
|
|
7449
7586
|
case "swap":
|
|
7450
7587
|
switch (error.cause.type) {
|
|
7451
7588
|
case "user_rejected":
|
|
@@ -7479,13 +7616,14 @@ function useOndoSellCheckoutViewModel({
|
|
|
7479
7616
|
onOrderConfirmed
|
|
7480
7617
|
}) {
|
|
7481
7618
|
const locale = useLocale();
|
|
7482
|
-
const [initialStep] =
|
|
7619
|
+
const [initialStep] = useState16(
|
|
7483
7620
|
() => wallets.preselected === null ? { type: "wallet" } : { type: "amount", wallet: wallets.preselected }
|
|
7484
7621
|
);
|
|
7485
|
-
const [step, setStep] =
|
|
7622
|
+
const [step, setStep] = useState16(initialStep);
|
|
7486
7623
|
const hasWalletStep = initialStep.type === "wallet";
|
|
7487
|
-
const [orderConfirmed, setOrderConfirmed] =
|
|
7488
|
-
const
|
|
7624
|
+
const [orderConfirmed, setOrderConfirmed] = useState16(null);
|
|
7625
|
+
const swappableHere = swapSpender(offer.swapContracts, chain) !== null;
|
|
7626
|
+
const live = enabled && swappableHere;
|
|
7489
7627
|
const { state: priceState } = useOndoPrice({
|
|
7490
7628
|
symbol: ondoSymbol,
|
|
7491
7629
|
side: "sell",
|
|
@@ -7499,6 +7637,20 @@ function useOndoSellCheckoutViewModel({
|
|
|
7499
7637
|
pollIntervalMs: ONDO_POLL_INTERVAL_MS,
|
|
7500
7638
|
enabled: live
|
|
7501
7639
|
});
|
|
7640
|
+
const { state: inputTokenMetadataState } = useCheckoutOfferTokenMetadata({
|
|
7641
|
+
offer,
|
|
7642
|
+
chain,
|
|
7643
|
+
enabled: live
|
|
7644
|
+
});
|
|
7645
|
+
const inputTokenMetadata = tokenMetadataOf(inputTokenMetadataState);
|
|
7646
|
+
const orderConfirmedUi = (order) => order === null ? { type: "hidden" } : toOrderConfirmedUi2({
|
|
7647
|
+
order,
|
|
7648
|
+
chain,
|
|
7649
|
+
locale,
|
|
7650
|
+
offer,
|
|
7651
|
+
ondoSymbol,
|
|
7652
|
+
inputTokenMetadata
|
|
7653
|
+
});
|
|
7502
7654
|
const { state: walletState, onEvent: onWalletEvent } = useOndoWalletSelectViewModel({
|
|
7503
7655
|
stepInput: walletStepInput2(step),
|
|
7504
7656
|
wallets,
|
|
@@ -7515,6 +7667,7 @@ function useOndoSellCheckoutViewModel({
|
|
|
7515
7667
|
ondoSymbol,
|
|
7516
7668
|
chain,
|
|
7517
7669
|
offer,
|
|
7670
|
+
inputTokenMetadata,
|
|
7518
7671
|
enabled: live,
|
|
7519
7672
|
// Both transitions read the step through the updater rather than the one
|
|
7520
7673
|
// this render closed over. Preparing an amount takes an approval to mine,
|
|
@@ -7547,9 +7700,7 @@ function useOndoSellCheckoutViewModel({
|
|
|
7547
7700
|
chain,
|
|
7548
7701
|
enabled: live,
|
|
7549
7702
|
onComplete: (order) => {
|
|
7550
|
-
setOrderConfirmed(
|
|
7551
|
-
toOrderConfirmedUi2({ order, chain, locale, offer, ondoSymbol })
|
|
7552
|
-
);
|
|
7703
|
+
setOrderConfirmed(order);
|
|
7553
7704
|
setStep(initialStep);
|
|
7554
7705
|
onOrderConfirmed?.(order);
|
|
7555
7706
|
}
|
|
@@ -7558,16 +7709,17 @@ function useOndoSellCheckoutViewModel({
|
|
|
7558
7709
|
offer,
|
|
7559
7710
|
ondoSymbol,
|
|
7560
7711
|
chain,
|
|
7712
|
+
tokenMetadata: inputTokenMetadata,
|
|
7561
7713
|
priceState,
|
|
7562
7714
|
tradingStatusState
|
|
7563
7715
|
});
|
|
7564
|
-
const state =
|
|
7716
|
+
const state = !swappableHere ? { type: "error", reason: "unsupported-chain" } : {
|
|
7565
7717
|
type: "content",
|
|
7566
7718
|
wallet: hasWalletStep ? walletState : null,
|
|
7567
7719
|
amount: amountState,
|
|
7568
7720
|
review: reviewState,
|
|
7569
7721
|
sidebar: sidebarState,
|
|
7570
|
-
orderConfirmed
|
|
7722
|
+
orderConfirmed: orderConfirmedUi(orderConfirmed)
|
|
7571
7723
|
};
|
|
7572
7724
|
const onEvent = (event) => {
|
|
7573
7725
|
switch (event.type) {
|
|
@@ -7591,7 +7743,7 @@ function useOndoSellCheckoutViewModel({
|
|
|
7591
7743
|
onReviewEvent(event);
|
|
7592
7744
|
return;
|
|
7593
7745
|
case "ON_CLOSE_SELL_ORDER_CONFIRMED":
|
|
7594
|
-
setOrderConfirmed(
|
|
7746
|
+
setOrderConfirmed(null);
|
|
7595
7747
|
return;
|
|
7596
7748
|
default: {
|
|
7597
7749
|
const exhaustive = event;
|
|
@@ -7659,14 +7811,16 @@ function toOrderConfirmedUi2({
|
|
|
7659
7811
|
chain,
|
|
7660
7812
|
locale,
|
|
7661
7813
|
offer,
|
|
7662
|
-
ondoSymbol
|
|
7814
|
+
ondoSymbol,
|
|
7815
|
+
inputTokenMetadata
|
|
7663
7816
|
}) {
|
|
7664
7817
|
const settlementSymbol = TOKEN_REGISTRY.erc20(ONDO_SETTLEMENT_ASSET).symbol;
|
|
7665
7818
|
return {
|
|
7666
7819
|
type: "visible",
|
|
7667
7820
|
soldAsset: CheckoutAssetUi.fromOffer(offer, {
|
|
7668
7821
|
symbol: ondoSymbol,
|
|
7669
|
-
networkName: getNetworkName(chain)
|
|
7822
|
+
networkName: getNetworkName(chain),
|
|
7823
|
+
tokenMetadata: inputTokenMetadata
|
|
7670
7824
|
}),
|
|
7671
7825
|
soldAmount: assetAmount(
|
|
7672
7826
|
formatAmount(order.transaction.spendInputAmount, locale),
|
|
@@ -7690,10 +7844,10 @@ function toOrderConfirmedUi2({
|
|
|
7690
7844
|
}
|
|
7691
7845
|
|
|
7692
7846
|
// src/client/hooks/checkout/superstate/swap/useSuperstateSwapCheckoutViewModel.ts
|
|
7693
|
-
import { useState as
|
|
7847
|
+
import { useState as useState22 } from "react";
|
|
7694
7848
|
|
|
7695
7849
|
// src/client/hooks/checkout/superstate/swap/amount/useSuperstateAmountViewModel.ts
|
|
7696
|
-
import { useEffect as
|
|
7850
|
+
import { useEffect as useEffect15, useState as useState17 } from "react";
|
|
7697
7851
|
var NO_WALLET3 = EvmWalletAddress(
|
|
7698
7852
|
"0x0000000000000000000000000000000000000000"
|
|
7699
7853
|
);
|
|
@@ -7707,11 +7861,11 @@ function useSuperstateAmountViewModel({
|
|
|
7707
7861
|
enabled = true
|
|
7708
7862
|
}) {
|
|
7709
7863
|
const locale = useLocale();
|
|
7710
|
-
const [amountInput, setAmountInput] =
|
|
7711
|
-
const [selectedAsset, setSelectedAsset] =
|
|
7864
|
+
const [amountInput, setAmountInput] = useState17("");
|
|
7865
|
+
const [selectedAsset, setSelectedAsset] = useState17(
|
|
7712
7866
|
SUPERSTATE_SUPPORTED_INPUT_ASSETS[0]
|
|
7713
7867
|
);
|
|
7714
|
-
const [error, setError] =
|
|
7868
|
+
const [error, setError] = useState17(null);
|
|
7715
7869
|
const isActive = stepInput.type === "active";
|
|
7716
7870
|
const networkName = getNetworkName(chain);
|
|
7717
7871
|
const { balances, isLoading: balancesLoading } = useErc20TokenBalances({
|
|
@@ -7724,7 +7878,7 @@ function useSuperstateAmountViewModel({
|
|
|
7724
7878
|
// on this step satisfies the first and not the second.
|
|
7725
7879
|
enabled: enabled && isActive
|
|
7726
7880
|
});
|
|
7727
|
-
|
|
7881
|
+
useEffect15(() => {
|
|
7728
7882
|
if (stepInput.type === "incomplete") {
|
|
7729
7883
|
setAmountInput("");
|
|
7730
7884
|
setSelectedAsset(SUPERSTATE_SUPPORTED_INPUT_ASSETS[0]);
|
|
@@ -7895,20 +8049,20 @@ function toInputAssetUi2({
|
|
|
7895
8049
|
}
|
|
7896
8050
|
|
|
7897
8051
|
// src/client/hooks/checkout/superstate/swap/data/useSwapOutputToken.ts
|
|
7898
|
-
import { useCallback as
|
|
7899
|
-
var
|
|
8052
|
+
import { useCallback as useCallback5, useEffect as useEffect16, useRef as useRef12, useState as useState18 } from "react";
|
|
8053
|
+
var LOADING_STATE2 = { type: "LOADING" };
|
|
7900
8054
|
function useSwapOutputToken(options) {
|
|
7901
8055
|
const { contractAddress, chain, enabled } = options;
|
|
7902
8056
|
const { coinlist, isReady } = useCoinList();
|
|
7903
8057
|
const log = useLogger("useSwapOutputToken");
|
|
7904
|
-
const [outputTokenState, setOutputTokenState] =
|
|
7905
|
-
const [retryCount, setRetryCount] =
|
|
8058
|
+
const [outputTokenState, setOutputTokenState] = useState18(LOADING_STATE2);
|
|
8059
|
+
const [retryCount, setRetryCount] = useState18(0);
|
|
7906
8060
|
const fetchIdRef = useRef12(0);
|
|
7907
|
-
const refetch =
|
|
7908
|
-
setOutputTokenState(
|
|
8061
|
+
const refetch = useCallback5(() => {
|
|
8062
|
+
setOutputTokenState(LOADING_STATE2);
|
|
7909
8063
|
setRetryCount((count) => count + 1);
|
|
7910
8064
|
}, []);
|
|
7911
|
-
|
|
8065
|
+
useEffect16(() => {
|
|
7912
8066
|
if (!enabled || !isReady) return;
|
|
7913
8067
|
const currentFetchId = ++fetchIdRef.current;
|
|
7914
8068
|
const load = async () => {
|
|
@@ -7941,7 +8095,7 @@ function useSwapOutputToken(options) {
|
|
|
7941
8095
|
}
|
|
7942
8096
|
|
|
7943
8097
|
// src/client/hooks/checkout/superstate/swap/data/useSwapQuote.ts
|
|
7944
|
-
import { useEffect as
|
|
8098
|
+
import { useEffect as useEffect17, useRef as useRef13, useState as useState19 } from "react";
|
|
7945
8099
|
function useSwapQuote(options) {
|
|
7946
8100
|
const {
|
|
7947
8101
|
contractAddress,
|
|
@@ -7954,13 +8108,13 @@ function useSwapQuote(options) {
|
|
|
7954
8108
|
} = options;
|
|
7955
8109
|
const { coinlist, isReady } = useCoinList();
|
|
7956
8110
|
const log = useLogger("useSwapQuote");
|
|
7957
|
-
const [quote, setQuote] =
|
|
7958
|
-
const [isLoading, setIsLoading] =
|
|
7959
|
-
const [isRefreshing, setIsRefreshing] =
|
|
8111
|
+
const [quote, setQuote] = useState19(null);
|
|
8112
|
+
const [isLoading, setIsLoading] = useState19(true);
|
|
8113
|
+
const [isRefreshing, setIsRefreshing] = useState19(false);
|
|
7960
8114
|
const isFetchingRef = useRef13(false);
|
|
7961
8115
|
const hasQuoteRef = useRef13(false);
|
|
7962
8116
|
const fetchIdRef = useRef13(0);
|
|
7963
|
-
|
|
8117
|
+
useEffect17(() => {
|
|
7964
8118
|
if (!isReady) return;
|
|
7965
8119
|
if (!enabled) {
|
|
7966
8120
|
setIsLoading(false);
|
|
@@ -8030,7 +8184,7 @@ function useSwapQuote(options) {
|
|
|
8030
8184
|
}
|
|
8031
8185
|
|
|
8032
8186
|
// src/client/hooks/checkout/superstate/swap/review/useSuperstateReviewViewModel.ts
|
|
8033
|
-
import { useEffect as
|
|
8187
|
+
import { useEffect as useEffect18, useState as useState20 } from "react";
|
|
8034
8188
|
function useSuperstateReviewViewModel({
|
|
8035
8189
|
stepInput,
|
|
8036
8190
|
contractAddress,
|
|
@@ -8040,11 +8194,11 @@ function useSuperstateReviewViewModel({
|
|
|
8040
8194
|
}) {
|
|
8041
8195
|
const { coinlist, isReady } = useCoinList();
|
|
8042
8196
|
const locale = useLocale();
|
|
8043
|
-
const [slippageBps, setSlippageBps] =
|
|
8044
|
-
const [slippageExpanded, setSlippageExpanded] =
|
|
8045
|
-
const [phase, setPhase] =
|
|
8046
|
-
const [error, setError] =
|
|
8047
|
-
|
|
8197
|
+
const [slippageBps, setSlippageBps] = useState20(DEFAULT_SLIPPAGE_BPS);
|
|
8198
|
+
const [slippageExpanded, setSlippageExpanded] = useState20(false);
|
|
8199
|
+
const [phase, setPhase] = useState20(null);
|
|
8200
|
+
const [error, setError] = useState20(null);
|
|
8201
|
+
useEffect18(() => {
|
|
8048
8202
|
if (stepInput.type === "incomplete") {
|
|
8049
8203
|
setSlippageBps(DEFAULT_SLIPPAGE_BPS);
|
|
8050
8204
|
setSlippageExpanded(false);
|
|
@@ -8373,7 +8527,7 @@ function priceUi(quote, outputToken, locale) {
|
|
|
8373
8527
|
}
|
|
8374
8528
|
|
|
8375
8529
|
// src/client/hooks/checkout/superstate/swap/wallet/useSuperstateWalletViewModel.ts
|
|
8376
|
-
import { useEffect as
|
|
8530
|
+
import { useEffect as useEffect19, useState as useState21 } from "react";
|
|
8377
8531
|
var CONNECT_FAILED2 = "Could not connect that wallet. Please try again.";
|
|
8378
8532
|
function useSuperstateWalletViewModel({
|
|
8379
8533
|
stepInput,
|
|
@@ -8386,12 +8540,12 @@ function useSuperstateWalletViewModel({
|
|
|
8386
8540
|
}) {
|
|
8387
8541
|
const { coinlist, isReady } = useCoinList();
|
|
8388
8542
|
const log = useLogger("useSuperstateWalletViewModel");
|
|
8389
|
-
const [selected, setSelected] =
|
|
8390
|
-
const [phase, setPhase] =
|
|
8391
|
-
const [error, setError] =
|
|
8543
|
+
const [selected, setSelected] = useState21(null);
|
|
8544
|
+
const [phase, setPhase] = useState21(null);
|
|
8545
|
+
const [error, setError] = useState21(null);
|
|
8392
8546
|
const networkName = getNetworkName(chain);
|
|
8393
8547
|
const selectedWallet = resolveWallet2(wallets, selected);
|
|
8394
|
-
|
|
8548
|
+
useEffect19(() => {
|
|
8395
8549
|
if (stepInput.type === "completed") {
|
|
8396
8550
|
setPhase(null);
|
|
8397
8551
|
setError(null);
|
|
@@ -8610,12 +8764,20 @@ function useSuperstateSwapCheckoutViewModel({
|
|
|
8610
8764
|
}) {
|
|
8611
8765
|
const locale = useLocale();
|
|
8612
8766
|
const contractAddress = superstateSwapContractAddress(chain);
|
|
8613
|
-
const
|
|
8614
|
-
const [
|
|
8615
|
-
const [orderConfirmed, setOrderConfirmed] = useState21({ type: "hidden" });
|
|
8767
|
+
const [step, setStep] = useState22({ type: "wallet" });
|
|
8768
|
+
const [orderConfirmed, setOrderConfirmed] = useState22(null);
|
|
8616
8769
|
const { inputAmount, inputTokenAddress } = quoteInput(step, chain);
|
|
8617
8770
|
const live = enabled && contractAddress !== null;
|
|
8618
8771
|
const contract = contractAddress ?? NO_CONTRACT;
|
|
8772
|
+
const { state: offerTokenMetadataState } = useCheckoutOfferTokenMetadata({
|
|
8773
|
+
offer,
|
|
8774
|
+
chain,
|
|
8775
|
+
enabled: live
|
|
8776
|
+
});
|
|
8777
|
+
const assetIconUrl = offerAssetIconUrl(
|
|
8778
|
+
offer,
|
|
8779
|
+
tokenMetadataOf(offerTokenMetadataState)
|
|
8780
|
+
);
|
|
8619
8781
|
const { outputTokenState, refetch: refetchOutputToken } = useSwapOutputToken({
|
|
8620
8782
|
contractAddress: contract,
|
|
8621
8783
|
chain,
|
|
@@ -8672,9 +8834,7 @@ function useSuperstateSwapCheckoutViewModel({
|
|
|
8672
8834
|
chain,
|
|
8673
8835
|
assetIconUrl,
|
|
8674
8836
|
onComplete: (order) => {
|
|
8675
|
-
setOrderConfirmed(
|
|
8676
|
-
toOrderConfirmedUi3({ order, chain, locale, assetIconUrl })
|
|
8677
|
-
);
|
|
8837
|
+
setOrderConfirmed(order);
|
|
8678
8838
|
setStep({ type: "wallet" });
|
|
8679
8839
|
onOrderConfirmed?.(order);
|
|
8680
8840
|
}
|
|
@@ -8700,7 +8860,15 @@ function useSuperstateSwapCheckoutViewModel({
|
|
|
8700
8860
|
amount: amountState,
|
|
8701
8861
|
review: reviewState,
|
|
8702
8862
|
sidebar: sidebarState,
|
|
8703
|
-
|
|
8863
|
+
// Derived here rather than in the review completion callback, so a
|
|
8864
|
+
// registry lookup that settles while the order is being placed still
|
|
8865
|
+
// reaches the dialog instead of the fallback icon that closure captured.
|
|
8866
|
+
orderConfirmed: orderConfirmed === null ? { type: "hidden" } : toOrderConfirmedUi3({
|
|
8867
|
+
order: orderConfirmed,
|
|
8868
|
+
chain,
|
|
8869
|
+
locale,
|
|
8870
|
+
assetIconUrl
|
|
8871
|
+
})
|
|
8704
8872
|
};
|
|
8705
8873
|
};
|
|
8706
8874
|
const onEvent = (event) => {
|
|
@@ -8725,7 +8893,7 @@ function useSuperstateSwapCheckoutViewModel({
|
|
|
8725
8893
|
onReviewEvent(event);
|
|
8726
8894
|
return;
|
|
8727
8895
|
case "ON_CLOSE_ORDER_CONFIRMED":
|
|
8728
|
-
setOrderConfirmed(
|
|
8896
|
+
setOrderConfirmed(null);
|
|
8729
8897
|
return;
|
|
8730
8898
|
case "ON_RETRY_LOAD":
|
|
8731
8899
|
refetchOutputToken();
|
|
@@ -8840,7 +9008,7 @@ function CheckoutContainer({
|
|
|
8840
9008
|
enabled = true,
|
|
8841
9009
|
className
|
|
8842
9010
|
}) {
|
|
8843
|
-
const [side] =
|
|
9011
|
+
const [side] = useState23(() => config["ondo::swap"].side());
|
|
8844
9012
|
const isOndo = offer.type === "ondo::swap";
|
|
8845
9013
|
const ondoSymbol = config["ondo::swap"].symbol(offer);
|
|
8846
9014
|
const ondoBuy = useOndoBuyCheckoutViewModel({
|
|
@@ -9413,23 +9581,23 @@ function EmptyState() {
|
|
|
9413
9581
|
}
|
|
9414
9582
|
|
|
9415
9583
|
// src/client/hooks/offers/grid/useOffersGridViewModel.ts
|
|
9416
|
-
import { useCallback as
|
|
9584
|
+
import { useCallback as useCallback6, useMemo as useMemo4 } from "react";
|
|
9417
9585
|
|
|
9418
9586
|
// src/client/hooks/offers/data/useOffers.ts
|
|
9419
|
-
import { useEffect as
|
|
9420
|
-
var
|
|
9587
|
+
import { useEffect as useEffect20, useState as useState24 } from "react";
|
|
9588
|
+
var LOADING_STATE3 = { type: "LOADING" };
|
|
9421
9589
|
function useOffers(options = {}) {
|
|
9422
9590
|
const { coinlist, isReady } = useCoinList();
|
|
9423
9591
|
const log = useLogger("useOffers");
|
|
9424
9592
|
const { data: serverOffers } = options;
|
|
9425
|
-
const [offersState, setOffersState] =
|
|
9426
|
-
serverOffers !== void 0 ? { type: "CONTENT", offers: serverOffers } :
|
|
9593
|
+
const [offersState, setOffersState] = useState24(
|
|
9594
|
+
serverOffers !== void 0 ? { type: "CONTENT", offers: serverOffers } : LOADING_STATE3
|
|
9427
9595
|
);
|
|
9428
|
-
|
|
9596
|
+
useEffect20(() => {
|
|
9429
9597
|
let isCancelled = false;
|
|
9430
9598
|
if (!isReady) {
|
|
9431
9599
|
if (serverOffers === void 0) {
|
|
9432
|
-
setOffersState(
|
|
9600
|
+
setOffersState(LOADING_STATE3);
|
|
9433
9601
|
}
|
|
9434
9602
|
return () => {
|
|
9435
9603
|
isCancelled = true;
|
|
@@ -9440,7 +9608,7 @@ function useOffers(options = {}) {
|
|
|
9440
9608
|
isCancelled = true;
|
|
9441
9609
|
};
|
|
9442
9610
|
}
|
|
9443
|
-
setOffersState(
|
|
9611
|
+
setOffersState(LOADING_STATE3);
|
|
9444
9612
|
coinlist.offers.list().then((offers) => {
|
|
9445
9613
|
if (!isCancelled) {
|
|
9446
9614
|
log.debug(() => ({
|
|
@@ -9495,7 +9663,7 @@ function useOffersGridViewModel(options = {}) {
|
|
|
9495
9663
|
() => toUiState(offersState, onOfferClick !== void 0),
|
|
9496
9664
|
[offersState, onOfferClick]
|
|
9497
9665
|
);
|
|
9498
|
-
const onEvent =
|
|
9666
|
+
const onEvent = useCallback6(
|
|
9499
9667
|
(event) => {
|
|
9500
9668
|
switch (event.type) {
|
|
9501
9669
|
case "ON_OFFER_CLICK": {
|
|
@@ -9555,14 +9723,14 @@ function OffersGridContainer({
|
|
|
9555
9723
|
return /* @__PURE__ */ jsx55(OffersGridView, { state, onEvent, ...viewProps });
|
|
9556
9724
|
}
|
|
9557
9725
|
|
|
9558
|
-
// src/client/components/requirements/
|
|
9559
|
-
import { useState as
|
|
9726
|
+
// src/client/components/requirements/ConnectedWalletList.tsx
|
|
9727
|
+
import { useState as useState25 } from "react";
|
|
9560
9728
|
import { jsx as jsx56, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
9561
9729
|
function ConnectedWalletRow({
|
|
9562
9730
|
wallet,
|
|
9563
9731
|
onRemove
|
|
9564
9732
|
}) {
|
|
9565
|
-
const [state, setState] =
|
|
9733
|
+
const [state, setState] = useState25("idle");
|
|
9566
9734
|
const remove = async () => {
|
|
9567
9735
|
if (!onRemove) return;
|
|
9568
9736
|
setState("removing");
|
|
@@ -9671,91 +9839,307 @@ function ConnectedWalletListBody({
|
|
|
9671
9839
|
);
|
|
9672
9840
|
}
|
|
9673
9841
|
|
|
9674
|
-
// src/client/components/requirements/
|
|
9675
|
-
import
|
|
9676
|
-
|
|
9677
|
-
|
|
9678
|
-
|
|
9679
|
-
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
9680
|
-
var statusConfig = {
|
|
9681
|
-
required: {
|
|
9682
|
-
Icon: Info5,
|
|
9683
|
-
colorClass: "clcosdk:text-warning",
|
|
9684
|
-
fillClass: "clcosdk:[&_circle]:fill-warning-subtle"
|
|
9685
|
-
},
|
|
9686
|
-
pending: {
|
|
9687
|
-
Icon: Info5,
|
|
9688
|
-
colorClass: "clcosdk:text-warning",
|
|
9689
|
-
fillClass: "clcosdk:[&_circle]:fill-warning-subtle"
|
|
9690
|
-
},
|
|
9691
|
-
completed: {
|
|
9692
|
-
Icon: CircleCheck2,
|
|
9693
|
-
colorClass: "clcosdk:text-success",
|
|
9694
|
-
fillClass: "clcosdk:[&_circle]:fill-success-subtle"
|
|
9695
|
-
},
|
|
9696
|
-
rejected: {
|
|
9697
|
-
Icon: CircleX,
|
|
9698
|
-
colorClass: "clcosdk:text-error",
|
|
9699
|
-
fillClass: "clcosdk:[&_circle]:fill-error-subtle"
|
|
9700
|
-
}
|
|
9701
|
-
};
|
|
9702
|
-
function StepStatusIcon({ status, className }) {
|
|
9703
|
-
const { Icon, colorClass, fillClass } = statusConfig[status];
|
|
9704
|
-
return /* @__PURE__ */ jsx57(
|
|
9705
|
-
Icon,
|
|
9706
|
-
{
|
|
9707
|
-
className: cn(
|
|
9708
|
-
"clcosdk:h-6 clcosdk:w-6 clcosdk:shrink-0",
|
|
9709
|
-
colorClass,
|
|
9710
|
-
fillClass,
|
|
9711
|
-
className
|
|
9712
|
-
),
|
|
9713
|
-
"aria-hidden": "true"
|
|
9714
|
-
}
|
|
9715
|
-
);
|
|
9842
|
+
// src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
|
|
9843
|
+
import SumsubWebSdk from "@sumsub/websdk-react";
|
|
9844
|
+
import { jsx as jsx57, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
9845
|
+
function IdentityVerificationView(props) {
|
|
9846
|
+
return /* @__PURE__ */ jsx57(CoinListStyleScope, { children: /* @__PURE__ */ jsx57(IdentityVerificationViewBody, { ...props }) });
|
|
9716
9847
|
}
|
|
9717
|
-
|
|
9718
|
-
|
|
9719
|
-
|
|
9720
|
-
|
|
9721
|
-
status,
|
|
9722
|
-
onAction,
|
|
9723
|
-
onContactSupport
|
|
9848
|
+
function IdentityVerificationViewBody({
|
|
9849
|
+
state,
|
|
9850
|
+
onEvent,
|
|
9851
|
+
className
|
|
9724
9852
|
}) {
|
|
9725
|
-
switch (
|
|
9726
|
-
case "
|
|
9727
|
-
|
|
9728
|
-
|
|
9729
|
-
case "pending":
|
|
9730
|
-
return /* @__PURE__ */ jsx58(
|
|
9731
|
-
AlertBanner,
|
|
9853
|
+
switch (state.type) {
|
|
9854
|
+
case "loading":
|
|
9855
|
+
return /* @__PURE__ */ jsx57(
|
|
9856
|
+
"output",
|
|
9732
9857
|
{
|
|
9733
|
-
|
|
9734
|
-
|
|
9858
|
+
"aria-live": "polite",
|
|
9859
|
+
className: cn(
|
|
9860
|
+
"clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
|
|
9861
|
+
className
|
|
9862
|
+
),
|
|
9863
|
+
children: /* @__PURE__ */ jsx57("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
|
|
9735
9864
|
}
|
|
9736
9865
|
);
|
|
9737
|
-
case "
|
|
9738
|
-
return /* @__PURE__ */
|
|
9739
|
-
|
|
9740
|
-
return /* @__PURE__ */ jsx58(
|
|
9741
|
-
AlertBanner,
|
|
9866
|
+
case "error":
|
|
9867
|
+
return /* @__PURE__ */ jsxs41(
|
|
9868
|
+
"div",
|
|
9742
9869
|
{
|
|
9743
|
-
|
|
9744
|
-
|
|
9745
|
-
|
|
9746
|
-
|
|
9747
|
-
|
|
9748
|
-
|
|
9749
|
-
|
|
9750
|
-
|
|
9751
|
-
|
|
9752
|
-
|
|
9753
|
-
|
|
9754
|
-
|
|
9755
|
-
|
|
9756
|
-
|
|
9757
|
-
|
|
9758
|
-
|
|
9870
|
+
className: cn(
|
|
9871
|
+
"clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
|
|
9872
|
+
className
|
|
9873
|
+
),
|
|
9874
|
+
children: [
|
|
9875
|
+
/* @__PURE__ */ jsx57(AlertBanner, { variant: "error", icon: true, content: state.message }),
|
|
9876
|
+
state.retryable && /* @__PURE__ */ jsx57(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
|
|
9877
|
+
]
|
|
9878
|
+
}
|
|
9879
|
+
);
|
|
9880
|
+
case "ready":
|
|
9881
|
+
return /* @__PURE__ */ jsx57("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ jsx57(
|
|
9882
|
+
SumsubWebSdk,
|
|
9883
|
+
{
|
|
9884
|
+
accessToken: state.accessToken,
|
|
9885
|
+
expirationHandler: state.refreshToken,
|
|
9886
|
+
config: state.locale === void 0 ? {} : { lang: state.locale },
|
|
9887
|
+
options: { addViewportTag: false, adaptIframeHeight: true },
|
|
9888
|
+
onMessage: (type, payload) => {
|
|
9889
|
+
onSumsubMessage(type, payload, onEvent);
|
|
9890
|
+
},
|
|
9891
|
+
onError: (error) => {
|
|
9892
|
+
onEvent({ type: "ON_ERROR", error: toError(error) });
|
|
9893
|
+
}
|
|
9894
|
+
}
|
|
9895
|
+
) });
|
|
9896
|
+
default: {
|
|
9897
|
+
const exhaustive = state;
|
|
9898
|
+
return exhaustive;
|
|
9899
|
+
}
|
|
9900
|
+
}
|
|
9901
|
+
}
|
|
9902
|
+
function onSumsubMessage(type, payload, onEvent) {
|
|
9903
|
+
switch (type) {
|
|
9904
|
+
case "idCheck.onApplicantSubmitted":
|
|
9905
|
+
onEvent({ type: "ON_SUBMITTED" });
|
|
9906
|
+
return;
|
|
9907
|
+
case "idCheck.onError": {
|
|
9908
|
+
const message = payload?.message ?? "Verification error";
|
|
9909
|
+
onEvent({ type: "ON_ERROR", error: new Error(message) });
|
|
9910
|
+
return;
|
|
9911
|
+
}
|
|
9912
|
+
default:
|
|
9913
|
+
return;
|
|
9914
|
+
}
|
|
9915
|
+
}
|
|
9916
|
+
function toError(error) {
|
|
9917
|
+
return error instanceof Error ? error : new Error("Verification error");
|
|
9918
|
+
}
|
|
9919
|
+
|
|
9920
|
+
// src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
|
|
9921
|
+
import { useCallback as useCallback8, useEffect as useEffect22, useMemo as useMemo5, useRef as useRef15 } from "react";
|
|
9922
|
+
|
|
9923
|
+
// src/client/hooks/requirements/data/useKycToken.ts
|
|
9924
|
+
import { useCallback as useCallback7, useEffect as useEffect21, useRef as useRef14, useState as useState26 } from "react";
|
|
9925
|
+
var IDLE_STATE = { type: "IDLE" };
|
|
9926
|
+
var LOADING_STATE4 = { type: "LOADING" };
|
|
9927
|
+
function useKycToken(levelName, reset) {
|
|
9928
|
+
const { coinlist } = useCoinList();
|
|
9929
|
+
const log = useLogger("useKycToken");
|
|
9930
|
+
const [kycTokenState, setKycTokenState] = useState26(IDLE_STATE);
|
|
9931
|
+
const resetPendingRef = useRef14(reset === true);
|
|
9932
|
+
const tokenIssuedRef = useRef14(false);
|
|
9933
|
+
useEffect21(() => {
|
|
9934
|
+
if (!tokenIssuedRef.current) {
|
|
9935
|
+
resetPendingRef.current = reset === true;
|
|
9936
|
+
}
|
|
9937
|
+
}, [reset]);
|
|
9938
|
+
const fetchToken = useCallback7(async () => {
|
|
9939
|
+
setKycTokenState(LOADING_STATE4);
|
|
9940
|
+
try {
|
|
9941
|
+
const kycToken = await coinlist.requirements.createKycToken({
|
|
9942
|
+
levelName,
|
|
9943
|
+
reset: resetPendingRef.current
|
|
9944
|
+
});
|
|
9945
|
+
resetPendingRef.current = false;
|
|
9946
|
+
tokenIssuedRef.current = true;
|
|
9947
|
+
log.debug(() => ({
|
|
9948
|
+
msg: "settled",
|
|
9949
|
+
fields: { state: "CONTENT" }
|
|
9950
|
+
}));
|
|
9951
|
+
setKycTokenState({ type: "CONTENT", token: kycToken.token });
|
|
9952
|
+
return kycToken.token;
|
|
9953
|
+
} catch (error) {
|
|
9954
|
+
const reason = error instanceof NotAuthenticatedError ? "not-authenticated" : "generic-error";
|
|
9955
|
+
log.failure(
|
|
9956
|
+
() => ({ msg: "settled", fields: { state: "ERROR", reason } }),
|
|
9957
|
+
error
|
|
9958
|
+
);
|
|
9959
|
+
setKycTokenState({ type: "ERROR", reason });
|
|
9960
|
+
throw error;
|
|
9961
|
+
}
|
|
9962
|
+
}, [coinlist, levelName, log]);
|
|
9963
|
+
return { kycTokenState, fetchToken };
|
|
9964
|
+
}
|
|
9965
|
+
|
|
9966
|
+
// src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
|
|
9967
|
+
var NOT_AUTHENTICATED_MESSAGE2 = "Sign in to verify your identity.";
|
|
9968
|
+
var GENERIC_ERROR_MESSAGE2 = "Unable to start identity verification right now. Please try again.";
|
|
9969
|
+
function useIdentityVerificationViewModel(options = {}) {
|
|
9970
|
+
const { levelName, reset, locale, onSubmitted, onError } = options;
|
|
9971
|
+
const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
|
|
9972
|
+
const fetchedRef = useRef15(false);
|
|
9973
|
+
useEffect22(() => {
|
|
9974
|
+
if (fetchedRef.current) {
|
|
9975
|
+
return;
|
|
9976
|
+
}
|
|
9977
|
+
fetchedRef.current = true;
|
|
9978
|
+
fetchToken().catch(() => {
|
|
9979
|
+
});
|
|
9980
|
+
}, [fetchToken]);
|
|
9981
|
+
const state = useMemo5(() => {
|
|
9982
|
+
switch (kycTokenState.type) {
|
|
9983
|
+
case "IDLE":
|
|
9984
|
+
case "LOADING":
|
|
9985
|
+
return { type: "loading" };
|
|
9986
|
+
case "ERROR": {
|
|
9987
|
+
const notAuthenticated = kycTokenState.reason === "not-authenticated";
|
|
9988
|
+
return {
|
|
9989
|
+
type: "error",
|
|
9990
|
+
message: notAuthenticated ? NOT_AUTHENTICATED_MESSAGE2 : GENERIC_ERROR_MESSAGE2,
|
|
9991
|
+
retryable: !notAuthenticated
|
|
9992
|
+
};
|
|
9993
|
+
}
|
|
9994
|
+
case "CONTENT":
|
|
9995
|
+
return {
|
|
9996
|
+
type: "ready",
|
|
9997
|
+
accessToken: kycTokenState.token,
|
|
9998
|
+
locale,
|
|
9999
|
+
refreshToken: fetchToken
|
|
10000
|
+
};
|
|
10001
|
+
default: {
|
|
10002
|
+
const exhaustive = kycTokenState;
|
|
10003
|
+
return exhaustive;
|
|
10004
|
+
}
|
|
10005
|
+
}
|
|
10006
|
+
}, [kycTokenState, locale, fetchToken]);
|
|
10007
|
+
const onEvent = useCallback8(
|
|
10008
|
+
(event) => {
|
|
10009
|
+
switch (event.type) {
|
|
10010
|
+
case "ON_RETRY":
|
|
10011
|
+
fetchToken().catch(() => {
|
|
10012
|
+
});
|
|
10013
|
+
return;
|
|
10014
|
+
case "ON_SUBMITTED":
|
|
10015
|
+
onSubmitted?.();
|
|
10016
|
+
return;
|
|
10017
|
+
case "ON_ERROR":
|
|
10018
|
+
onError?.(event.error);
|
|
10019
|
+
return;
|
|
10020
|
+
default: {
|
|
10021
|
+
const exhaustive = event;
|
|
10022
|
+
return exhaustive;
|
|
10023
|
+
}
|
|
10024
|
+
}
|
|
10025
|
+
},
|
|
10026
|
+
[fetchToken, onSubmitted, onError]
|
|
10027
|
+
);
|
|
10028
|
+
return { state, onEvent };
|
|
10029
|
+
}
|
|
10030
|
+
|
|
10031
|
+
// src/client/components/requirements/identity-verification/IdentityVerificationContainer.tsx
|
|
10032
|
+
import { jsx as jsx58 } from "react/jsx-runtime";
|
|
10033
|
+
function IdentityVerificationContainer({
|
|
10034
|
+
levelName,
|
|
10035
|
+
reset,
|
|
10036
|
+
locale,
|
|
10037
|
+
onSubmitted,
|
|
10038
|
+
onError,
|
|
10039
|
+
className
|
|
10040
|
+
}) {
|
|
10041
|
+
const { state, onEvent } = useIdentityVerificationViewModel({
|
|
10042
|
+
levelName,
|
|
10043
|
+
reset,
|
|
10044
|
+
locale,
|
|
10045
|
+
onSubmitted,
|
|
10046
|
+
onError
|
|
10047
|
+
});
|
|
10048
|
+
return /* @__PURE__ */ jsx58(
|
|
10049
|
+
IdentityVerificationView,
|
|
10050
|
+
{
|
|
10051
|
+
state,
|
|
10052
|
+
onEvent,
|
|
10053
|
+
className
|
|
10054
|
+
}
|
|
10055
|
+
);
|
|
10056
|
+
}
|
|
10057
|
+
|
|
10058
|
+
// src/client/components/requirements/RequirementItem.tsx
|
|
10059
|
+
import { ChevronRight } from "lucide-react";
|
|
10060
|
+
|
|
10061
|
+
// src/client/components/design-system/StepStatusIcon.tsx
|
|
10062
|
+
import { CircleCheck as CircleCheck2, CircleX, Info as Info5 } from "lucide-react";
|
|
10063
|
+
import { jsx as jsx59 } from "react/jsx-runtime";
|
|
10064
|
+
var statusConfig = {
|
|
10065
|
+
required: {
|
|
10066
|
+
Icon: Info5,
|
|
10067
|
+
colorClass: "clcosdk:text-warning",
|
|
10068
|
+
fillClass: "clcosdk:[&_circle]:fill-warning-subtle"
|
|
10069
|
+
},
|
|
10070
|
+
pending: {
|
|
10071
|
+
Icon: Info5,
|
|
10072
|
+
colorClass: "clcosdk:text-warning",
|
|
10073
|
+
fillClass: "clcosdk:[&_circle]:fill-warning-subtle"
|
|
10074
|
+
},
|
|
10075
|
+
completed: {
|
|
10076
|
+
Icon: CircleCheck2,
|
|
10077
|
+
colorClass: "clcosdk:text-success",
|
|
10078
|
+
fillClass: "clcosdk:[&_circle]:fill-success-subtle"
|
|
10079
|
+
},
|
|
10080
|
+
rejected: {
|
|
10081
|
+
Icon: CircleX,
|
|
10082
|
+
colorClass: "clcosdk:text-error",
|
|
10083
|
+
fillClass: "clcosdk:[&_circle]:fill-error-subtle"
|
|
10084
|
+
}
|
|
10085
|
+
};
|
|
10086
|
+
function StepStatusIcon({ status, className }) {
|
|
10087
|
+
const { Icon, colorClass, fillClass } = statusConfig[status];
|
|
10088
|
+
return /* @__PURE__ */ jsx59(
|
|
10089
|
+
Icon,
|
|
10090
|
+
{
|
|
10091
|
+
className: cn(
|
|
10092
|
+
"clcosdk:h-6 clcosdk:w-6 clcosdk:shrink-0",
|
|
10093
|
+
colorClass,
|
|
10094
|
+
fillClass,
|
|
10095
|
+
className
|
|
10096
|
+
),
|
|
10097
|
+
"aria-hidden": "true"
|
|
10098
|
+
}
|
|
10099
|
+
);
|
|
10100
|
+
}
|
|
10101
|
+
|
|
10102
|
+
// src/client/components/requirements/RequirementItem.tsx
|
|
10103
|
+
import { Fragment as Fragment9, jsx as jsx60, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
10104
|
+
function VerificationActionZone({
|
|
10105
|
+
status,
|
|
10106
|
+
onAction,
|
|
10107
|
+
onContactSupport
|
|
10108
|
+
}) {
|
|
10109
|
+
switch (status) {
|
|
10110
|
+
case "required":
|
|
10111
|
+
if (onAction === null) return null;
|
|
10112
|
+
return /* @__PURE__ */ jsx60(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
|
|
10113
|
+
case "pending":
|
|
10114
|
+
return /* @__PURE__ */ jsx60(
|
|
10115
|
+
AlertBanner,
|
|
10116
|
+
{
|
|
10117
|
+
variant: "warning",
|
|
10118
|
+
content: "Under review. We'll notify you when complete."
|
|
10119
|
+
}
|
|
10120
|
+
);
|
|
10121
|
+
case "completed":
|
|
10122
|
+
return /* @__PURE__ */ jsx60(AlertBanner, { variant: "success", content: "Identity verified." });
|
|
10123
|
+
case "rejected":
|
|
10124
|
+
return /* @__PURE__ */ jsx60(
|
|
10125
|
+
AlertBanner,
|
|
10126
|
+
{
|
|
10127
|
+
variant: "error",
|
|
10128
|
+
content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ jsxs42(Fragment9, { children: [
|
|
10129
|
+
"Verification rejected.",
|
|
10130
|
+
" ",
|
|
10131
|
+
/* @__PURE__ */ jsx60(
|
|
10132
|
+
"button",
|
|
10133
|
+
{
|
|
10134
|
+
type: "button",
|
|
10135
|
+
onClick: onContactSupport,
|
|
10136
|
+
className: "clcosdk:underline",
|
|
10137
|
+
children: "Contact support"
|
|
10138
|
+
}
|
|
10139
|
+
),
|
|
10140
|
+
"."
|
|
10141
|
+
] })
|
|
10142
|
+
}
|
|
9759
10143
|
);
|
|
9760
10144
|
}
|
|
9761
10145
|
}
|
|
@@ -9768,8 +10152,8 @@ function WalletActionZone({
|
|
|
9768
10152
|
onRemoveWallet
|
|
9769
10153
|
}) {
|
|
9770
10154
|
if (multiWallet) {
|
|
9771
|
-
return /* @__PURE__ */
|
|
9772
|
-
/* @__PURE__ */
|
|
10155
|
+
return /* @__PURE__ */ jsxs42(Fragment9, { children: [
|
|
10156
|
+
/* @__PURE__ */ jsx60(
|
|
9773
10157
|
ConnectedWalletList,
|
|
9774
10158
|
{
|
|
9775
10159
|
wallets: connectedWallets,
|
|
@@ -9778,7 +10162,7 @@ function WalletActionZone({
|
|
|
9778
10162
|
status: walletsStatus
|
|
9779
10163
|
}
|
|
9780
10164
|
),
|
|
9781
|
-
status === "rejected" && /* @__PURE__ */
|
|
10165
|
+
status === "rejected" && /* @__PURE__ */ jsx60(
|
|
9782
10166
|
AlertBanner,
|
|
9783
10167
|
{
|
|
9784
10168
|
variant: "error",
|
|
@@ -9789,21 +10173,21 @@ function WalletActionZone({
|
|
|
9789
10173
|
}
|
|
9790
10174
|
if (status === "completed") {
|
|
9791
10175
|
const connected = connectedWallets[0];
|
|
9792
|
-
return /* @__PURE__ */
|
|
9793
|
-
onAction !== null && /* @__PURE__ */
|
|
9794
|
-
walletsStatus === "loading" ? /* @__PURE__ */
|
|
10176
|
+
return /* @__PURE__ */ jsxs42(Fragment9, { children: [
|
|
10177
|
+
onAction !== null && /* @__PURE__ */ jsx60(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
|
|
10178
|
+
walletsStatus === "loading" ? /* @__PURE__ */ jsx60(
|
|
9795
10179
|
AlertBanner,
|
|
9796
10180
|
{
|
|
9797
10181
|
variant: "info",
|
|
9798
10182
|
content: "Loading your connected wallet\u2026"
|
|
9799
10183
|
}
|
|
9800
|
-
) : walletsStatus === "error" ? /* @__PURE__ */
|
|
10184
|
+
) : walletsStatus === "error" ? /* @__PURE__ */ jsx60(
|
|
9801
10185
|
AlertBanner,
|
|
9802
10186
|
{
|
|
9803
10187
|
variant: "error",
|
|
9804
10188
|
content: "Couldn't load your connected wallet."
|
|
9805
10189
|
}
|
|
9806
|
-
) : /* @__PURE__ */
|
|
10190
|
+
) : /* @__PURE__ */ jsx60(
|
|
9807
10191
|
AlertBanner,
|
|
9808
10192
|
{
|
|
9809
10193
|
variant: "success",
|
|
@@ -9813,9 +10197,9 @@ function WalletActionZone({
|
|
|
9813
10197
|
] });
|
|
9814
10198
|
}
|
|
9815
10199
|
if (status === "rejected") {
|
|
9816
|
-
return /* @__PURE__ */
|
|
9817
|
-
onAction !== null && /* @__PURE__ */
|
|
9818
|
-
/* @__PURE__ */
|
|
10200
|
+
return /* @__PURE__ */ jsxs42(Fragment9, { children: [
|
|
10201
|
+
onAction !== null && /* @__PURE__ */ jsx60(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
|
|
10202
|
+
/* @__PURE__ */ jsx60(
|
|
9819
10203
|
AlertBanner,
|
|
9820
10204
|
{
|
|
9821
10205
|
variant: "error",
|
|
@@ -9825,7 +10209,7 @@ function WalletActionZone({
|
|
|
9825
10209
|
] });
|
|
9826
10210
|
}
|
|
9827
10211
|
if (onAction === null) return null;
|
|
9828
|
-
return /* @__PURE__ */
|
|
10212
|
+
return /* @__PURE__ */ jsx60(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
|
|
9829
10213
|
}
|
|
9830
10214
|
function RequirementItem({
|
|
9831
10215
|
ui,
|
|
@@ -9837,7 +10221,7 @@ function RequirementItem({
|
|
|
9837
10221
|
walletsStatus,
|
|
9838
10222
|
onContactSupport
|
|
9839
10223
|
}) {
|
|
9840
|
-
return /* @__PURE__ */
|
|
10224
|
+
return /* @__PURE__ */ jsx60(CoinListStyleScope, { children: /* @__PURE__ */ jsxs42(
|
|
9841
10225
|
"div",
|
|
9842
10226
|
{
|
|
9843
10227
|
className: cn(
|
|
@@ -9845,7 +10229,7 @@ function RequirementItem({
|
|
|
9845
10229
|
className
|
|
9846
10230
|
),
|
|
9847
10231
|
children: [
|
|
9848
|
-
/* @__PURE__ */
|
|
10232
|
+
/* @__PURE__ */ jsxs42(
|
|
9849
10233
|
"button",
|
|
9850
10234
|
{
|
|
9851
10235
|
type: "button",
|
|
@@ -9853,9 +10237,9 @@ function RequirementItem({
|
|
|
9853
10237
|
"aria-expanded": expanded,
|
|
9854
10238
|
className: "clcosdk:flex clcosdk:h-14 clcosdk:w-full clcosdk:cursor-pointer clcosdk:items-center clcosdk:justify-between clcosdk:rounded-2xl clcosdk:px-2 clcosdk:transition-colors clcosdk:hover:bg-surface",
|
|
9855
10239
|
children: [
|
|
9856
|
-
/* @__PURE__ */
|
|
9857
|
-
/* @__PURE__ */
|
|
9858
|
-
/* @__PURE__ */
|
|
10240
|
+
/* @__PURE__ */ jsxs42("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
|
|
10241
|
+
/* @__PURE__ */ jsx60(StepStatusIcon, { status: ui.status }),
|
|
10242
|
+
/* @__PURE__ */ jsx60(
|
|
9859
10243
|
"span",
|
|
9860
10244
|
{
|
|
9861
10245
|
className: cn(
|
|
@@ -9866,7 +10250,7 @@ function RequirementItem({
|
|
|
9866
10250
|
}
|
|
9867
10251
|
)
|
|
9868
10252
|
] }),
|
|
9869
|
-
/* @__PURE__ */
|
|
10253
|
+
/* @__PURE__ */ jsx60(
|
|
9870
10254
|
ChevronRight,
|
|
9871
10255
|
{
|
|
9872
10256
|
className: cn(
|
|
@@ -9879,15 +10263,15 @@ function RequirementItem({
|
|
|
9879
10263
|
]
|
|
9880
10264
|
}
|
|
9881
10265
|
),
|
|
9882
|
-
/* @__PURE__ */
|
|
10266
|
+
/* @__PURE__ */ jsx60(
|
|
9883
10267
|
"div",
|
|
9884
10268
|
{
|
|
9885
10269
|
className: cn(
|
|
9886
10270
|
"clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
|
|
9887
10271
|
expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
|
|
9888
10272
|
),
|
|
9889
|
-
children: /* @__PURE__ */
|
|
9890
|
-
/* @__PURE__ */
|
|
10273
|
+
children: /* @__PURE__ */ jsx60("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ jsxs42("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
|
|
10274
|
+
/* @__PURE__ */ jsx60(
|
|
9891
10275
|
"p",
|
|
9892
10276
|
{
|
|
9893
10277
|
className: cn(
|
|
@@ -9897,14 +10281,14 @@ function RequirementItem({
|
|
|
9897
10281
|
children: ui.description
|
|
9898
10282
|
}
|
|
9899
10283
|
),
|
|
9900
|
-
ui.variant === "verification" ? /* @__PURE__ */
|
|
10284
|
+
ui.variant === "verification" ? /* @__PURE__ */ jsx60(
|
|
9901
10285
|
VerificationActionZone,
|
|
9902
10286
|
{
|
|
9903
10287
|
status: ui.status,
|
|
9904
10288
|
onAction,
|
|
9905
10289
|
onContactSupport
|
|
9906
10290
|
}
|
|
9907
|
-
) : /* @__PURE__ */
|
|
10291
|
+
) : /* @__PURE__ */ jsx60(
|
|
9908
10292
|
WalletActionZone,
|
|
9909
10293
|
{
|
|
9910
10294
|
status: ui.status,
|
|
@@ -9923,10 +10307,10 @@ function RequirementItem({
|
|
|
9923
10307
|
) });
|
|
9924
10308
|
}
|
|
9925
10309
|
|
|
9926
|
-
// src/client/components/requirements/
|
|
9927
|
-
import { jsx as
|
|
10310
|
+
// src/client/components/requirements/RequirementsChecklistView.tsx
|
|
10311
|
+
import { jsx as jsx61, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
9928
10312
|
function RequirementsChecklistView(props) {
|
|
9929
|
-
return /* @__PURE__ */
|
|
10313
|
+
return /* @__PURE__ */ jsx61(CoinListStyleScope, { children: /* @__PURE__ */ jsx61(RequirementsChecklistViewBody, { ...props }) });
|
|
9930
10314
|
}
|
|
9931
10315
|
function RequirementsChecklistViewBody({
|
|
9932
10316
|
state,
|
|
@@ -9938,11 +10322,11 @@ function RequirementsChecklistViewBody({
|
|
|
9938
10322
|
}) {
|
|
9939
10323
|
switch (state.type) {
|
|
9940
10324
|
case "loading":
|
|
9941
|
-
return loading ?? /* @__PURE__ */
|
|
10325
|
+
return loading ?? /* @__PURE__ */ jsx61(LoadingState2, {});
|
|
9942
10326
|
case "not-authenticated":
|
|
9943
10327
|
return unauthenticatedState ?? null;
|
|
9944
10328
|
case "error":
|
|
9945
|
-
return error ?? /* @__PURE__ */
|
|
10329
|
+
return error ?? /* @__PURE__ */ jsx61(
|
|
9946
10330
|
AlertBanner,
|
|
9947
10331
|
{
|
|
9948
10332
|
variant: "error",
|
|
@@ -9952,7 +10336,7 @@ function RequirementsChecklistViewBody({
|
|
|
9952
10336
|
}
|
|
9953
10337
|
);
|
|
9954
10338
|
case "content":
|
|
9955
|
-
return /* @__PURE__ */
|
|
10339
|
+
return /* @__PURE__ */ jsxs43(
|
|
9956
10340
|
"div",
|
|
9957
10341
|
{
|
|
9958
10342
|
className: cn(
|
|
@@ -9960,11 +10344,11 @@ function RequirementsChecklistViewBody({
|
|
|
9960
10344
|
className
|
|
9961
10345
|
),
|
|
9962
10346
|
children: [
|
|
9963
|
-
/* @__PURE__ */
|
|
9964
|
-
/* @__PURE__ */
|
|
9965
|
-
/* @__PURE__ */
|
|
10347
|
+
/* @__PURE__ */ jsxs43("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
10348
|
+
/* @__PURE__ */ jsx61("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
|
|
10349
|
+
/* @__PURE__ */ jsx61("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
|
|
9966
10350
|
] }),
|
|
9967
|
-
/* @__PURE__ */
|
|
10351
|
+
/* @__PURE__ */ jsx61("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ jsx61(
|
|
9968
10352
|
RequirementItem,
|
|
9969
10353
|
{
|
|
9970
10354
|
ui: row.item,
|
|
@@ -9983,7 +10367,7 @@ function RequirementsChecklistViewBody({
|
|
|
9983
10367
|
},
|
|
9984
10368
|
row.id
|
|
9985
10369
|
)) }),
|
|
9986
|
-
state.ineligible && /* @__PURE__ */
|
|
10370
|
+
state.ineligible && /* @__PURE__ */ jsx61(
|
|
9987
10371
|
AlertBanner,
|
|
9988
10372
|
{
|
|
9989
10373
|
variant: "error",
|
|
@@ -9991,7 +10375,7 @@ function RequirementsChecklistViewBody({
|
|
|
9991
10375
|
content: "You are not eligible to participate."
|
|
9992
10376
|
}
|
|
9993
10377
|
),
|
|
9994
|
-
state.continueAction && /* @__PURE__ */
|
|
10378
|
+
state.continueAction && /* @__PURE__ */ jsx61(
|
|
9995
10379
|
ClButton,
|
|
9996
10380
|
{
|
|
9997
10381
|
fullWidth: true,
|
|
@@ -10003,274 +10387,25 @@ function RequirementsChecklistViewBody({
|
|
|
10003
10387
|
]
|
|
10004
10388
|
}
|
|
10005
10389
|
);
|
|
10006
|
-
default: {
|
|
10007
|
-
const exhaustive = state;
|
|
10008
|
-
return exhaustive;
|
|
10009
|
-
}
|
|
10010
|
-
}
|
|
10011
|
-
}
|
|
10012
|
-
function LoadingState2() {
|
|
10013
|
-
return /* @__PURE__ */ jsx59(
|
|
10014
|
-
"output",
|
|
10015
|
-
{
|
|
10016
|
-
"aria-live": "polite",
|
|
10017
|
-
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",
|
|
10018
|
-
children: /* @__PURE__ */ jsx59("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
|
|
10019
|
-
}
|
|
10020
|
-
);
|
|
10021
|
-
}
|
|
10022
|
-
|
|
10023
|
-
// src/client/components/requirements/checklist/VerificationOverlay.tsx
|
|
10024
|
-
import { jsx as jsx60, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
10025
|
-
function VerificationOverlay({
|
|
10026
|
-
onClose,
|
|
10027
|
-
children
|
|
10028
|
-
}) {
|
|
10029
|
-
return /* @__PURE__ */ jsx60(CoinListStyleScope, { children: /* @__PURE__ */ jsx60(VerificationOverlayBody, { onClose, children }) });
|
|
10030
|
-
}
|
|
10031
|
-
function VerificationOverlayBody({
|
|
10032
|
-
onClose,
|
|
10033
|
-
children
|
|
10034
|
-
}) {
|
|
10035
|
-
return /* @__PURE__ */ jsx60(
|
|
10036
|
-
"div",
|
|
10037
|
-
{
|
|
10038
|
-
role: "dialog",
|
|
10039
|
-
"aria-modal": "true",
|
|
10040
|
-
"aria-label": "Identity verification",
|
|
10041
|
-
className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
|
|
10042
|
-
children: /* @__PURE__ */ jsxs43("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: [
|
|
10043
|
-
/* @__PURE__ */ jsx60(
|
|
10044
|
-
CloseButton,
|
|
10045
|
-
{
|
|
10046
|
-
onClick: onClose,
|
|
10047
|
-
className: "clcosdk:absolute clcosdk:top-4 clcosdk:right-4"
|
|
10048
|
-
}
|
|
10049
|
-
),
|
|
10050
|
-
children
|
|
10051
|
-
] })
|
|
10052
|
-
}
|
|
10053
|
-
);
|
|
10054
|
-
}
|
|
10055
|
-
|
|
10056
|
-
// src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
|
|
10057
|
-
import SumsubWebSdk from "@sumsub/websdk-react";
|
|
10058
|
-
import { jsx as jsx61, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
10059
|
-
function IdentityVerificationView(props) {
|
|
10060
|
-
return /* @__PURE__ */ jsx61(CoinListStyleScope, { children: /* @__PURE__ */ jsx61(IdentityVerificationViewBody, { ...props }) });
|
|
10061
|
-
}
|
|
10062
|
-
function IdentityVerificationViewBody({
|
|
10063
|
-
state,
|
|
10064
|
-
onEvent,
|
|
10065
|
-
className
|
|
10066
|
-
}) {
|
|
10067
|
-
switch (state.type) {
|
|
10068
|
-
case "loading":
|
|
10069
|
-
return /* @__PURE__ */ jsx61(
|
|
10070
|
-
"output",
|
|
10071
|
-
{
|
|
10072
|
-
"aria-live": "polite",
|
|
10073
|
-
className: cn(
|
|
10074
|
-
"clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
|
|
10075
|
-
className
|
|
10076
|
-
),
|
|
10077
|
-
children: /* @__PURE__ */ jsx61("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
|
|
10078
|
-
}
|
|
10079
|
-
);
|
|
10080
|
-
case "error":
|
|
10081
|
-
return /* @__PURE__ */ jsxs44(
|
|
10082
|
-
"div",
|
|
10083
|
-
{
|
|
10084
|
-
className: cn(
|
|
10085
|
-
"clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
|
|
10086
|
-
className
|
|
10087
|
-
),
|
|
10088
|
-
children: [
|
|
10089
|
-
/* @__PURE__ */ jsx61(AlertBanner, { variant: "error", icon: true, content: state.message }),
|
|
10090
|
-
state.retryable && /* @__PURE__ */ jsx61(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
|
|
10091
|
-
]
|
|
10092
|
-
}
|
|
10093
|
-
);
|
|
10094
|
-
case "ready":
|
|
10095
|
-
return /* @__PURE__ */ jsx61("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ jsx61(
|
|
10096
|
-
SumsubWebSdk,
|
|
10097
|
-
{
|
|
10098
|
-
accessToken: state.accessToken,
|
|
10099
|
-
expirationHandler: state.refreshToken,
|
|
10100
|
-
config: state.locale === void 0 ? {} : { lang: state.locale },
|
|
10101
|
-
options: { addViewportTag: false, adaptIframeHeight: true },
|
|
10102
|
-
onMessage: (type, payload) => {
|
|
10103
|
-
onSumsubMessage(type, payload, onEvent);
|
|
10104
|
-
},
|
|
10105
|
-
onError: (error) => {
|
|
10106
|
-
onEvent({ type: "ON_ERROR", error: toError(error) });
|
|
10107
|
-
}
|
|
10108
|
-
}
|
|
10109
|
-
) });
|
|
10110
|
-
default: {
|
|
10111
|
-
const exhaustive = state;
|
|
10112
|
-
return exhaustive;
|
|
10113
|
-
}
|
|
10114
|
-
}
|
|
10115
|
-
}
|
|
10116
|
-
function onSumsubMessage(type, payload, onEvent) {
|
|
10117
|
-
switch (type) {
|
|
10118
|
-
case "idCheck.onApplicantSubmitted":
|
|
10119
|
-
onEvent({ type: "ON_SUBMITTED" });
|
|
10120
|
-
return;
|
|
10121
|
-
case "idCheck.onError": {
|
|
10122
|
-
const message = payload?.message ?? "Verification error";
|
|
10123
|
-
onEvent({ type: "ON_ERROR", error: new Error(message) });
|
|
10124
|
-
return;
|
|
10125
|
-
}
|
|
10126
|
-
default:
|
|
10127
|
-
return;
|
|
10128
|
-
}
|
|
10129
|
-
}
|
|
10130
|
-
function toError(error) {
|
|
10131
|
-
return error instanceof Error ? error : new Error("Verification error");
|
|
10132
|
-
}
|
|
10133
|
-
|
|
10134
|
-
// src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
|
|
10135
|
-
import { useCallback as useCallback7, useEffect as useEffect21, useMemo as useMemo5, useRef as useRef15 } from "react";
|
|
10136
|
-
|
|
10137
|
-
// src/client/hooks/requirements/data/useKycToken.ts
|
|
10138
|
-
import { useCallback as useCallback6, useEffect as useEffect20, useRef as useRef14, useState as useState25 } from "react";
|
|
10139
|
-
var IDLE_STATE = { type: "IDLE" };
|
|
10140
|
-
var LOADING_STATE3 = { type: "LOADING" };
|
|
10141
|
-
function useKycToken(levelName, reset) {
|
|
10142
|
-
const { coinlist } = useCoinList();
|
|
10143
|
-
const log = useLogger("useKycToken");
|
|
10144
|
-
const [kycTokenState, setKycTokenState] = useState25(IDLE_STATE);
|
|
10145
|
-
const resetPendingRef = useRef14(reset === true);
|
|
10146
|
-
const tokenIssuedRef = useRef14(false);
|
|
10147
|
-
useEffect20(() => {
|
|
10148
|
-
if (!tokenIssuedRef.current) {
|
|
10149
|
-
resetPendingRef.current = reset === true;
|
|
10150
|
-
}
|
|
10151
|
-
}, [reset]);
|
|
10152
|
-
const fetchToken = useCallback6(async () => {
|
|
10153
|
-
setKycTokenState(LOADING_STATE3);
|
|
10154
|
-
try {
|
|
10155
|
-
const kycToken = await coinlist.requirements.createKycToken({
|
|
10156
|
-
levelName,
|
|
10157
|
-
reset: resetPendingRef.current
|
|
10158
|
-
});
|
|
10159
|
-
resetPendingRef.current = false;
|
|
10160
|
-
tokenIssuedRef.current = true;
|
|
10161
|
-
log.debug(() => ({
|
|
10162
|
-
msg: "settled",
|
|
10163
|
-
fields: { state: "CONTENT" }
|
|
10164
|
-
}));
|
|
10165
|
-
setKycTokenState({ type: "CONTENT", token: kycToken.token });
|
|
10166
|
-
return kycToken.token;
|
|
10167
|
-
} catch (error) {
|
|
10168
|
-
const reason = error instanceof NotAuthenticatedError ? "not-authenticated" : "generic-error";
|
|
10169
|
-
log.failure(
|
|
10170
|
-
() => ({ msg: "settled", fields: { state: "ERROR", reason } }),
|
|
10171
|
-
error
|
|
10172
|
-
);
|
|
10173
|
-
setKycTokenState({ type: "ERROR", reason });
|
|
10174
|
-
throw error;
|
|
10175
|
-
}
|
|
10176
|
-
}, [coinlist, levelName, log]);
|
|
10177
|
-
return { kycTokenState, fetchToken };
|
|
10178
|
-
}
|
|
10179
|
-
|
|
10180
|
-
// src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
|
|
10181
|
-
var NOT_AUTHENTICATED_MESSAGE2 = "Sign in to verify your identity.";
|
|
10182
|
-
var GENERIC_ERROR_MESSAGE2 = "Unable to start identity verification right now. Please try again.";
|
|
10183
|
-
function useIdentityVerificationViewModel(options = {}) {
|
|
10184
|
-
const { levelName, reset, locale, onSubmitted, onError } = options;
|
|
10185
|
-
const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
|
|
10186
|
-
const fetchedRef = useRef15(false);
|
|
10187
|
-
useEffect21(() => {
|
|
10188
|
-
if (fetchedRef.current) {
|
|
10189
|
-
return;
|
|
10190
|
-
}
|
|
10191
|
-
fetchedRef.current = true;
|
|
10192
|
-
fetchToken().catch(() => {
|
|
10193
|
-
});
|
|
10194
|
-
}, [fetchToken]);
|
|
10195
|
-
const state = useMemo5(() => {
|
|
10196
|
-
switch (kycTokenState.type) {
|
|
10197
|
-
case "IDLE":
|
|
10198
|
-
case "LOADING":
|
|
10199
|
-
return { type: "loading" };
|
|
10200
|
-
case "ERROR": {
|
|
10201
|
-
const notAuthenticated = kycTokenState.reason === "not-authenticated";
|
|
10202
|
-
return {
|
|
10203
|
-
type: "error",
|
|
10204
|
-
message: notAuthenticated ? NOT_AUTHENTICATED_MESSAGE2 : GENERIC_ERROR_MESSAGE2,
|
|
10205
|
-
retryable: !notAuthenticated
|
|
10206
|
-
};
|
|
10207
|
-
}
|
|
10208
|
-
case "CONTENT":
|
|
10209
|
-
return {
|
|
10210
|
-
type: "ready",
|
|
10211
|
-
accessToken: kycTokenState.token,
|
|
10212
|
-
locale,
|
|
10213
|
-
refreshToken: fetchToken
|
|
10214
|
-
};
|
|
10215
|
-
default: {
|
|
10216
|
-
const exhaustive = kycTokenState;
|
|
10217
|
-
return exhaustive;
|
|
10218
|
-
}
|
|
10219
|
-
}
|
|
10220
|
-
}, [kycTokenState, locale, fetchToken]);
|
|
10221
|
-
const onEvent = useCallback7(
|
|
10222
|
-
(event) => {
|
|
10223
|
-
switch (event.type) {
|
|
10224
|
-
case "ON_RETRY":
|
|
10225
|
-
fetchToken().catch(() => {
|
|
10226
|
-
});
|
|
10227
|
-
return;
|
|
10228
|
-
case "ON_SUBMITTED":
|
|
10229
|
-
onSubmitted?.();
|
|
10230
|
-
return;
|
|
10231
|
-
case "ON_ERROR":
|
|
10232
|
-
onError?.(event.error);
|
|
10233
|
-
return;
|
|
10234
|
-
default: {
|
|
10235
|
-
const exhaustive = event;
|
|
10236
|
-
return exhaustive;
|
|
10237
|
-
}
|
|
10238
|
-
}
|
|
10239
|
-
},
|
|
10240
|
-
[fetchToken, onSubmitted, onError]
|
|
10241
|
-
);
|
|
10242
|
-
return { state, onEvent };
|
|
10390
|
+
default: {
|
|
10391
|
+
const exhaustive = state;
|
|
10392
|
+
return exhaustive;
|
|
10393
|
+
}
|
|
10394
|
+
}
|
|
10243
10395
|
}
|
|
10244
|
-
|
|
10245
|
-
|
|
10246
|
-
|
|
10247
|
-
function IdentityVerificationContainer({
|
|
10248
|
-
levelName,
|
|
10249
|
-
reset,
|
|
10250
|
-
locale,
|
|
10251
|
-
onSubmitted,
|
|
10252
|
-
onError,
|
|
10253
|
-
className
|
|
10254
|
-
}) {
|
|
10255
|
-
const { state, onEvent } = useIdentityVerificationViewModel({
|
|
10256
|
-
levelName,
|
|
10257
|
-
reset,
|
|
10258
|
-
locale,
|
|
10259
|
-
onSubmitted,
|
|
10260
|
-
onError
|
|
10261
|
-
});
|
|
10262
|
-
return /* @__PURE__ */ jsx62(
|
|
10263
|
-
IdentityVerificationView,
|
|
10396
|
+
function LoadingState2() {
|
|
10397
|
+
return /* @__PURE__ */ jsx61(
|
|
10398
|
+
"output",
|
|
10264
10399
|
{
|
|
10265
|
-
|
|
10266
|
-
|
|
10267
|
-
className
|
|
10400
|
+
"aria-live": "polite",
|
|
10401
|
+
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",
|
|
10402
|
+
children: /* @__PURE__ */ jsx61("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
|
|
10268
10403
|
}
|
|
10269
10404
|
);
|
|
10270
10405
|
}
|
|
10271
10406
|
|
|
10272
10407
|
// src/client/components/requirements/tax-document/TaxDocumentModalView.tsx
|
|
10273
|
-
import { jsx as
|
|
10408
|
+
import { jsx as jsx62, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
10274
10409
|
function TaxDocumentModalView({
|
|
10275
10410
|
state,
|
|
10276
10411
|
onEvent,
|
|
@@ -10279,7 +10414,7 @@ function TaxDocumentModalView({
|
|
|
10279
10414
|
if (state.type === "hidden") {
|
|
10280
10415
|
return null;
|
|
10281
10416
|
}
|
|
10282
|
-
return /* @__PURE__ */
|
|
10417
|
+
return /* @__PURE__ */ jsx62(CoinListStyleScope, { children: /* @__PURE__ */ jsx62("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__ */ jsxs44(
|
|
10283
10418
|
"div",
|
|
10284
10419
|
{
|
|
10285
10420
|
className: cn(
|
|
@@ -10287,11 +10422,11 @@ function TaxDocumentModalView({
|
|
|
10287
10422
|
className
|
|
10288
10423
|
),
|
|
10289
10424
|
children: [
|
|
10290
|
-
/* @__PURE__ */
|
|
10291
|
-
/* @__PURE__ */
|
|
10292
|
-
/* @__PURE__ */
|
|
10425
|
+
/* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
|
|
10426
|
+
/* @__PURE__ */ jsx62("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
|
|
10427
|
+
/* @__PURE__ */ jsx62(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
|
|
10293
10428
|
] }),
|
|
10294
|
-
/* @__PURE__ */
|
|
10429
|
+
/* @__PURE__ */ jsx62(Screen, { screen: state.screen, onEvent })
|
|
10295
10430
|
]
|
|
10296
10431
|
}
|
|
10297
10432
|
) }) });
|
|
@@ -10302,11 +10437,11 @@ function Screen({
|
|
|
10302
10437
|
}) {
|
|
10303
10438
|
switch (screen.type) {
|
|
10304
10439
|
case "loading":
|
|
10305
|
-
return /* @__PURE__ */
|
|
10440
|
+
return /* @__PURE__ */ jsx62(LoadingScreen, {});
|
|
10306
10441
|
case "error":
|
|
10307
|
-
return /* @__PURE__ */
|
|
10442
|
+
return /* @__PURE__ */ jsx62(AlertBanner, { variant: "error", icon: true, content: screen.message });
|
|
10308
10443
|
case "review":
|
|
10309
|
-
return /* @__PURE__ */
|
|
10444
|
+
return /* @__PURE__ */ jsx62(
|
|
10310
10445
|
ReviewScreen,
|
|
10311
10446
|
{
|
|
10312
10447
|
fields: screen.fields,
|
|
@@ -10317,9 +10452,9 @@ function Screen({
|
|
|
10317
10452
|
}
|
|
10318
10453
|
);
|
|
10319
10454
|
case "editing":
|
|
10320
|
-
return /* @__PURE__ */
|
|
10455
|
+
return /* @__PURE__ */ jsx62(EditScreen, { fields: screen.fields, onEvent });
|
|
10321
10456
|
case "sign-only":
|
|
10322
|
-
return /* @__PURE__ */
|
|
10457
|
+
return /* @__PURE__ */ jsx62(
|
|
10323
10458
|
SignOnlyScreen,
|
|
10324
10459
|
{
|
|
10325
10460
|
signing: screen.signing,
|
|
@@ -10334,14 +10469,14 @@ function Screen({
|
|
|
10334
10469
|
}
|
|
10335
10470
|
}
|
|
10336
10471
|
function LoadingScreen() {
|
|
10337
|
-
return /* @__PURE__ */
|
|
10472
|
+
return /* @__PURE__ */ jsx62(
|
|
10338
10473
|
"output",
|
|
10339
10474
|
{
|
|
10340
10475
|
"aria-live": "polite",
|
|
10341
10476
|
className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
|
|
10342
|
-
children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */
|
|
10343
|
-
/* @__PURE__ */
|
|
10344
|
-
/* @__PURE__ */
|
|
10477
|
+
children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
|
|
10478
|
+
/* @__PURE__ */ jsx62("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
|
|
10479
|
+
/* @__PURE__ */ jsx62("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
|
|
10345
10480
|
] }, row))
|
|
10346
10481
|
}
|
|
10347
10482
|
);
|
|
@@ -10353,9 +10488,9 @@ function ReviewScreen({
|
|
|
10353
10488
|
signError,
|
|
10354
10489
|
onEvent
|
|
10355
10490
|
}) {
|
|
10356
|
-
return /* @__PURE__ */
|
|
10357
|
-
/* @__PURE__ */
|
|
10358
|
-
piiUnavailable && /* @__PURE__ */
|
|
10491
|
+
return /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
10492
|
+
/* @__PURE__ */ jsx62("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
|
|
10493
|
+
piiUnavailable && /* @__PURE__ */ jsx62(
|
|
10359
10494
|
AlertBanner,
|
|
10360
10495
|
{
|
|
10361
10496
|
variant: "info",
|
|
@@ -10363,27 +10498,27 @@ function ReviewScreen({
|
|
|
10363
10498
|
content: "We don't have this information on file yet \u2014 please fill it in below."
|
|
10364
10499
|
}
|
|
10365
10500
|
),
|
|
10366
|
-
/* @__PURE__ */
|
|
10501
|
+
/* @__PURE__ */ jsx62("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__ */ jsxs44(
|
|
10367
10502
|
"div",
|
|
10368
10503
|
{
|
|
10369
10504
|
className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
|
|
10370
10505
|
children: [
|
|
10371
|
-
/* @__PURE__ */
|
|
10506
|
+
/* @__PURE__ */ jsx62(
|
|
10372
10507
|
"span",
|
|
10373
10508
|
{
|
|
10374
10509
|
className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
|
|
10375
10510
|
children: label
|
|
10376
10511
|
}
|
|
10377
10512
|
),
|
|
10378
|
-
/* @__PURE__ */
|
|
10513
|
+
/* @__PURE__ */ jsx62("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
|
|
10379
10514
|
]
|
|
10380
10515
|
},
|
|
10381
10516
|
field
|
|
10382
10517
|
)) }),
|
|
10383
|
-
/* @__PURE__ */
|
|
10384
|
-
signError && /* @__PURE__ */
|
|
10385
|
-
/* @__PURE__ */
|
|
10386
|
-
/* @__PURE__ */
|
|
10518
|
+
/* @__PURE__ */ jsx62("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." }),
|
|
10519
|
+
signError && /* @__PURE__ */ jsx62(AlertBanner, { variant: "error", icon: true, content: signError }),
|
|
10520
|
+
/* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
10521
|
+
/* @__PURE__ */ jsx62(
|
|
10387
10522
|
ClButton,
|
|
10388
10523
|
{
|
|
10389
10524
|
fullWidth: true,
|
|
@@ -10393,7 +10528,7 @@ function ReviewScreen({
|
|
|
10393
10528
|
children: "Sign W-8BEN"
|
|
10394
10529
|
}
|
|
10395
10530
|
),
|
|
10396
|
-
/* @__PURE__ */
|
|
10531
|
+
/* @__PURE__ */ jsx62(
|
|
10397
10532
|
ClButton,
|
|
10398
10533
|
{
|
|
10399
10534
|
fullWidth: true,
|
|
@@ -10410,20 +10545,20 @@ function EditScreen({
|
|
|
10410
10545
|
fields,
|
|
10411
10546
|
onEvent
|
|
10412
10547
|
}) {
|
|
10413
|
-
return /* @__PURE__ */
|
|
10414
|
-
/* @__PURE__ */
|
|
10548
|
+
return /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
10549
|
+
/* @__PURE__ */ jsx62("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__ */ jsxs44(
|
|
10415
10550
|
"label",
|
|
10416
10551
|
{
|
|
10417
10552
|
className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
|
|
10418
10553
|
children: [
|
|
10419
|
-
/* @__PURE__ */
|
|
10554
|
+
/* @__PURE__ */ jsx62(
|
|
10420
10555
|
"span",
|
|
10421
10556
|
{
|
|
10422
10557
|
className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
|
|
10423
10558
|
children: label
|
|
10424
10559
|
}
|
|
10425
10560
|
),
|
|
10426
|
-
/* @__PURE__ */
|
|
10561
|
+
/* @__PURE__ */ jsx62(
|
|
10427
10562
|
"input",
|
|
10428
10563
|
{
|
|
10429
10564
|
type: "text",
|
|
@@ -10444,9 +10579,9 @@ function EditScreen({
|
|
|
10444
10579
|
},
|
|
10445
10580
|
field
|
|
10446
10581
|
)) }),
|
|
10447
|
-
/* @__PURE__ */
|
|
10448
|
-
/* @__PURE__ */
|
|
10449
|
-
/* @__PURE__ */
|
|
10582
|
+
/* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
|
|
10583
|
+
/* @__PURE__ */ jsx62(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
|
|
10584
|
+
/* @__PURE__ */ jsx62(
|
|
10450
10585
|
ClButton,
|
|
10451
10586
|
{
|
|
10452
10587
|
fullWidth: true,
|
|
@@ -10463,10 +10598,10 @@ function SignOnlyScreen({
|
|
|
10463
10598
|
signError,
|
|
10464
10599
|
onEvent
|
|
10465
10600
|
}) {
|
|
10466
|
-
return /* @__PURE__ */
|
|
10467
|
-
/* @__PURE__ */
|
|
10468
|
-
signError && /* @__PURE__ */
|
|
10469
|
-
/* @__PURE__ */
|
|
10601
|
+
return /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
|
|
10602
|
+
/* @__PURE__ */ jsx62("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." }),
|
|
10603
|
+
signError && /* @__PURE__ */ jsx62(AlertBanner, { variant: "error", icon: true, content: signError }),
|
|
10604
|
+
/* @__PURE__ */ jsx62(
|
|
10470
10605
|
ClButton,
|
|
10471
10606
|
{
|
|
10472
10607
|
fullWidth: true,
|
|
@@ -10480,12 +10615,12 @@ function SignOnlyScreen({
|
|
|
10480
10615
|
}
|
|
10481
10616
|
|
|
10482
10617
|
// src/client/hooks/requirements/tax-document/useTaxDocumentModalViewModel.ts
|
|
10483
|
-
import { useCallback as
|
|
10618
|
+
import { useCallback as useCallback10, useEffect as useEffect24, useMemo as useMemo6 } from "react";
|
|
10484
10619
|
|
|
10485
10620
|
// src/client/hooks/requirements/data/useTaxDocument.ts
|
|
10486
|
-
import { useCallback as
|
|
10621
|
+
import { useCallback as useCallback9, useEffect as useEffect23, useState as useState27 } from "react";
|
|
10487
10622
|
var IDLE_SIGN = { type: "idle", error: null };
|
|
10488
|
-
var
|
|
10623
|
+
var LOADING_STATE5 = { type: "LOADING" };
|
|
10489
10624
|
var SIGN_FAILED_MESSAGE = "Unable to sign document. Please try again.";
|
|
10490
10625
|
var DOB_INVALID_MESSAGE = "Enter your date of birth as MM/DD/YYYY.";
|
|
10491
10626
|
var FIELD_KEYS = {
|
|
@@ -10558,8 +10693,8 @@ function useTaxDocument({
|
|
|
10558
10693
|
}) {
|
|
10559
10694
|
const { coinlist, isReady } = useCoinList();
|
|
10560
10695
|
const log = useLogger("useTaxDocument");
|
|
10561
|
-
const [state, setState] =
|
|
10562
|
-
|
|
10696
|
+
const [state, setState] = useState27(LOADING_STATE5);
|
|
10697
|
+
useEffect23(() => {
|
|
10563
10698
|
let isCancelled = false;
|
|
10564
10699
|
if (!isOpen) {
|
|
10565
10700
|
return () => {
|
|
@@ -10567,12 +10702,12 @@ function useTaxDocument({
|
|
|
10567
10702
|
};
|
|
10568
10703
|
}
|
|
10569
10704
|
if (!isReady) {
|
|
10570
|
-
setState(
|
|
10705
|
+
setState(LOADING_STATE5);
|
|
10571
10706
|
return () => {
|
|
10572
10707
|
isCancelled = true;
|
|
10573
10708
|
};
|
|
10574
10709
|
}
|
|
10575
|
-
setState(
|
|
10710
|
+
setState(LOADING_STATE5);
|
|
10576
10711
|
coinlist.requirements.getPii().then((pii) => {
|
|
10577
10712
|
if (isCancelled) return;
|
|
10578
10713
|
if (pii.kind === "company") {
|
|
@@ -10600,7 +10735,7 @@ function useTaxDocument({
|
|
|
10600
10735
|
isCancelled = true;
|
|
10601
10736
|
};
|
|
10602
10737
|
}, [coinlist, isReady, isOpen, log]);
|
|
10603
|
-
const onEditField =
|
|
10738
|
+
const onEditField = useCallback9(
|
|
10604
10739
|
(field, value) => {
|
|
10605
10740
|
setState(
|
|
10606
10741
|
(prev) => prev.type === "EDITING" ? { ...prev, fields: { ...prev.fields, [field]: value } } : prev
|
|
@@ -10608,7 +10743,7 @@ function useTaxDocument({
|
|
|
10608
10743
|
},
|
|
10609
10744
|
[]
|
|
10610
10745
|
);
|
|
10611
|
-
const onStartEdit =
|
|
10746
|
+
const onStartEdit = useCallback9(() => {
|
|
10612
10747
|
setState(
|
|
10613
10748
|
(prev) => prev.type === "REVIEW" ? {
|
|
10614
10749
|
type: "EDITING",
|
|
@@ -10619,7 +10754,7 @@ function useTaxDocument({
|
|
|
10619
10754
|
} : prev
|
|
10620
10755
|
);
|
|
10621
10756
|
}, []);
|
|
10622
|
-
const onSaveEdit =
|
|
10757
|
+
const onSaveEdit = useCallback9(() => {
|
|
10623
10758
|
setState(
|
|
10624
10759
|
(prev) => prev.type === "EDITING" ? {
|
|
10625
10760
|
type: "REVIEW",
|
|
@@ -10630,7 +10765,7 @@ function useTaxDocument({
|
|
|
10630
10765
|
} : prev
|
|
10631
10766
|
);
|
|
10632
10767
|
}, []);
|
|
10633
|
-
const onCancelEdit =
|
|
10768
|
+
const onCancelEdit = useCallback9(() => {
|
|
10634
10769
|
setState(
|
|
10635
10770
|
(prev) => prev.type === "EDITING" ? {
|
|
10636
10771
|
type: "REVIEW",
|
|
@@ -10641,7 +10776,7 @@ function useTaxDocument({
|
|
|
10641
10776
|
} : prev
|
|
10642
10777
|
);
|
|
10643
10778
|
}, []);
|
|
10644
|
-
const onSign =
|
|
10779
|
+
const onSign = useCallback9(() => {
|
|
10645
10780
|
if (state.type !== "REVIEW" && state.type !== "SIGN_ONLY") return;
|
|
10646
10781
|
if (state.type === "REVIEW" && state.fields.dob.trim() !== "" && !isValidUsDate(state.fields.dob)) {
|
|
10647
10782
|
setState({
|
|
@@ -10683,7 +10818,7 @@ function useTaxDocumentModalViewModel({
|
|
|
10683
10818
|
onSubmitted
|
|
10684
10819
|
}) {
|
|
10685
10820
|
const { state, onEditField, onStartEdit, onSaveEdit, onCancelEdit, onSign } = useTaxDocument({ isOpen });
|
|
10686
|
-
|
|
10821
|
+
useEffect24(() => {
|
|
10687
10822
|
if (state.type === "SUBMITTED") {
|
|
10688
10823
|
onSubmitted?.(state.submission);
|
|
10689
10824
|
onClose();
|
|
@@ -10695,7 +10830,7 @@ function useTaxDocumentModalViewModel({
|
|
|
10695
10830
|
}
|
|
10696
10831
|
return { type: "content", title: toTitle(state), screen: toScreen(state) };
|
|
10697
10832
|
}, [isOpen, state]);
|
|
10698
|
-
const onEvent =
|
|
10833
|
+
const onEvent = useCallback10(
|
|
10699
10834
|
(event) => {
|
|
10700
10835
|
switch (event.type) {
|
|
10701
10836
|
case "ON_CLOSE":
|
|
@@ -10778,7 +10913,7 @@ function toFieldsUi(fields) {
|
|
|
10778
10913
|
}
|
|
10779
10914
|
|
|
10780
10915
|
// src/client/components/requirements/tax-document/TaxDocumentModalContainer.tsx
|
|
10781
|
-
import { jsx as
|
|
10916
|
+
import { jsx as jsx63 } from "react/jsx-runtime";
|
|
10782
10917
|
function TaxDocumentModalContainer({
|
|
10783
10918
|
isOpen,
|
|
10784
10919
|
onClose,
|
|
@@ -10790,7 +10925,7 @@ function TaxDocumentModalContainer({
|
|
|
10790
10925
|
onClose,
|
|
10791
10926
|
onSubmitted
|
|
10792
10927
|
});
|
|
10793
|
-
return /* @__PURE__ */
|
|
10928
|
+
return /* @__PURE__ */ jsx63(
|
|
10794
10929
|
TaxDocumentModalView,
|
|
10795
10930
|
{
|
|
10796
10931
|
state,
|
|
@@ -10800,6 +10935,39 @@ function TaxDocumentModalContainer({
|
|
|
10800
10935
|
);
|
|
10801
10936
|
}
|
|
10802
10937
|
|
|
10938
|
+
// src/client/components/requirements/VerificationOverlay.tsx
|
|
10939
|
+
import { jsx as jsx64, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
10940
|
+
function VerificationOverlay({
|
|
10941
|
+
onClose,
|
|
10942
|
+
children
|
|
10943
|
+
}) {
|
|
10944
|
+
return /* @__PURE__ */ jsx64(CoinListStyleScope, { children: /* @__PURE__ */ jsx64(VerificationOverlayBody, { onClose, children }) });
|
|
10945
|
+
}
|
|
10946
|
+
function VerificationOverlayBody({
|
|
10947
|
+
onClose,
|
|
10948
|
+
children
|
|
10949
|
+
}) {
|
|
10950
|
+
return /* @__PURE__ */ jsx64(
|
|
10951
|
+
"div",
|
|
10952
|
+
{
|
|
10953
|
+
role: "dialog",
|
|
10954
|
+
"aria-modal": "true",
|
|
10955
|
+
"aria-label": "Identity verification",
|
|
10956
|
+
className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
|
|
10957
|
+
children: /* @__PURE__ */ jsxs45("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: [
|
|
10958
|
+
/* @__PURE__ */ jsx64(
|
|
10959
|
+
CloseButton,
|
|
10960
|
+
{
|
|
10961
|
+
onClick: onClose,
|
|
10962
|
+
className: "clcosdk:absolute clcosdk:top-4 clcosdk:right-4"
|
|
10963
|
+
}
|
|
10964
|
+
),
|
|
10965
|
+
children
|
|
10966
|
+
] })
|
|
10967
|
+
}
|
|
10968
|
+
);
|
|
10969
|
+
}
|
|
10970
|
+
|
|
10803
10971
|
// src/client/components/requirements/wallet/ConnectWalletModalView.tsx
|
|
10804
10972
|
import { useId as useId5 } from "react";
|
|
10805
10973
|
import { jsx as jsx65, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
@@ -10911,10 +11079,10 @@ function Screen2({
|
|
|
10911
11079
|
}
|
|
10912
11080
|
|
|
10913
11081
|
// src/client/hooks/requirements/wallet/useConnectWalletModalViewModel.ts
|
|
10914
|
-
import { useCallback as
|
|
11082
|
+
import { useCallback as useCallback12, useEffect as useEffect26, useMemo as useMemo7 } from "react";
|
|
10915
11083
|
|
|
10916
11084
|
// src/client/hooks/requirements/data/useConnectWallet.ts
|
|
10917
|
-
import { useCallback as
|
|
11085
|
+
import { useCallback as useCallback11, useEffect as useEffect25, useRef as useRef16, useState as useState28 } from "react";
|
|
10918
11086
|
|
|
10919
11087
|
// src/client/core/wallets/connect-external-wallet.ts
|
|
10920
11088
|
var DEFAULT_STATEMENT = "Sign this message to prove you own this wallet. This does not cost gas or move funds.";
|
|
@@ -11045,24 +11213,24 @@ function useConnectWallet({
|
|
|
11045
11213
|
statement
|
|
11046
11214
|
}) {
|
|
11047
11215
|
const { coinlist } = useCoinList();
|
|
11048
|
-
const [state, setState] =
|
|
11216
|
+
const [state, setState] = useState28(
|
|
11049
11217
|
() => wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
|
|
11050
11218
|
);
|
|
11051
11219
|
const attempt = useRef16(0);
|
|
11052
|
-
|
|
11220
|
+
useEffect25(() => {
|
|
11053
11221
|
attempt.current += 1;
|
|
11054
11222
|
if (!isOpen) return;
|
|
11055
11223
|
setState(
|
|
11056
11224
|
wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
|
|
11057
11225
|
);
|
|
11058
11226
|
}, [isOpen, wallet?.address]);
|
|
11059
|
-
|
|
11227
|
+
useEffect25(
|
|
11060
11228
|
() => () => {
|
|
11061
11229
|
attempt.current += 1;
|
|
11062
11230
|
},
|
|
11063
11231
|
[]
|
|
11064
11232
|
);
|
|
11065
|
-
const onSign =
|
|
11233
|
+
const onSign = useCallback11(() => {
|
|
11066
11234
|
if (!wallet || state.type !== "READY") return;
|
|
11067
11235
|
attempt.current += 1;
|
|
11068
11236
|
const gen = attempt.current;
|
|
@@ -11124,7 +11292,7 @@ function useConnectWalletModalViewModel({
|
|
|
11124
11292
|
challengeType,
|
|
11125
11293
|
statement
|
|
11126
11294
|
});
|
|
11127
|
-
|
|
11295
|
+
useEffect26(() => {
|
|
11128
11296
|
if (state.type === "CONNECTED") {
|
|
11129
11297
|
onConnected?.(state.binding);
|
|
11130
11298
|
onClose();
|
|
@@ -11155,7 +11323,7 @@ function useConnectWalletModalViewModel({
|
|
|
11155
11323
|
canRequestConnect
|
|
11156
11324
|
};
|
|
11157
11325
|
}, [isOpen, state, onRequestConnect]);
|
|
11158
|
-
const onEvent =
|
|
11326
|
+
const onEvent = useCallback12(
|
|
11159
11327
|
(event) => {
|
|
11160
11328
|
switch (event.type) {
|
|
11161
11329
|
case "ON_CLOSE":
|
|
@@ -11195,63 +11363,12 @@ function ConnectWalletModalContainer({
|
|
|
11195
11363
|
);
|
|
11196
11364
|
}
|
|
11197
11365
|
|
|
11198
|
-
// src/client/hooks/requirements/
|
|
11199
|
-
import { useCallback as
|
|
11200
|
-
|
|
11201
|
-
// src/client/hooks/requirements/checklist/useRequirementsChecklistViewModel.types.ts
|
|
11202
|
-
var RequirementItemUi = {
|
|
11203
|
-
fromDomain(req, statusInfo, label, description2, addresses = []) {
|
|
11204
|
-
return {
|
|
11205
|
-
variant: RequirementVariant.fromType(req.type),
|
|
11206
|
-
status: statusInfo ? RequirementStatus.fromStatusValue(statusInfo.status) : "required",
|
|
11207
|
-
label,
|
|
11208
|
-
description: description2,
|
|
11209
|
-
multiWallet: req.type === "whitelisted_wallet",
|
|
11210
|
-
connectedWallets: addresses.map((address) => ({
|
|
11211
|
-
id: address.id,
|
|
11212
|
-
address: address.address,
|
|
11213
|
-
shortAddress: shortenAddress(address.address)
|
|
11214
|
-
}))
|
|
11215
|
-
};
|
|
11216
|
-
}
|
|
11217
|
-
};
|
|
11218
|
-
var RequirementVariant = {
|
|
11219
|
-
fromType(type) {
|
|
11220
|
-
switch (type) {
|
|
11221
|
-
case "external_wallet":
|
|
11222
|
-
case "whitelisted_wallet":
|
|
11223
|
-
return "wallet";
|
|
11224
|
-
default:
|
|
11225
|
-
return "verification";
|
|
11226
|
-
}
|
|
11227
|
-
}
|
|
11228
|
-
};
|
|
11229
|
-
var RequirementStatus = {
|
|
11230
|
-
fromStatusValue(status) {
|
|
11231
|
-
switch (status) {
|
|
11232
|
-
case "not_started":
|
|
11233
|
-
case "action_needed":
|
|
11234
|
-
return "required";
|
|
11235
|
-
case "in_progress":
|
|
11236
|
-
return "pending";
|
|
11237
|
-
case "completed":
|
|
11238
|
-
return "completed";
|
|
11239
|
-
case "rejected":
|
|
11240
|
-
return "rejected";
|
|
11241
|
-
}
|
|
11242
|
-
}
|
|
11243
|
-
};
|
|
11244
|
-
var ChecklistStatus = {
|
|
11245
|
-
derive(statuses) {
|
|
11246
|
-
if (statuses.some((s) => s.status === "rejected")) return "ineligible";
|
|
11247
|
-
if (statuses.every((s) => s.status === "completed")) return "eligible";
|
|
11248
|
-
return "inProgress";
|
|
11249
|
-
}
|
|
11250
|
-
};
|
|
11366
|
+
// src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
|
|
11367
|
+
import { useCallback as useCallback15, useEffect as useEffect29, useMemo as useMemo8, useRef as useRef17, useState as useState31 } from "react";
|
|
11251
11368
|
|
|
11252
11369
|
// src/client/hooks/requirements/data/useOptionAddresses.ts
|
|
11253
|
-
import { useCallback as
|
|
11254
|
-
var
|
|
11370
|
+
import { useCallback as useCallback13, useEffect as useEffect27, useState as useState29 } from "react";
|
|
11371
|
+
var LOADING_STATE6 = { type: "LOADING" };
|
|
11255
11372
|
var EMPTY_STATE = {
|
|
11256
11373
|
type: "CONTENT",
|
|
11257
11374
|
addresses: []
|
|
@@ -11260,19 +11377,19 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
11260
11377
|
const { coinlist, isReady } = useCoinList();
|
|
11261
11378
|
const log = useLogger("useOptionAddresses");
|
|
11262
11379
|
const { data, enabled = true } = options;
|
|
11263
|
-
const [addressesState, setAddressesState] =
|
|
11264
|
-
data !== void 0 ? { type: "CONTENT", addresses: data } :
|
|
11380
|
+
const [addressesState, setAddressesState] = useState29(
|
|
11381
|
+
data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE6
|
|
11265
11382
|
);
|
|
11266
|
-
const [fetchKey, setFetchKey] =
|
|
11267
|
-
const refetch =
|
|
11268
|
-
const disconnect =
|
|
11383
|
+
const [fetchKey, setFetchKey] = useState29(0);
|
|
11384
|
+
const refetch = useCallback13(() => setFetchKey((k) => k + 1), []);
|
|
11385
|
+
const disconnect = useCallback13(
|
|
11269
11386
|
async (addressId) => {
|
|
11270
11387
|
await coinlist.wallets.remove({ offerId, addressId });
|
|
11271
11388
|
refetch();
|
|
11272
11389
|
},
|
|
11273
11390
|
[coinlist, offerId, refetch]
|
|
11274
11391
|
);
|
|
11275
|
-
|
|
11392
|
+
useEffect27(() => {
|
|
11276
11393
|
let isCancelled = false;
|
|
11277
11394
|
if (!enabled) {
|
|
11278
11395
|
setAddressesState(
|
|
@@ -11284,7 +11401,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
11284
11401
|
}
|
|
11285
11402
|
if (!isReady) {
|
|
11286
11403
|
if (data === void 0) {
|
|
11287
|
-
setAddressesState(
|
|
11404
|
+
setAddressesState(LOADING_STATE6);
|
|
11288
11405
|
}
|
|
11289
11406
|
return () => {
|
|
11290
11407
|
isCancelled = true;
|
|
@@ -11301,7 +11418,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
11301
11418
|
isCancelled = true;
|
|
11302
11419
|
};
|
|
11303
11420
|
}
|
|
11304
|
-
setAddressesState(
|
|
11421
|
+
setAddressesState(LOADING_STATE6);
|
|
11305
11422
|
coinlist.wallets.list({ offerId, offerOptionId }).then((addresses) => {
|
|
11306
11423
|
if (!isCancelled) {
|
|
11307
11424
|
log.debug(() => ({
|
|
@@ -11328,22 +11445,22 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
|
|
|
11328
11445
|
}
|
|
11329
11446
|
|
|
11330
11447
|
// src/client/hooks/requirements/data/useRequirements.ts
|
|
11331
|
-
import { useCallback as
|
|
11332
|
-
var
|
|
11448
|
+
import { useCallback as useCallback14, useEffect as useEffect28, useState as useState30 } from "react";
|
|
11449
|
+
var LOADING_STATE7 = { type: "LOADING" };
|
|
11333
11450
|
function useRequirements(offerId, options = {}) {
|
|
11334
11451
|
const { coinlist, isReady } = useCoinList();
|
|
11335
11452
|
const log = useLogger("useRequirements");
|
|
11336
11453
|
const { data } = options;
|
|
11337
|
-
const [requirementsState, setRequirementsState] =
|
|
11338
|
-
data !== void 0 ? { type: "CONTENT", ...data } :
|
|
11454
|
+
const [requirementsState, setRequirementsState] = useState30(
|
|
11455
|
+
data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE7
|
|
11339
11456
|
);
|
|
11340
|
-
const [fetchKey, setFetchKey] =
|
|
11341
|
-
const refetch =
|
|
11342
|
-
|
|
11457
|
+
const [fetchKey, setFetchKey] = useState30(0);
|
|
11458
|
+
const refetch = useCallback14(() => setFetchKey((k) => k + 1), []);
|
|
11459
|
+
useEffect28(() => {
|
|
11343
11460
|
let isCancelled = false;
|
|
11344
11461
|
if (!isReady) {
|
|
11345
11462
|
if (data === void 0) {
|
|
11346
|
-
setRequirementsState(
|
|
11463
|
+
setRequirementsState(LOADING_STATE7);
|
|
11347
11464
|
}
|
|
11348
11465
|
return () => {
|
|
11349
11466
|
isCancelled = true;
|
|
@@ -11360,7 +11477,7 @@ function useRequirements(offerId, options = {}) {
|
|
|
11360
11477
|
isCancelled = true;
|
|
11361
11478
|
};
|
|
11362
11479
|
}
|
|
11363
|
-
setRequirementsState(
|
|
11480
|
+
setRequirementsState(LOADING_STATE7);
|
|
11364
11481
|
Promise.all([
|
|
11365
11482
|
coinlist.requirements.forOffer(offerId),
|
|
11366
11483
|
coinlist.requirements.statuses(offerId)
|
|
@@ -11397,7 +11514,58 @@ function useRequirements(offerId, options = {}) {
|
|
|
11397
11514
|
return { requirementsState, refetch };
|
|
11398
11515
|
}
|
|
11399
11516
|
|
|
11400
|
-
// src/client/hooks/requirements/
|
|
11517
|
+
// src/client/hooks/requirements/useRequirementsChecklistViewModel.types.ts
|
|
11518
|
+
var RequirementItemUi = {
|
|
11519
|
+
fromDomain(req, statusInfo, label, description2, addresses = []) {
|
|
11520
|
+
return {
|
|
11521
|
+
variant: RequirementVariant.fromType(req.type),
|
|
11522
|
+
status: statusInfo ? RequirementStatus.fromStatusValue(statusInfo.status) : "required",
|
|
11523
|
+
label,
|
|
11524
|
+
description: description2,
|
|
11525
|
+
multiWallet: req.type === "whitelisted_wallet",
|
|
11526
|
+
connectedWallets: addresses.map((address) => ({
|
|
11527
|
+
id: address.id,
|
|
11528
|
+
address: address.address,
|
|
11529
|
+
shortAddress: shortenAddress(address.address)
|
|
11530
|
+
}))
|
|
11531
|
+
};
|
|
11532
|
+
}
|
|
11533
|
+
};
|
|
11534
|
+
var RequirementVariant = {
|
|
11535
|
+
fromType(type) {
|
|
11536
|
+
switch (type) {
|
|
11537
|
+
case "external_wallet":
|
|
11538
|
+
case "whitelisted_wallet":
|
|
11539
|
+
return "wallet";
|
|
11540
|
+
default:
|
|
11541
|
+
return "verification";
|
|
11542
|
+
}
|
|
11543
|
+
}
|
|
11544
|
+
};
|
|
11545
|
+
var RequirementStatus = {
|
|
11546
|
+
fromStatusValue(status) {
|
|
11547
|
+
switch (status) {
|
|
11548
|
+
case "not_started":
|
|
11549
|
+
case "action_needed":
|
|
11550
|
+
return "required";
|
|
11551
|
+
case "in_progress":
|
|
11552
|
+
return "pending";
|
|
11553
|
+
case "completed":
|
|
11554
|
+
return "completed";
|
|
11555
|
+
case "rejected":
|
|
11556
|
+
return "rejected";
|
|
11557
|
+
}
|
|
11558
|
+
}
|
|
11559
|
+
};
|
|
11560
|
+
var ChecklistStatus = {
|
|
11561
|
+
derive(statuses) {
|
|
11562
|
+
if (statuses.some((s) => s.status === "rejected")) return "ineligible";
|
|
11563
|
+
if (statuses.every((s) => s.status === "completed")) return "eligible";
|
|
11564
|
+
return "inProgress";
|
|
11565
|
+
}
|
|
11566
|
+
};
|
|
11567
|
+
|
|
11568
|
+
// src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
|
|
11401
11569
|
var DEFAULT_LABELS = {
|
|
11402
11570
|
kyc_approved: "KYC Verification",
|
|
11403
11571
|
external_wallet: "External Wallet",
|
|
@@ -11439,19 +11607,19 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
11439
11607
|
const log = useLogger("useRequirementsChecklistViewModel");
|
|
11440
11608
|
const { coinlist } = useCoinList();
|
|
11441
11609
|
const { requirementsState, refetch } = useRequirements(offerId, { data });
|
|
11442
|
-
const [expandedId, setExpandedId] =
|
|
11443
|
-
const [taxDocumentOpen, setTaxDocumentOpen] =
|
|
11444
|
-
const [connectWalletOpen, setConnectWalletOpen] =
|
|
11445
|
-
const [verifyingRequirementId, setVerifyingRequirementId] =
|
|
11610
|
+
const [expandedId, setExpandedId] = useState31(null);
|
|
11611
|
+
const [taxDocumentOpen, setTaxDocumentOpen] = useState31(false);
|
|
11612
|
+
const [connectWalletOpen, setConnectWalletOpen] = useState31(false);
|
|
11613
|
+
const [verifyingRequirementId, setVerifyingRequirementId] = useState31(null);
|
|
11446
11614
|
const isMountedRef = useRef17(true);
|
|
11447
|
-
|
|
11615
|
+
useEffect29(() => {
|
|
11448
11616
|
isMountedRef.current = true;
|
|
11449
11617
|
return () => {
|
|
11450
11618
|
isMountedRef.current = false;
|
|
11451
11619
|
};
|
|
11452
11620
|
}, []);
|
|
11453
|
-
const [hasWalletRequirement, setHasWalletRequirement] =
|
|
11454
|
-
|
|
11621
|
+
const [hasWalletRequirement, setHasWalletRequirement] = useState31(false);
|
|
11622
|
+
useEffect29(() => {
|
|
11455
11623
|
if (requirementsState.type === "CONTENT") {
|
|
11456
11624
|
setHasWalletRequirement(
|
|
11457
11625
|
(requirementsState.requirements[optionId] ?? []).some(
|
|
@@ -11467,14 +11635,14 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
11467
11635
|
} = useOptionAddresses(offerId, optionId, {
|
|
11468
11636
|
enabled: hasWalletRequirement
|
|
11469
11637
|
});
|
|
11470
|
-
const removeWallet =
|
|
11638
|
+
const removeWallet = useCallback15(
|
|
11471
11639
|
async (addressId) => {
|
|
11472
11640
|
await disconnect(OfferOptionAddressId(addressId));
|
|
11473
11641
|
refetch();
|
|
11474
11642
|
},
|
|
11475
11643
|
[disconnect, refetch]
|
|
11476
11644
|
);
|
|
11477
|
-
const awaitVerificationResult =
|
|
11645
|
+
const awaitVerificationResult = useCallback15(
|
|
11478
11646
|
(requirementId, statusBeforeSubmit) => {
|
|
11479
11647
|
void (async () => {
|
|
11480
11648
|
const deadline = Date.now() + VERIFICATION_POLL_TIMEOUT_MS;
|
|
@@ -11583,7 +11751,7 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
11583
11751
|
identityVerificationOptions,
|
|
11584
11752
|
removeWallet
|
|
11585
11753
|
]);
|
|
11586
|
-
const handleRequirementAction =
|
|
11754
|
+
const handleRequirementAction = useCallback15(
|
|
11587
11755
|
(requirement) => {
|
|
11588
11756
|
const inlineVerification = statusById.get(requirement.id)?.kycLevel !== void 0 && onRequirementActionOverride === void 0;
|
|
11589
11757
|
if (inlineVerification) {
|
|
@@ -11615,7 +11783,7 @@ function useRequirementsChecklistViewModel(options) {
|
|
|
11615
11783
|
coinlist
|
|
11616
11784
|
]
|
|
11617
11785
|
);
|
|
11618
|
-
const onEvent =
|
|
11786
|
+
const onEvent = useCallback15(
|
|
11619
11787
|
(event) => {
|
|
11620
11788
|
switch (event.type) {
|
|
11621
11789
|
case "ON_TOGGLE_ITEM":
|
|
@@ -11712,7 +11880,7 @@ function toVerificationUi(verifyingRequirementId, statusById, identityVerificati
|
|
|
11712
11880
|
};
|
|
11713
11881
|
}
|
|
11714
11882
|
|
|
11715
|
-
// src/client/components/requirements/
|
|
11883
|
+
// src/client/components/requirements/RequirementsChecklistContainer.tsx
|
|
11716
11884
|
import { Fragment as Fragment10, jsx as jsx67, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
11717
11885
|
function RequirementsChecklistContainer({
|
|
11718
11886
|
loading,
|
|
@@ -11778,7 +11946,7 @@ function RequirementsChecklistContainer({
|
|
|
11778
11946
|
] });
|
|
11779
11947
|
}
|
|
11780
11948
|
|
|
11781
|
-
// src/client/core/observability/pino-client-logger.ts
|
|
11949
|
+
// src/client/core/shared/observability/pino-client-logger.ts
|
|
11782
11950
|
import { pino } from "pino";
|
|
11783
11951
|
function pinoClientLogger(options) {
|
|
11784
11952
|
return loggerOverPino(
|
|
@@ -11795,7 +11963,7 @@ function pinoClientLogger(options) {
|
|
|
11795
11963
|
}
|
|
11796
11964
|
|
|
11797
11965
|
// src/client/hooks/auth/useCompleteOAuth.ts
|
|
11798
|
-
import { useEffect as
|
|
11966
|
+
import { useEffect as useEffect30, useRef as useRef18 } from "react";
|
|
11799
11967
|
function useCompleteOAuth(options) {
|
|
11800
11968
|
const { coinlist } = useCoinList();
|
|
11801
11969
|
const log = useLogger("useCompleteOAuth");
|
|
@@ -11806,7 +11974,7 @@ function useCompleteOAuth(options) {
|
|
|
11806
11974
|
onFailureRef.current = options.onFailure;
|
|
11807
11975
|
onSuccessRef.current = options.onSuccess;
|
|
11808
11976
|
const hasStartedExchangeRef = useRef18(false);
|
|
11809
|
-
|
|
11977
|
+
useEffect30(() => {
|
|
11810
11978
|
if (typeof window === "undefined") return;
|
|
11811
11979
|
const params = new URLSearchParams(window.location.search);
|
|
11812
11980
|
if (!params.has("code") && !params.has("error")) return;
|
|
@@ -11870,20 +12038,20 @@ function useCompleteOAuth(options) {
|
|
|
11870
12038
|
}
|
|
11871
12039
|
|
|
11872
12040
|
// src/client/hooks/checkout/coin-list/token-sale/data/useParticipations.ts
|
|
11873
|
-
import { useEffect as
|
|
11874
|
-
var
|
|
12041
|
+
import { useEffect as useEffect31, useState as useState32 } from "react";
|
|
12042
|
+
var LOADING_STATE8 = { type: "LOADING" };
|
|
11875
12043
|
function useParticipations(offerId, options = {}) {
|
|
11876
12044
|
const { coinlist, isReady } = useCoinList();
|
|
11877
12045
|
const log = useLogger("useParticipations");
|
|
11878
12046
|
const { data } = options;
|
|
11879
|
-
const [participationsState, setParticipationsState] =
|
|
11880
|
-
data !== void 0 ? { type: "CONTENT", participations: data } :
|
|
12047
|
+
const [participationsState, setParticipationsState] = useState32(
|
|
12048
|
+
data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE8
|
|
11881
12049
|
);
|
|
11882
|
-
|
|
12050
|
+
useEffect31(() => {
|
|
11883
12051
|
let isCancelled = false;
|
|
11884
12052
|
if (!isReady) {
|
|
11885
12053
|
if (data === void 0) {
|
|
11886
|
-
setParticipationsState(
|
|
12054
|
+
setParticipationsState(LOADING_STATE8);
|
|
11887
12055
|
}
|
|
11888
12056
|
return () => {
|
|
11889
12057
|
isCancelled = true;
|
|
@@ -11894,7 +12062,7 @@ function useParticipations(offerId, options = {}) {
|
|
|
11894
12062
|
isCancelled = true;
|
|
11895
12063
|
};
|
|
11896
12064
|
}
|
|
11897
|
-
setParticipationsState(
|
|
12065
|
+
setParticipationsState(LOADING_STATE8);
|
|
11898
12066
|
coinlist.tokenSale.list(offerId).then((participations) => {
|
|
11899
12067
|
if (!isCancelled) {
|
|
11900
12068
|
log.debug(() => ({
|
|
@@ -11921,20 +12089,20 @@ function useParticipations(offerId, options = {}) {
|
|
|
11921
12089
|
}
|
|
11922
12090
|
|
|
11923
12091
|
// src/client/hooks/offers/data/useOfferDetails.ts
|
|
11924
|
-
import { useEffect as
|
|
11925
|
-
var
|
|
12092
|
+
import { useEffect as useEffect32, useState as useState33 } from "react";
|
|
12093
|
+
var LOADING_STATE9 = { type: "LOADING" };
|
|
11926
12094
|
function useOfferDetails(offerId, options = {}) {
|
|
11927
12095
|
const { coinlist, isReady } = useCoinList();
|
|
11928
12096
|
const log = useLogger("useOfferDetails");
|
|
11929
12097
|
const { data } = options;
|
|
11930
|
-
const [offerDetailsState, setOfferDetailsState] =
|
|
11931
|
-
data !== void 0 ? { type: "CONTENT", offerDetail: data } :
|
|
12098
|
+
const [offerDetailsState, setOfferDetailsState] = useState33(
|
|
12099
|
+
data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE9
|
|
11932
12100
|
);
|
|
11933
|
-
|
|
12101
|
+
useEffect32(() => {
|
|
11934
12102
|
let isCancelled = false;
|
|
11935
12103
|
if (!isReady) {
|
|
11936
12104
|
if (data === void 0) {
|
|
11937
|
-
setOfferDetailsState(
|
|
12105
|
+
setOfferDetailsState(LOADING_STATE9);
|
|
11938
12106
|
}
|
|
11939
12107
|
return () => {
|
|
11940
12108
|
isCancelled = true;
|
|
@@ -11945,7 +12113,7 @@ function useOfferDetails(offerId, options = {}) {
|
|
|
11945
12113
|
isCancelled = true;
|
|
11946
12114
|
};
|
|
11947
12115
|
}
|
|
11948
|
-
setOfferDetailsState(
|
|
12116
|
+
setOfferDetailsState(LOADING_STATE9);
|
|
11949
12117
|
coinlist.offers.get(offerId).then((offerDetail) => {
|
|
11950
12118
|
if (!isCancelled) {
|
|
11951
12119
|
log.debug(() => ({
|
|
@@ -11985,66 +12153,6 @@ var OfferAssetCardUi = {
|
|
|
11985
12153
|
})
|
|
11986
12154
|
};
|
|
11987
12155
|
|
|
11988
|
-
// src/client/hooks/tokens/data/useTokenMetadata.ts
|
|
11989
|
-
import { useCallback as useCallback15, useEffect as useEffect32, useState as useState33 } from "react";
|
|
11990
|
-
var DISABLED_STATE = { type: "DISABLED" };
|
|
11991
|
-
var LOADING_STATE9 = { type: "LOADING" };
|
|
11992
|
-
function useTokenMetadata(options) {
|
|
11993
|
-
const { chain, address, data, enabled = true } = options;
|
|
11994
|
-
const { coinlist, isReady } = useCoinList();
|
|
11995
|
-
const log = useLogger("useTokenMetadata");
|
|
11996
|
-
const [state, setState] = useState33(
|
|
11997
|
-
() => data !== void 0 ? { type: "CONTENT", tokenMetadata: data } : LOADING_STATE9
|
|
11998
|
-
);
|
|
11999
|
-
const [refetchCount, setRefetchCount] = useState33(0);
|
|
12000
|
-
const refetch = useCallback15(() => {
|
|
12001
|
-
setRefetchCount((count) => count + 1);
|
|
12002
|
-
}, []);
|
|
12003
|
-
useEffect32(() => {
|
|
12004
|
-
let isCancelled = false;
|
|
12005
|
-
const seedActive = data !== void 0 && refetchCount === 0;
|
|
12006
|
-
if (!isReady || !enabled || seedActive) {
|
|
12007
|
-
return () => {
|
|
12008
|
-
isCancelled = true;
|
|
12009
|
-
};
|
|
12010
|
-
}
|
|
12011
|
-
setState(LOADING_STATE9);
|
|
12012
|
-
coinlist.tokens.get({ chain, address }).then((tokenMetadata) => {
|
|
12013
|
-
if (!isCancelled) {
|
|
12014
|
-
log.debug(() => ({
|
|
12015
|
-
msg: "settled",
|
|
12016
|
-
fields: {
|
|
12017
|
-
state: "CONTENT",
|
|
12018
|
-
listed: tokenMetadata !== null,
|
|
12019
|
-
symbol: tokenMetadata?.symbol ?? null
|
|
12020
|
-
}
|
|
12021
|
-
}));
|
|
12022
|
-
setState({ type: "CONTENT", tokenMetadata });
|
|
12023
|
-
}
|
|
12024
|
-
}).catch((error) => {
|
|
12025
|
-
if (!isCancelled) {
|
|
12026
|
-
log.failure(
|
|
12027
|
-
() => ({
|
|
12028
|
-
msg: "settled",
|
|
12029
|
-
fields: { state: "ERROR", reason: "generic-error" }
|
|
12030
|
-
}),
|
|
12031
|
-
error
|
|
12032
|
-
);
|
|
12033
|
-
setState({ type: "ERROR", reason: "generic-error" });
|
|
12034
|
-
}
|
|
12035
|
-
});
|
|
12036
|
-
return () => {
|
|
12037
|
-
isCancelled = true;
|
|
12038
|
-
};
|
|
12039
|
-
}, [coinlist, isReady, enabled, chain, address, data, refetchCount, log]);
|
|
12040
|
-
return {
|
|
12041
|
-
// LOADING would be a lie while disabled: nothing is in flight and nothing
|
|
12042
|
-
// will replace it. Settled states (a seed, a previous answer) survive.
|
|
12043
|
-
state: !enabled && state.type === "LOADING" ? DISABLED_STATE : state,
|
|
12044
|
-
refetch
|
|
12045
|
-
};
|
|
12046
|
-
}
|
|
12047
|
-
|
|
12048
12156
|
// src/client/ui/format/date.ts
|
|
12049
12157
|
function formatMonthYear(date, locale) {
|
|
12050
12158
|
return new Intl.DateTimeFormat(locale, {
|
|
@@ -12133,7 +12241,9 @@ export {
|
|
|
12133
12241
|
formatCountdown,
|
|
12134
12242
|
formatMonthYear,
|
|
12135
12243
|
formatSaleCardCountdown,
|
|
12244
|
+
offerAssetIconUrl,
|
|
12136
12245
|
offerIconUrl,
|
|
12246
|
+
offerTokenIdentifier,
|
|
12137
12247
|
ondoLoadErrorReason,
|
|
12138
12248
|
pinoClientLogger,
|
|
12139
12249
|
prepareOndoBuy,
|
|
@@ -12142,6 +12252,9 @@ export {
|
|
|
12142
12252
|
quoteOverAsks,
|
|
12143
12253
|
stablecoinIconUrl,
|
|
12144
12254
|
submitErc20Approval,
|
|
12255
|
+
tokenLogoUrl,
|
|
12256
|
+
tokenMetadataOf,
|
|
12257
|
+
useCheckoutOfferTokenMetadata,
|
|
12145
12258
|
useCoinList,
|
|
12146
12259
|
useCoinListSignInCardViewModel,
|
|
12147
12260
|
useCompleteOAuth,
|