@coinlist-co/react 0.12.1-rc.e183ffd → 0.12.1-rc.f2804ef

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.
@@ -59,6 +59,7 @@ __export(client_exports, {
59
59
  OAUTH_STATE_KEY: () => OAUTH_STATE_KEY,
60
60
  OfferAssetCard: () => OfferAssetCard,
61
61
  OfferAssetCardUi: () => OfferAssetCardUi,
62
+ OfferLogoUi: () => OfferLogoUi,
62
63
  OfferSaleCard: () => OfferSaleCard,
63
64
  OfferSaleCardUi: () => OfferSaleCardUi,
64
65
  OffersAssetGrid: () => OffersAssetGrid,
@@ -120,6 +121,7 @@ __export(client_exports, {
120
121
  quoteOverAsks: () => quoteOverAsks,
121
122
  stablecoinIconUrl: () => stablecoinIconUrl,
122
123
  submitErc20Approval: () => submitErc20Approval,
124
+ tokenLogoSrcSet: () => tokenLogoSrcSet,
123
125
  tokenLogoUrl: () => tokenLogoUrl,
124
126
  tokenMetadataOf: () => tokenMetadataOf,
125
127
  useCheckoutOfferTokenMetadata: () => useCheckoutOfferTokenMetadata,
@@ -162,6 +164,7 @@ __export(client_exports, {
162
164
  useTaxDocument: () => useTaxDocument,
163
165
  useTaxDocumentModalViewModel: () => useTaxDocumentModalViewModel,
164
166
  useTokenMetadata: () => useTokenMetadata,
167
+ useTokenRegistry: () => useTokenRegistry,
165
168
  validateAmount: () => validateAmount,
166
169
  validateSellAmount: () => validateSellAmount,
167
170
  validateSuperstateAmount: () => validateSuperstateAmount
@@ -1865,7 +1868,7 @@ var TOKEN_REGISTRY = {
1865
1868
 
1866
1869
  // src/universal/core/checkout/ondo/constants.ts
1867
1870
  var ONDO_POLL_INTERVAL_MS = 15e3;
1868
- var ONDO_QUOTE_EXPIRY_THRESHOLD_MS = 5e3;
1871
+ var ONDO_QUOTE_MAX_TTL_MS = 15e3;
1869
1872
  var DEFAULT_ONDO_AMOUNT_TO_COMPUTE_PRICE = DecimalString("1000");
1870
1873
  var ONDO_SETTLEMENT_ASSET = USDC_SYMBOL;
1871
1874
  var DEFAULT_ONDO_SELL_TOKENS_TO_COMPUTE_PRICE = 1;
@@ -1888,6 +1891,9 @@ function computeOndoSellPrice(transaction) {
1888
1891
  shares: spendInputAmount
1889
1892
  });
1890
1893
  }
1894
+ function ondoQuoteOfferDeadline(expiresAt, nowMs = Date.now()) {
1895
+ return new Date(Math.min(expiresAt.getTime(), nowMs + ONDO_QUOTE_MAX_TTL_MS));
1896
+ }
1891
1897
  function grossProceeds(expected) {
1892
1898
  const raw = expected.quantity.raw + expected.fee.raw;
1893
1899
  if (raw > MAX_UINT_256) {
@@ -3835,6 +3841,52 @@ var Erc20NamespaceImpl = class {
3835
3841
  }
3836
3842
  };
3837
3843
 
3844
+ // src/universal/core/tokens/token-registry-snapshot.ts
3845
+ var TokenRegistrySnapshot = {
3846
+ /** Indexes a `tokens.list()` result. `[]` is a valid, empty snapshot. */
3847
+ fromTokens: (tokens) => ({
3848
+ tokens,
3849
+ byKey: new Map(
3850
+ tokens.map((token) => [registryKey(token.identifier), token])
3851
+ )
3852
+ }),
3853
+ /**
3854
+ * The registry's entry for one token, or `null` when it lists none. The
3855
+ * registry is curated, so `null` is an ordinary answer rather than an
3856
+ * error, and callers fall back to their own display defaults.
3857
+ */
3858
+ get: (snapshot, token) => snapshot.byKey.get(registryKey(token)) ?? null,
3859
+ /**
3860
+ * The registry's entry for the token an offer is *about*, or `null` when
3861
+ * it lists none of them.
3862
+ *
3863
+ * Resolution follows {@link offerDisplayTokens}: the token a sale
3864
+ * distributes or a swap hands over, never the funding token the user pays
3865
+ * with. An offer deployed on several chains carries one such token per
3866
+ * chain, and the first the registry knows wins - they are the same asset,
3867
+ * so any listed one answers for the offer.
3868
+ */
3869
+ forOffer: (snapshot, offer) => {
3870
+ for (const token of offerDisplayTokens(offer)) {
3871
+ const metadata = TokenRegistrySnapshot.get(snapshot, token);
3872
+ if (metadata !== null) {
3873
+ return metadata;
3874
+ }
3875
+ }
3876
+ return null;
3877
+ }
3878
+ };
3879
+ function offerDisplayTokens(offer) {
3880
+ const swaps = offer.tokens.filter((token) => token.role === "swap");
3881
+ const distributions = offer.tokens.filter(
3882
+ (token) => token.role === "distribution"
3883
+ );
3884
+ return [...swaps, ...distributions];
3885
+ }
3886
+ function registryKey(token) {
3887
+ return `${token.chain}:${token.address.toLowerCase()}`;
3888
+ }
3889
+
3838
3890
  // src/universal/api/nabu/tokens.ts
3839
3891
  var import_viem6 = require("viem");
3840
3892
 
@@ -5035,7 +5087,7 @@ var CoinListProvider = CoinListContextProvider;
5035
5087
  var import_react4 = require("react");
5036
5088
 
5037
5089
  // src/client/generated/sdk-styles.gen.ts
5038
- 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-\\[1em\\]{height:1em}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[1lh\\]{min-height:1lh}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-4{width:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:w-5{width:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:w-6{width:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:w-8{width:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:w-10{width:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-20{width:calc(var(--clcosdk-spacing) * 20)}.clcosdk\\:w-24{width:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:w-32{width:calc(var(--clcosdk-spacing) * 32)}.clcosdk\\:w-40{width:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:w-48{width:calc(var(--clcosdk-spacing) * 48)}.clcosdk\\:w-80{width:calc(var(--clcosdk-spacing) * 80)}.clcosdk\\:w-96{width:calc(var(--clcosdk-spacing) * 96)}.clcosdk\\:w-\\[16px\\]{width:16px}.clcosdk\\:w-\\[28rem\\]{width:28rem}.clcosdk\\:w-\\[448px\\]{width:448px}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-component{width:448px}.clcosdk\\:w-fit{width:fit-content}.clcosdk\\:w-full{width:100%}.clcosdk\\:w-max{width:max-content}.clcosdk\\:max-w-\\[16rem\\]{max-width:16rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[40rem\\]{max-width:40rem}.clcosdk\\:max-w-\\[56rem\\]{max-width:56rem}.clcosdk\\:max-w-\\[64rem\\]{max-width:64rem}.clcosdk\\:max-w-\\[760px\\]{max-width:760px}.clcosdk\\:max-w-full{max-width:100%}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:max-w-sm{max-width:var(--clcosdk-container-sm)}.clcosdk\\:max-w-xl{max-width:var(--clcosdk-container-xl)}.clcosdk\\:min-w-0{min-width:0}.clcosdk\\:flex-1{flex:1}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:rotate-180{rotate:180deg}.clcosdk\\:animate-pulse{animation:var(--clcosdk-animate-pulse)}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.clcosdk\\:grid-rows-\\[0fr\\]{grid-template-rows:0fr}.clcosdk\\:grid-rows-\\[1fr\\]{grid-template-rows:1fr}.clcosdk\\:flex-col{flex-direction:column}.clcosdk\\:flex-wrap{flex-wrap:wrap}.clcosdk\\:items-center{align-items:center}.clcosdk\\:items-end{align-items:flex-end}.clcosdk\\:items-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:justify-end{justify-content:flex-end}.clcosdk\\:gap-1{gap:var(--clcosdk-spacing)}.clcosdk\\:gap-1\\.5{gap:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-2\\.5{gap:calc(var(--clcosdk-spacing) * 2.5)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-\\[5px\\]{gap:5px}:where(.clcosdk\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.clcosdk\\:divide-border>:not(:last-child)){border-color:var(--color-border)}:where(.clcosdk\\:divide-divider>:not(:last-child)){border-color:var(--color-divider)}.clcosdk\\:self-start{align-self:flex-start}.clcosdk\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clcosdk\\:overflow-hidden{overflow:hidden}.clcosdk\\:overflow-y-auto{overflow-y:auto}.clcosdk\\:rounded{border-radius:.25rem}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.clcosdk\\:rounded-\\[20px\\]{border-radius:20px}.clcosdk\\:rounded-\\[28px\\]{border-radius:28px}.clcosdk\\:rounded-btn{border-radius:12px}.clcosdk\\:rounded-card{border-radius:24px}.clcosdk\\:rounded-full{border-radius:3.40282e38px}.clcosdk\\:rounded-lg{border-radius:var(--clcosdk-radius-lg)}.clcosdk\\:rounded-md{border-radius:var(--clcosdk-radius-md)}.clcosdk\\:rounded-xl{border-radius:var(--clcosdk-radius-xl)}.clcosdk\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-accent\\/60{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/60{border-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.clcosdk\\:border-amber-500{border-color:var(--clcosdk-color-amber-500)}.clcosdk\\:border-background{border-color:var(--color-background)}.clcosdk\\:border-border{border-color:var(--color-border)}.clcosdk\\:border-brand-primary{border-color:var(--color-brand-primary)}.clcosdk\\:border-current{border-color:currentColor}.clcosdk\\:border-divider{border-color:var(--color-divider)}.clcosdk\\:border-error-border{border-color:var(--color-error-border)}.clcosdk\\:border-sale-card-border{border-color:var(--color-sale-card-border)}.clcosdk\\:border-sale-card-chrome-border{border-color:var(--color-sale-card-chrome-border)}.clcosdk\\:border-success-border{border-color:var(--color-success-border)}.clcosdk\\:border-warning-border{border-color:var(--color-warning-border)}.clcosdk\\:border-t-transparent{border-top-color:#0000}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-black\\/50{background-color:var(--clcosdk-color-black)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-black\\/50{background-color:color-mix(in oklab, var(--clcosdk-color-black) 50%, transparent)}}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-divider{background-color:var(--color-divider)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.clcosdk\\:bg-overlay{background-color:var(--color-overlay)}.clcosdk\\:bg-positive{background-color:var(--color-positive)}.clcosdk\\:bg-positive-subtle{background-color:var(--color-positive-subtle)}.clcosdk\\:bg-sale-card-chrome-bg{background-color:var(--color-sale-card-chrome-bg)}.clcosdk\\:bg-section{background-color:var(--color-section)}.clcosdk\\:bg-success-subtle{background-color:var(--color-success-subtle)}.clcosdk\\:bg-surface{background-color:var(--color-surface)}.clcosdk\\:bg-text-disabled{background-color:var(--color-text-disabled)}.clcosdk\\:bg-text-primary{background-color:var(--color-text-primary)}.clcosdk\\:bg-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-\\[image\\:var\\(--btn-primary-gradient\\)\\]{background-image:var(--btn-primary-gradient)}.clcosdk\\:bg-\\[image\\:var\\(--sale-card-surface\\)\\]{background-image:var(--sale-card-surface)}.clcosdk\\:object-contain{object-fit:contain}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:0}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-3\\.5{padding:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:p-5{padding:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:p-16{padding:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:px-3{padding-inline:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:px-4{padding-inline:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:px-5{padding-inline:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:py-1\\.5{padding-block:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:py-3{padding-block:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:py-8{padding-block:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:py-12{padding-block:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:pt-1{padding-top:var(--clcosdk-spacing)}.clcosdk\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pt-14{padding-top:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:pr-1\\.5{padding-right:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:pr-3{padding-right:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pl-3{padding-left:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-right{text-align:right}.clcosdk\\:font-mono{font-family:var(--clcosdk-font-mono)}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:text-lg{font-size:var(--clcosdk-text-lg);line-height:var(--tw-leading,var(--clcosdk-text-lg--line-height))}.clcosdk\\:text-sm{font-size:var(--clcosdk-text-sm);line-height:var(--tw-leading,var(--clcosdk-text-sm--line-height))}.clcosdk\\:text-xs{font-size:var(--clcosdk-text-xs);line-height:var(--tw-leading,var(--clcosdk-text-xs--line-height))}.clcosdk\\:text-\\[11px\\]{font-size:11px}.clcosdk\\:text-\\[12px\\]{font-size:12px}.clcosdk\\:text-\\[13px\\]{font-size:13px}.clcosdk\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:text-\\[15px\\]{font-size:15px}.clcosdk\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:text-\\[22px\\]{font-size:22px}.clcosdk\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:text-\\[36px\\]{font-size:36px}.clcosdk\\:text-\\[48px\\]{font-size:48px}.clcosdk\\:text-\\[64px\\]{font-size:64px}.clcosdk\\:leading-\\[105\\%\\]{--tw-leading:105%;line-height:105%}.clcosdk\\:leading-\\[108\\%\\]{--tw-leading:108%;line-height:108%}.clcosdk\\:leading-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.clcosdk\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}.clcosdk\\:font-medium{--tw-font-weight:var(--clcosdk-font-weight-medium);font-weight:var(--clcosdk-font-weight-medium)}.clcosdk\\:font-normal{--tw-font-weight:var(--clcosdk-font-weight-normal);font-weight:var(--clcosdk-font-weight-normal)}.clcosdk\\:font-semibold{--tw-font-weight:var(--clcosdk-font-weight-semibold);font-weight:var(--clcosdk-font-weight-semibold)}.clcosdk\\:tracking-\\[0\\.12px\\]{--tw-tracking:.12px;letter-spacing:.12px}.clcosdk\\:tracking-\\[0\\.28px\\]{--tw-tracking:.28px;letter-spacing:.28px}.clcosdk\\:break-words{overflow-wrap:break-word}.clcosdk\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-background{color:var(--color-background)}.clcosdk\\:text-brand-primary{color:var(--color-brand-primary)}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-positive{color:var(--color-positive)}.clcosdk\\:text-sale-card-text{color:var(--color-sale-card-text)}.clcosdk\\:text-sale-card-text-muted{color:var(--color-sale-card-text-muted)}.clcosdk\\:text-sale-card-text-strong{color:var(--color-sale-card-text-strong)}.clcosdk\\:text-success{color:var(--color-success)}.clcosdk\\:text-text-disabled{color:var(--color-text-disabled)}.clcosdk\\:text-text-inverse{color:var(--color-text-inverse)}.clcosdk\\:text-text-primary{color:var(--color-text-primary)}.clcosdk\\:text-text-secondary{color:var(--color-text-secondary)}.clcosdk\\:text-warning{color:var(--color-warning)}.clcosdk\\:capitalize{text-transform:capitalize}.clcosdk\\:lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:no-underline{text-decoration-line:none}.clcosdk\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.clcosdk\\:opacity-0{opacity:0}.clcosdk\\:opacity-60{opacity:.6}.clcosdk\\:shadow-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.2\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f633);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_1px_1px_0px_rgba\\(10\\,10\\,10\\,0\\.04\\)\\,0px_8px_12px_0px_rgba\\(10\\,10\\,10\\,0\\.08\\)\\]{--tw-shadow:0px 1px 1px 0px var(--tw-shadow-color,#0a0a0a0a), 0px 8px 12px 0px var(--tw-shadow-color,#0a0a0a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_4px_12px_0px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\,0px_12px_28px_0px_rgba\\(0\\,0\\,0\\,0\\.13\\)\\]{--tw-shadow:0px 4px 12px 0px var(--tw-shadow-color,#00000014), 0px 12px 28px 0px var(--tw-shadow-color,#00000021);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[var\\(--btn-primary-shadow\\)\\]{--tw-shadow:var(--btn-primary-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-card{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#0000000d), 0px 12px 24px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-dialog{--tw-shadow:var(--shadow-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-step-active{--tw-shadow:var(--shadow-step-active);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:transition-\\[background-color\\,border-color\\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.clcosdk\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.clcosdk\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.clcosdk\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}.clcosdk\\:ease-out{--tw-ease:var(--clcosdk-ease-out);transition-timing-function:var(--clcosdk-ease-out)}.clcosdk\\:outline-none{--tw-outline-style:none;outline-style:none}.clcosdk\\:group-focus-within\\:opacity-100:is(:where(.clcosdk\\:group):focus-within *){opacity:1}@media (hover:hover){.clcosdk\\:group-hover\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):hover *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-hover\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):hover *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:group-hover\\:opacity-100:is(:where(.clcosdk\\:group):hover *){opacity:1}}.clcosdk\\:group-focus-visible\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):focus-visible *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-focus-visible\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):focus-visible *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:placeholder\\:text-text-disabled::placeholder{color:var(--color-text-disabled)}@media (hover:hover){.clcosdk\\:hover\\:scale-\\[1\\.02\\]:hover{scale:1.02}.clcosdk\\:hover\\:border-text-disabled:hover{border-color:var(--color-text-disabled)}.clcosdk\\:hover\\:bg-\\[\\#fcdcd8\\]:hover{background-color:#fcdcd8}.clcosdk\\:hover\\:bg-border:hover{background-color:var(--color-border)}.clcosdk\\:hover\\:bg-brand-primary:hover{background-color:var(--color-brand-primary)}.clcosdk\\:hover\\:bg-brand-primary-hover:hover{background-color:var(--color-brand-primary-hover)}.clcosdk\\:hover\\:bg-section:hover{background-color:var(--color-section)}.clcosdk\\:hover\\:bg-surface:hover{background-color:var(--color-surface)}.clcosdk\\:hover\\:text-\\[\\#8b1a13\\]:hover{color:#8b1a13}.clcosdk\\:hover\\:text-text-primary:hover{color:var(--color-text-primary)}.clcosdk\\:hover\\:underline:hover{text-decoration-line:underline}.clcosdk\\:hover\\:opacity-80:hover{opacity:.8}.clcosdk\\:hover\\:opacity-90:hover{opacity:.9}}.clcosdk\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:focus-visible\\:ring-gray-400:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-400)}.clcosdk\\:focus-visible\\:ring-gray-500:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-500)}.clcosdk\\:focus-visible\\:ring-red-400:focus-visible{--tw-ring-color:var(--clcosdk-color-red-400)}.clcosdk\\:focus-visible\\:ring-red-500:focus-visible{--tw-ring-color:var(--clcosdk-color-red-500)}.clcosdk\\:focus-visible\\:ring-sale-card-focus-ring:focus-visible{--tw-ring-color:var(--color-sale-card-focus-ring)}.clcosdk\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.clcosdk\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.clcosdk\\:active\\:bg-\\[\\#d9d9d9\\]:active{background-color:#d9d9d9}.clcosdk\\:active\\:bg-\\[\\#f9c9c4\\]:active{background-color:#f9c9c4}.clcosdk\\:active\\:bg-border:active{background-color:var(--color-border)}.clcosdk\\:active\\:bg-brand-primary-active:active{background-color:var(--color-brand-primary-active)}.clcosdk\\:active\\:text-\\[\\#6d1510\\]:active{color:#6d1510}.clcosdk\\:active\\:opacity-80:active{opacity:.8}.clcosdk\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}.clcosdk\\:disabled\\:opacity-50:disabled{opacity:.5}.clcosdk\\:aria-disabled\\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.clcosdk\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}@media not all and (min-width:48rem){.clcosdk\\:max-md\\:hidden{display:none}.clcosdk\\:max-md\\:w-full{width:100%}.clcosdk\\:max-md\\:justify-start{justify-content:flex-start}.clcosdk\\:max-md\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:max-md\\:rounded-none{border-radius:0}.clcosdk\\:max-md\\:border-0{border-style:var(--tw-border-style);border-width:0}.clcosdk\\:max-md\\:bg-transparent{background-color:#0000}.clcosdk\\:max-md\\:p-0{padding:0}@media (hover:hover){.clcosdk\\:max-md\\:hover\\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@media (min-width:40rem){.clcosdk\\:sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.clcosdk\\:md\\:right-\\[-10\\%\\]{right:-10%}.clcosdk\\:md\\:order-1{order:1}.clcosdk\\:md\\:order-2{order:2}.clcosdk\\:md\\:hidden{display:none}.clcosdk\\:md\\:size-\\[20rem\\]{width:20rem;height:20rem}.clcosdk\\:md\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:h-\\[54px\\]{height:54px}.clcosdk\\:md\\:w-9{width:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-\\[minmax\\(0\\,11fr\\)_minmax\\(0\\,8fr\\)\\]{grid-template-columns:minmax(0,11fr) minmax(0,8fr)}.clcosdk\\:md\\:flex-row{flex-direction:row}.clcosdk\\:md\\:items-center{align-items:center}.clcosdk\\:md\\:items-end{align-items:flex-end}.clcosdk\\:md\\:justify-between{justify-content:space-between}.clcosdk\\:md\\:justify-end{justify-content:flex-end}.clcosdk\\:md\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:md\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:gap-x-12{column-gap:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:self-end{align-self:flex-end}.clcosdk\\:md\\:rounded-\\[40px\\]{border-radius:40px}.clcosdk\\:md\\:rounded-card{border-radius:24px}.clcosdk\\:md\\:rounded-dialog{border-radius:32px}.clcosdk\\:md\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:px-8{padding-inline:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-2{padding-right:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:pl-4{padding-left:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:md\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:md\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:md\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:md\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:md\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:md\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:not(:where(.light,.light *)):hover{background-color:#f8717133}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:where(.dark,.dark *):hover{background-color:#f8717133}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:not(:where(.light,.light *)):hover{color:#fca5a5}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:where(.dark,.dark *):hover{color:#fca5a5}}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:not(:where(.light,.light *)):active{background-color:#f871714d}}.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:where(.dark,.dark *):active{background-color:#f871714d}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-divider:not(:where(.light,.light *)):active{background-color:var(--color-divider)}}.clcosdk\\:dark\\:active\\:bg-divider:where(.dark,.dark *):active{background-color:var(--color-divider)}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:not(:where(.light,.light *)):active{color:#f87171}}.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:where(.dark,.dark *):active{color:#f87171}.clcosdk\\:\\[\\&_circle\\]\\:fill-error-subtle circle{fill:var(--color-error-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-success-subtle circle{fill:var(--color-success-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-warning-subtle circle{fill:var(--color-warning-subtle)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
5090
+ var sdkStyles = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--clcosdk-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--clcosdk-color-red-400:oklch(70.4% .191 22.216);--clcosdk-color-red-500:oklch(63.7% .237 25.331);--clcosdk-color-amber-500:oklch(76.9% .188 70.08);--clcosdk-color-gray-400:oklch(70.7% .022 261.325);--clcosdk-color-gray-500:oklch(55.1% .027 264.364);--clcosdk-color-black:#000;--clcosdk-spacing:.25rem;--clcosdk-container-sm:24rem;--clcosdk-container-md:28rem;--clcosdk-container-xl:36rem;--clcosdk-text-xs:.75rem;--clcosdk-text-xs--line-height:calc(1 / .75);--clcosdk-text-sm:.875rem;--clcosdk-text-sm--line-height:calc(1.25 / .875);--clcosdk-text-base:1rem;--clcosdk-text-base--line-height:calc(1.5 / 1);--clcosdk-text-lg:1.125rem;--clcosdk-text-lg--line-height:calc(1.75 / 1.125);--clcosdk-font-weight-normal:400;--clcosdk-font-weight-medium:500;--clcosdk-font-weight-semibold:600;--clcosdk-radius-md:.375rem;--clcosdk-radius-lg:.5rem;--clcosdk-radius-xl:.75rem;--clcosdk-radius-2xl:1rem;--clcosdk-ease-out:cubic-bezier(0, 0, .2, 1);--clcosdk-ease-in-out:cubic-bezier(.4, 0, .2, 1);--clcosdk-animate-spin:spin 1s linear infinite;--clcosdk-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--clcosdk-color-brand-primary:var(--color-brand-primary)}}@layer base{.clco-sdk-root{--color-brand-primary:#171717;--color-brand-primary-hover:#000;--color-brand-primary-active:#262626;--color-accent:#2b3a67;--color-accent-hover:#243057;--color-accent-active:#1d2647;--color-accent-focus:#c7d2fe;--color-accent-subtle:#eef1f8;--color-text-primary:#171717;--color-text-secondary:#8c8c8c;--color-text-disabled:#d1d1d1;--color-text-inverse:#fff;--color-background:#fff;--color-surface:#fafafa;--color-section:#f3f3f3;--color-border:#e5e5e5;--color-divider:#ececec;--color-overlay:#00000080;--color-positive:#15803d;--color-positive-subtle:#dcfce7;--color-negative:#dc2626;--color-negative-subtle:#fee2e2;--color-success:#2c8c5e;--color-success-subtle:#e6f4ec;--color-success-border:#cfe9db;--color-warning:#e08a1a;--color-warning-subtle:#fff7ed;--color-warning-border:#fdead7;--color-error:#b42318;--color-error-subtle:#feeceb;--color-error-border:#fbd5d2;--shadow-step-active:0px 0px 10px 0px #0000001a;--shadow-dialog:0px 8px 32px 0px #0000001a;--btn-primary-gradient:linear-gradient(180deg, #262626 0%, #1c1c1c 50%, #0f0f0f 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #00000059, inset 0px 1px 2px 0px #ffffff2e, inset 0px 1px 0px 0px #ffffff1a;--sale-card-surface:linear-gradient(to top, #0a0a0a 0%, #1a1a1a 100%);--color-sale-card-text:#f4f4f5;--color-sale-card-text-muted:#a1a1aa;--color-sale-card-text-strong:#fff;--color-sale-card-border:#ffffff40;--color-sale-card-chrome-border:#ffffff4d;--color-sale-card-chrome-bg:#ffffff26;--color-sale-card-chrome-emphasis-border:#fff6;--color-sale-card-chrome-emphasis-bg:#ffffff40;--color-sale-card-focus-ring:#ffffff80;--display-on-light:block;--display-on-dark:none}@media (prefers-color-scheme:dark){.clco-sdk-root:not(:where(.light,.light *)){--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6;--display-on-light:none;--display-on-dark:block}}:where(.dark,.dark *) .clco-sdk-root{--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6;--display-on-light:none;--display-on-dark:block}.clco-sdk-root{color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.clco-sdk-root *,.clco-sdk-root :before,.clco-sdk-root :after{box-sizing:border-box}.clco-sdk-root button{appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;padding:0}.clco-sdk-root input,.clco-sdk-root textarea,.clco-sdk-root select{font:inherit;color:inherit;background:0 0;border:none;border-radius:0;padding:0}.clco-sdk-root a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.clco-sdk-root ul,.clco-sdk-root ol{margin:0;padding:0;list-style:none}.clco-sdk-root h1,.clco-sdk-root h2,.clco-sdk-root h3,.clco-sdk-root h4,.clco-sdk-root h5,.clco-sdk-root h6,.clco-sdk-root p,.clco-sdk-root figure,.clco-sdk-root blockquote,.clco-sdk-root dl,.clco-sdk-root dd,.clco-sdk-root pre{margin:0}.clco-sdk-root img,.clco-sdk-root svg{max-width:100%;display:block}@keyframes clco-status-ping{0%{opacity:.7;transform:scale(1)}75%,to{opacity:0;transform:scale(3.25)}}.clco-sdk-root .clcosdk-status-dot-ping{animation:1.6s cubic-bezier(0,0,.2,1) infinite clco-status-ping}.clco-sdk-root .clcosdk-on-light{display:var(--display-on-light)}.clco-sdk-root .clcosdk-on-dark{display:var(--display-on-dark)}@media (prefers-reduced-motion:reduce){.clco-sdk-root .clcosdk-status-dot-ping{opacity:0;animation:none}}}@layer components;@layer utilities{.clcosdk\\:pointer-events-none{pointer-events:none}.clcosdk\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.clcosdk\\:absolute{position:absolute}.clcosdk\\:fixed{position:fixed}.clcosdk\\:relative{position:relative}.clcosdk\\:inset-0{inset:0}.clcosdk\\:top-1\\/2{top:50%}.clcosdk\\:top-4{top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:top-full{top:100%}.clcosdk\\:-right-0\\.5{right:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:right-4{right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:right-\\[-14\\%\\]{right:-14%}.clcosdk\\:-bottom-0\\.5{bottom:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:bottom-full{bottom:100%}.clcosdk\\:left-1\\/2{left:50%}.clcosdk\\:z-0{z-index:0}.clcosdk\\:z-10{z-index:10}.clcosdk\\:z-50{z-index:50}.clcosdk\\:order-1{order:1}.clcosdk\\:order-2{order:2}.clcosdk\\:mt-2{margin-top:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-auto{margin-top:auto}.clcosdk\\:mb-2{margin-bottom:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.clcosdk\\:size-2{width:calc(var(--clcosdk-spacing) * 2);height:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:size-3{width:calc(var(--clcosdk-spacing) * 3);height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:size-3\\.5{width:calc(var(--clcosdk-spacing) * 3.5);height:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:size-4{width:calc(var(--clcosdk-spacing) * 4);height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:size-5{width:calc(var(--clcosdk-spacing) * 5);height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:size-10{width:calc(var(--clcosdk-spacing) * 10);height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:size-12{width:calc(var(--clcosdk-spacing) * 12);height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:size-16{width:calc(var(--clcosdk-spacing) * 16);height:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:size-24{width:calc(var(--clcosdk-spacing) * 24);height:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:size-\\[15rem\\]{width:15rem;height:15rem}.clcosdk\\:size-full{width:100%;height:100%}.clcosdk\\:h-1{height:var(--clcosdk-spacing)}.clcosdk\\:h-3{height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:h-4{height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:h-5{height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:h-6{height:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:h-8{height:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:h-10{height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:h-11{height:calc(var(--clcosdk-spacing) * 11)}.clcosdk\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:h-14{height:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:h-\\[1em\\]{height:1em}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[1lh\\]{min-height:1lh}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-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}}';
5039
5091
 
5040
5092
  // src/client/CoinListStyleScope.tsx
5041
5093
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -7562,6 +7614,20 @@ function tokenLogoUrl(logo, minWidth = 40) {
7562
7614
  }
7563
7615
  }
7564
7616
  }
7617
+ function tokenLogoSrcSet(logo) {
7618
+ switch (logo.kind) {
7619
+ case "VECTOR":
7620
+ return null;
7621
+ case "RASTER": {
7622
+ const candidates = logo.variants.length > 0 ? logo.variants : [logo.original];
7623
+ return [...candidates].sort((a, b) => a.width - b.width).map((image) => `${image.url} ${image.width}w`).join(", ");
7624
+ }
7625
+ default: {
7626
+ const exhaustive = logo;
7627
+ return exhaustive;
7628
+ }
7629
+ }
7630
+ }
7565
7631
  function offerAssetIconUrl(offer, tokenMetadata) {
7566
7632
  return (tokenMetadata ? tokenLogoUrl(tokenMetadata.logo) : null) ?? offerIconUrl(offer);
7567
7633
  }
@@ -8168,8 +8234,12 @@ function useOndoBuyReviewViewModel({
8168
8234
  }
8169
8235
  }, [stepInput.type]);
8170
8236
  const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
8237
+ const offerUntil = (0, import_react17.useMemo)(
8238
+ () => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
8239
+ [transaction]
8240
+ );
8171
8241
  const secondsLeft = useCountdown({
8172
- until: transaction?.expiresAt ?? null,
8242
+ until: offerUntil,
8173
8243
  enabled
8174
8244
  });
8175
8245
  const quoteStatus = toQuoteStatusUi(transactionState, secondsLeft);
@@ -8293,14 +8363,11 @@ function toQuoteStatusUi(state, secondsLeft) {
8293
8363
  message: refreshErrorMessage(state.refreshError)
8294
8364
  };
8295
8365
  }
8296
- if (secondsLeft === null || isTooCloseToExpiry(secondsLeft)) {
8366
+ if (secondsLeft === null || secondsLeft === 0) {
8297
8367
  return { type: "expired" };
8298
8368
  }
8299
8369
  return { type: "valid", expiresInLabel: expiresInLabel(secondsLeft) };
8300
8370
  }
8301
- function isTooCloseToExpiry(secondsLeft) {
8302
- return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
8303
- }
8304
8371
  function expiresInLabel(secondsLeft) {
8305
8372
  const unit = secondsLeft === 1 ? "second" : "seconds";
8306
8373
  return `Quote expires in ${secondsLeft} ${unit}`;
@@ -8792,8 +8859,9 @@ var NO_TOKEN_ADDRESS = EvmContractAddress(
8792
8859
  "0x0000000000000000000000000000000000000000"
8793
8860
  );
8794
8861
  function offerTokenIdentifier(offer, chain) {
8795
- const byChain = offer.tokens.filter((token) => token.chain === chain);
8796
- const asset = byChain.find((token) => token.role === "swap") ?? byChain.find((token) => token.role === "distribution");
8862
+ const asset = offerDisplayTokens(offer).find(
8863
+ (token) => token.chain === chain
8864
+ );
8797
8865
  return asset === void 0 ? null : { chain, address: asset.address };
8798
8866
  }
8799
8867
  function tokenMetadataOf(state) {
@@ -10230,8 +10298,12 @@ function useOndoSellReviewViewModel({
10230
10298
  }
10231
10299
  }, [stepInput.type]);
10232
10300
  const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
10301
+ const offerUntil = (0, import_react26.useMemo)(
10302
+ () => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
10303
+ [transaction]
10304
+ );
10233
10305
  const secondsLeft = useCountdown({
10234
- until: transaction?.expiresAt ?? null,
10306
+ until: offerUntil,
10235
10307
  enabled
10236
10308
  });
10237
10309
  const quoteStatus = toQuoteStatusUi2(transactionState, secondsLeft);
@@ -10360,14 +10432,11 @@ function toQuoteStatusUi2(state, secondsLeft) {
10360
10432
  message: refreshErrorMessage2(state.refreshError)
10361
10433
  };
10362
10434
  }
10363
- if (secondsLeft === null || isTooCloseToExpiry2(secondsLeft)) {
10435
+ if (secondsLeft === null || secondsLeft === 0) {
10364
10436
  return { type: "expired" };
10365
10437
  }
10366
10438
  return { type: "valid", expiresInLabel: expiresInLabel2(secondsLeft) };
10367
10439
  }
10368
- function isTooCloseToExpiry2(secondsLeft) {
10369
- return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
10370
- }
10371
10440
  function expiresInLabel2(secondsLeft) {
10372
10441
  const unit = secondsLeft === 1 ? "second" : "seconds";
10373
10442
  return `Quote expires in ${secondsLeft} ${unit}`;
@@ -13141,6 +13210,58 @@ function renderOndoSide(side, branches) {
13141
13210
  }
13142
13211
  }
13143
13212
 
13213
+ // src/client/components/design-system/ThemedImage.tsx
13214
+ var import_jsx_runtime51 = require("react/jsx-runtime");
13215
+ function ThemedImage({
13216
+ light,
13217
+ dark,
13218
+ sizes,
13219
+ alt,
13220
+ width,
13221
+ height,
13222
+ className,
13223
+ style
13224
+ }) {
13225
+ const shared = { width, height, style };
13226
+ if (!dark) {
13227
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13228
+ "img",
13229
+ {
13230
+ src: light.src,
13231
+ srcSet: light.srcSet,
13232
+ sizes: light.srcSet ? sizes : void 0,
13233
+ className,
13234
+ alt,
13235
+ ...shared
13236
+ }
13237
+ );
13238
+ }
13239
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
13240
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13241
+ "img",
13242
+ {
13243
+ src: light.src,
13244
+ srcSet: light.srcSet,
13245
+ sizes: light.srcSet ? sizes : void 0,
13246
+ className: cn("clcosdk-on-light", className),
13247
+ alt,
13248
+ ...shared
13249
+ }
13250
+ ),
13251
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13252
+ "img",
13253
+ {
13254
+ src: dark.src,
13255
+ srcSet: dark.srcSet,
13256
+ sizes: dark.srcSet ? sizes : void 0,
13257
+ className: cn("clcosdk-on-dark", className),
13258
+ alt,
13259
+ ...shared
13260
+ }
13261
+ )
13262
+ ] });
13263
+ }
13264
+
13144
13265
  // src/client/components/offers/shared/offer-card-keyboard.ts
13145
13266
  function onOfferCardKeyDown(event, onClick) {
13146
13267
  if (event.key !== "Enter" && event.key !== " ") return;
@@ -13149,7 +13270,8 @@ function onOfferCardKeyDown(event, onClick) {
13149
13270
  }
13150
13271
 
13151
13272
  // src/client/components/offers/shared/OfferAssetCard.tsx
13152
- var import_jsx_runtime51 = require("react/jsx-runtime");
13273
+ var import_jsx_runtime52 = require("react/jsx-runtime");
13274
+ var LOGO_SIZES = "(min-width: 768px) 48px, 40px";
13153
13275
  function OfferAssetCard({
13154
13276
  offer,
13155
13277
  onClick,
@@ -13157,7 +13279,7 @@ function OfferAssetCard({
13157
13279
  containerClassName
13158
13280
  }) {
13159
13281
  const interactive = onClick !== void 0;
13160
- const card = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13282
+ const card = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13161
13283
  "article",
13162
13284
  {
13163
13285
  className: cn(
@@ -13171,11 +13293,13 @@ function OfferAssetCard({
13171
13293
  tabIndex: interactive ? 0 : void 0,
13172
13294
  onClick,
13173
13295
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
13174
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:items-center clcosdk:gap-2.5 clcosdk:pr-3 clcosdk:md:gap-3 clcosdk:md:pr-4", children: [
13175
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "clcosdk:h-10 clcosdk:w-10 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-12 clcosdk:md:w-12", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13176
- "img",
13296
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:items-center clcosdk:gap-2.5 clcosdk:pr-3 clcosdk:md:gap-3 clcosdk:md:pr-4", children: [
13297
+ offer.logo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "clcosdk:h-10 clcosdk:w-10 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-12 clcosdk:md:w-12", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13298
+ ThemedImage,
13177
13299
  {
13178
- src: offer.logoUrl,
13300
+ light: offer.logo.light,
13301
+ dark: offer.logo.dark ?? void 0,
13302
+ sizes: LOGO_SIZES,
13179
13303
  alt: "",
13180
13304
  width: 48,
13181
13305
  height: 48,
@@ -13183,8 +13307,8 @@ function OfferAssetCard({
13183
13307
  style: { maxWidth: "none", width: "100%", height: "100%" }
13184
13308
  }
13185
13309
  ) }) : null,
13186
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
13187
- offer.name ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13310
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
13311
+ offer.name ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13188
13312
  "h2",
13189
13313
  {
13190
13314
  className: cn(
@@ -13193,13 +13317,13 @@ function OfferAssetCard({
13193
13317
  children: offer.name
13194
13318
  }
13195
13319
  ) : null,
13196
- offer.symbol ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "clcosdk:w-full clcosdk:truncate clcosdk:text-[13px] clcosdk:leading-[150%] clcosdk:font-normal clcosdk:text-text-secondary clcosdk:md:text-[14px]", children: offer.symbol }) : null
13320
+ offer.symbol ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "clcosdk:w-full clcosdk:truncate clcosdk:text-[13px] clcosdk:leading-[150%] clcosdk:font-normal clcosdk:text-text-secondary clcosdk:md:text-[14px]", children: offer.symbol }) : null
13197
13321
  ] })
13198
13322
  ] })
13199
13323
  }
13200
13324
  );
13201
- const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: containerClassName, children: card }) : card;
13202
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CoinListStyleScope, { children: wrapped });
13325
+ const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: containerClassName, children: card }) : card;
13326
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CoinListStyleScope, { children: wrapped });
13203
13327
  }
13204
13328
  function cardActionLabel(offer) {
13205
13329
  const parts = [offer.name, offer.symbol].filter(Boolean);
@@ -13207,7 +13331,7 @@ function cardActionLabel(offer) {
13207
13331
  }
13208
13332
 
13209
13333
  // src/client/components/offers/grid/OffersAssetGrid.tsx
13210
- var import_jsx_runtime52 = require("react/jsx-runtime");
13334
+ var import_jsx_runtime53 = require("react/jsx-runtime");
13211
13335
  var DEFAULT_MAX_COLUMNS = 3;
13212
13336
  function OffersAssetGrid({
13213
13337
  offers,
@@ -13222,14 +13346,14 @@ function OffersAssetGrid({
13222
13346
  );
13223
13347
  const maxGridWidth = `calc(${cols} * 20rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
13224
13348
  const interactive = onOfferClick !== void 0;
13225
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13349
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13226
13350
  "div",
13227
13351
  {
13228
13352
  className: cn(
13229
13353
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
13230
13354
  containerClassName
13231
13355
  ),
13232
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13356
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13233
13357
  "div",
13234
13358
  {
13235
13359
  className: cn(
@@ -13239,7 +13363,7 @@ function OffersAssetGrid({
13239
13363
  className
13240
13364
  ),
13241
13365
  style: { maxWidth: maxGridWidth },
13242
- children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13366
+ children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13243
13367
  OfferAssetCard,
13244
13368
  {
13245
13369
  offer,
@@ -13281,7 +13405,9 @@ function saleCardStatus({
13281
13405
  }
13282
13406
 
13283
13407
  // src/client/components/offers/shared/OfferSaleCard.tsx
13284
- var import_jsx_runtime53 = require("react/jsx-runtime");
13408
+ var import_jsx_runtime54 = require("react/jsx-runtime");
13409
+ var HEADER_LOGO_SIZES = "(min-width: 768px) 36px, 32px";
13410
+ var WATERMARK_SIZES = "(min-width: 768px) 20rem, 15rem";
13285
13411
  function OfferSaleCard({
13286
13412
  offer,
13287
13413
  onClick,
@@ -13296,7 +13422,8 @@ function OfferSaleCard({
13296
13422
  secondsLeft
13297
13423
  });
13298
13424
  const interactive = onClick !== void 0;
13299
- const card = /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13425
+ const logo = offer.logo ? offer.logo.dark ?? offer.logo.light : null;
13426
+ const card = /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13300
13427
  "article",
13301
13428
  {
13302
13429
  className: cn(
@@ -13311,16 +13438,17 @@ function OfferSaleCard({
13311
13438
  onClick,
13312
13439
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
13313
13440
  children: [
13314
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13441
+ logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13315
13442
  "div",
13316
13443
  {
13317
13444
  "aria-hidden": "true",
13318
13445
  className: "clcosdk:pointer-events-none clcosdk:absolute clcosdk:top-1/2 clcosdk:right-[-14%] clcosdk:z-0 clcosdk:size-[15rem] clcosdk:-translate-y-1/2 clcosdk:md:right-[-10%] clcosdk:md:size-[20rem]",
13319
13446
  style: { mixBlendMode: "overlay" },
13320
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13321
- "img",
13447
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13448
+ ThemedImage,
13322
13449
  {
13323
- src: offer.logoUrl,
13450
+ light: logo,
13451
+ sizes: WATERMARK_SIZES,
13324
13452
  alt: "",
13325
13453
  className: "clcosdk:size-full clcosdk:rounded-full clcosdk:object-cover",
13326
13454
  style: { maxWidth: "none", width: "100%", height: "100%" }
@@ -13328,12 +13456,13 @@ function OfferSaleCard({
13328
13456
  )
13329
13457
  }
13330
13458
  ) : null,
13331
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
13332
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
13333
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "clcosdk:h-8 clcosdk:w-8 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-9 clcosdk:md:w-9", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13334
- "img",
13459
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
13460
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
13461
+ logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "clcosdk:h-8 clcosdk:w-8 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-9 clcosdk:md:w-9", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13462
+ ThemedImage,
13335
13463
  {
13336
- src: offer.logoUrl,
13464
+ light: logo,
13465
+ sizes: HEADER_LOGO_SIZES,
13337
13466
  alt: "",
13338
13467
  width: 36,
13339
13468
  height: 36,
@@ -13341,7 +13470,7 @@ function OfferSaleCard({
13341
13470
  style: { maxWidth: "none", width: "100%", height: "100%" }
13342
13471
  }
13343
13472
  ) }) : null,
13344
- offer.name ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13473
+ offer.name ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13345
13474
  "h2",
13346
13475
  {
13347
13476
  className: cn(
@@ -13351,7 +13480,7 @@ function OfferSaleCard({
13351
13480
  }
13352
13481
  ) : null
13353
13482
  ] }),
13354
- offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13483
+ offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13355
13484
  "p",
13356
13485
  {
13357
13486
  className: cn(
@@ -13362,20 +13491,20 @@ function OfferSaleCard({
13362
13491
  }
13363
13492
  ) : null
13364
13493
  ] }),
13365
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:mt-auto clcosdk:flex clcosdk:h-11 clcosdk:w-full clcosdk:min-w-0 clcosdk:items-center clcosdk:justify-between clcosdk:gap-2 clcosdk:rounded-full clcosdk:border clcosdk:border-sale-card-chrome-border clcosdk:bg-sale-card-chrome-bg clcosdk:py-1.5 clcosdk:pr-1.5 clcosdk:pl-3 clcosdk:md:h-[54px] clcosdk:md:gap-3 clcosdk:md:py-2 clcosdk:md:pr-2 clcosdk:md:pl-4", children: [
13366
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
13367
- status.phase === "live" ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13494
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:mt-auto clcosdk:flex clcosdk:h-11 clcosdk:w-full clcosdk:min-w-0 clcosdk:items-center clcosdk:justify-between clcosdk:gap-2 clcosdk:rounded-full clcosdk:border clcosdk:border-sale-card-chrome-border clcosdk:bg-sale-card-chrome-bg clcosdk:py-1.5 clcosdk:pr-1.5 clcosdk:pl-3 clcosdk:md:h-[54px] clcosdk:md:gap-3 clcosdk:md:py-2 clcosdk:md:pr-2 clcosdk:md:pl-4", children: [
13495
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
13496
+ status.phase === "live" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13368
13497
  "span",
13369
13498
  {
13370
13499
  className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-2 clcosdk:shrink-0",
13371
13500
  "aria-hidden": "true",
13372
13501
  children: [
13373
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
13374
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
13502
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
13503
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
13375
13504
  ]
13376
13505
  }
13377
13506
  ) : null,
13378
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13507
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13379
13508
  "p",
13380
13509
  {
13381
13510
  className: cn(
@@ -13386,7 +13515,7 @@ function OfferSaleCard({
13386
13515
  }
13387
13516
  )
13388
13517
  ] }),
13389
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13518
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13390
13519
  "span",
13391
13520
  {
13392
13521
  className: cn(
@@ -13396,8 +13525,8 @@ function OfferSaleCard({
13396
13525
  "aria-hidden": "true",
13397
13526
  children: [
13398
13527
  "View",
13399
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
13400
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react13.ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
13528
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
13529
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react13.ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
13401
13530
  ]
13402
13531
  }
13403
13532
  )
@@ -13405,8 +13534,8 @@ function OfferSaleCard({
13405
13534
  ]
13406
13535
  }
13407
13536
  );
13408
- const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: containerClassName, children: card }) : card;
13409
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CoinListStyleScope, { children: wrapped });
13537
+ const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: containerClassName, children: card }) : card;
13538
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CoinListStyleScope, { children: wrapped });
13410
13539
  }
13411
13540
  var SALE_PHASE_LABEL = {
13412
13541
  upcoming: "Upcoming",
@@ -13419,10 +13548,10 @@ function cardActionLabel2(offer, phase) {
13419
13548
  }
13420
13549
 
13421
13550
  // src/client/components/offers/grid/OffersGridView.tsx
13422
- var import_jsx_runtime54 = require("react/jsx-runtime");
13551
+ var import_jsx_runtime55 = require("react/jsx-runtime");
13423
13552
  var DEFAULT_MAX_COLUMNS2 = 2;
13424
13553
  function OffersGridView(props) {
13425
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(OffersGridViewBody, { ...props }) });
13554
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OffersGridViewBody, { ...props }) });
13426
13555
  }
13427
13556
  function OffersGridViewBody({
13428
13557
  state,
@@ -13436,13 +13565,13 @@ function OffersGridViewBody({
13436
13565
  }) {
13437
13566
  switch (state.type) {
13438
13567
  case "loading":
13439
- return loading ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(LoadingState, {});
13568
+ return loading ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LoadingState, {});
13440
13569
  case "error":
13441
- return error ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ErrorState, { message: state.message });
13570
+ return error ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ErrorState, { message: state.message });
13442
13571
  case "empty":
13443
- return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(EmptyState, {});
13572
+ return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(EmptyState, {});
13444
13573
  case "content":
13445
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13574
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13446
13575
  OffersGridContent,
13447
13576
  {
13448
13577
  offers: state.offers,
@@ -13472,14 +13601,14 @@ function OffersGridContent({
13472
13601
  Math.max(1, maxColumns ?? DEFAULT_MAX_COLUMNS2)
13473
13602
  );
13474
13603
  const maxGridWidth = `calc(${cols} * 28rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
13475
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13604
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13476
13605
  "div",
13477
13606
  {
13478
13607
  className: cn(
13479
13608
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
13480
13609
  containerClassName
13481
13610
  ),
13482
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13611
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13483
13612
  "div",
13484
13613
  {
13485
13614
  className: cn(
@@ -13488,7 +13617,7 @@ function OffersGridContent({
13488
13617
  className
13489
13618
  ),
13490
13619
  style: { maxWidth: maxGridWidth },
13491
- children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13620
+ children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13492
13621
  OfferSaleCard,
13493
13622
  {
13494
13623
  offer,
@@ -13502,17 +13631,17 @@ function OffersGridContent({
13502
13631
  );
13503
13632
  }
13504
13633
  function LoadingState() {
13505
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13634
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13506
13635
  "output",
13507
13636
  {
13508
13637
  "aria-live": "polite",
13509
13638
  className: "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6",
13510
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
13639
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
13511
13640
  }
13512
13641
  );
13513
13642
  }
13514
13643
  function ErrorState({ message }) {
13515
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13644
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13516
13645
  AlertBanner,
13517
13646
  {
13518
13647
  variant: "error",
@@ -13523,13 +13652,13 @@ function ErrorState({ message }) {
13523
13652
  );
13524
13653
  }
13525
13654
  function EmptyState() {
13526
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13655
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
13527
13656
  "output",
13528
13657
  {
13529
13658
  "aria-live": "polite",
13530
13659
  className: "clcosdk:flex clcosdk:min-h-40 clcosdk:flex-col clcosdk:items-center clcosdk:justify-center clcosdk:gap-2 clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6 clcosdk:text-center",
13531
13660
  children: [
13532
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13661
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13533
13662
  "p",
13534
13663
  {
13535
13664
  className: cn(
@@ -13539,14 +13668,14 @@ function EmptyState() {
13539
13668
  children: "No offers available"
13540
13669
  }
13541
13670
  ),
13542
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
13671
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
13543
13672
  ]
13544
13673
  }
13545
13674
  );
13546
13675
  }
13547
13676
 
13548
13677
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
13549
- var import_react37 = require("react");
13678
+ var import_react38 = require("react");
13550
13679
 
13551
13680
  // src/client/hooks/offers/data/useOffers.ts
13552
13681
  var import_react36 = require("react");
@@ -13604,19 +13733,56 @@ function useOffers(options = {}) {
13604
13733
  return { offersState };
13605
13734
  }
13606
13735
 
13736
+ // src/client/hooks/offers/shared/offer-logo.types.ts
13737
+ var CARD_LOGO_WIDTH = 96;
13738
+ var OfferLogoUi = {
13739
+ /**
13740
+ * The registry's logo for the token an offer is about, or the offer's own
13741
+ * artwork otherwise, or `null` when neither exists.
13742
+ *
13743
+ * The registry wins when both exist because it is the token's real artwork
13744
+ * where `Offer.logoUrl` is catalogue artwork, and because a swap publishes
13745
+ * without artwork more often than not - which is why `logoUrl` is `null`
13746
+ * on the swap variants.
13747
+ */
13748
+ fromOffer: (offer, tokenMetadata) => {
13749
+ const light = tokenMetadata ? logoImage(tokenMetadata.logo) : null;
13750
+ if (light !== null) {
13751
+ const dark = tokenMetadata?.logoDark ? logoImage(tokenMetadata.logoDark) : null;
13752
+ return { light, dark };
13753
+ }
13754
+ return offer.logoUrl ? { light: { src: offer.logoUrl }, dark: null } : null;
13755
+ }
13756
+ };
13757
+ function logoImage(logo) {
13758
+ const src = tokenLogoUrl(logo, CARD_LOGO_WIDTH);
13759
+ if (src === null) {
13760
+ return null;
13761
+ }
13762
+ const srcSet = tokenLogoSrcSet(logo);
13763
+ return srcSet === null ? { src } : { src, srcSet };
13764
+ }
13765
+
13607
13766
  // src/client/hooks/offers/shared/offer-sale-card.types.ts
13608
13767
  var OfferSaleCardUi = {
13609
- fromOffer: (offer) => ({
13768
+ /**
13769
+ * `tokenMetadata` is the registry's entry for the token the offer is about
13770
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
13771
+ * registry names win over the offer's own where both exist: they are the
13772
+ * token's canonical name and artwork, where the offer's are catalogue copy.
13773
+ */
13774
+ fromOffer: (offer, tokenMetadata = null) => ({
13610
13775
  id: offer.id,
13776
+ ...tokenMetadata ? { name: tokenMetadata.name } : {},
13611
13777
  ...saleWindow(offer),
13612
- logoUrl: offer.logoUrl,
13778
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata),
13613
13779
  endsAt: offer.endsAt
13614
13780
  }),
13615
- fromDetail: (detail) => ({
13781
+ fromDetail: (detail, tokenMetadata = null) => ({
13616
13782
  id: detail.id,
13617
- name: detail.name,
13783
+ name: tokenMetadata?.name ?? detail.name,
13618
13784
  ...saleWindow(detail),
13619
- logoUrl: detail.logoUrl,
13785
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata),
13620
13786
  endsAt: detail.endsAt
13621
13787
  })
13622
13788
  };
@@ -13634,17 +13800,80 @@ function saleWindow(offer) {
13634
13800
  }
13635
13801
  }
13636
13802
 
13803
+ // src/client/hooks/shared/useTokenRegistry.ts
13804
+ var import_react37 = require("react");
13805
+ var DISABLED_STATE2 = { type: "DISABLED" };
13806
+ var LOADING_STATE4 = { type: "LOADING" };
13807
+ function useTokenRegistry(options = {}) {
13808
+ const { data, enabled = true } = options;
13809
+ const { coinlist, isReady } = useCoinList();
13810
+ const log = useLogger("useTokenRegistry");
13811
+ const [state, setState] = (0, import_react37.useState)(
13812
+ () => data !== void 0 ? { type: "CONTENT", registry: TokenRegistrySnapshot.fromTokens(data) } : LOADING_STATE4
13813
+ );
13814
+ const [refetchCount, setRefetchCount] = (0, import_react37.useState)(0);
13815
+ const refetch = (0, import_react37.useCallback)(() => {
13816
+ setRefetchCount((count) => count + 1);
13817
+ }, []);
13818
+ (0, import_react37.useEffect)(() => {
13819
+ let isCancelled = false;
13820
+ const seedActive = data !== void 0 && refetchCount === 0;
13821
+ if (!isReady || !enabled || seedActive) {
13822
+ return () => {
13823
+ isCancelled = true;
13824
+ };
13825
+ }
13826
+ setState(LOADING_STATE4);
13827
+ coinlist.tokens.list().then((tokens) => {
13828
+ if (!isCancelled) {
13829
+ log.debug(() => ({
13830
+ msg: "settled",
13831
+ fields: { state: "CONTENT", count: tokens.length }
13832
+ }));
13833
+ setState({
13834
+ type: "CONTENT",
13835
+ registry: TokenRegistrySnapshot.fromTokens(tokens)
13836
+ });
13837
+ }
13838
+ }).catch((error) => {
13839
+ if (!isCancelled) {
13840
+ log.failure(
13841
+ () => ({
13842
+ msg: "settled",
13843
+ fields: { state: "ERROR", reason: "generic-error" }
13844
+ }),
13845
+ error
13846
+ );
13847
+ setState({ type: "ERROR", reason: "generic-error" });
13848
+ }
13849
+ });
13850
+ return () => {
13851
+ isCancelled = true;
13852
+ };
13853
+ }, [coinlist, isReady, enabled, data, refetchCount, log]);
13854
+ return {
13855
+ // LOADING would be a lie while disabled: nothing is in flight and nothing
13856
+ // will replace it. Settled states (a seed, a previous answer) survive.
13857
+ state: !enabled && state.type === "LOADING" ? DISABLED_STATE2 : state,
13858
+ refetch
13859
+ };
13860
+ }
13861
+
13637
13862
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
13638
13863
  var NOT_AUTHENTICATED_MESSAGE = "Sign in to view available offers.";
13639
13864
  var GENERIC_ERROR_MESSAGE = "Unable to load offers right now. Please try again.";
13640
13865
  function useOffersGridViewModel(options = {}) {
13641
13866
  const { data, onOfferClick, enabled = true } = options;
13642
- const { offersState } = useOffers({ data, enabled });
13643
- const state = (0, import_react37.useMemo)(
13644
- () => toUiState(offersState, onOfferClick !== void 0),
13645
- [offersState, onOfferClick]
13867
+ const { offersState } = useOffers({ data: data?.offers, enabled });
13868
+ const { state: registryState } = useTokenRegistry({
13869
+ data: data?.tokens,
13870
+ enabled
13871
+ });
13872
+ const state = (0, import_react38.useMemo)(
13873
+ () => toUiState(offersState, registryState, onOfferClick !== void 0),
13874
+ [offersState, registryState, onOfferClick]
13646
13875
  );
13647
- const onEvent = (0, import_react37.useCallback)(
13876
+ const onEvent = (0, import_react38.useCallback)(
13648
13877
  (event) => {
13649
13878
  switch (event.type) {
13650
13879
  case "ON_OFFER_CLICK": {
@@ -13667,7 +13896,7 @@ function useOffersGridViewModel(options = {}) {
13667
13896
  );
13668
13897
  return { state, onEvent };
13669
13898
  }
13670
- function toUiState(offersState, interactive) {
13899
+ function toUiState(offersState, registryState, interactive) {
13671
13900
  switch (offersState.type) {
13672
13901
  case "LOADING":
13673
13902
  return { type: "loading" };
@@ -13680,9 +13909,18 @@ function toUiState(offersState, interactive) {
13680
13909
  if (offersState.offers.length === 0) {
13681
13910
  return { type: "empty" };
13682
13911
  }
13912
+ if (registryState.type === "LOADING") {
13913
+ return { type: "loading" };
13914
+ }
13915
+ const registry = registryState.type === "CONTENT" ? registryState.registry : null;
13683
13916
  return {
13684
13917
  type: "content",
13685
- offers: offersState.offers.map(OfferSaleCardUi.fromOffer),
13918
+ offers: offersState.offers.map(
13919
+ (offer) => OfferSaleCardUi.fromOffer(
13920
+ offer,
13921
+ registry ? TokenRegistrySnapshot.forOffer(registry, offer) : null
13922
+ )
13923
+ ),
13686
13924
  interactive
13687
13925
  };
13688
13926
  }
@@ -13694,7 +13932,7 @@ function toUiState(offersState, interactive) {
13694
13932
  }
13695
13933
 
13696
13934
  // src/client/components/offers/grid/OffersGridContainer.tsx
13697
- var import_jsx_runtime55 = require("react/jsx-runtime");
13935
+ var import_jsx_runtime56 = require("react/jsx-runtime");
13698
13936
  function OffersGridContainer({
13699
13937
  data,
13700
13938
  onOfferClick,
@@ -13706,17 +13944,17 @@ function OffersGridContainer({
13706
13944
  onOfferClick,
13707
13945
  enabled
13708
13946
  });
13709
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OffersGridView, { state, onEvent, ...viewProps });
13947
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(OffersGridView, { state, onEvent, ...viewProps });
13710
13948
  }
13711
13949
 
13712
13950
  // src/client/components/requirements/ConnectedWalletList.tsx
13713
- var import_react38 = require("react");
13714
- var import_jsx_runtime56 = require("react/jsx-runtime");
13951
+ var import_react39 = require("react");
13952
+ var import_jsx_runtime57 = require("react/jsx-runtime");
13715
13953
  function ConnectedWalletRow({
13716
13954
  wallet,
13717
13955
  onRemove
13718
13956
  }) {
13719
- const [state, setState] = (0, import_react38.useState)("idle");
13957
+ const [state, setState] = (0, import_react39.useState)("idle");
13720
13958
  const remove = async () => {
13721
13959
  if (!onRemove) return;
13722
13960
  setState("removing");
@@ -13727,8 +13965,8 @@ function ConnectedWalletRow({
13727
13965
  setState("error");
13728
13966
  }
13729
13967
  };
13730
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
13731
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13968
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
13969
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13732
13970
  "span",
13733
13971
  {
13734
13972
  title: wallet.address,
@@ -13739,16 +13977,16 @@ function ConnectedWalletRow({
13739
13977
  children: wallet.shortAddress
13740
13978
  }
13741
13979
  ),
13742
- onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13743
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13980
+ onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13981
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13744
13982
  "span",
13745
13983
  {
13746
13984
  className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
13747
13985
  children: "Remove?"
13748
13986
  }
13749
13987
  ),
13750
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
13751
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13988
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
13989
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13752
13990
  ClButton,
13753
13991
  {
13754
13992
  size: "sm",
@@ -13757,9 +13995,9 @@ function ConnectedWalletRow({
13757
13995
  children: "Cancel"
13758
13996
  }
13759
13997
  )
13760
- ] }) : state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13761
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
13762
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13998
+ ] }) : state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13999
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
14000
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13763
14001
  ClButton,
13764
14002
  {
13765
14003
  size: "sm",
@@ -13768,7 +14006,7 @@ function ConnectedWalletRow({
13768
14006
  children: "Try again"
13769
14007
  }
13770
14008
  )
13771
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14009
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13772
14010
  ClButton,
13773
14011
  {
13774
14012
  size: "sm",
@@ -13781,7 +14019,7 @@ function ConnectedWalletRow({
13781
14019
  ] });
13782
14020
  }
13783
14021
  function ConnectedWalletList(props) {
13784
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ConnectedWalletListBody, { ...props }) });
14022
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ConnectedWalletListBody, { ...props }) });
13785
14023
  }
13786
14024
  function ConnectedWalletListBody({
13787
14025
  wallets,
@@ -13791,18 +14029,18 @@ function ConnectedWalletListBody({
13791
14029
  status = "ready",
13792
14030
  className
13793
14031
  }) {
13794
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
14032
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
13795
14033
  "div",
13796
14034
  {
13797
14035
  className: cn("clcosdk:flex clcosdk:flex-col clcosdk:gap-2", className),
13798
14036
  children: [
13799
- status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14037
+ status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13800
14038
  AlertBanner,
13801
14039
  {
13802
14040
  variant: "error",
13803
14041
  content: "Couldn't load your connected wallets."
13804
14042
  }
13805
- ) : wallets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14043
+ ) : wallets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13806
14044
  ConnectedWalletRow,
13807
14045
  {
13808
14046
  wallet,
@@ -13810,7 +14048,7 @@ function ConnectedWalletListBody({
13810
14048
  },
13811
14049
  wallet.id
13812
14050
  )) }),
13813
- onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14051
+ onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13814
14052
  ClButton,
13815
14053
  {
13816
14054
  size: "sm",
@@ -13827,9 +14065,9 @@ function ConnectedWalletListBody({
13827
14065
 
13828
14066
  // src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
13829
14067
  var import_websdk_react = __toESM(require("@sumsub/websdk-react"), 1);
13830
- var import_jsx_runtime57 = require("react/jsx-runtime");
14068
+ var import_jsx_runtime58 = require("react/jsx-runtime");
13831
14069
  function IdentityVerificationView(props) {
13832
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(IdentityVerificationViewBody, { ...props }) });
14070
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(IdentityVerificationViewBody, { ...props }) });
13833
14071
  }
13834
14072
  function IdentityVerificationViewBody({
13835
14073
  state,
@@ -13838,7 +14076,7 @@ function IdentityVerificationViewBody({
13838
14076
  }) {
13839
14077
  switch (state.type) {
13840
14078
  case "loading":
13841
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
14079
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
13842
14080
  "output",
13843
14081
  {
13844
14082
  "aria-live": "polite",
@@ -13846,11 +14084,11 @@ function IdentityVerificationViewBody({
13846
14084
  "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
13847
14085
  className
13848
14086
  ),
13849
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
14087
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
13850
14088
  }
13851
14089
  );
13852
14090
  case "error":
13853
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
14091
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
13854
14092
  "div",
13855
14093
  {
13856
14094
  className: cn(
@@ -13858,13 +14096,13 @@ function IdentityVerificationViewBody({
13858
14096
  className
13859
14097
  ),
13860
14098
  children: [
13861
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "error", icon: true, content: state.message }),
13862
- state.retryable && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
14099
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AlertBanner, { variant: "error", icon: true, content: state.message }),
14100
+ state.retryable && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
13863
14101
  ]
13864
14102
  }
13865
14103
  );
13866
14104
  case "ready":
13867
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
14105
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
13868
14106
  import_websdk_react.default,
13869
14107
  {
13870
14108
  accessToken: state.accessToken,
@@ -13904,25 +14142,25 @@ function toError(error) {
13904
14142
  }
13905
14143
 
13906
14144
  // src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
13907
- var import_react40 = require("react");
14145
+ var import_react41 = require("react");
13908
14146
 
13909
14147
  // src/client/hooks/requirements/data/useKycToken.ts
13910
- var import_react39 = require("react");
14148
+ var import_react40 = require("react");
13911
14149
  var IDLE_STATE = { type: "IDLE" };
13912
- var LOADING_STATE4 = { type: "LOADING" };
14150
+ var LOADING_STATE5 = { type: "LOADING" };
13913
14151
  function useKycToken(levelName, reset) {
13914
14152
  const { coinlist } = useCoinList();
13915
14153
  const log = useLogger("useKycToken");
13916
- const [kycTokenState, setKycTokenState] = (0, import_react39.useState)(IDLE_STATE);
13917
- const resetPendingRef = (0, import_react39.useRef)(reset === true);
13918
- const tokenIssuedRef = (0, import_react39.useRef)(false);
13919
- (0, import_react39.useEffect)(() => {
14154
+ const [kycTokenState, setKycTokenState] = (0, import_react40.useState)(IDLE_STATE);
14155
+ const resetPendingRef = (0, import_react40.useRef)(reset === true);
14156
+ const tokenIssuedRef = (0, import_react40.useRef)(false);
14157
+ (0, import_react40.useEffect)(() => {
13920
14158
  if (!tokenIssuedRef.current) {
13921
14159
  resetPendingRef.current = reset === true;
13922
14160
  }
13923
14161
  }, [reset]);
13924
- const fetchToken = (0, import_react39.useCallback)(async () => {
13925
- setKycTokenState(LOADING_STATE4);
14162
+ const fetchToken = (0, import_react40.useCallback)(async () => {
14163
+ setKycTokenState(LOADING_STATE5);
13926
14164
  try {
13927
14165
  const kycToken = await coinlist.requirements.createKycToken({
13928
14166
  levelName,
@@ -13955,8 +14193,8 @@ var GENERIC_ERROR_MESSAGE2 = "Unable to start identity verification right now. P
13955
14193
  function useIdentityVerificationViewModel(options = {}) {
13956
14194
  const { levelName, reset, locale, onSubmitted, onError } = options;
13957
14195
  const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
13958
- const fetchedRef = (0, import_react40.useRef)(false);
13959
- (0, import_react40.useEffect)(() => {
14196
+ const fetchedRef = (0, import_react41.useRef)(false);
14197
+ (0, import_react41.useEffect)(() => {
13960
14198
  if (fetchedRef.current) {
13961
14199
  return;
13962
14200
  }
@@ -13964,7 +14202,7 @@ function useIdentityVerificationViewModel(options = {}) {
13964
14202
  fetchToken().catch(() => {
13965
14203
  });
13966
14204
  }, [fetchToken]);
13967
- const state = (0, import_react40.useMemo)(() => {
14205
+ const state = (0, import_react41.useMemo)(() => {
13968
14206
  switch (kycTokenState.type) {
13969
14207
  case "IDLE":
13970
14208
  case "LOADING":
@@ -13990,7 +14228,7 @@ function useIdentityVerificationViewModel(options = {}) {
13990
14228
  }
13991
14229
  }
13992
14230
  }, [kycTokenState, locale, fetchToken]);
13993
- const onEvent = (0, import_react40.useCallback)(
14231
+ const onEvent = (0, import_react41.useCallback)(
13994
14232
  (event) => {
13995
14233
  switch (event.type) {
13996
14234
  case "ON_RETRY":
@@ -14015,7 +14253,7 @@ function useIdentityVerificationViewModel(options = {}) {
14015
14253
  }
14016
14254
 
14017
14255
  // src/client/components/requirements/identity-verification/IdentityVerificationContainer.tsx
14018
- var import_jsx_runtime58 = require("react/jsx-runtime");
14256
+ var import_jsx_runtime59 = require("react/jsx-runtime");
14019
14257
  function IdentityVerificationContainer({
14020
14258
  levelName,
14021
14259
  reset,
@@ -14031,7 +14269,7 @@ function IdentityVerificationContainer({
14031
14269
  onSubmitted,
14032
14270
  onError
14033
14271
  });
14034
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
14272
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
14035
14273
  IdentityVerificationView,
14036
14274
  {
14037
14275
  state,
@@ -14046,7 +14284,7 @@ var import_lucide_react15 = require("lucide-react");
14046
14284
 
14047
14285
  // src/client/components/design-system/StepStatusIcon.tsx
14048
14286
  var import_lucide_react14 = require("lucide-react");
14049
- var import_jsx_runtime59 = require("react/jsx-runtime");
14287
+ var import_jsx_runtime60 = require("react/jsx-runtime");
14050
14288
  var statusConfig = {
14051
14289
  required: {
14052
14290
  Icon: import_lucide_react14.Info,
@@ -14071,7 +14309,7 @@ var statusConfig = {
14071
14309
  };
14072
14310
  function StepStatusIcon({ status, className }) {
14073
14311
  const { Icon, colorClass, fillClass } = statusConfig[status];
14074
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
14312
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14075
14313
  Icon,
14076
14314
  {
14077
14315
  className: cn(
@@ -14086,7 +14324,7 @@ function StepStatusIcon({ status, className }) {
14086
14324
  }
14087
14325
 
14088
14326
  // src/client/components/requirements/RequirementItem.tsx
14089
- var import_jsx_runtime60 = require("react/jsx-runtime");
14327
+ var import_jsx_runtime61 = require("react/jsx-runtime");
14090
14328
  function VerificationActionZone({
14091
14329
  status,
14092
14330
  onAction,
@@ -14095,9 +14333,9 @@ function VerificationActionZone({
14095
14333
  switch (status) {
14096
14334
  case "required":
14097
14335
  if (onAction === null) return null;
14098
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
14336
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
14099
14337
  case "pending":
14100
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14338
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14101
14339
  AlertBanner,
14102
14340
  {
14103
14341
  variant: "warning",
@@ -14105,16 +14343,16 @@ function VerificationActionZone({
14105
14343
  }
14106
14344
  );
14107
14345
  case "completed":
14108
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
14346
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
14109
14347
  case "rejected":
14110
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14348
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14111
14349
  AlertBanner,
14112
14350
  {
14113
14351
  variant: "error",
14114
- content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14352
+ content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14115
14353
  "Verification rejected.",
14116
14354
  " ",
14117
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14355
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14118
14356
  "button",
14119
14357
  {
14120
14358
  type: "button",
@@ -14138,8 +14376,8 @@ function WalletActionZone({
14138
14376
  onRemoveWallet
14139
14377
  }) {
14140
14378
  if (multiWallet) {
14141
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14142
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14379
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14380
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14143
14381
  ConnectedWalletList,
14144
14382
  {
14145
14383
  wallets: connectedWallets,
@@ -14148,7 +14386,7 @@ function WalletActionZone({
14148
14386
  status: walletsStatus
14149
14387
  }
14150
14388
  ),
14151
- status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14389
+ status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14152
14390
  AlertBanner,
14153
14391
  {
14154
14392
  variant: "error",
@@ -14159,21 +14397,21 @@ function WalletActionZone({
14159
14397
  }
14160
14398
  if (status === "completed") {
14161
14399
  const connected = connectedWallets[0];
14162
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14163
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
14164
- walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14400
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14401
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
14402
+ walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14165
14403
  AlertBanner,
14166
14404
  {
14167
14405
  variant: "info",
14168
14406
  content: "Loading your connected wallet\u2026"
14169
14407
  }
14170
- ) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14408
+ ) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14171
14409
  AlertBanner,
14172
14410
  {
14173
14411
  variant: "error",
14174
14412
  content: "Couldn't load your connected wallet."
14175
14413
  }
14176
- ) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14414
+ ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14177
14415
  AlertBanner,
14178
14416
  {
14179
14417
  variant: "success",
@@ -14183,9 +14421,9 @@ function WalletActionZone({
14183
14421
  ] });
14184
14422
  }
14185
14423
  if (status === "rejected") {
14186
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14187
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
14188
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14424
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14425
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
14426
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14189
14427
  AlertBanner,
14190
14428
  {
14191
14429
  variant: "error",
@@ -14195,7 +14433,7 @@ function WalletActionZone({
14195
14433
  ] });
14196
14434
  }
14197
14435
  if (onAction === null) return null;
14198
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
14436
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
14199
14437
  }
14200
14438
  function RequirementItem({
14201
14439
  ui,
@@ -14207,7 +14445,7 @@ function RequirementItem({
14207
14445
  walletsStatus,
14208
14446
  onContactSupport
14209
14447
  }) {
14210
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
14448
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14211
14449
  "div",
14212
14450
  {
14213
14451
  className: cn(
@@ -14215,7 +14453,7 @@ function RequirementItem({
14215
14453
  className
14216
14454
  ),
14217
14455
  children: [
14218
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
14456
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14219
14457
  "button",
14220
14458
  {
14221
14459
  type: "button",
@@ -14223,9 +14461,9 @@ function RequirementItem({
14223
14461
  "aria-expanded": expanded,
14224
14462
  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",
14225
14463
  children: [
14226
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
14227
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(StepStatusIcon, { status: ui.status }),
14228
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14464
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
14465
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(StepStatusIcon, { status: ui.status }),
14466
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14229
14467
  "span",
14230
14468
  {
14231
14469
  className: cn(
@@ -14236,7 +14474,7 @@ function RequirementItem({
14236
14474
  }
14237
14475
  )
14238
14476
  ] }),
14239
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14477
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14240
14478
  import_lucide_react15.ChevronRight,
14241
14479
  {
14242
14480
  className: cn(
@@ -14249,15 +14487,15 @@ function RequirementItem({
14249
14487
  ]
14250
14488
  }
14251
14489
  ),
14252
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14490
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14253
14491
  "div",
14254
14492
  {
14255
14493
  className: cn(
14256
14494
  "clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
14257
14495
  expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
14258
14496
  ),
14259
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
14260
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14497
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
14498
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14261
14499
  "p",
14262
14500
  {
14263
14501
  className: cn(
@@ -14267,14 +14505,14 @@ function RequirementItem({
14267
14505
  children: ui.description
14268
14506
  }
14269
14507
  ),
14270
- ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14508
+ ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14271
14509
  VerificationActionZone,
14272
14510
  {
14273
14511
  status: ui.status,
14274
14512
  onAction,
14275
14513
  onContactSupport
14276
14514
  }
14277
- ) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14515
+ ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14278
14516
  WalletActionZone,
14279
14517
  {
14280
14518
  status: ui.status,
@@ -14294,9 +14532,9 @@ function RequirementItem({
14294
14532
  }
14295
14533
 
14296
14534
  // src/client/components/requirements/RequirementsChecklistView.tsx
14297
- var import_jsx_runtime61 = require("react/jsx-runtime");
14535
+ var import_jsx_runtime62 = require("react/jsx-runtime");
14298
14536
  function RequirementsChecklistView(props) {
14299
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RequirementsChecklistViewBody, { ...props }) });
14537
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(RequirementsChecklistViewBody, { ...props }) });
14300
14538
  }
14301
14539
  function RequirementsChecklistViewBody({
14302
14540
  state,
@@ -14308,11 +14546,11 @@ function RequirementsChecklistViewBody({
14308
14546
  }) {
14309
14547
  switch (state.type) {
14310
14548
  case "loading":
14311
- return loading ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(LoadingState2, {});
14549
+ return loading ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(LoadingState2, {});
14312
14550
  case "not-authenticated":
14313
14551
  return unauthenticatedState ?? null;
14314
14552
  case "error":
14315
- return error ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14553
+ return error ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14316
14554
  AlertBanner,
14317
14555
  {
14318
14556
  variant: "error",
@@ -14322,7 +14560,7 @@ function RequirementsChecklistViewBody({
14322
14560
  }
14323
14561
  );
14324
14562
  case "content":
14325
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14563
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14326
14564
  "div",
14327
14565
  {
14328
14566
  className: cn(
@@ -14330,11 +14568,11 @@ function RequirementsChecklistViewBody({
14330
14568
  className
14331
14569
  ),
14332
14570
  children: [
14333
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14334
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14335
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
14571
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14572
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14573
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
14336
14574
  ] }),
14337
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14575
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14338
14576
  RequirementItem,
14339
14577
  {
14340
14578
  ui: row.item,
@@ -14353,7 +14591,7 @@ function RequirementsChecklistViewBody({
14353
14591
  },
14354
14592
  row.id
14355
14593
  )) }),
14356
- state.ineligible && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14594
+ state.ineligible && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14357
14595
  AlertBanner,
14358
14596
  {
14359
14597
  variant: "error",
@@ -14361,7 +14599,7 @@ function RequirementsChecklistViewBody({
14361
14599
  content: "You are not eligible to participate."
14362
14600
  }
14363
14601
  ),
14364
- state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14602
+ state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14365
14603
  ClButton,
14366
14604
  {
14367
14605
  fullWidth: true,
@@ -14380,18 +14618,18 @@ function RequirementsChecklistViewBody({
14380
14618
  }
14381
14619
  }
14382
14620
  function LoadingState2() {
14383
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14621
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14384
14622
  "output",
14385
14623
  {
14386
14624
  "aria-live": "polite",
14387
14625
  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",
14388
- children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
14626
+ children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
14389
14627
  }
14390
14628
  );
14391
14629
  }
14392
14630
 
14393
14631
  // src/client/components/requirements/tax-document/TaxDocumentModalView.tsx
14394
- var import_jsx_runtime62 = require("react/jsx-runtime");
14632
+ var import_jsx_runtime63 = require("react/jsx-runtime");
14395
14633
  function TaxDocumentModalView({
14396
14634
  state,
14397
14635
  onEvent,
@@ -14400,7 +14638,7 @@ function TaxDocumentModalView({
14400
14638
  if (state.type === "hidden") {
14401
14639
  return null;
14402
14640
  }
14403
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14641
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14404
14642
  "div",
14405
14643
  {
14406
14644
  className: cn(
@@ -14408,11 +14646,11 @@ function TaxDocumentModalView({
14408
14646
  className
14409
14647
  ),
14410
14648
  children: [
14411
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14412
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14413
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14649
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14650
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14651
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14414
14652
  ] }),
14415
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Screen, { screen: state.screen, onEvent })
14653
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Screen, { screen: state.screen, onEvent })
14416
14654
  ]
14417
14655
  }
14418
14656
  ) }) });
@@ -14423,11 +14661,11 @@ function Screen({
14423
14661
  }) {
14424
14662
  switch (screen.type) {
14425
14663
  case "loading":
14426
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(LoadingScreen, {});
14664
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(LoadingScreen, {});
14427
14665
  case "error":
14428
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
14666
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
14429
14667
  case "review":
14430
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14668
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14431
14669
  ReviewScreen,
14432
14670
  {
14433
14671
  fields: screen.fields,
@@ -14438,9 +14676,9 @@ function Screen({
14438
14676
  }
14439
14677
  );
14440
14678
  case "editing":
14441
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(EditScreen, { fields: screen.fields, onEvent });
14679
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(EditScreen, { fields: screen.fields, onEvent });
14442
14680
  case "sign-only":
14443
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14681
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14444
14682
  SignOnlyScreen,
14445
14683
  {
14446
14684
  signing: screen.signing,
@@ -14455,14 +14693,14 @@ function Screen({
14455
14693
  }
14456
14694
  }
14457
14695
  function LoadingScreen() {
14458
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14696
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14459
14697
  "output",
14460
14698
  {
14461
14699
  "aria-live": "polite",
14462
14700
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
14463
- children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
14464
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
14465
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
14701
+ children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
14702
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
14703
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
14466
14704
  ] }, row))
14467
14705
  }
14468
14706
  );
@@ -14474,9 +14712,9 @@ function ReviewScreen({
14474
14712
  signError,
14475
14713
  onEvent
14476
14714
  }) {
14477
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14478
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
14479
- piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14715
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14716
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
14717
+ piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14480
14718
  AlertBanner,
14481
14719
  {
14482
14720
  variant: "info",
@@ -14484,27 +14722,27 @@ function ReviewScreen({
14484
14722
  content: "We don't have this information on file yet \u2014 please fill it in below."
14485
14723
  }
14486
14724
  ),
14487
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, displayValue }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14725
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, displayValue }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14488
14726
  "div",
14489
14727
  {
14490
14728
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
14491
14729
  children: [
14492
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14730
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14493
14731
  "span",
14494
14732
  {
14495
14733
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14496
14734
  children: label
14497
14735
  }
14498
14736
  ),
14499
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
14737
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
14500
14738
  ]
14501
14739
  },
14502
14740
  field
14503
14741
  )) }),
14504
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.caption, "clcosdk:text-text-secondary"), children: "By signing, you certify that the information above is accurate and that you are the beneficial owner of the income this form relates to. This document cannot be edited once signed." }),
14505
- signError && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14506
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14507
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14742
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.caption, "clcosdk:text-text-secondary"), children: "By signing, you certify that the information above is accurate and that you are the beneficial owner of the income this form relates to. This document cannot be edited once signed." }),
14743
+ signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14744
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14745
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14508
14746
  ClButton,
14509
14747
  {
14510
14748
  fullWidth: true,
@@ -14514,7 +14752,7 @@ function ReviewScreen({
14514
14752
  children: "Sign W-8BEN"
14515
14753
  }
14516
14754
  ),
14517
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14755
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14518
14756
  ClButton,
14519
14757
  {
14520
14758
  fullWidth: true,
@@ -14531,20 +14769,20 @@ function EditScreen({
14531
14769
  fields,
14532
14770
  onEvent
14533
14771
  }) {
14534
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14535
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, placeholder, value }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14772
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14773
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, placeholder, value }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14536
14774
  "label",
14537
14775
  {
14538
14776
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
14539
14777
  children: [
14540
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14778
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14541
14779
  "span",
14542
14780
  {
14543
14781
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14544
14782
  children: label
14545
14783
  }
14546
14784
  ),
14547
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14785
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14548
14786
  "input",
14549
14787
  {
14550
14788
  type: "text",
@@ -14565,9 +14803,9 @@ function EditScreen({
14565
14803
  },
14566
14804
  field
14567
14805
  )) }),
14568
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14569
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
14570
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14806
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14807
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
14808
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14571
14809
  ClButton,
14572
14810
  {
14573
14811
  fullWidth: true,
@@ -14584,10 +14822,10 @@ function SignOnlyScreen({
14584
14822
  signError,
14585
14823
  onEvent
14586
14824
  }) {
14587
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14588
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "As an entity investor, you must complete a W-8BEN-E to confirm your foreign tax status and claim applicable treaty benefits. You'll receive an email to complete the signing." }),
14589
- signError && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14590
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14825
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14826
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "As an entity investor, you must complete a W-8BEN-E to confirm your foreign tax status and claim applicable treaty benefits. You'll receive an email to complete the signing." }),
14827
+ signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14828
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14591
14829
  ClButton,
14592
14830
  {
14593
14831
  fullWidth: true,
@@ -14601,12 +14839,12 @@ function SignOnlyScreen({
14601
14839
  }
14602
14840
 
14603
14841
  // src/client/hooks/requirements/tax-document/useTaxDocumentModalViewModel.ts
14604
- var import_react42 = require("react");
14842
+ var import_react43 = require("react");
14605
14843
 
14606
14844
  // src/client/hooks/requirements/data/useTaxDocument.ts
14607
- var import_react41 = require("react");
14845
+ var import_react42 = require("react");
14608
14846
  var IDLE_SIGN = { type: "idle", error: null };
14609
- var LOADING_STATE5 = { type: "LOADING" };
14847
+ var LOADING_STATE6 = { type: "LOADING" };
14610
14848
  var SIGN_FAILED_MESSAGE = "Unable to sign document. Please try again.";
14611
14849
  var DOB_INVALID_MESSAGE = "Enter your date of birth as MM/DD/YYYY.";
14612
14850
  var FIELD_KEYS = {
@@ -14679,8 +14917,8 @@ function useTaxDocument({
14679
14917
  }) {
14680
14918
  const { coinlist, isReady } = useCoinList();
14681
14919
  const log = useLogger("useTaxDocument");
14682
- const [state, setState] = (0, import_react41.useState)(LOADING_STATE5);
14683
- (0, import_react41.useEffect)(() => {
14920
+ const [state, setState] = (0, import_react42.useState)(LOADING_STATE6);
14921
+ (0, import_react42.useEffect)(() => {
14684
14922
  let isCancelled = false;
14685
14923
  if (!isOpen) {
14686
14924
  return () => {
@@ -14688,12 +14926,12 @@ function useTaxDocument({
14688
14926
  };
14689
14927
  }
14690
14928
  if (!isReady) {
14691
- setState(LOADING_STATE5);
14929
+ setState(LOADING_STATE6);
14692
14930
  return () => {
14693
14931
  isCancelled = true;
14694
14932
  };
14695
14933
  }
14696
- setState(LOADING_STATE5);
14934
+ setState(LOADING_STATE6);
14697
14935
  coinlist.requirements.getPii().then((pii) => {
14698
14936
  if (isCancelled) return;
14699
14937
  if (pii.kind === "company") {
@@ -14721,7 +14959,7 @@ function useTaxDocument({
14721
14959
  isCancelled = true;
14722
14960
  };
14723
14961
  }, [coinlist, isReady, isOpen, log]);
14724
- const onEditField = (0, import_react41.useCallback)(
14962
+ const onEditField = (0, import_react42.useCallback)(
14725
14963
  (field, value) => {
14726
14964
  setState(
14727
14965
  (prev) => prev.type === "EDITING" ? { ...prev, fields: { ...prev.fields, [field]: value } } : prev
@@ -14729,7 +14967,7 @@ function useTaxDocument({
14729
14967
  },
14730
14968
  []
14731
14969
  );
14732
- const onStartEdit = (0, import_react41.useCallback)(() => {
14970
+ const onStartEdit = (0, import_react42.useCallback)(() => {
14733
14971
  setState(
14734
14972
  (prev) => prev.type === "REVIEW" ? {
14735
14973
  type: "EDITING",
@@ -14740,7 +14978,7 @@ function useTaxDocument({
14740
14978
  } : prev
14741
14979
  );
14742
14980
  }, []);
14743
- const onSaveEdit = (0, import_react41.useCallback)(() => {
14981
+ const onSaveEdit = (0, import_react42.useCallback)(() => {
14744
14982
  setState(
14745
14983
  (prev) => prev.type === "EDITING" ? {
14746
14984
  type: "REVIEW",
@@ -14751,7 +14989,7 @@ function useTaxDocument({
14751
14989
  } : prev
14752
14990
  );
14753
14991
  }, []);
14754
- const onCancelEdit = (0, import_react41.useCallback)(() => {
14992
+ const onCancelEdit = (0, import_react42.useCallback)(() => {
14755
14993
  setState(
14756
14994
  (prev) => prev.type === "EDITING" ? {
14757
14995
  type: "REVIEW",
@@ -14762,7 +15000,7 @@ function useTaxDocument({
14762
15000
  } : prev
14763
15001
  );
14764
15002
  }, []);
14765
- const onSign = (0, import_react41.useCallback)(() => {
15003
+ const onSign = (0, import_react42.useCallback)(() => {
14766
15004
  if (state.type !== "REVIEW" && state.type !== "SIGN_ONLY") return;
14767
15005
  if (state.type === "REVIEW" && state.fields.dob.trim() !== "" && !isValidUsDate(state.fields.dob)) {
14768
15006
  setState({
@@ -14804,19 +15042,19 @@ function useTaxDocumentModalViewModel({
14804
15042
  onSubmitted
14805
15043
  }) {
14806
15044
  const { state, onEditField, onStartEdit, onSaveEdit, onCancelEdit, onSign } = useTaxDocument({ isOpen });
14807
- (0, import_react42.useEffect)(() => {
15045
+ (0, import_react43.useEffect)(() => {
14808
15046
  if (state.type === "SUBMITTED") {
14809
15047
  onSubmitted?.(state.submission);
14810
15048
  onClose();
14811
15049
  }
14812
15050
  }, [state]);
14813
- const uiState = (0, import_react42.useMemo)(() => {
15051
+ const uiState = (0, import_react43.useMemo)(() => {
14814
15052
  if (!isOpen || state.type === "SUBMITTED") {
14815
15053
  return { type: "hidden" };
14816
15054
  }
14817
15055
  return { type: "content", title: toTitle(state), screen: toScreen(state) };
14818
15056
  }, [isOpen, state]);
14819
- const onEvent = (0, import_react42.useCallback)(
15057
+ const onEvent = (0, import_react43.useCallback)(
14820
15058
  (event) => {
14821
15059
  switch (event.type) {
14822
15060
  case "ON_CLOSE":
@@ -14899,7 +15137,7 @@ function toFieldsUi(fields) {
14899
15137
  }
14900
15138
 
14901
15139
  // src/client/components/requirements/tax-document/TaxDocumentModalContainer.tsx
14902
- var import_jsx_runtime63 = require("react/jsx-runtime");
15140
+ var import_jsx_runtime64 = require("react/jsx-runtime");
14903
15141
  function TaxDocumentModalContainer({
14904
15142
  isOpen,
14905
15143
  onClose,
@@ -14911,7 +15149,7 @@ function TaxDocumentModalContainer({
14911
15149
  onClose,
14912
15150
  onSubmitted
14913
15151
  });
14914
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
15152
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
14915
15153
  TaxDocumentModalView,
14916
15154
  {
14917
15155
  state,
@@ -14922,26 +15160,26 @@ function TaxDocumentModalContainer({
14922
15160
  }
14923
15161
 
14924
15162
  // src/client/components/requirements/VerificationOverlay.tsx
14925
- var import_jsx_runtime64 = require("react/jsx-runtime");
15163
+ var import_jsx_runtime65 = require("react/jsx-runtime");
14926
15164
  function VerificationOverlay({
14927
15165
  onClose,
14928
15166
  children
14929
15167
  }) {
14930
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(VerificationOverlayBody, { onClose, children }) });
15168
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(VerificationOverlayBody, { onClose, children }) });
14931
15169
  }
14932
15170
  function VerificationOverlayBody({
14933
15171
  onClose,
14934
15172
  children
14935
15173
  }) {
14936
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
15174
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14937
15175
  "div",
14938
15176
  {
14939
15177
  role: "dialog",
14940
15178
  "aria-modal": "true",
14941
15179
  "aria-label": "Identity verification",
14942
15180
  className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
14943
- children: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "clcosdk:relative clcosdk:flex clcosdk:max-h-[92vh] clcosdk:w-full clcosdk:max-w-[760px] clcosdk:flex-col clcosdk:overflow-y-auto clcosdk:rounded-2xl clcosdk:bg-background clcosdk:p-6 clcosdk:pt-14", children: [
14944
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
15181
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:relative clcosdk:flex clcosdk:max-h-[92vh] clcosdk:w-full clcosdk:max-w-[760px] clcosdk:flex-col clcosdk:overflow-y-auto clcosdk:rounded-2xl clcosdk:bg-background clcosdk:p-6 clcosdk:pt-14", children: [
15182
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14945
15183
  CloseButton,
14946
15184
  {
14947
15185
  onClick: onClose,
@@ -14955,18 +15193,18 @@ function VerificationOverlayBody({
14955
15193
  }
14956
15194
 
14957
15195
  // src/client/components/requirements/wallet/ConnectWalletModalView.tsx
14958
- var import_react43 = require("react");
14959
- var import_jsx_runtime65 = require("react/jsx-runtime");
15196
+ var import_react44 = require("react");
15197
+ var import_jsx_runtime66 = require("react/jsx-runtime");
14960
15198
  function ConnectWalletModalView({
14961
15199
  state,
14962
15200
  onEvent,
14963
15201
  className
14964
15202
  }) {
14965
- const titleId = (0, import_react43.useId)();
15203
+ const titleId = (0, import_react44.useId)();
14966
15204
  if (state.type === "hidden") {
14967
15205
  return null;
14968
15206
  }
14969
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
15207
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
14970
15208
  "div",
14971
15209
  {
14972
15210
  role: "dialog",
@@ -14977,8 +15215,8 @@ function ConnectWalletModalView({
14977
15215
  className
14978
15216
  ),
14979
15217
  children: [
14980
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14981
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15218
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
15219
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14982
15220
  "h3",
14983
15221
  {
14984
15222
  id: titleId,
@@ -14986,9 +15224,9 @@ function ConnectWalletModalView({
14986
15224
  children: "Connect your wallet"
14987
15225
  }
14988
15226
  ),
14989
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
15227
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14990
15228
  ] }),
14991
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15229
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14992
15230
  Screen2,
14993
15231
  {
14994
15232
  screen: state.screen,
@@ -15007,9 +15245,9 @@ function Screen2({
15007
15245
  }) {
15008
15246
  switch (screen.type) {
15009
15247
  case "needs-wallet":
15010
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15011
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
15012
- canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15248
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15249
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
15250
+ canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15013
15251
  ClButton,
15014
15252
  {
15015
15253
  fullWidth: true,
@@ -15019,23 +15257,23 @@ function Screen2({
15019
15257
  )
15020
15258
  ] });
15021
15259
  case "ready":
15022
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15023
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Sign a message with your connected wallet to prove you own it. This does not cost gas or move any funds." }),
15024
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
15025
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15260
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15261
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Sign a message with your connected wallet to prove you own it. This does not cost gas or move any funds." }),
15262
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
15263
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15026
15264
  "span",
15027
15265
  {
15028
15266
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
15029
15267
  children: "Wallet address"
15030
15268
  }
15031
15269
  ),
15032
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
15270
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
15033
15271
  ] }),
15034
15272
  screen.signError && // Live region: the error is inserted async after a failed attempt,
15035
15273
  // so screen readers need it announced rather than silently
15036
15274
  // rendered.
15037
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
15038
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15275
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
15276
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15039
15277
  ClButton,
15040
15278
  {
15041
15279
  fullWidth: true,
@@ -15046,7 +15284,7 @@ function Screen2({
15046
15284
  children: "Sign & connect"
15047
15285
  }
15048
15286
  ),
15049
- canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15287
+ canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15050
15288
  ClButton,
15051
15289
  {
15052
15290
  fullWidth: true,
@@ -15065,10 +15303,10 @@ function Screen2({
15065
15303
  }
15066
15304
 
15067
15305
  // src/client/hooks/requirements/wallet/useConnectWalletModalViewModel.ts
15068
- var import_react45 = require("react");
15306
+ var import_react46 = require("react");
15069
15307
 
15070
15308
  // src/client/hooks/requirements/data/useConnectWallet.ts
15071
- var import_react44 = require("react");
15309
+ var import_react45 = require("react");
15072
15310
 
15073
15311
  // src/client/core/wallets/connect-external-wallet.ts
15074
15312
  var DEFAULT_STATEMENT = "Sign this message to prove you own this wallet. This does not cost gas or move funds.";
@@ -15199,24 +15437,24 @@ function useConnectWallet({
15199
15437
  statement
15200
15438
  }) {
15201
15439
  const { coinlist } = useCoinList();
15202
- const [state, setState] = (0, import_react44.useState)(
15440
+ const [state, setState] = (0, import_react45.useState)(
15203
15441
  () => wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
15204
15442
  );
15205
- const attempt = (0, import_react44.useRef)(0);
15206
- (0, import_react44.useEffect)(() => {
15443
+ const attempt = (0, import_react45.useRef)(0);
15444
+ (0, import_react45.useEffect)(() => {
15207
15445
  attempt.current += 1;
15208
15446
  if (!isOpen) return;
15209
15447
  setState(
15210
15448
  wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
15211
15449
  );
15212
15450
  }, [isOpen, wallet?.address]);
15213
- (0, import_react44.useEffect)(
15451
+ (0, import_react45.useEffect)(
15214
15452
  () => () => {
15215
15453
  attempt.current += 1;
15216
15454
  },
15217
15455
  []
15218
15456
  );
15219
- const onSign = (0, import_react44.useCallback)(() => {
15457
+ const onSign = (0, import_react45.useCallback)(() => {
15220
15458
  if (!wallet || state.type !== "READY") return;
15221
15459
  attempt.current += 1;
15222
15460
  const gen = attempt.current;
@@ -15278,13 +15516,13 @@ function useConnectWalletModalViewModel({
15278
15516
  challengeType,
15279
15517
  statement
15280
15518
  });
15281
- (0, import_react45.useEffect)(() => {
15519
+ (0, import_react46.useEffect)(() => {
15282
15520
  if (state.type === "CONNECTED") {
15283
15521
  onConnected?.(state.binding);
15284
15522
  onClose();
15285
15523
  }
15286
15524
  }, [state]);
15287
- const uiState = (0, import_react45.useMemo)(() => {
15525
+ const uiState = (0, import_react46.useMemo)(() => {
15288
15526
  if (!isOpen || state.type === "CONNECTED") {
15289
15527
  return { type: "hidden" };
15290
15528
  }
@@ -15309,7 +15547,7 @@ function useConnectWalletModalViewModel({
15309
15547
  canRequestConnect
15310
15548
  };
15311
15549
  }, [isOpen, state, onRequestConnect]);
15312
- const onEvent = (0, import_react45.useCallback)(
15550
+ const onEvent = (0, import_react46.useCallback)(
15313
15551
  (event) => {
15314
15552
  switch (event.type) {
15315
15553
  case "ON_CLOSE":
@@ -15333,13 +15571,13 @@ function useConnectWalletModalViewModel({
15333
15571
  }
15334
15572
 
15335
15573
  // src/client/components/requirements/wallet/ConnectWalletModalContainer.tsx
15336
- var import_jsx_runtime66 = require("react/jsx-runtime");
15574
+ var import_jsx_runtime67 = require("react/jsx-runtime");
15337
15575
  function ConnectWalletModalContainer({
15338
15576
  className,
15339
15577
  ...options
15340
15578
  }) {
15341
15579
  const { state, onEvent } = useConnectWalletModalViewModel(options);
15342
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15580
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
15343
15581
  ConnectWalletModalView,
15344
15582
  {
15345
15583
  state,
@@ -15350,11 +15588,11 @@ function ConnectWalletModalContainer({
15350
15588
  }
15351
15589
 
15352
15590
  // src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
15353
- var import_react48 = require("react");
15591
+ var import_react49 = require("react");
15354
15592
 
15355
15593
  // src/client/hooks/requirements/data/useOptionAddresses.ts
15356
- var import_react46 = require("react");
15357
- var LOADING_STATE6 = { type: "LOADING" };
15594
+ var import_react47 = require("react");
15595
+ var LOADING_STATE7 = { type: "LOADING" };
15358
15596
  var EMPTY_STATE = {
15359
15597
  type: "CONTENT",
15360
15598
  addresses: []
@@ -15363,19 +15601,19 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15363
15601
  const { coinlist, isReady } = useCoinList();
15364
15602
  const log = useLogger("useOptionAddresses");
15365
15603
  const { data, enabled = true } = options;
15366
- const [addressesState, setAddressesState] = (0, import_react46.useState)(
15367
- data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE6
15604
+ const [addressesState, setAddressesState] = (0, import_react47.useState)(
15605
+ data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE7
15368
15606
  );
15369
- const [fetchKey, setFetchKey] = (0, import_react46.useState)(0);
15370
- const refetch = (0, import_react46.useCallback)(() => setFetchKey((k) => k + 1), []);
15371
- const disconnect = (0, import_react46.useCallback)(
15607
+ const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
15608
+ const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
15609
+ const disconnect = (0, import_react47.useCallback)(
15372
15610
  async (addressId) => {
15373
15611
  await coinlist.wallets.remove({ offerId, addressId });
15374
15612
  refetch();
15375
15613
  },
15376
15614
  [coinlist, offerId, refetch]
15377
15615
  );
15378
- (0, import_react46.useEffect)(() => {
15616
+ (0, import_react47.useEffect)(() => {
15379
15617
  let isCancelled = false;
15380
15618
  if (!enabled) {
15381
15619
  setAddressesState(
@@ -15387,7 +15625,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15387
15625
  }
15388
15626
  if (!isReady) {
15389
15627
  if (data === void 0) {
15390
- setAddressesState(LOADING_STATE6);
15628
+ setAddressesState(LOADING_STATE7);
15391
15629
  }
15392
15630
  return () => {
15393
15631
  isCancelled = true;
@@ -15404,7 +15642,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15404
15642
  isCancelled = true;
15405
15643
  };
15406
15644
  }
15407
- setAddressesState(LOADING_STATE6);
15645
+ setAddressesState(LOADING_STATE7);
15408
15646
  coinlist.wallets.list({ offerId, offerOptionId }).then((addresses) => {
15409
15647
  if (!isCancelled) {
15410
15648
  log.debug(() => ({
@@ -15431,18 +15669,18 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15431
15669
  }
15432
15670
 
15433
15671
  // src/client/hooks/requirements/data/useRequirements.ts
15434
- var import_react47 = require("react");
15435
- var LOADING_STATE7 = { type: "LOADING" };
15672
+ var import_react48 = require("react");
15673
+ var LOADING_STATE8 = { type: "LOADING" };
15436
15674
  function useRequirements(offerId, options = {}) {
15437
15675
  const { coinlist, isReady } = useCoinList();
15438
15676
  const log = useLogger("useRequirements");
15439
15677
  const { data, enabled = true } = options;
15440
- const [requirementsState, setRequirementsState] = (0, import_react47.useState)(
15441
- data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE7
15678
+ const [requirementsState, setRequirementsState] = (0, import_react48.useState)(
15679
+ data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE8
15442
15680
  );
15443
- const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
15444
- const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
15445
- (0, import_react47.useEffect)(() => {
15681
+ const [fetchKey, setFetchKey] = (0, import_react48.useState)(0);
15682
+ const refetch = (0, import_react48.useCallback)(() => setFetchKey((k) => k + 1), []);
15683
+ (0, import_react48.useEffect)(() => {
15446
15684
  let isCancelled = false;
15447
15685
  if (!enabled) {
15448
15686
  return () => {
@@ -15451,7 +15689,7 @@ function useRequirements(offerId, options = {}) {
15451
15689
  }
15452
15690
  if (!isReady) {
15453
15691
  if (data === void 0) {
15454
- setRequirementsState(LOADING_STATE7);
15692
+ setRequirementsState(LOADING_STATE8);
15455
15693
  }
15456
15694
  return () => {
15457
15695
  isCancelled = true;
@@ -15468,7 +15706,7 @@ function useRequirements(offerId, options = {}) {
15468
15706
  isCancelled = true;
15469
15707
  };
15470
15708
  }
15471
- setRequirementsState(LOADING_STATE7);
15709
+ setRequirementsState(LOADING_STATE8);
15472
15710
  Promise.all([
15473
15711
  coinlist.requirements.forOffer(offerId),
15474
15712
  coinlist.requirements.statuses(offerId)
@@ -15602,19 +15840,19 @@ function useRequirementsChecklistViewModel(options) {
15602
15840
  data,
15603
15841
  enabled
15604
15842
  });
15605
- const [expandedId, setExpandedId] = (0, import_react48.useState)(null);
15606
- const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react48.useState)(false);
15607
- const [connectWalletOpen, setConnectWalletOpen] = (0, import_react48.useState)(false);
15608
- const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react48.useState)(null);
15609
- const isMountedRef = (0, import_react48.useRef)(true);
15610
- (0, import_react48.useEffect)(() => {
15843
+ const [expandedId, setExpandedId] = (0, import_react49.useState)(null);
15844
+ const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react49.useState)(false);
15845
+ const [connectWalletOpen, setConnectWalletOpen] = (0, import_react49.useState)(false);
15846
+ const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react49.useState)(null);
15847
+ const isMountedRef = (0, import_react49.useRef)(true);
15848
+ (0, import_react49.useEffect)(() => {
15611
15849
  isMountedRef.current = true;
15612
15850
  return () => {
15613
15851
  isMountedRef.current = false;
15614
15852
  };
15615
15853
  }, []);
15616
- const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react48.useState)(false);
15617
- (0, import_react48.useEffect)(() => {
15854
+ const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react49.useState)(false);
15855
+ (0, import_react49.useEffect)(() => {
15618
15856
  if (requirementsState.type === "CONTENT") {
15619
15857
  setHasWalletRequirement(
15620
15858
  (requirementsState.requirements[optionId] ?? []).some(
@@ -15630,14 +15868,14 @@ function useRequirementsChecklistViewModel(options) {
15630
15868
  } = useOptionAddresses(offerId, optionId, {
15631
15869
  enabled: enabled && hasWalletRequirement
15632
15870
  });
15633
- const removeWallet = (0, import_react48.useCallback)(
15871
+ const removeWallet = (0, import_react49.useCallback)(
15634
15872
  async (addressId) => {
15635
15873
  await disconnect(OfferOptionAddressId(addressId));
15636
15874
  refetch();
15637
15875
  },
15638
15876
  [disconnect, refetch]
15639
15877
  );
15640
- const awaitVerificationResult = (0, import_react48.useCallback)(
15878
+ const awaitVerificationResult = (0, import_react49.useCallback)(
15641
15879
  (requirementId, statusBeforeSubmit) => {
15642
15880
  void (async () => {
15643
15881
  const deadline = Date.now() + VERIFICATION_POLL_TIMEOUT_MS;
@@ -15664,11 +15902,11 @@ function useRequirementsChecklistViewModel(options) {
15664
15902
  },
15665
15903
  [coinlist, offerId, refetch, log]
15666
15904
  );
15667
- const requirements = (0, import_react48.useMemo)(
15905
+ const requirements = (0, import_react49.useMemo)(
15668
15906
  () => requirementsState.type === "CONTENT" ? requirementsState.requirements[optionId] ?? [] : [],
15669
15907
  [requirementsState, optionId]
15670
15908
  );
15671
- const statusById = (0, import_react48.useMemo)(() => {
15909
+ const statusById = (0, import_react49.useMemo)(() => {
15672
15910
  if (requirementsState.type !== "CONTENT") {
15673
15911
  return /* @__PURE__ */ new Map();
15674
15912
  }
@@ -15677,7 +15915,7 @@ function useRequirementsChecklistViewModel(options) {
15677
15915
  requirementsState.statuses.filter((s) => ids.has(s.id)).map((s) => [s.id, s])
15678
15916
  );
15679
15917
  }, [requirementsState, requirements]);
15680
- const state = (0, import_react48.useMemo)(() => {
15918
+ const state = (0, import_react49.useMemo)(() => {
15681
15919
  switch (requirementsState.type) {
15682
15920
  case "LOADING":
15683
15921
  return { type: "loading" };
@@ -15746,7 +15984,7 @@ function useRequirementsChecklistViewModel(options) {
15746
15984
  identityVerificationOptions,
15747
15985
  removeWallet
15748
15986
  ]);
15749
- const handleRequirementAction = (0, import_react48.useCallback)(
15987
+ const handleRequirementAction = (0, import_react49.useCallback)(
15750
15988
  (requirement) => {
15751
15989
  const inlineVerification = statusById.get(requirement.id)?.kycLevel !== void 0 && onRequirementActionOverride === void 0;
15752
15990
  if (inlineVerification) {
@@ -15778,7 +16016,7 @@ function useRequirementsChecklistViewModel(options) {
15778
16016
  coinlist
15779
16017
  ]
15780
16018
  );
15781
- const onEvent = (0, import_react48.useCallback)(
16019
+ const onEvent = (0, import_react49.useCallback)(
15782
16020
  (event) => {
15783
16021
  switch (event.type) {
15784
16022
  case "ON_TOGGLE_ITEM":
@@ -15876,7 +16114,7 @@ function toVerificationUi(verifyingRequirementId, statusById, identityVerificati
15876
16114
  }
15877
16115
 
15878
16116
  // src/client/components/requirements/RequirementsChecklistContainer.tsx
15879
- var import_jsx_runtime67 = require("react/jsx-runtime");
16117
+ var import_jsx_runtime68 = require("react/jsx-runtime");
15880
16118
  function RequirementsChecklistContainer({
15881
16119
  loading,
15882
16120
  error,
@@ -15889,8 +16127,8 @@ function RequirementsChecklistContainer({
15889
16127
  ...options,
15890
16128
  enabled
15891
16129
  });
15892
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
15893
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16130
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
16131
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15894
16132
  RequirementsChecklistView,
15895
16133
  {
15896
16134
  state,
@@ -15900,13 +16138,13 @@ function RequirementsChecklistContainer({
15900
16138
  unauthenticatedState: (
15901
16139
  // The sign-in default lives here, not in the View: it is a connected
15902
16140
  // component, and a View must render from what it is handed.
15903
- unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CoinListSignInCardContainer, {})
16141
+ unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CoinListSignInCardContainer, {})
15904
16142
  ),
15905
16143
  className
15906
16144
  }
15907
16145
  ),
15908
- state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
15909
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16146
+ state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
16147
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15910
16148
  TaxDocumentModalContainer,
15911
16149
  {
15912
16150
  isOpen: state.taxDocumentOpen,
@@ -15914,11 +16152,11 @@ function RequirementsChecklistContainer({
15914
16152
  onSubmitted: () => onEvent({ type: "ON_TAX_DOCUMENT_SUBMITTED" })
15915
16153
  }
15916
16154
  ),
15917
- state.verification && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16155
+ state.verification && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15918
16156
  VerificationOverlay,
15919
16157
  {
15920
16158
  onClose: () => onEvent({ type: "ON_CLOSE_VERIFICATION" }),
15921
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16159
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15922
16160
  IdentityVerificationContainer,
15923
16161
  {
15924
16162
  levelName: state.verification.levelName,
@@ -15929,7 +16167,7 @@ function RequirementsChecklistContainer({
15929
16167
  )
15930
16168
  }
15931
16169
  ),
15932
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16170
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15933
16171
  ConnectWalletModalContainer,
15934
16172
  {
15935
16173
  isOpen: state.connectWalletOpen,
@@ -16090,18 +16328,18 @@ function pinoClientLogger(options) {
16090
16328
  }
16091
16329
 
16092
16330
  // src/client/hooks/auth/useCompleteOAuth.ts
16093
- var import_react49 = require("react");
16331
+ var import_react50 = require("react");
16094
16332
  function useCompleteOAuth(options) {
16095
16333
  const { coinlist } = useCoinList();
16096
16334
  const log = useLogger("useCompleteOAuth");
16097
- const postOAuthCompleteRef = (0, import_react49.useRef)(options.postOAuthComplete);
16098
- const onFailureRef = (0, import_react49.useRef)(options.onFailure);
16099
- const onSuccessRef = (0, import_react49.useRef)(options.onSuccess);
16335
+ const postOAuthCompleteRef = (0, import_react50.useRef)(options.postOAuthComplete);
16336
+ const onFailureRef = (0, import_react50.useRef)(options.onFailure);
16337
+ const onSuccessRef = (0, import_react50.useRef)(options.onSuccess);
16100
16338
  postOAuthCompleteRef.current = options.postOAuthComplete;
16101
16339
  onFailureRef.current = options.onFailure;
16102
16340
  onSuccessRef.current = options.onSuccess;
16103
- const hasStartedExchangeRef = (0, import_react49.useRef)(false);
16104
- (0, import_react49.useEffect)(() => {
16341
+ const hasStartedExchangeRef = (0, import_react50.useRef)(false);
16342
+ (0, import_react50.useEffect)(() => {
16105
16343
  if (typeof window === "undefined") return;
16106
16344
  const params = new URLSearchParams(window.location.search);
16107
16345
  if (!params.has("code") && !params.has("error")) return;
@@ -16165,16 +16403,16 @@ function useCompleteOAuth(options) {
16165
16403
  }
16166
16404
 
16167
16405
  // src/client/hooks/checkout/coin-list/token-sale/data/useParticipations.ts
16168
- var import_react50 = require("react");
16169
- var LOADING_STATE8 = { type: "LOADING" };
16406
+ var import_react51 = require("react");
16407
+ var LOADING_STATE9 = { type: "LOADING" };
16170
16408
  function useParticipations(offerId, options = {}) {
16171
16409
  const { coinlist, isReady } = useCoinList();
16172
16410
  const log = useLogger("useParticipations");
16173
16411
  const { data, enabled = true } = options;
16174
- const [participationsState, setParticipationsState] = (0, import_react50.useState)(
16175
- data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE8
16412
+ const [participationsState, setParticipationsState] = (0, import_react51.useState)(
16413
+ data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE9
16176
16414
  );
16177
- (0, import_react50.useEffect)(() => {
16415
+ (0, import_react51.useEffect)(() => {
16178
16416
  let isCancelled = false;
16179
16417
  if (!enabled) {
16180
16418
  return () => {
@@ -16183,7 +16421,7 @@ function useParticipations(offerId, options = {}) {
16183
16421
  }
16184
16422
  if (!isReady) {
16185
16423
  if (data === void 0) {
16186
- setParticipationsState(LOADING_STATE8);
16424
+ setParticipationsState(LOADING_STATE9);
16187
16425
  }
16188
16426
  return () => {
16189
16427
  isCancelled = true;
@@ -16194,7 +16432,7 @@ function useParticipations(offerId, options = {}) {
16194
16432
  isCancelled = true;
16195
16433
  };
16196
16434
  }
16197
- setParticipationsState(LOADING_STATE8);
16435
+ setParticipationsState(LOADING_STATE9);
16198
16436
  coinlist.tokenSale.list(offerId).then((participations) => {
16199
16437
  if (!isCancelled) {
16200
16438
  log.debug(() => ({
@@ -16221,16 +16459,16 @@ function useParticipations(offerId, options = {}) {
16221
16459
  }
16222
16460
 
16223
16461
  // src/client/hooks/offers/data/useOfferDetails.ts
16224
- var import_react51 = require("react");
16225
- var LOADING_STATE9 = { type: "LOADING" };
16462
+ var import_react52 = require("react");
16463
+ var LOADING_STATE10 = { type: "LOADING" };
16226
16464
  function useOfferDetails(offerId, options = {}) {
16227
16465
  const { coinlist, isReady } = useCoinList();
16228
16466
  const log = useLogger("useOfferDetails");
16229
16467
  const { data, enabled = true } = options;
16230
- const [offerDetailsState, setOfferDetailsState] = (0, import_react51.useState)(
16231
- data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE9
16468
+ const [offerDetailsState, setOfferDetailsState] = (0, import_react52.useState)(
16469
+ data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE10
16232
16470
  );
16233
- (0, import_react51.useEffect)(() => {
16471
+ (0, import_react52.useEffect)(() => {
16234
16472
  let isCancelled = false;
16235
16473
  if (!enabled) {
16236
16474
  return () => {
@@ -16239,7 +16477,7 @@ function useOfferDetails(offerId, options = {}) {
16239
16477
  }
16240
16478
  if (!isReady) {
16241
16479
  if (data === void 0) {
16242
- setOfferDetailsState(LOADING_STATE9);
16480
+ setOfferDetailsState(LOADING_STATE10);
16243
16481
  }
16244
16482
  return () => {
16245
16483
  isCancelled = true;
@@ -16250,7 +16488,7 @@ function useOfferDetails(offerId, options = {}) {
16250
16488
  isCancelled = true;
16251
16489
  };
16252
16490
  }
16253
- setOfferDetailsState(LOADING_STATE9);
16491
+ setOfferDetailsState(LOADING_STATE10);
16254
16492
  coinlist.offers.get(offerId).then((offerDetail) => {
16255
16493
  if (!isCancelled) {
16256
16494
  log.debug(() => ({
@@ -16278,15 +16516,23 @@ function useOfferDetails(offerId, options = {}) {
16278
16516
 
16279
16517
  // src/client/hooks/offers/shared/offer-asset-card.types.ts
16280
16518
  var OfferAssetCardUi = {
16281
- fromOffer: (offer) => ({
16519
+ /**
16520
+ * `tokenMetadata` is the registry's entry for the token the offer is about
16521
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
16522
+ * registry names win over the offer's own where both exist: they are the
16523
+ * token's canonical name, ticker and artwork, where the offer's are
16524
+ * catalogue copy.
16525
+ */
16526
+ fromOffer: (offer, tokenMetadata = null) => ({
16282
16527
  id: offer.id,
16283
- logoUrl: offer.logoUrl
16528
+ ...tokenMetadata ? { name: tokenMetadata.name, symbol: String(tokenMetadata.symbol) } : {},
16529
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata)
16284
16530
  }),
16285
- fromDetail: (detail) => ({
16531
+ fromDetail: (detail, tokenMetadata = null) => ({
16286
16532
  id: detail.id,
16287
- name: detail.name,
16288
- symbol: detail.asset.code,
16289
- logoUrl: detail.logoUrl
16533
+ name: tokenMetadata?.name ?? detail.name,
16534
+ symbol: tokenMetadata ? String(tokenMetadata.symbol) : detail.asset.code,
16535
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata)
16290
16536
  })
16291
16537
  };
16292
16538
 
@@ -16329,6 +16575,7 @@ function formatMonthYear(date, locale) {
16329
16575
  OAUTH_STATE_KEY,
16330
16576
  OfferAssetCard,
16331
16577
  OfferAssetCardUi,
16578
+ OfferLogoUi,
16332
16579
  OfferSaleCard,
16333
16580
  OfferSaleCardUi,
16334
16581
  OffersAssetGrid,
@@ -16390,6 +16637,7 @@ function formatMonthYear(date, locale) {
16390
16637
  quoteOverAsks,
16391
16638
  stablecoinIconUrl,
16392
16639
  submitErc20Approval,
16640
+ tokenLogoSrcSet,
16393
16641
  tokenLogoUrl,
16394
16642
  tokenMetadataOf,
16395
16643
  useCheckoutOfferTokenMetadata,
@@ -16432,6 +16680,7 @@ function formatMonthYear(date, locale) {
16432
16680
  useTaxDocument,
16433
16681
  useTaxDocumentModalViewModel,
16434
16682
  useTokenMetadata,
16683
+ useTokenRegistry,
16435
16684
  validateAmount,
16436
16685
  validateSellAmount,
16437
16686
  validateSuperstateAmount