@coinlist-co/react 0.12.1-rc.f51a0c2 → 0.12.1

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
@@ -3838,6 +3841,52 @@ var Erc20NamespaceImpl = class {
3838
3841
  }
3839
3842
  };
3840
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
+
3841
3890
  // src/universal/api/nabu/tokens.ts
3842
3891
  var import_viem6 = require("viem");
3843
3892
 
@@ -5038,7 +5087,7 @@ var CoinListProvider = CoinListContextProvider;
5038
5087
  var import_react4 = require("react");
5039
5088
 
5040
5089
  // src/client/generated/sdk-styles.gen.ts
5041
- 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\\:-mx-2{margin-inline:calc(var(--clcosdk-spacing) * -2)}.clcosdk\\:mt-2{margin-top:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-auto{margin-top:auto}.clcosdk\\:mb-2{margin-bottom:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.clcosdk\\:size-2{width:calc(var(--clcosdk-spacing) * 2);height:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:size-3{width:calc(var(--clcosdk-spacing) * 3);height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:size-3\\.5{width:calc(var(--clcosdk-spacing) * 3.5);height:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:size-4{width:calc(var(--clcosdk-spacing) * 4);height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:size-5{width:calc(var(--clcosdk-spacing) * 5);height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:size-10{width:calc(var(--clcosdk-spacing) * 10);height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:size-12{width:calc(var(--clcosdk-spacing) * 12);height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:size-16{width:calc(var(--clcosdk-spacing) * 16);height:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:size-24{width:calc(var(--clcosdk-spacing) * 24);height:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:size-\\[15rem\\]{width:15rem;height:15rem}.clcosdk\\:size-full{width:100%;height:100%}.clcosdk\\:h-1{height:var(--clcosdk-spacing)}.clcosdk\\:h-3{height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:h-4{height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:h-5{height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:h-6{height:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:h-8{height:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:h-10{height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:h-11{height:calc(var(--clcosdk-spacing) * 11)}.clcosdk\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:h-14{height:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:h-\\[1em\\]{height:1em}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[1lh\\]{min-height:1lh}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-1\\/2{width:50%}.clcosdk\\:w-2\\/5{width:40%}.clcosdk\\:w-3\\/5{width:60%}.clcosdk\\:w-4{width:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:w-5{width:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:w-6{width:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:w-8{width:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:w-10{width:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-20{width:calc(var(--clcosdk-spacing) * 20)}.clcosdk\\:w-24{width:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:w-32{width:calc(var(--clcosdk-spacing) * 32)}.clcosdk\\:w-40{width:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:w-48{width:calc(var(--clcosdk-spacing) * 48)}.clcosdk\\:w-80{width:calc(var(--clcosdk-spacing) * 80)}.clcosdk\\:w-96{width:calc(var(--clcosdk-spacing) * 96)}.clcosdk\\:w-\\[16px\\]{width:16px}.clcosdk\\:w-\\[28rem\\]{width:28rem}.clcosdk\\:w-\\[448px\\]{width:448px}.clcosdk\\:w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-component{width:448px}.clcosdk\\:w-fit{width:fit-content}.clcosdk\\:w-full{width:100%}.clcosdk\\:w-max{width:max-content}.clcosdk\\:max-w-\\[16rem\\]{max-width:16rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[40rem\\]{max-width:40rem}.clcosdk\\:max-w-\\[56rem\\]{max-width:56rem}.clcosdk\\:max-w-\\[64rem\\]{max-width:64rem}.clcosdk\\:max-w-\\[760px\\]{max-width:760px}.clcosdk\\:max-w-full{max-width:100%}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:max-w-sm{max-width:var(--clcosdk-container-sm)}.clcosdk\\:max-w-xl{max-width:var(--clcosdk-container-xl)}.clcosdk\\:min-w-0{min-width:0}.clcosdk\\:flex-1{flex:1}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:rotate-180{rotate:180deg}.clcosdk\\:animate-pulse{animation:var(--clcosdk-animate-pulse)}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.clcosdk\\:grid-rows-\\[0fr\\]{grid-template-rows:0fr}.clcosdk\\:grid-rows-\\[1fr\\]{grid-template-rows:1fr}.clcosdk\\:flex-col{flex-direction:column}.clcosdk\\:flex-row{flex-direction:row}.clcosdk\\:flex-wrap{flex-wrap:wrap}.clcosdk\\:items-center{align-items:center}.clcosdk\\:items-end{align-items:flex-end}.clcosdk\\:items-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:justify-end{justify-content:flex-end}.clcosdk\\:justify-start{justify-content:flex-start}.clcosdk\\:gap-1{gap:var(--clcosdk-spacing)}.clcosdk\\:gap-1\\.5{gap:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-2\\.5{gap:calc(var(--clcosdk-spacing) * 2.5)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-\\[5px\\]{gap:5px}:where(.clcosdk\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.clcosdk\\:divide-divider>:not(:last-child)){border-color:var(--color-divider)}.clcosdk\\:self-start{align-self:flex-start}.clcosdk\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clcosdk\\:overflow-hidden{overflow:hidden}.clcosdk\\:overflow-y-auto{overflow-y:auto}.clcosdk\\:rounded{border-radius:.25rem}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.clcosdk\\:rounded-\\[20px\\]{border-radius:20px}.clcosdk\\:rounded-\\[28px\\]{border-radius:28px}.clcosdk\\:rounded-btn{border-radius:12px}.clcosdk\\:rounded-card{border-radius:24px}.clcosdk\\:rounded-full{border-radius:3.40282e38px}.clcosdk\\:rounded-lg{border-radius:var(--clcosdk-radius-lg)}.clcosdk\\:rounded-md{border-radius:var(--clcosdk-radius-md)}.clcosdk\\:rounded-xl{border-radius:var(--clcosdk-radius-xl)}.clcosdk\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.clcosdk\\:border-accent\\/60{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/60{border-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.clcosdk\\:border-amber-500{border-color:var(--clcosdk-color-amber-500)}.clcosdk\\:border-background{border-color:var(--color-background)}.clcosdk\\:border-border{border-color:var(--color-border)}.clcosdk\\:border-brand-primary{border-color:var(--color-brand-primary)}.clcosdk\\:border-current{border-color:currentColor}.clcosdk\\:border-divider{border-color:var(--color-divider)}.clcosdk\\:border-error-border{border-color:var(--color-error-border)}.clcosdk\\:border-sale-card-border{border-color:var(--color-sale-card-border)}.clcosdk\\:border-sale-card-chrome-border{border-color:var(--color-sale-card-chrome-border)}.clcosdk\\:border-success-border{border-color:var(--color-success-border)}.clcosdk\\:border-text-primary{border-color:var(--color-text-primary)}.clcosdk\\:border-transparent{border-color:#0000}.clcosdk\\:border-warning-border{border-color:var(--color-warning-border)}.clcosdk\\:border-t-transparent{border-top-color:#0000}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-black\\/50{background-color:var(--clcosdk-color-black)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-black\\/50{background-color:color-mix(in oklab, var(--clcosdk-color-black) 50%, transparent)}}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-divider{background-color:var(--color-divider)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.clcosdk\\:bg-overlay{background-color:var(--color-overlay)}.clcosdk\\:bg-positive{background-color:var(--color-positive)}.clcosdk\\:bg-positive-subtle{background-color:var(--color-positive-subtle)}.clcosdk\\:bg-sale-card-chrome-bg{background-color:var(--color-sale-card-chrome-bg)}.clcosdk\\:bg-section{background-color:var(--color-section)}.clcosdk\\:bg-success-subtle{background-color:var(--color-success-subtle)}.clcosdk\\:bg-surface{background-color:var(--color-surface)}.clcosdk\\:bg-text-disabled{background-color:var(--color-text-disabled)}.clcosdk\\:bg-text-primary{background-color:var(--color-text-primary)}.clcosdk\\:bg-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-\\[image\\:var\\(--btn-primary-gradient\\)\\]{background-image:var(--btn-primary-gradient)}.clcosdk\\:bg-\\[image\\:var\\(--sale-card-surface\\)\\]{background-image:var(--sale-card-surface)}.clcosdk\\:object-contain{object-fit:contain}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:0}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-3\\.5{padding:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:p-5{padding:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:p-16{padding:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:px-3{padding-inline:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:px-4{padding-inline:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:px-5{padding-inline:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:py-1\\.5{padding-block:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:py-3{padding-block:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:py-8{padding-block:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:py-12{padding-block:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:pt-1{padding-top:var(--clcosdk-spacing)}.clcosdk\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pt-14{padding-top:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:pr-1\\.5{padding-right:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:pr-3{padding-right:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-1{padding-bottom:var(--clcosdk-spacing)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pl-3{padding-left:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-right{text-align:right}.clcosdk\\:font-mono{font-family:var(--clcosdk-font-mono)}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:text-lg{font-size:var(--clcosdk-text-lg);line-height:var(--tw-leading,var(--clcosdk-text-lg--line-height))}.clcosdk\\:text-sm{font-size:var(--clcosdk-text-sm);line-height:var(--tw-leading,var(--clcosdk-text-sm--line-height))}.clcosdk\\:text-xs{font-size:var(--clcosdk-text-xs);line-height:var(--tw-leading,var(--clcosdk-text-xs--line-height))}.clcosdk\\:text-\\[11px\\]{font-size:11px}.clcosdk\\:text-\\[12px\\]{font-size:12px}.clcosdk\\:text-\\[13px\\]{font-size:13px}.clcosdk\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:text-\\[15px\\]{font-size:15px}.clcosdk\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:text-\\[22px\\]{font-size:22px}.clcosdk\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:text-\\[36px\\]{font-size:36px}.clcosdk\\:text-\\[48px\\]{font-size:48px}.clcosdk\\:text-\\[64px\\]{font-size:64px}.clcosdk\\:leading-\\[105\\%\\]{--tw-leading:105%;line-height:105%}.clcosdk\\:leading-\\[108\\%\\]{--tw-leading:108%;line-height:108%}.clcosdk\\:leading-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.clcosdk\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}.clcosdk\\:font-medium{--tw-font-weight:var(--clcosdk-font-weight-medium);font-weight:var(--clcosdk-font-weight-medium)}.clcosdk\\:font-normal{--tw-font-weight:var(--clcosdk-font-weight-normal);font-weight:var(--clcosdk-font-weight-normal)}.clcosdk\\:font-semibold{--tw-font-weight:var(--clcosdk-font-weight-semibold);font-weight:var(--clcosdk-font-weight-semibold)}.clcosdk\\:tracking-\\[0\\.12px\\]{--tw-tracking:.12px;letter-spacing:.12px}.clcosdk\\:tracking-\\[0\\.28px\\]{--tw-tracking:.28px;letter-spacing:.28px}.clcosdk\\:break-words{overflow-wrap:break-word}.clcosdk\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-background{color:var(--color-background)}.clcosdk\\:text-brand-primary{color:var(--color-brand-primary)}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-positive{color:var(--color-positive)}.clcosdk\\:text-sale-card-text{color:var(--color-sale-card-text)}.clcosdk\\:text-sale-card-text-muted{color:var(--color-sale-card-text-muted)}.clcosdk\\:text-sale-card-text-strong{color:var(--color-sale-card-text-strong)}.clcosdk\\:text-success{color:var(--color-success)}.clcosdk\\:text-text-disabled{color:var(--color-text-disabled)}.clcosdk\\:text-text-inverse{color:var(--color-text-inverse)}.clcosdk\\:text-text-primary{color:var(--color-text-primary)}.clcosdk\\:text-text-secondary{color:var(--color-text-secondary)}.clcosdk\\:text-warning{color:var(--color-warning)}.clcosdk\\:capitalize{text-transform:capitalize}.clcosdk\\:lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:no-underline{text-decoration-line:none}.clcosdk\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.clcosdk\\:opacity-0{opacity:0}.clcosdk\\:opacity-60{opacity:.6}.clcosdk\\:shadow-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.2\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f633);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_1px_1px_0px_rgba\\(10\\,10\\,10\\,0\\.04\\)\\,0px_8px_12px_0px_rgba\\(10\\,10\\,10\\,0\\.08\\)\\]{--tw-shadow:0px 1px 1px 0px var(--tw-shadow-color,#0a0a0a0a), 0px 8px 12px 0px var(--tw-shadow-color,#0a0a0a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_4px_12px_0px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\,0px_12px_28px_0px_rgba\\(0\\,0\\,0\\,0\\.13\\)\\]{--tw-shadow:0px 4px 12px 0px var(--tw-shadow-color,#00000014), 0px 12px 28px 0px var(--tw-shadow-color,#00000021);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[var\\(--btn-primary-shadow\\)\\]{--tw-shadow:var(--btn-primary-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-card{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#0000000d), 0px 12px 24px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-dialog{--tw-shadow:var(--shadow-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-step-active{--tw-shadow:var(--shadow-step-active);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:transition-\\[background-color\\,border-color\\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.clcosdk\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.clcosdk\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.clcosdk\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}.clcosdk\\:ease-out{--tw-ease:var(--clcosdk-ease-out);transition-timing-function:var(--clcosdk-ease-out)}.clcosdk\\:outline-none{--tw-outline-style:none;outline-style:none}.clcosdk\\:group-focus-within\\:opacity-100:is(:where(.clcosdk\\:group):focus-within *){opacity:1}@media (hover:hover){.clcosdk\\:group-hover\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):hover *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-hover\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):hover *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:group-hover\\:opacity-100:is(:where(.clcosdk\\:group):hover *){opacity:1}}.clcosdk\\:group-focus-visible\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):focus-visible *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-focus-visible\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):focus-visible *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:placeholder\\:text-text-disabled::placeholder{color:var(--color-text-disabled)}@media (hover:hover){.clcosdk\\:hover\\:scale-\\[1\\.02\\]:hover{scale:1.02}.clcosdk\\:hover\\:border-text-disabled:hover{border-color:var(--color-text-disabled)}.clcosdk\\:hover\\:bg-\\[\\#fcdcd8\\]:hover{background-color:#fcdcd8}.clcosdk\\:hover\\:bg-border:hover{background-color:var(--color-border)}.clcosdk\\:hover\\:bg-brand-primary:hover{background-color:var(--color-brand-primary)}.clcosdk\\:hover\\:bg-brand-primary-hover:hover{background-color:var(--color-brand-primary-hover)}.clcosdk\\:hover\\:bg-section:hover{background-color:var(--color-section)}.clcosdk\\:hover\\:bg-surface:hover{background-color:var(--color-surface)}.clcosdk\\:hover\\:text-\\[\\#8b1a13\\]:hover{color:#8b1a13}.clcosdk\\:hover\\:text-text-primary:hover{color:var(--color-text-primary)}.clcosdk\\:hover\\:underline:hover{text-decoration-line:underline}.clcosdk\\:hover\\:opacity-80:hover{opacity:.8}.clcosdk\\:hover\\:opacity-90:hover{opacity:.9}}.clcosdk\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:focus-visible\\:ring-gray-400:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-400)}.clcosdk\\:focus-visible\\:ring-gray-500:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-500)}.clcosdk\\:focus-visible\\:ring-red-400:focus-visible{--tw-ring-color:var(--clcosdk-color-red-400)}.clcosdk\\:focus-visible\\:ring-red-500:focus-visible{--tw-ring-color:var(--clcosdk-color-red-500)}.clcosdk\\:focus-visible\\:ring-sale-card-focus-ring:focus-visible{--tw-ring-color:var(--color-sale-card-focus-ring)}.clcosdk\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.clcosdk\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.clcosdk\\:active\\:bg-\\[\\#d9d9d9\\]:active{background-color:#d9d9d9}.clcosdk\\:active\\:bg-\\[\\#f9c9c4\\]:active{background-color:#f9c9c4}.clcosdk\\:active\\:bg-border:active{background-color:var(--color-border)}.clcosdk\\:active\\:bg-brand-primary-active:active{background-color:var(--color-brand-primary-active)}.clcosdk\\:active\\:text-\\[\\#6d1510\\]:active{color:#6d1510}.clcosdk\\:active\\:opacity-80:active{opacity:.8}.clcosdk\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}.clcosdk\\:disabled\\:opacity-50:disabled{opacity:.5}.clcosdk\\:aria-disabled\\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.clcosdk\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}@media not all and (min-width:48rem){.clcosdk\\:max-md\\:hidden{display:none}.clcosdk\\:max-md\\:w-full{width:100%}.clcosdk\\:max-md\\:justify-start{justify-content:flex-start}.clcosdk\\:max-md\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:max-md\\:rounded-none{border-radius:0}.clcosdk\\:max-md\\:border-0{border-style:var(--tw-border-style);border-width:0}.clcosdk\\:max-md\\:bg-transparent{background-color:#0000}.clcosdk\\:max-md\\:p-0{padding:0}@media (hover:hover){.clcosdk\\:max-md\\:hover\\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@media (min-width:40rem){.clcosdk\\:sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.clcosdk\\:md\\:right-\\[-10\\%\\]{right:-10%}.clcosdk\\:md\\:order-1{order:1}.clcosdk\\:md\\:order-2{order:2}.clcosdk\\:md\\:hidden{display:none}.clcosdk\\:md\\:size-\\[20rem\\]{width:20rem;height:20rem}.clcosdk\\:md\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:h-\\[54px\\]{height:54px}.clcosdk\\:md\\:w-9{width:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-\\[minmax\\(0\\,11fr\\)_minmax\\(0\\,8fr\\)\\]{grid-template-columns:minmax(0,11fr) minmax(0,8fr)}.clcosdk\\:md\\:flex-row{flex-direction:row}.clcosdk\\:md\\:items-center{align-items:center}.clcosdk\\:md\\:items-end{align-items:flex-end}.clcosdk\\:md\\:justify-between{justify-content:space-between}.clcosdk\\:md\\:justify-end{justify-content:flex-end}.clcosdk\\:md\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:md\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:gap-x-12{column-gap:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:self-end{align-self:flex-end}.clcosdk\\:md\\:rounded-\\[40px\\]{border-radius:40px}.clcosdk\\:md\\:rounded-card{border-radius:24px}.clcosdk\\:md\\:rounded-dialog{border-radius:32px}.clcosdk\\:md\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:px-8{padding-inline:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-2{padding-right:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:pl-4{padding-left:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:md\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:md\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:md\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:md\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:md\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:md\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:not(:where(.light,.light *)):hover{background-color:#f8717133}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:where(.dark,.dark *):hover{background-color:#f8717133}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:not(:where(.light,.light *)):hover{color:#fca5a5}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:where(.dark,.dark *):hover{color:#fca5a5}}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:not(:where(.light,.light *)):active{background-color:#f871714d}}.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:where(.dark,.dark *):active{background-color:#f871714d}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-divider:not(:where(.light,.light *)):active{background-color:var(--color-divider)}}.clcosdk\\:dark\\:active\\:bg-divider:where(.dark,.dark *):active{background-color:var(--color-divider)}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:not(:where(.light,.light *)):active{color:#f87171}}.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:where(.dark,.dark *):active{color:#f87171}.clcosdk\\:\\[\\&_circle\\]\\:fill-error-subtle circle{fill:var(--color-error-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-success-subtle circle{fill:var(--color-success-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-warning-subtle circle{fill:var(--color-warning-subtle)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
5042
5091
 
5043
5092
  // src/client/CoinListStyleScope.tsx
5044
5093
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -5340,7 +5389,7 @@ function AlertBanner({
5340
5389
  "aria-hidden": "true"
5341
5390
  }
5342
5391
  ),
5343
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: cn(typeClasses.subhead, text), children: content })
5392
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: cn(typeClasses.bodySm, text), children: content })
5344
5393
  ]
5345
5394
  }
5346
5395
  );
@@ -7565,6 +7614,20 @@ function tokenLogoUrl(logo, minWidth = 40) {
7565
7614
  }
7566
7615
  }
7567
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
+ }
7568
7631
  function offerAssetIconUrl(offer, tokenMetadata) {
7569
7632
  return (tokenMetadata ? tokenLogoUrl(tokenMetadata.logo) : null) ?? offerIconUrl(offer);
7570
7633
  }
@@ -8796,8 +8859,9 @@ var NO_TOKEN_ADDRESS = EvmContractAddress(
8796
8859
  "0x0000000000000000000000000000000000000000"
8797
8860
  );
8798
8861
  function offerTokenIdentifier(offer, chain) {
8799
- const byChain = offer.tokens.filter((token) => token.chain === chain);
8800
- 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
+ );
8801
8865
  return asset === void 0 ? null : { chain, address: asset.address };
8802
8866
  }
8803
8867
  function tokenMetadataOf(state) {
@@ -13146,6 +13210,58 @@ function renderOndoSide(side, branches) {
13146
13210
  }
13147
13211
  }
13148
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
+
13149
13265
  // src/client/components/offers/shared/offer-card-keyboard.ts
13150
13266
  function onOfferCardKeyDown(event, onClick) {
13151
13267
  if (event.key !== "Enter" && event.key !== " ") return;
@@ -13154,7 +13270,8 @@ function onOfferCardKeyDown(event, onClick) {
13154
13270
  }
13155
13271
 
13156
13272
  // src/client/components/offers/shared/OfferAssetCard.tsx
13157
- 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";
13158
13275
  function OfferAssetCard({
13159
13276
  offer,
13160
13277
  onClick,
@@ -13162,7 +13279,7 @@ function OfferAssetCard({
13162
13279
  containerClassName
13163
13280
  }) {
13164
13281
  const interactive = onClick !== void 0;
13165
- const card = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13282
+ const card = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13166
13283
  "article",
13167
13284
  {
13168
13285
  className: cn(
@@ -13176,11 +13293,13 @@ function OfferAssetCard({
13176
13293
  tabIndex: interactive ? 0 : void 0,
13177
13294
  onClick,
13178
13295
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
13179
- 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: [
13180
- 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)(
13181
- "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,
13182
13299
  {
13183
- src: offer.logoUrl,
13300
+ light: offer.logo.light,
13301
+ dark: offer.logo.dark ?? void 0,
13302
+ sizes: LOGO_SIZES,
13184
13303
  alt: "",
13185
13304
  width: 48,
13186
13305
  height: 48,
@@ -13188,8 +13307,8 @@ function OfferAssetCard({
13188
13307
  style: { maxWidth: "none", width: "100%", height: "100%" }
13189
13308
  }
13190
13309
  ) }) : null,
13191
- /* @__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: [
13192
- 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)(
13193
13312
  "h2",
13194
13313
  {
13195
13314
  className: cn(
@@ -13198,13 +13317,13 @@ function OfferAssetCard({
13198
13317
  children: offer.name
13199
13318
  }
13200
13319
  ) : null,
13201
- 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
13202
13321
  ] })
13203
13322
  ] })
13204
13323
  }
13205
13324
  );
13206
- const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: containerClassName, children: card }) : card;
13207
- 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 });
13208
13327
  }
13209
13328
  function cardActionLabel(offer) {
13210
13329
  const parts = [offer.name, offer.symbol].filter(Boolean);
@@ -13212,7 +13331,7 @@ function cardActionLabel(offer) {
13212
13331
  }
13213
13332
 
13214
13333
  // src/client/components/offers/grid/OffersAssetGrid.tsx
13215
- var import_jsx_runtime52 = require("react/jsx-runtime");
13334
+ var import_jsx_runtime53 = require("react/jsx-runtime");
13216
13335
  var DEFAULT_MAX_COLUMNS = 3;
13217
13336
  function OffersAssetGrid({
13218
13337
  offers,
@@ -13227,14 +13346,14 @@ function OffersAssetGrid({
13227
13346
  );
13228
13347
  const maxGridWidth = `calc(${cols} * 20rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
13229
13348
  const interactive = onOfferClick !== void 0;
13230
- 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)(
13231
13350
  "div",
13232
13351
  {
13233
13352
  className: cn(
13234
13353
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
13235
13354
  containerClassName
13236
13355
  ),
13237
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13356
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13238
13357
  "div",
13239
13358
  {
13240
13359
  className: cn(
@@ -13244,7 +13363,7 @@ function OffersAssetGrid({
13244
13363
  className
13245
13364
  ),
13246
13365
  style: { maxWidth: maxGridWidth },
13247
- children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13366
+ children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13248
13367
  OfferAssetCard,
13249
13368
  {
13250
13369
  offer,
@@ -13286,7 +13405,9 @@ function saleCardStatus({
13286
13405
  }
13287
13406
 
13288
13407
  // src/client/components/offers/shared/OfferSaleCard.tsx
13289
- 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";
13290
13411
  function OfferSaleCard({
13291
13412
  offer,
13292
13413
  onClick,
@@ -13301,7 +13422,8 @@ function OfferSaleCard({
13301
13422
  secondsLeft
13302
13423
  });
13303
13424
  const interactive = onClick !== void 0;
13304
- 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)(
13305
13427
  "article",
13306
13428
  {
13307
13429
  className: cn(
@@ -13316,16 +13438,17 @@ function OfferSaleCard({
13316
13438
  onClick,
13317
13439
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
13318
13440
  children: [
13319
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13441
+ logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13320
13442
  "div",
13321
13443
  {
13322
13444
  "aria-hidden": "true",
13323
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]",
13324
13446
  style: { mixBlendMode: "overlay" },
13325
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13326
- "img",
13447
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13448
+ ThemedImage,
13327
13449
  {
13328
- src: offer.logoUrl,
13450
+ light: logo,
13451
+ sizes: WATERMARK_SIZES,
13329
13452
  alt: "",
13330
13453
  className: "clcosdk:size-full clcosdk:rounded-full clcosdk:object-cover",
13331
13454
  style: { maxWidth: "none", width: "100%", height: "100%" }
@@ -13333,12 +13456,13 @@ function OfferSaleCard({
13333
13456
  )
13334
13457
  }
13335
13458
  ) : null,
13336
- /* @__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: [
13337
- /* @__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: [
13338
- 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)(
13339
- "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,
13340
13463
  {
13341
- src: offer.logoUrl,
13464
+ light: logo,
13465
+ sizes: HEADER_LOGO_SIZES,
13342
13466
  alt: "",
13343
13467
  width: 36,
13344
13468
  height: 36,
@@ -13346,7 +13470,7 @@ function OfferSaleCard({
13346
13470
  style: { maxWidth: "none", width: "100%", height: "100%" }
13347
13471
  }
13348
13472
  ) }) : null,
13349
- offer.name ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13473
+ offer.name ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13350
13474
  "h2",
13351
13475
  {
13352
13476
  className: cn(
@@ -13356,7 +13480,7 @@ function OfferSaleCard({
13356
13480
  }
13357
13481
  ) : null
13358
13482
  ] }),
13359
- offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13483
+ offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13360
13484
  "p",
13361
13485
  {
13362
13486
  className: cn(
@@ -13367,20 +13491,20 @@ function OfferSaleCard({
13367
13491
  }
13368
13492
  ) : null
13369
13493
  ] }),
13370
- /* @__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: [
13371
- /* @__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: [
13372
- 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)(
13373
13497
  "span",
13374
13498
  {
13375
13499
  className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-2 clcosdk:shrink-0",
13376
13500
  "aria-hidden": "true",
13377
13501
  children: [
13378
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
13379
- /* @__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" })
13380
13504
  ]
13381
13505
  }
13382
13506
  ) : null,
13383
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13507
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13384
13508
  "p",
13385
13509
  {
13386
13510
  className: cn(
@@ -13391,7 +13515,7 @@ function OfferSaleCard({
13391
13515
  }
13392
13516
  )
13393
13517
  ] }),
13394
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13518
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13395
13519
  "span",
13396
13520
  {
13397
13521
  className: cn(
@@ -13401,8 +13525,8 @@ function OfferSaleCard({
13401
13525
  "aria-hidden": "true",
13402
13526
  children: [
13403
13527
  "View",
13404
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
13405
- /* @__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 })
13406
13530
  ]
13407
13531
  }
13408
13532
  )
@@ -13410,8 +13534,8 @@ function OfferSaleCard({
13410
13534
  ]
13411
13535
  }
13412
13536
  );
13413
- const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: containerClassName, children: card }) : card;
13414
- 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 });
13415
13539
  }
13416
13540
  var SALE_PHASE_LABEL = {
13417
13541
  upcoming: "Upcoming",
@@ -13424,10 +13548,10 @@ function cardActionLabel2(offer, phase) {
13424
13548
  }
13425
13549
 
13426
13550
  // src/client/components/offers/grid/OffersGridView.tsx
13427
- var import_jsx_runtime54 = require("react/jsx-runtime");
13551
+ var import_jsx_runtime55 = require("react/jsx-runtime");
13428
13552
  var DEFAULT_MAX_COLUMNS2 = 2;
13429
13553
  function OffersGridView(props) {
13430
- 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 }) });
13431
13555
  }
13432
13556
  function OffersGridViewBody({
13433
13557
  state,
@@ -13441,13 +13565,13 @@ function OffersGridViewBody({
13441
13565
  }) {
13442
13566
  switch (state.type) {
13443
13567
  case "loading":
13444
- return loading ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(LoadingState, {});
13568
+ return loading ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LoadingState, {});
13445
13569
  case "error":
13446
- 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 });
13447
13571
  case "empty":
13448
- return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(EmptyState, {});
13572
+ return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(EmptyState, {});
13449
13573
  case "content":
13450
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13574
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13451
13575
  OffersGridContent,
13452
13576
  {
13453
13577
  offers: state.offers,
@@ -13477,14 +13601,14 @@ function OffersGridContent({
13477
13601
  Math.max(1, maxColumns ?? DEFAULT_MAX_COLUMNS2)
13478
13602
  );
13479
13603
  const maxGridWidth = `calc(${cols} * 28rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
13480
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13604
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13481
13605
  "div",
13482
13606
  {
13483
13607
  className: cn(
13484
13608
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
13485
13609
  containerClassName
13486
13610
  ),
13487
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13611
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13488
13612
  "div",
13489
13613
  {
13490
13614
  className: cn(
@@ -13493,7 +13617,7 @@ function OffersGridContent({
13493
13617
  className
13494
13618
  ),
13495
13619
  style: { maxWidth: maxGridWidth },
13496
- children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13620
+ children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13497
13621
  OfferSaleCard,
13498
13622
  {
13499
13623
  offer,
@@ -13507,17 +13631,17 @@ function OffersGridContent({
13507
13631
  );
13508
13632
  }
13509
13633
  function LoadingState() {
13510
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13634
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13511
13635
  "output",
13512
13636
  {
13513
13637
  "aria-live": "polite",
13514
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",
13515
- 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..." })
13516
13640
  }
13517
13641
  );
13518
13642
  }
13519
13643
  function ErrorState({ message }) {
13520
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13644
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13521
13645
  AlertBanner,
13522
13646
  {
13523
13647
  variant: "error",
@@ -13528,13 +13652,13 @@ function ErrorState({ message }) {
13528
13652
  );
13529
13653
  }
13530
13654
  function EmptyState() {
13531
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13655
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
13532
13656
  "output",
13533
13657
  {
13534
13658
  "aria-live": "polite",
13535
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",
13536
13660
  children: [
13537
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13661
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13538
13662
  "p",
13539
13663
  {
13540
13664
  className: cn(
@@ -13544,14 +13668,14 @@ function EmptyState() {
13544
13668
  children: "No offers available"
13545
13669
  }
13546
13670
  ),
13547
- /* @__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." })
13548
13672
  ]
13549
13673
  }
13550
13674
  );
13551
13675
  }
13552
13676
 
13553
13677
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
13554
- var import_react37 = require("react");
13678
+ var import_react38 = require("react");
13555
13679
 
13556
13680
  // src/client/hooks/offers/data/useOffers.ts
13557
13681
  var import_react36 = require("react");
@@ -13609,19 +13733,56 @@ function useOffers(options = {}) {
13609
13733
  return { offersState };
13610
13734
  }
13611
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
+
13612
13766
  // src/client/hooks/offers/shared/offer-sale-card.types.ts
13613
13767
  var OfferSaleCardUi = {
13614
- 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) => ({
13615
13775
  id: offer.id,
13776
+ ...tokenMetadata ? { name: tokenMetadata.name } : {},
13616
13777
  ...saleWindow(offer),
13617
- logoUrl: offer.logoUrl,
13778
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata),
13618
13779
  endsAt: offer.endsAt
13619
13780
  }),
13620
- fromDetail: (detail) => ({
13781
+ fromDetail: (detail, tokenMetadata = null) => ({
13621
13782
  id: detail.id,
13622
- name: detail.name,
13783
+ name: tokenMetadata?.name ?? detail.name,
13623
13784
  ...saleWindow(detail),
13624
- logoUrl: detail.logoUrl,
13785
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata),
13625
13786
  endsAt: detail.endsAt
13626
13787
  })
13627
13788
  };
@@ -13639,17 +13800,80 @@ function saleWindow(offer) {
13639
13800
  }
13640
13801
  }
13641
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
+
13642
13862
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
13643
13863
  var NOT_AUTHENTICATED_MESSAGE = "Sign in to view available offers.";
13644
13864
  var GENERIC_ERROR_MESSAGE = "Unable to load offers right now. Please try again.";
13645
13865
  function useOffersGridViewModel(options = {}) {
13646
13866
  const { data, onOfferClick, enabled = true } = options;
13647
- const { offersState } = useOffers({ data, enabled });
13648
- const state = (0, import_react37.useMemo)(
13649
- () => toUiState(offersState, onOfferClick !== void 0),
13650
- [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]
13651
13875
  );
13652
- const onEvent = (0, import_react37.useCallback)(
13876
+ const onEvent = (0, import_react38.useCallback)(
13653
13877
  (event) => {
13654
13878
  switch (event.type) {
13655
13879
  case "ON_OFFER_CLICK": {
@@ -13672,7 +13896,7 @@ function useOffersGridViewModel(options = {}) {
13672
13896
  );
13673
13897
  return { state, onEvent };
13674
13898
  }
13675
- function toUiState(offersState, interactive) {
13899
+ function toUiState(offersState, registryState, interactive) {
13676
13900
  switch (offersState.type) {
13677
13901
  case "LOADING":
13678
13902
  return { type: "loading" };
@@ -13685,9 +13909,18 @@ function toUiState(offersState, interactive) {
13685
13909
  if (offersState.offers.length === 0) {
13686
13910
  return { type: "empty" };
13687
13911
  }
13912
+ if (registryState.type === "LOADING") {
13913
+ return { type: "loading" };
13914
+ }
13915
+ const registry = registryState.type === "CONTENT" ? registryState.registry : null;
13688
13916
  return {
13689
13917
  type: "content",
13690
- 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
+ ),
13691
13924
  interactive
13692
13925
  };
13693
13926
  }
@@ -13699,7 +13932,7 @@ function toUiState(offersState, interactive) {
13699
13932
  }
13700
13933
 
13701
13934
  // src/client/components/offers/grid/OffersGridContainer.tsx
13702
- var import_jsx_runtime55 = require("react/jsx-runtime");
13935
+ var import_jsx_runtime56 = require("react/jsx-runtime");
13703
13936
  function OffersGridContainer({
13704
13937
  data,
13705
13938
  onOfferClick,
@@ -13711,17 +13944,17 @@ function OffersGridContainer({
13711
13944
  onOfferClick,
13712
13945
  enabled
13713
13946
  });
13714
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OffersGridView, { state, onEvent, ...viewProps });
13947
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(OffersGridView, { state, onEvent, ...viewProps });
13715
13948
  }
13716
13949
 
13717
13950
  // src/client/components/requirements/ConnectedWalletList.tsx
13718
- var import_react38 = require("react");
13719
- var import_jsx_runtime56 = require("react/jsx-runtime");
13951
+ var import_react39 = require("react");
13952
+ var import_jsx_runtime57 = require("react/jsx-runtime");
13720
13953
  function ConnectedWalletRow({
13721
13954
  wallet,
13722
13955
  onRemove
13723
13956
  }) {
13724
- const [state, setState] = (0, import_react38.useState)("idle");
13957
+ const [state, setState] = (0, import_react39.useState)("idle");
13725
13958
  const remove = async () => {
13726
13959
  if (!onRemove) return;
13727
13960
  setState("removing");
@@ -13732,8 +13965,8 @@ function ConnectedWalletRow({
13732
13965
  setState("error");
13733
13966
  }
13734
13967
  };
13735
- 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: [
13736
- /* @__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)(
13737
13970
  "span",
13738
13971
  {
13739
13972
  title: wallet.address,
@@ -13744,16 +13977,16 @@ function ConnectedWalletRow({
13744
13977
  children: wallet.shortAddress
13745
13978
  }
13746
13979
  ),
13747
- onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13748
- /* @__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)(
13749
13982
  "span",
13750
13983
  {
13751
13984
  className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
13752
13985
  children: "Remove?"
13753
13986
  }
13754
13987
  ),
13755
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
13756
- /* @__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)(
13757
13990
  ClButton,
13758
13991
  {
13759
13992
  size: "sm",
@@ -13762,9 +13995,9 @@ function ConnectedWalletRow({
13762
13995
  children: "Cancel"
13763
13996
  }
13764
13997
  )
13765
- ] }) : state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13766
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
13767
- /* @__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)(
13768
14001
  ClButton,
13769
14002
  {
13770
14003
  size: "sm",
@@ -13773,7 +14006,7 @@ function ConnectedWalletRow({
13773
14006
  children: "Try again"
13774
14007
  }
13775
14008
  )
13776
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14009
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13777
14010
  ClButton,
13778
14011
  {
13779
14012
  size: "sm",
@@ -13786,7 +14019,7 @@ function ConnectedWalletRow({
13786
14019
  ] });
13787
14020
  }
13788
14021
  function ConnectedWalletList(props) {
13789
- 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 }) });
13790
14023
  }
13791
14024
  function ConnectedWalletListBody({
13792
14025
  wallets,
@@ -13796,18 +14029,18 @@ function ConnectedWalletListBody({
13796
14029
  status = "ready",
13797
14030
  className
13798
14031
  }) {
13799
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
14032
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
13800
14033
  "div",
13801
14034
  {
13802
14035
  className: cn("clcosdk:flex clcosdk:flex-col clcosdk:gap-2", className),
13803
14036
  children: [
13804
- 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)(
13805
14038
  AlertBanner,
13806
14039
  {
13807
14040
  variant: "error",
13808
14041
  content: "Couldn't load your connected wallets."
13809
14042
  }
13810
- ) : 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)(
13811
14044
  ConnectedWalletRow,
13812
14045
  {
13813
14046
  wallet,
@@ -13815,7 +14048,7 @@ function ConnectedWalletListBody({
13815
14048
  },
13816
14049
  wallet.id
13817
14050
  )) }),
13818
- onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14051
+ onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13819
14052
  ClButton,
13820
14053
  {
13821
14054
  size: "sm",
@@ -13832,9 +14065,9 @@ function ConnectedWalletListBody({
13832
14065
 
13833
14066
  // src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
13834
14067
  var import_websdk_react = __toESM(require("@sumsub/websdk-react"), 1);
13835
- var import_jsx_runtime57 = require("react/jsx-runtime");
14068
+ var import_jsx_runtime58 = require("react/jsx-runtime");
13836
14069
  function IdentityVerificationView(props) {
13837
- 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 }) });
13838
14071
  }
13839
14072
  function IdentityVerificationViewBody({
13840
14073
  state,
@@ -13843,7 +14076,7 @@ function IdentityVerificationViewBody({
13843
14076
  }) {
13844
14077
  switch (state.type) {
13845
14078
  case "loading":
13846
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
14079
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
13847
14080
  "output",
13848
14081
  {
13849
14082
  "aria-live": "polite",
@@ -13851,11 +14084,11 @@ function IdentityVerificationViewBody({
13851
14084
  "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
13852
14085
  className
13853
14086
  ),
13854
- 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..." })
13855
14088
  }
13856
14089
  );
13857
14090
  case "error":
13858
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
14091
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
13859
14092
  "div",
13860
14093
  {
13861
14094
  className: cn(
@@ -13863,13 +14096,13 @@ function IdentityVerificationViewBody({
13863
14096
  className
13864
14097
  ),
13865
14098
  children: [
13866
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "error", icon: true, content: state.message }),
13867
- 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" })
13868
14101
  ]
13869
14102
  }
13870
14103
  );
13871
14104
  case "ready":
13872
- 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)(
13873
14106
  import_websdk_react.default,
13874
14107
  {
13875
14108
  accessToken: state.accessToken,
@@ -13909,25 +14142,25 @@ function toError(error) {
13909
14142
  }
13910
14143
 
13911
14144
  // src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
13912
- var import_react40 = require("react");
14145
+ var import_react41 = require("react");
13913
14146
 
13914
14147
  // src/client/hooks/requirements/data/useKycToken.ts
13915
- var import_react39 = require("react");
14148
+ var import_react40 = require("react");
13916
14149
  var IDLE_STATE = { type: "IDLE" };
13917
- var LOADING_STATE4 = { type: "LOADING" };
14150
+ var LOADING_STATE5 = { type: "LOADING" };
13918
14151
  function useKycToken(levelName, reset) {
13919
14152
  const { coinlist } = useCoinList();
13920
14153
  const log = useLogger("useKycToken");
13921
- const [kycTokenState, setKycTokenState] = (0, import_react39.useState)(IDLE_STATE);
13922
- const resetPendingRef = (0, import_react39.useRef)(reset === true);
13923
- const tokenIssuedRef = (0, import_react39.useRef)(false);
13924
- (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)(() => {
13925
14158
  if (!tokenIssuedRef.current) {
13926
14159
  resetPendingRef.current = reset === true;
13927
14160
  }
13928
14161
  }, [reset]);
13929
- const fetchToken = (0, import_react39.useCallback)(async () => {
13930
- setKycTokenState(LOADING_STATE4);
14162
+ const fetchToken = (0, import_react40.useCallback)(async () => {
14163
+ setKycTokenState(LOADING_STATE5);
13931
14164
  try {
13932
14165
  const kycToken = await coinlist.requirements.createKycToken({
13933
14166
  levelName,
@@ -13960,8 +14193,8 @@ var GENERIC_ERROR_MESSAGE2 = "Unable to start identity verification right now. P
13960
14193
  function useIdentityVerificationViewModel(options = {}) {
13961
14194
  const { levelName, reset, locale, onSubmitted, onError } = options;
13962
14195
  const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
13963
- const fetchedRef = (0, import_react40.useRef)(false);
13964
- (0, import_react40.useEffect)(() => {
14196
+ const fetchedRef = (0, import_react41.useRef)(false);
14197
+ (0, import_react41.useEffect)(() => {
13965
14198
  if (fetchedRef.current) {
13966
14199
  return;
13967
14200
  }
@@ -13969,7 +14202,7 @@ function useIdentityVerificationViewModel(options = {}) {
13969
14202
  fetchToken().catch(() => {
13970
14203
  });
13971
14204
  }, [fetchToken]);
13972
- const state = (0, import_react40.useMemo)(() => {
14205
+ const state = (0, import_react41.useMemo)(() => {
13973
14206
  switch (kycTokenState.type) {
13974
14207
  case "IDLE":
13975
14208
  case "LOADING":
@@ -13995,7 +14228,7 @@ function useIdentityVerificationViewModel(options = {}) {
13995
14228
  }
13996
14229
  }
13997
14230
  }, [kycTokenState, locale, fetchToken]);
13998
- const onEvent = (0, import_react40.useCallback)(
14231
+ const onEvent = (0, import_react41.useCallback)(
13999
14232
  (event) => {
14000
14233
  switch (event.type) {
14001
14234
  case "ON_RETRY":
@@ -14020,7 +14253,7 @@ function useIdentityVerificationViewModel(options = {}) {
14020
14253
  }
14021
14254
 
14022
14255
  // src/client/components/requirements/identity-verification/IdentityVerificationContainer.tsx
14023
- var import_jsx_runtime58 = require("react/jsx-runtime");
14256
+ var import_jsx_runtime59 = require("react/jsx-runtime");
14024
14257
  function IdentityVerificationContainer({
14025
14258
  levelName,
14026
14259
  reset,
@@ -14036,7 +14269,7 @@ function IdentityVerificationContainer({
14036
14269
  onSubmitted,
14037
14270
  onError
14038
14271
  });
14039
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
14272
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
14040
14273
  IdentityVerificationView,
14041
14274
  {
14042
14275
  state,
@@ -14051,7 +14284,7 @@ var import_lucide_react15 = require("lucide-react");
14051
14284
 
14052
14285
  // src/client/components/design-system/StepStatusIcon.tsx
14053
14286
  var import_lucide_react14 = require("lucide-react");
14054
- var import_jsx_runtime59 = require("react/jsx-runtime");
14287
+ var import_jsx_runtime60 = require("react/jsx-runtime");
14055
14288
  var statusConfig = {
14056
14289
  required: {
14057
14290
  Icon: import_lucide_react14.Info,
@@ -14076,7 +14309,7 @@ var statusConfig = {
14076
14309
  };
14077
14310
  function StepStatusIcon({ status, className }) {
14078
14311
  const { Icon, colorClass, fillClass } = statusConfig[status];
14079
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
14312
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14080
14313
  Icon,
14081
14314
  {
14082
14315
  className: cn(
@@ -14091,49 +14324,90 @@ function StepStatusIcon({ status, className }) {
14091
14324
  }
14092
14325
 
14093
14326
  // src/client/components/requirements/RequirementItem.tsx
14094
- var import_jsx_runtime60 = require("react/jsx-runtime");
14327
+ var import_jsx_runtime61 = require("react/jsx-runtime");
14328
+ var DEFAULT_PENDING = "Under review. We'll notify you when complete.";
14329
+ var DEFAULT_REJECTED = "Verification rejected.";
14330
+ var SUPPORT_LINK = "Contact support";
14095
14331
  function VerificationActionZone({
14096
14332
  status,
14333
+ statusMessages,
14097
14334
  onAction,
14098
14335
  onContactSupport
14099
14336
  }) {
14100
14337
  switch (status) {
14101
14338
  case "required":
14102
14339
  if (onAction === null) return null;
14103
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
14340
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Continue" });
14104
14341
  case "pending":
14105
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14342
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14106
14343
  AlertBanner,
14107
14344
  {
14108
14345
  variant: "warning",
14109
- content: "Under review. We'll notify you when complete."
14346
+ content: statusMessages?.pending ?? DEFAULT_PENDING
14110
14347
  }
14111
14348
  );
14112
14349
  case "completed":
14113
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
14350
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14351
+ AlertBanner,
14352
+ {
14353
+ variant: "success",
14354
+ content: statusMessages?.completed ?? "Identity verified."
14355
+ }
14356
+ );
14114
14357
  case "rejected":
14115
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14358
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14116
14359
  AlertBanner,
14117
14360
  {
14118
14361
  variant: "error",
14119
- content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14120
- "Verification rejected.",
14121
- " ",
14122
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14123
- "button",
14124
- {
14125
- type: "button",
14126
- onClick: onContactSupport,
14127
- className: "clcosdk:underline",
14128
- children: "Contact support"
14129
- }
14130
- ),
14131
- "."
14132
- ] })
14362
+ content: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14363
+ RejectedMessage,
14364
+ {
14365
+ message: statusMessages?.rejected ?? DEFAULT_REJECTED,
14366
+ onContactSupport
14367
+ }
14368
+ )
14133
14369
  }
14134
14370
  );
14135
14371
  }
14136
14372
  }
14373
+ function RejectedMessage({
14374
+ message,
14375
+ onContactSupport
14376
+ }) {
14377
+ const linkAt = message.indexOf(SUPPORT_LINK);
14378
+ if (onContactSupport == null) {
14379
+ return message;
14380
+ }
14381
+ if (linkAt === -1) {
14382
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14383
+ message,
14384
+ " ",
14385
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14386
+ "button",
14387
+ {
14388
+ type: "button",
14389
+ onClick: onContactSupport,
14390
+ className: "clcosdk:underline",
14391
+ children: SUPPORT_LINK
14392
+ }
14393
+ ),
14394
+ "."
14395
+ ] });
14396
+ }
14397
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14398
+ message.slice(0, linkAt),
14399
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14400
+ "button",
14401
+ {
14402
+ type: "button",
14403
+ onClick: onContactSupport,
14404
+ className: "clcosdk:underline",
14405
+ children: SUPPORT_LINK
14406
+ }
14407
+ ),
14408
+ message.slice(linkAt + SUPPORT_LINK.length)
14409
+ ] });
14410
+ }
14137
14411
  function WalletActionZone({
14138
14412
  status,
14139
14413
  multiWallet,
@@ -14143,8 +14417,8 @@ function WalletActionZone({
14143
14417
  onRemoveWallet
14144
14418
  }) {
14145
14419
  if (multiWallet) {
14146
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14147
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14420
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14421
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14148
14422
  ConnectedWalletList,
14149
14423
  {
14150
14424
  wallets: connectedWallets,
@@ -14153,7 +14427,7 @@ function WalletActionZone({
14153
14427
  status: walletsStatus
14154
14428
  }
14155
14429
  ),
14156
- status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14430
+ status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14157
14431
  AlertBanner,
14158
14432
  {
14159
14433
  variant: "error",
@@ -14164,21 +14438,30 @@ function WalletActionZone({
14164
14438
  }
14165
14439
  if (status === "completed") {
14166
14440
  const connected = connectedWallets[0];
14167
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14168
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
14169
- walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14441
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14442
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14443
+ ClButton,
14444
+ {
14445
+ size: "sm",
14446
+ variant: "secondary",
14447
+ className: "clcosdk:self-start",
14448
+ onClick: onAction,
14449
+ children: "Change wallet"
14450
+ }
14451
+ ),
14452
+ walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14170
14453
  AlertBanner,
14171
14454
  {
14172
14455
  variant: "info",
14173
14456
  content: "Loading your connected wallet\u2026"
14174
14457
  }
14175
- ) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14458
+ ) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14176
14459
  AlertBanner,
14177
14460
  {
14178
14461
  variant: "error",
14179
14462
  content: "Couldn't load your connected wallet."
14180
14463
  }
14181
- ) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14464
+ ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14182
14465
  AlertBanner,
14183
14466
  {
14184
14467
  variant: "success",
@@ -14188,9 +14471,9 @@ function WalletActionZone({
14188
14471
  ] });
14189
14472
  }
14190
14473
  if (status === "rejected") {
14191
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14192
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
14193
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14474
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14475
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Connect wallet" }),
14476
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14194
14477
  AlertBanner,
14195
14478
  {
14196
14479
  variant: "error",
@@ -14200,7 +14483,7 @@ function WalletActionZone({
14200
14483
  ] });
14201
14484
  }
14202
14485
  if (onAction === null) return null;
14203
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
14486
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Connect wallet" });
14204
14487
  }
14205
14488
  function RequirementItem({
14206
14489
  ui,
@@ -14210,9 +14493,10 @@ function RequirementItem({
14210
14493
  onAction,
14211
14494
  onRemoveWallet,
14212
14495
  walletsStatus,
14213
- onContactSupport
14496
+ onContactSupport,
14497
+ spaceBeforeNextRow = true
14214
14498
  }) {
14215
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
14499
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14216
14500
  "div",
14217
14501
  {
14218
14502
  className: cn(
@@ -14220,17 +14504,17 @@ function RequirementItem({
14220
14504
  className
14221
14505
  ),
14222
14506
  children: [
14223
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
14507
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14224
14508
  "button",
14225
14509
  {
14226
14510
  type: "button",
14227
14511
  onClick: onToggle,
14228
14512
  "aria-expanded": expanded,
14229
- 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",
14513
+ className: "clcosdk:-mx-2 clcosdk:flex clcosdk:h-14 clcosdk:w-[calc(100%+16px)] clcosdk:cursor-pointer clcosdk:items-center clcosdk:justify-between clcosdk:rounded-2xl clcosdk:px-2 clcosdk:transition-colors clcosdk:hover:bg-surface",
14230
14514
  children: [
14231
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
14232
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(StepStatusIcon, { status: ui.status }),
14233
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14515
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
14516
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(StepStatusIcon, { status: ui.status }),
14517
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14234
14518
  "span",
14235
14519
  {
14236
14520
  className: cn(
@@ -14241,7 +14525,7 @@ function RequirementItem({
14241
14525
  }
14242
14526
  )
14243
14527
  ] }),
14244
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14528
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14245
14529
  import_lucide_react15.ChevronRight,
14246
14530
  {
14247
14531
  className: cn(
@@ -14254,43 +14538,53 @@ function RequirementItem({
14254
14538
  ]
14255
14539
  }
14256
14540
  ),
14257
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14541
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14258
14542
  "div",
14259
14543
  {
14260
14544
  className: cn(
14261
14545
  "clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
14262
14546
  expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
14263
14547
  ),
14264
- 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: [
14265
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14266
- "p",
14267
- {
14268
- className: cn(
14269
- typeClasses.subhead,
14270
- "clcosdk:text-text-secondary"
14548
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14549
+ "div",
14550
+ {
14551
+ className: cn(
14552
+ "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
14553
+ spaceBeforeNextRow && "clcosdk:pb-4"
14554
+ ),
14555
+ children: [
14556
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14557
+ "p",
14558
+ {
14559
+ className: cn(
14560
+ typeClasses.bodySm,
14561
+ "clcosdk:text-text-secondary"
14562
+ ),
14563
+ children: ui.description
14564
+ }
14271
14565
  ),
14272
- children: ui.description
14273
- }
14274
- ),
14275
- ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14276
- VerificationActionZone,
14277
- {
14278
- status: ui.status,
14279
- onAction,
14280
- onContactSupport
14281
- }
14282
- ) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14283
- WalletActionZone,
14284
- {
14285
- status: ui.status,
14286
- multiWallet: ui.multiWallet,
14287
- connectedWallets: ui.connectedWallets,
14288
- walletsStatus,
14289
- onAction,
14290
- onRemoveWallet
14291
- }
14292
- )
14293
- ] }) })
14566
+ ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14567
+ VerificationActionZone,
14568
+ {
14569
+ status: ui.status,
14570
+ statusMessages: ui.statusMessages,
14571
+ onAction,
14572
+ onContactSupport
14573
+ }
14574
+ ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14575
+ WalletActionZone,
14576
+ {
14577
+ status: ui.status,
14578
+ multiWallet: ui.multiWallet,
14579
+ connectedWallets: ui.connectedWallets,
14580
+ walletsStatus,
14581
+ onAction,
14582
+ onRemoveWallet
14583
+ }
14584
+ )
14585
+ ]
14586
+ }
14587
+ ) })
14294
14588
  }
14295
14589
  )
14296
14590
  ]
@@ -14299,35 +14593,29 @@ function RequirementItem({
14299
14593
  }
14300
14594
 
14301
14595
  // src/client/components/requirements/RequirementsChecklistView.tsx
14302
- var import_jsx_runtime61 = require("react/jsx-runtime");
14596
+ var import_jsx_runtime62 = require("react/jsx-runtime");
14303
14597
  function RequirementsChecklistView(props) {
14304
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RequirementsChecklistViewBody, { ...props }) });
14598
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(RequirementsChecklistViewBody, { ...props }) });
14305
14599
  }
14306
14600
  function RequirementsChecklistViewBody({
14307
14601
  state,
14308
14602
  onEvent,
14309
14603
  loading,
14310
14604
  error,
14311
- unauthenticatedState,
14312
14605
  className
14313
14606
  }) {
14314
14607
  switch (state.type) {
14315
14608
  case "loading":
14316
- return loading ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(LoadingState2, {});
14317
- case "not-authenticated":
14318
- return unauthenticatedState ?? null;
14319
- case "error":
14320
- return error ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14321
- AlertBanner,
14609
+ return loading ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14610
+ LoadingState2,
14322
14611
  {
14323
- variant: "error",
14324
- icon: true,
14325
- content: "Unable to load requirements right now. Please try again.",
14326
- className: "clcosdk:w-full clcosdk:max-w-[28rem]"
14612
+ title: state.title,
14613
+ description: state.description,
14614
+ className
14327
14615
  }
14328
14616
  );
14329
- case "content":
14330
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14617
+ case "error":
14618
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14331
14619
  "div",
14332
14620
  {
14333
14621
  className: cn(
@@ -14335,46 +14623,91 @@ function RequirementsChecklistViewBody({
14335
14623
  className
14336
14624
  ),
14337
14625
  children: [
14338
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14339
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14340
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
14341
- ] }),
14342
- /* @__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)(
14343
- RequirementItem,
14344
- {
14345
- ui: row.item,
14346
- expanded: row.expanded,
14347
- onToggle: () => onEvent({ type: "ON_TOGGLE_ITEM", requirementId: row.id }),
14348
- onAction: row.actionEnabled ? () => onEvent({
14349
- type: "ON_REQUIREMENT_ACTION",
14350
- requirementId: row.id
14351
- }) : null,
14352
- onRemoveWallet: row.wallets ? (id) => state.removeWallet(id) : void 0,
14353
- walletsStatus: row.wallets?.status,
14354
- onContactSupport: row.contactSupportEnabled ? () => onEvent({
14355
- type: "ON_CONTACT_SUPPORT",
14356
- requirementId: row.id
14357
- }) : null
14358
- },
14359
- row.id
14360
- )) }),
14361
- state.ineligible && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14626
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14627
+ error ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14362
14628
  AlertBanner,
14363
14629
  {
14364
14630
  variant: "error",
14365
14631
  icon: true,
14366
- content: "You are not eligible to participate."
14632
+ content: "Unable to load requirements. Refresh the page to try again."
14367
14633
  }
14368
- ),
14369
- state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14634
+ )
14635
+ ]
14636
+ }
14637
+ );
14638
+ case "content":
14639
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14640
+ "div",
14641
+ {
14642
+ className: cn(
14643
+ "clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
14644
+ className
14645
+ ),
14646
+ children: [
14647
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14648
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14649
+ state.blockedMessage == null && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14650
+ "p",
14651
+ {
14652
+ className: cn(typeClasses.body, "clcosdk:text-text-secondary"),
14653
+ children: state.items.length === 0 ? "No requirements to complete." : state.description
14654
+ }
14655
+ )
14656
+ ] }),
14657
+ state.blockedMessage != null ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "info", icon: true, content: state.blockedMessage }) : state.items.length === 0 ? state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14370
14658
  ClButton,
14371
14659
  {
14660
+ variant: "primary",
14372
14661
  fullWidth: true,
14373
14662
  disabled: !state.continueAction.enabled,
14374
14663
  onClick: () => onEvent({ type: "ON_CONTINUE" }),
14375
14664
  children: "Continue"
14376
14665
  }
14377
- )
14666
+ ) : /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
14667
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14668
+ RequirementItem,
14669
+ {
14670
+ ui: row.item,
14671
+ expanded: row.expanded,
14672
+ spaceBeforeNextRow: index < state.items.length - 1,
14673
+ onToggle: () => onEvent({ type: "ON_TOGGLE_ITEM", requirementId: row.id }),
14674
+ onAction: row.actionEnabled ? () => onEvent({
14675
+ type: "ON_REQUIREMENT_ACTION",
14676
+ requirementId: row.id
14677
+ }) : null,
14678
+ onRemoveWallet: row.wallets ? (id) => state.removeWallet(id) : void 0,
14679
+ walletsStatus: row.wallets?.status,
14680
+ onContactSupport: row.contactSupportEnabled ? () => onEvent({
14681
+ type: "ON_CONTACT_SUPPORT",
14682
+ requirementId: row.id
14683
+ }) : null
14684
+ },
14685
+ row.id
14686
+ )) }),
14687
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-row clcosdk:items-center clcosdk:justify-between clcosdk:gap-6", children: [
14688
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14689
+ "span",
14690
+ {
14691
+ className: cn(
14692
+ typeClasses.subhead,
14693
+ "clcosdk:min-w-0",
14694
+ state.ineligible ? "clcosdk:text-error" : "clcosdk:text-text-secondary"
14695
+ ),
14696
+ children: state.ineligible ? "You are not eligible to invest." : completedLabel(state.items)
14697
+ }
14698
+ ),
14699
+ state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14700
+ ClButton,
14701
+ {
14702
+ variant: "primary",
14703
+ disabled: !state.continueAction.enabled,
14704
+ onClick: () => onEvent({ type: "ON_CONTINUE" }),
14705
+ className: "clcosdk:shrink-0",
14706
+ children: "Continue"
14707
+ }
14708
+ )
14709
+ ] })
14710
+ ] })
14378
14711
  ]
14379
14712
  }
14380
14713
  );
@@ -14384,19 +14717,43 @@ function RequirementsChecklistViewBody({
14384
14717
  }
14385
14718
  }
14386
14719
  }
14387
- function LoadingState2() {
14388
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14389
- "output",
14720
+ function completedLabel(items) {
14721
+ const completed = items.filter(
14722
+ (row) => row.item.status === "completed"
14723
+ ).length;
14724
+ return `${completed}/${items.length} completed`;
14725
+ }
14726
+ var LOADING_ROW_WIDTHS = [
14727
+ "clcosdk:w-3/5",
14728
+ "clcosdk:w-2/5",
14729
+ "clcosdk:w-1/2"
14730
+ ];
14731
+ function LoadingState2({
14732
+ title: title2,
14733
+ description: description2,
14734
+ className
14735
+ }) {
14736
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14737
+ "div",
14390
14738
  {
14391
- "aria-live": "polite",
14392
- 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",
14393
- children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
14739
+ className: cn(
14740
+ "clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
14741
+ className
14742
+ ),
14743
+ children: [
14744
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("output", { className: "clcosdk:sr-only", children: "Loading requirements..." }),
14745
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14746
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: title2 }),
14747
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: description2 })
14748
+ ] }),
14749
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-3", children: LOADING_ROW_WIDTHS.map((width) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Skeleton, { className: cn("clcosdk:h-8", width) }, width)) })
14750
+ ]
14394
14751
  }
14395
14752
  );
14396
14753
  }
14397
14754
 
14398
14755
  // src/client/components/requirements/tax-document/TaxDocumentModalView.tsx
14399
- var import_jsx_runtime62 = require("react/jsx-runtime");
14756
+ var import_jsx_runtime63 = require("react/jsx-runtime");
14400
14757
  function TaxDocumentModalView({
14401
14758
  state,
14402
14759
  onEvent,
@@ -14405,7 +14762,7 @@ function TaxDocumentModalView({
14405
14762
  if (state.type === "hidden") {
14406
14763
  return null;
14407
14764
  }
14408
- 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)(
14765
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14409
14766
  "div",
14410
14767
  {
14411
14768
  className: cn(
@@ -14413,11 +14770,11 @@ function TaxDocumentModalView({
14413
14770
  className
14414
14771
  ),
14415
14772
  children: [
14416
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14417
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14418
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14773
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14774
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14775
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14419
14776
  ] }),
14420
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Screen, { screen: state.screen, onEvent })
14777
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Screen, { screen: state.screen, onEvent })
14421
14778
  ]
14422
14779
  }
14423
14780
  ) }) });
@@ -14428,11 +14785,11 @@ function Screen({
14428
14785
  }) {
14429
14786
  switch (screen.type) {
14430
14787
  case "loading":
14431
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(LoadingScreen, {});
14788
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(LoadingScreen, {});
14432
14789
  case "error":
14433
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
14790
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
14434
14791
  case "review":
14435
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14792
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14436
14793
  ReviewScreen,
14437
14794
  {
14438
14795
  fields: screen.fields,
@@ -14443,9 +14800,9 @@ function Screen({
14443
14800
  }
14444
14801
  );
14445
14802
  case "editing":
14446
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(EditScreen, { fields: screen.fields, onEvent });
14803
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(EditScreen, { fields: screen.fields, onEvent });
14447
14804
  case "sign-only":
14448
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14805
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14449
14806
  SignOnlyScreen,
14450
14807
  {
14451
14808
  signing: screen.signing,
@@ -14460,14 +14817,14 @@ function Screen({
14460
14817
  }
14461
14818
  }
14462
14819
  function LoadingScreen() {
14463
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14820
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14464
14821
  "output",
14465
14822
  {
14466
14823
  "aria-live": "polite",
14467
14824
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
14468
- 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: [
14469
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
14470
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
14825
+ children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
14826
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
14827
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
14471
14828
  ] }, row))
14472
14829
  }
14473
14830
  );
@@ -14479,9 +14836,9 @@ function ReviewScreen({
14479
14836
  signError,
14480
14837
  onEvent
14481
14838
  }) {
14482
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14483
- /* @__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." }),
14484
- piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14839
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14840
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
14841
+ piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14485
14842
  AlertBanner,
14486
14843
  {
14487
14844
  variant: "info",
@@ -14489,27 +14846,27 @@ function ReviewScreen({
14489
14846
  content: "We don't have this information on file yet \u2014 please fill it in below."
14490
14847
  }
14491
14848
  ),
14492
- /* @__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)(
14849
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, displayValue }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14493
14850
  "div",
14494
14851
  {
14495
14852
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
14496
14853
  children: [
14497
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14854
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14498
14855
  "span",
14499
14856
  {
14500
14857
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14501
14858
  children: label
14502
14859
  }
14503
14860
  ),
14504
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
14861
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
14505
14862
  ]
14506
14863
  },
14507
14864
  field
14508
14865
  )) }),
14509
- /* @__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." }),
14510
- signError && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14511
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14512
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14866
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.caption, "clcosdk:text-text-secondary"), children: "By signing, you certify that the information above is accurate and that you are the beneficial owner of the income this form relates to. This document cannot be edited once signed." }),
14867
+ signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14868
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14869
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14513
14870
  ClButton,
14514
14871
  {
14515
14872
  fullWidth: true,
@@ -14519,7 +14876,7 @@ function ReviewScreen({
14519
14876
  children: "Sign W-8BEN"
14520
14877
  }
14521
14878
  ),
14522
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14879
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14523
14880
  ClButton,
14524
14881
  {
14525
14882
  fullWidth: true,
@@ -14536,20 +14893,20 @@ function EditScreen({
14536
14893
  fields,
14537
14894
  onEvent
14538
14895
  }) {
14539
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14540
- /* @__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)(
14896
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14897
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, placeholder, value }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14541
14898
  "label",
14542
14899
  {
14543
14900
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
14544
14901
  children: [
14545
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14902
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14546
14903
  "span",
14547
14904
  {
14548
14905
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14549
14906
  children: label
14550
14907
  }
14551
14908
  ),
14552
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14909
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14553
14910
  "input",
14554
14911
  {
14555
14912
  type: "text",
@@ -14570,9 +14927,9 @@ function EditScreen({
14570
14927
  },
14571
14928
  field
14572
14929
  )) }),
14573
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14574
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
14575
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14930
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14931
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
14932
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14576
14933
  ClButton,
14577
14934
  {
14578
14935
  fullWidth: true,
@@ -14589,10 +14946,10 @@ function SignOnlyScreen({
14589
14946
  signError,
14590
14947
  onEvent
14591
14948
  }) {
14592
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14593
- /* @__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." }),
14594
- signError && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14595
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14949
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14950
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "As an entity investor, you must complete a W-8BEN-E to confirm your foreign tax status and claim applicable treaty benefits. You'll receive an email to complete the signing." }),
14951
+ signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14952
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14596
14953
  ClButton,
14597
14954
  {
14598
14955
  fullWidth: true,
@@ -14606,12 +14963,12 @@ function SignOnlyScreen({
14606
14963
  }
14607
14964
 
14608
14965
  // src/client/hooks/requirements/tax-document/useTaxDocumentModalViewModel.ts
14609
- var import_react42 = require("react");
14966
+ var import_react43 = require("react");
14610
14967
 
14611
14968
  // src/client/hooks/requirements/data/useTaxDocument.ts
14612
- var import_react41 = require("react");
14969
+ var import_react42 = require("react");
14613
14970
  var IDLE_SIGN = { type: "idle", error: null };
14614
- var LOADING_STATE5 = { type: "LOADING" };
14971
+ var LOADING_STATE6 = { type: "LOADING" };
14615
14972
  var SIGN_FAILED_MESSAGE = "Unable to sign document. Please try again.";
14616
14973
  var DOB_INVALID_MESSAGE = "Enter your date of birth as MM/DD/YYYY.";
14617
14974
  var FIELD_KEYS = {
@@ -14684,8 +15041,8 @@ function useTaxDocument({
14684
15041
  }) {
14685
15042
  const { coinlist, isReady } = useCoinList();
14686
15043
  const log = useLogger("useTaxDocument");
14687
- const [state, setState] = (0, import_react41.useState)(LOADING_STATE5);
14688
- (0, import_react41.useEffect)(() => {
15044
+ const [state, setState] = (0, import_react42.useState)(LOADING_STATE6);
15045
+ (0, import_react42.useEffect)(() => {
14689
15046
  let isCancelled = false;
14690
15047
  if (!isOpen) {
14691
15048
  return () => {
@@ -14693,12 +15050,12 @@ function useTaxDocument({
14693
15050
  };
14694
15051
  }
14695
15052
  if (!isReady) {
14696
- setState(LOADING_STATE5);
15053
+ setState(LOADING_STATE6);
14697
15054
  return () => {
14698
15055
  isCancelled = true;
14699
15056
  };
14700
15057
  }
14701
- setState(LOADING_STATE5);
15058
+ setState(LOADING_STATE6);
14702
15059
  coinlist.requirements.getPii().then((pii) => {
14703
15060
  if (isCancelled) return;
14704
15061
  if (pii.kind === "company") {
@@ -14726,7 +15083,7 @@ function useTaxDocument({
14726
15083
  isCancelled = true;
14727
15084
  };
14728
15085
  }, [coinlist, isReady, isOpen, log]);
14729
- const onEditField = (0, import_react41.useCallback)(
15086
+ const onEditField = (0, import_react42.useCallback)(
14730
15087
  (field, value) => {
14731
15088
  setState(
14732
15089
  (prev) => prev.type === "EDITING" ? { ...prev, fields: { ...prev.fields, [field]: value } } : prev
@@ -14734,7 +15091,7 @@ function useTaxDocument({
14734
15091
  },
14735
15092
  []
14736
15093
  );
14737
- const onStartEdit = (0, import_react41.useCallback)(() => {
15094
+ const onStartEdit = (0, import_react42.useCallback)(() => {
14738
15095
  setState(
14739
15096
  (prev) => prev.type === "REVIEW" ? {
14740
15097
  type: "EDITING",
@@ -14745,7 +15102,7 @@ function useTaxDocument({
14745
15102
  } : prev
14746
15103
  );
14747
15104
  }, []);
14748
- const onSaveEdit = (0, import_react41.useCallback)(() => {
15105
+ const onSaveEdit = (0, import_react42.useCallback)(() => {
14749
15106
  setState(
14750
15107
  (prev) => prev.type === "EDITING" ? {
14751
15108
  type: "REVIEW",
@@ -14756,7 +15113,7 @@ function useTaxDocument({
14756
15113
  } : prev
14757
15114
  );
14758
15115
  }, []);
14759
- const onCancelEdit = (0, import_react41.useCallback)(() => {
15116
+ const onCancelEdit = (0, import_react42.useCallback)(() => {
14760
15117
  setState(
14761
15118
  (prev) => prev.type === "EDITING" ? {
14762
15119
  type: "REVIEW",
@@ -14767,7 +15124,7 @@ function useTaxDocument({
14767
15124
  } : prev
14768
15125
  );
14769
15126
  }, []);
14770
- const onSign = (0, import_react41.useCallback)(() => {
15127
+ const onSign = (0, import_react42.useCallback)(() => {
14771
15128
  if (state.type !== "REVIEW" && state.type !== "SIGN_ONLY") return;
14772
15129
  if (state.type === "REVIEW" && state.fields.dob.trim() !== "" && !isValidUsDate(state.fields.dob)) {
14773
15130
  setState({
@@ -14809,19 +15166,19 @@ function useTaxDocumentModalViewModel({
14809
15166
  onSubmitted
14810
15167
  }) {
14811
15168
  const { state, onEditField, onStartEdit, onSaveEdit, onCancelEdit, onSign } = useTaxDocument({ isOpen });
14812
- (0, import_react42.useEffect)(() => {
15169
+ (0, import_react43.useEffect)(() => {
14813
15170
  if (state.type === "SUBMITTED") {
14814
15171
  onSubmitted?.(state.submission);
14815
15172
  onClose();
14816
15173
  }
14817
15174
  }, [state]);
14818
- const uiState = (0, import_react42.useMemo)(() => {
15175
+ const uiState = (0, import_react43.useMemo)(() => {
14819
15176
  if (!isOpen || state.type === "SUBMITTED") {
14820
15177
  return { type: "hidden" };
14821
15178
  }
14822
15179
  return { type: "content", title: toTitle(state), screen: toScreen(state) };
14823
15180
  }, [isOpen, state]);
14824
- const onEvent = (0, import_react42.useCallback)(
15181
+ const onEvent = (0, import_react43.useCallback)(
14825
15182
  (event) => {
14826
15183
  switch (event.type) {
14827
15184
  case "ON_CLOSE":
@@ -14904,7 +15261,7 @@ function toFieldsUi(fields) {
14904
15261
  }
14905
15262
 
14906
15263
  // src/client/components/requirements/tax-document/TaxDocumentModalContainer.tsx
14907
- var import_jsx_runtime63 = require("react/jsx-runtime");
15264
+ var import_jsx_runtime64 = require("react/jsx-runtime");
14908
15265
  function TaxDocumentModalContainer({
14909
15266
  isOpen,
14910
15267
  onClose,
@@ -14916,7 +15273,7 @@ function TaxDocumentModalContainer({
14916
15273
  onClose,
14917
15274
  onSubmitted
14918
15275
  });
14919
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
15276
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
14920
15277
  TaxDocumentModalView,
14921
15278
  {
14922
15279
  state,
@@ -14927,26 +15284,26 @@ function TaxDocumentModalContainer({
14927
15284
  }
14928
15285
 
14929
15286
  // src/client/components/requirements/VerificationOverlay.tsx
14930
- var import_jsx_runtime64 = require("react/jsx-runtime");
15287
+ var import_jsx_runtime65 = require("react/jsx-runtime");
14931
15288
  function VerificationOverlay({
14932
15289
  onClose,
14933
15290
  children
14934
15291
  }) {
14935
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(VerificationOverlayBody, { onClose, children }) });
15292
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(VerificationOverlayBody, { onClose, children }) });
14936
15293
  }
14937
15294
  function VerificationOverlayBody({
14938
15295
  onClose,
14939
15296
  children
14940
15297
  }) {
14941
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
15298
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14942
15299
  "div",
14943
15300
  {
14944
15301
  role: "dialog",
14945
15302
  "aria-modal": "true",
14946
15303
  "aria-label": "Identity verification",
14947
15304
  className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
14948
- 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: [
14949
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
15305
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:relative clcosdk:flex clcosdk:max-h-[92vh] clcosdk:w-full clcosdk:max-w-[760px] clcosdk:flex-col clcosdk:overflow-y-auto clcosdk:rounded-2xl clcosdk:bg-background clcosdk:p-6 clcosdk:pt-14", children: [
15306
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14950
15307
  CloseButton,
14951
15308
  {
14952
15309
  onClick: onClose,
@@ -14960,18 +15317,18 @@ function VerificationOverlayBody({
14960
15317
  }
14961
15318
 
14962
15319
  // src/client/components/requirements/wallet/ConnectWalletModalView.tsx
14963
- var import_react43 = require("react");
14964
- var import_jsx_runtime65 = require("react/jsx-runtime");
15320
+ var import_react44 = require("react");
15321
+ var import_jsx_runtime66 = require("react/jsx-runtime");
14965
15322
  function ConnectWalletModalView({
14966
15323
  state,
14967
15324
  onEvent,
14968
15325
  className
14969
15326
  }) {
14970
- const titleId = (0, import_react43.useId)();
15327
+ const titleId = (0, import_react44.useId)();
14971
15328
  if (state.type === "hidden") {
14972
15329
  return null;
14973
15330
  }
14974
- 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)(
15331
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
14975
15332
  "div",
14976
15333
  {
14977
15334
  role: "dialog",
@@ -14982,8 +15339,8 @@ function ConnectWalletModalView({
14982
15339
  className
14983
15340
  ),
14984
15341
  children: [
14985
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14986
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15342
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
15343
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14987
15344
  "h3",
14988
15345
  {
14989
15346
  id: titleId,
@@ -14991,9 +15348,9 @@ function ConnectWalletModalView({
14991
15348
  children: "Connect your wallet"
14992
15349
  }
14993
15350
  ),
14994
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
15351
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14995
15352
  ] }),
14996
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15353
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14997
15354
  Screen2,
14998
15355
  {
14999
15356
  screen: state.screen,
@@ -15012,9 +15369,9 @@ function Screen2({
15012
15369
  }) {
15013
15370
  switch (screen.type) {
15014
15371
  case "needs-wallet":
15015
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15016
- /* @__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." }),
15017
- canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15372
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15373
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
15374
+ canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15018
15375
  ClButton,
15019
15376
  {
15020
15377
  fullWidth: true,
@@ -15024,23 +15381,23 @@ function Screen2({
15024
15381
  )
15025
15382
  ] });
15026
15383
  case "ready":
15027
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15028
- /* @__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." }),
15029
- /* @__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: [
15030
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15384
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15385
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Sign a message with your connected wallet to prove you own it. This does not cost gas or move any funds." }),
15386
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
15387
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15031
15388
  "span",
15032
15389
  {
15033
15390
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
15034
15391
  children: "Wallet address"
15035
15392
  }
15036
15393
  ),
15037
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
15394
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
15038
15395
  ] }),
15039
15396
  screen.signError && // Live region: the error is inserted async after a failed attempt,
15040
15397
  // so screen readers need it announced rather than silently
15041
15398
  // rendered.
15042
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
15043
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15399
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
15400
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15044
15401
  ClButton,
15045
15402
  {
15046
15403
  fullWidth: true,
@@ -15051,7 +15408,7 @@ function Screen2({
15051
15408
  children: "Sign & connect"
15052
15409
  }
15053
15410
  ),
15054
- canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15411
+ canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15055
15412
  ClButton,
15056
15413
  {
15057
15414
  fullWidth: true,
@@ -15070,10 +15427,10 @@ function Screen2({
15070
15427
  }
15071
15428
 
15072
15429
  // src/client/hooks/requirements/wallet/useConnectWalletModalViewModel.ts
15073
- var import_react45 = require("react");
15430
+ var import_react46 = require("react");
15074
15431
 
15075
15432
  // src/client/hooks/requirements/data/useConnectWallet.ts
15076
- var import_react44 = require("react");
15433
+ var import_react45 = require("react");
15077
15434
 
15078
15435
  // src/client/core/wallets/connect-external-wallet.ts
15079
15436
  var DEFAULT_STATEMENT = "Sign this message to prove you own this wallet. This does not cost gas or move funds.";
@@ -15204,24 +15561,24 @@ function useConnectWallet({
15204
15561
  statement
15205
15562
  }) {
15206
15563
  const { coinlist } = useCoinList();
15207
- const [state, setState] = (0, import_react44.useState)(
15564
+ const [state, setState] = (0, import_react45.useState)(
15208
15565
  () => wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
15209
15566
  );
15210
- const attempt = (0, import_react44.useRef)(0);
15211
- (0, import_react44.useEffect)(() => {
15567
+ const attempt = (0, import_react45.useRef)(0);
15568
+ (0, import_react45.useEffect)(() => {
15212
15569
  attempt.current += 1;
15213
15570
  if (!isOpen) return;
15214
15571
  setState(
15215
15572
  wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
15216
15573
  );
15217
15574
  }, [isOpen, wallet?.address]);
15218
- (0, import_react44.useEffect)(
15575
+ (0, import_react45.useEffect)(
15219
15576
  () => () => {
15220
15577
  attempt.current += 1;
15221
15578
  },
15222
15579
  []
15223
15580
  );
15224
- const onSign = (0, import_react44.useCallback)(() => {
15581
+ const onSign = (0, import_react45.useCallback)(() => {
15225
15582
  if (!wallet || state.type !== "READY") return;
15226
15583
  attempt.current += 1;
15227
15584
  const gen = attempt.current;
@@ -15283,13 +15640,13 @@ function useConnectWalletModalViewModel({
15283
15640
  challengeType,
15284
15641
  statement
15285
15642
  });
15286
- (0, import_react45.useEffect)(() => {
15643
+ (0, import_react46.useEffect)(() => {
15287
15644
  if (state.type === "CONNECTED") {
15288
15645
  onConnected?.(state.binding);
15289
15646
  onClose();
15290
15647
  }
15291
15648
  }, [state]);
15292
- const uiState = (0, import_react45.useMemo)(() => {
15649
+ const uiState = (0, import_react46.useMemo)(() => {
15293
15650
  if (!isOpen || state.type === "CONNECTED") {
15294
15651
  return { type: "hidden" };
15295
15652
  }
@@ -15314,7 +15671,7 @@ function useConnectWalletModalViewModel({
15314
15671
  canRequestConnect
15315
15672
  };
15316
15673
  }, [isOpen, state, onRequestConnect]);
15317
- const onEvent = (0, import_react45.useCallback)(
15674
+ const onEvent = (0, import_react46.useCallback)(
15318
15675
  (event) => {
15319
15676
  switch (event.type) {
15320
15677
  case "ON_CLOSE":
@@ -15338,13 +15695,13 @@ function useConnectWalletModalViewModel({
15338
15695
  }
15339
15696
 
15340
15697
  // src/client/components/requirements/wallet/ConnectWalletModalContainer.tsx
15341
- var import_jsx_runtime66 = require("react/jsx-runtime");
15698
+ var import_jsx_runtime67 = require("react/jsx-runtime");
15342
15699
  function ConnectWalletModalContainer({
15343
15700
  className,
15344
15701
  ...options
15345
15702
  }) {
15346
15703
  const { state, onEvent } = useConnectWalletModalViewModel(options);
15347
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15704
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
15348
15705
  ConnectWalletModalView,
15349
15706
  {
15350
15707
  state,
@@ -15355,11 +15712,11 @@ function ConnectWalletModalContainer({
15355
15712
  }
15356
15713
 
15357
15714
  // src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
15358
- var import_react48 = require("react");
15715
+ var import_react49 = require("react");
15359
15716
 
15360
15717
  // src/client/hooks/requirements/data/useOptionAddresses.ts
15361
- var import_react46 = require("react");
15362
- var LOADING_STATE6 = { type: "LOADING" };
15718
+ var import_react47 = require("react");
15719
+ var LOADING_STATE7 = { type: "LOADING" };
15363
15720
  var EMPTY_STATE = {
15364
15721
  type: "CONTENT",
15365
15722
  addresses: []
@@ -15368,19 +15725,19 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15368
15725
  const { coinlist, isReady } = useCoinList();
15369
15726
  const log = useLogger("useOptionAddresses");
15370
15727
  const { data, enabled = true } = options;
15371
- const [addressesState, setAddressesState] = (0, import_react46.useState)(
15372
- data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE6
15728
+ const [addressesState, setAddressesState] = (0, import_react47.useState)(
15729
+ data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE7
15373
15730
  );
15374
- const [fetchKey, setFetchKey] = (0, import_react46.useState)(0);
15375
- const refetch = (0, import_react46.useCallback)(() => setFetchKey((k) => k + 1), []);
15376
- const disconnect = (0, import_react46.useCallback)(
15731
+ const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
15732
+ const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
15733
+ const disconnect = (0, import_react47.useCallback)(
15377
15734
  async (addressId) => {
15378
15735
  await coinlist.wallets.remove({ offerId, addressId });
15379
15736
  refetch();
15380
15737
  },
15381
15738
  [coinlist, offerId, refetch]
15382
15739
  );
15383
- (0, import_react46.useEffect)(() => {
15740
+ (0, import_react47.useEffect)(() => {
15384
15741
  let isCancelled = false;
15385
15742
  if (!enabled) {
15386
15743
  setAddressesState(
@@ -15392,7 +15749,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15392
15749
  }
15393
15750
  if (!isReady) {
15394
15751
  if (data === void 0) {
15395
- setAddressesState(LOADING_STATE6);
15752
+ setAddressesState(LOADING_STATE7);
15396
15753
  }
15397
15754
  return () => {
15398
15755
  isCancelled = true;
@@ -15409,7 +15766,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15409
15766
  isCancelled = true;
15410
15767
  };
15411
15768
  }
15412
- setAddressesState(LOADING_STATE6);
15769
+ setAddressesState(LOADING_STATE7);
15413
15770
  coinlist.wallets.list({ offerId, offerOptionId }).then((addresses) => {
15414
15771
  if (!isCancelled) {
15415
15772
  log.debug(() => ({
@@ -15436,18 +15793,18 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15436
15793
  }
15437
15794
 
15438
15795
  // src/client/hooks/requirements/data/useRequirements.ts
15439
- var import_react47 = require("react");
15440
- var LOADING_STATE7 = { type: "LOADING" };
15796
+ var import_react48 = require("react");
15797
+ var LOADING_STATE8 = { type: "LOADING" };
15441
15798
  function useRequirements(offerId, options = {}) {
15442
15799
  const { coinlist, isReady } = useCoinList();
15443
15800
  const log = useLogger("useRequirements");
15444
15801
  const { data, enabled = true } = options;
15445
- const [requirementsState, setRequirementsState] = (0, import_react47.useState)(
15446
- data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE7
15802
+ const [requirementsState, setRequirementsState] = (0, import_react48.useState)(
15803
+ data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE8
15447
15804
  );
15448
- const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
15449
- const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
15450
- (0, import_react47.useEffect)(() => {
15805
+ const [fetchKey, setFetchKey] = (0, import_react48.useState)(0);
15806
+ const refetch = (0, import_react48.useCallback)(() => setFetchKey((k) => k + 1), []);
15807
+ (0, import_react48.useEffect)(() => {
15451
15808
  let isCancelled = false;
15452
15809
  if (!enabled) {
15453
15810
  return () => {
@@ -15456,7 +15813,7 @@ function useRequirements(offerId, options = {}) {
15456
15813
  }
15457
15814
  if (!isReady) {
15458
15815
  if (data === void 0) {
15459
- setRequirementsState(LOADING_STATE7);
15816
+ setRequirementsState(LOADING_STATE8);
15460
15817
  }
15461
15818
  return () => {
15462
15819
  isCancelled = true;
@@ -15473,7 +15830,7 @@ function useRequirements(offerId, options = {}) {
15473
15830
  isCancelled = true;
15474
15831
  };
15475
15832
  }
15476
- setRequirementsState(LOADING_STATE7);
15833
+ setRequirementsState(LOADING_STATE8);
15477
15834
  Promise.all([
15478
15835
  coinlist.requirements.forOffer(offerId),
15479
15836
  coinlist.requirements.statuses(offerId)
@@ -15515,7 +15872,7 @@ var RequirementItemUi = {
15515
15872
  fromDomain(req, statusInfo, label, description2, addresses = []) {
15516
15873
  return {
15517
15874
  variant: RequirementVariant.fromType(req.type),
15518
- status: statusInfo ? RequirementStatus.fromStatusValue(statusInfo.status) : "required",
15875
+ status: requirementStatus(req, statusInfo),
15519
15876
  label,
15520
15877
  description: description2,
15521
15878
  multiWallet: req.type === "whitelisted_wallet",
@@ -15523,10 +15880,44 @@ var RequirementItemUi = {
15523
15880
  id: address.id,
15524
15881
  address: address.address,
15525
15882
  shortAddress: shortenAddress(address.address)
15526
- }))
15883
+ })),
15884
+ statusMessages: statusMessagesFor(req.type)
15527
15885
  };
15528
15886
  }
15529
15887
  };
15888
+ var IDENTITY_STATUS_MESSAGES = {
15889
+ pending: "Verification under review. We'll notify you when it's complete.",
15890
+ completed: "Identity verified.",
15891
+ rejected: "We couldn't verify your identity. Contact support for help."
15892
+ };
15893
+ var ACCREDITATION_STATUS_MESSAGES = {
15894
+ pending: "Accreditation under review. We'll notify you when it's complete.",
15895
+ completed: "Accreditation verified.",
15896
+ rejected: "We couldn't verify your accreditation. Contact support for help."
15897
+ };
15898
+ var TAX_DOCUMENTATION_STATUS_MESSAGES = {
15899
+ completed: "Tax documentation completed.",
15900
+ rejected: "We couldn't accept your tax documentation. Contact support for help."
15901
+ };
15902
+ function statusMessagesFor(type) {
15903
+ switch (type) {
15904
+ case "kyc_approved":
15905
+ return IDENTITY_STATUS_MESSAGES;
15906
+ case "accreditation":
15907
+ return ACCREDITATION_STATUS_MESSAGES;
15908
+ case "document":
15909
+ return TAX_DOCUMENTATION_STATUS_MESSAGES;
15910
+ default:
15911
+ return void 0;
15912
+ }
15913
+ }
15914
+ function requirementStatus(req, statusInfo) {
15915
+ if (!statusInfo) return "required";
15916
+ if (req.type === "document" && statusInfo.status === "in_progress") {
15917
+ return "required";
15918
+ }
15919
+ return RequirementStatus.fromStatusValue(statusInfo.status);
15920
+ }
15530
15921
  var RequirementVariant = {
15531
15922
  fromType(type) {
15532
15923
  switch (type) {
@@ -15563,20 +15954,20 @@ var ChecklistStatus = {
15563
15954
 
15564
15955
  // src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
15565
15956
  var DEFAULT_LABELS = {
15566
- kyc_approved: "KYC Verification",
15957
+ kyc_approved: "Identity Verification",
15567
15958
  external_wallet: "External Wallet",
15568
15959
  whitelisted_wallet: "Whitelisted Wallet",
15569
15960
  jurisdiction: "Jurisdiction Check",
15570
15961
  accreditation: "Accreditation",
15571
- document: "Document"
15962
+ document: "Tax Documentation"
15572
15963
  };
15573
15964
  var DEFAULT_DESCRIPTIONS = {
15574
- kyc_approved: "Complete Know Your Customer verification.",
15965
+ kyc_approved: "Complete Know Your Customer (KYC) verification.",
15575
15966
  external_wallet: "Connect an external wallet.",
15576
15967
  whitelisted_wallet: "Connect a whitelisted wallet.",
15577
15968
  jurisdiction: "Confirm your jurisdiction eligibility.",
15578
- accreditation: "Verify your accreditation status.",
15579
- document: "Confirm your Tax Documents."
15969
+ accreditation: "Confirm that you meet accredited investor requirements.",
15970
+ document: "Review and sign the required tax documentation."
15580
15971
  };
15581
15972
  var VERIFICATION_POLL_INTERVAL_MS = 5e3;
15582
15973
  var VERIFICATION_POLL_TIMEOUT_MS = 12e4;
@@ -15607,19 +15998,19 @@ function useRequirementsChecklistViewModel(options) {
15607
15998
  data,
15608
15999
  enabled
15609
16000
  });
15610
- const [expandedId, setExpandedId] = (0, import_react48.useState)(null);
15611
- const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react48.useState)(false);
15612
- const [connectWalletOpen, setConnectWalletOpen] = (0, import_react48.useState)(false);
15613
- const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react48.useState)(null);
15614
- const isMountedRef = (0, import_react48.useRef)(true);
15615
- (0, import_react48.useEffect)(() => {
16001
+ const [expandedId, setExpandedId] = (0, import_react49.useState)(null);
16002
+ const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react49.useState)(false);
16003
+ const [connectWalletOpen, setConnectWalletOpen] = (0, import_react49.useState)(false);
16004
+ const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react49.useState)(null);
16005
+ const isMountedRef = (0, import_react49.useRef)(true);
16006
+ (0, import_react49.useEffect)(() => {
15616
16007
  isMountedRef.current = true;
15617
16008
  return () => {
15618
16009
  isMountedRef.current = false;
15619
16010
  };
15620
16011
  }, []);
15621
- const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react48.useState)(false);
15622
- (0, import_react48.useEffect)(() => {
16012
+ const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react49.useState)(false);
16013
+ (0, import_react49.useEffect)(() => {
15623
16014
  if (requirementsState.type === "CONTENT") {
15624
16015
  setHasWalletRequirement(
15625
16016
  (requirementsState.requirements[optionId] ?? []).some(
@@ -15635,14 +16026,14 @@ function useRequirementsChecklistViewModel(options) {
15635
16026
  } = useOptionAddresses(offerId, optionId, {
15636
16027
  enabled: enabled && hasWalletRequirement
15637
16028
  });
15638
- const removeWallet = (0, import_react48.useCallback)(
16029
+ const removeWallet = (0, import_react49.useCallback)(
15639
16030
  async (addressId) => {
15640
16031
  await disconnect(OfferOptionAddressId(addressId));
15641
16032
  refetch();
15642
16033
  },
15643
16034
  [disconnect, refetch]
15644
16035
  );
15645
- const awaitVerificationResult = (0, import_react48.useCallback)(
16036
+ const awaitVerificationResult = (0, import_react49.useCallback)(
15646
16037
  (requirementId, statusBeforeSubmit) => {
15647
16038
  void (async () => {
15648
16039
  const deadline = Date.now() + VERIFICATION_POLL_TIMEOUT_MS;
@@ -15669,11 +16060,11 @@ function useRequirementsChecklistViewModel(options) {
15669
16060
  },
15670
16061
  [coinlist, offerId, refetch, log]
15671
16062
  );
15672
- const requirements = (0, import_react48.useMemo)(
16063
+ const requirements = (0, import_react49.useMemo)(
15673
16064
  () => requirementsState.type === "CONTENT" ? requirementsState.requirements[optionId] ?? [] : [],
15674
16065
  [requirementsState, optionId]
15675
16066
  );
15676
- const statusById = (0, import_react48.useMemo)(() => {
16067
+ const statusById = (0, import_react49.useMemo)(() => {
15677
16068
  if (requirementsState.type !== "CONTENT") {
15678
16069
  return /* @__PURE__ */ new Map();
15679
16070
  }
@@ -15682,12 +16073,12 @@ function useRequirementsChecklistViewModel(options) {
15682
16073
  requirementsState.statuses.filter((s) => ids.has(s.id)).map((s) => [s.id, s])
15683
16074
  );
15684
16075
  }, [requirementsState, requirements]);
15685
- const state = (0, import_react48.useMemo)(() => {
16076
+ const state = (0, import_react49.useMemo)(() => {
15686
16077
  switch (requirementsState.type) {
15687
16078
  case "LOADING":
15688
- return { type: "loading" };
16079
+ return { type: "loading", title: title2, description: description2 };
15689
16080
  case "ERROR":
15690
- return requirementsState.reason === "not-authenticated" ? { type: "not-authenticated" } : { type: "error" };
16081
+ return { type: "error", title: title2 };
15691
16082
  case "CONTENT": {
15692
16083
  const optionStatuses = [...statusById.values()];
15693
16084
  const checklistStatus = ChecklistStatus.derive(optionStatuses);
@@ -15751,7 +16142,7 @@ function useRequirementsChecklistViewModel(options) {
15751
16142
  identityVerificationOptions,
15752
16143
  removeWallet
15753
16144
  ]);
15754
- const handleRequirementAction = (0, import_react48.useCallback)(
16145
+ const handleRequirementAction = (0, import_react49.useCallback)(
15755
16146
  (requirement) => {
15756
16147
  const inlineVerification = statusById.get(requirement.id)?.kycLevel !== void 0 && onRequirementActionOverride === void 0;
15757
16148
  if (inlineVerification) {
@@ -15783,7 +16174,7 @@ function useRequirementsChecklistViewModel(options) {
15783
16174
  coinlist
15784
16175
  ]
15785
16176
  );
15786
- const onEvent = (0, import_react48.useCallback)(
16177
+ const onEvent = (0, import_react49.useCallback)(
15787
16178
  (event) => {
15788
16179
  switch (event.type) {
15789
16180
  case "ON_TOGGLE_ITEM":
@@ -15881,11 +16272,10 @@ function toVerificationUi(verifyingRequirementId, statusById, identityVerificati
15881
16272
  }
15882
16273
 
15883
16274
  // src/client/components/requirements/RequirementsChecklistContainer.tsx
15884
- var import_jsx_runtime67 = require("react/jsx-runtime");
16275
+ var import_jsx_runtime68 = require("react/jsx-runtime");
15885
16276
  function RequirementsChecklistContainer({
15886
16277
  loading,
15887
16278
  error,
15888
- unauthenticatedState,
15889
16279
  className,
15890
16280
  enabled = true,
15891
16281
  ...options
@@ -15894,24 +16284,19 @@ function RequirementsChecklistContainer({
15894
16284
  ...options,
15895
16285
  enabled
15896
16286
  });
15897
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
15898
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16287
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
16288
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15899
16289
  RequirementsChecklistView,
15900
16290
  {
15901
16291
  state,
15902
16292
  onEvent,
15903
16293
  loading,
15904
16294
  error,
15905
- unauthenticatedState: (
15906
- // The sign-in default lives here, not in the View: it is a connected
15907
- // component, and a View must render from what it is handed.
15908
- unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CoinListSignInCardContainer, {})
15909
- ),
15910
16295
  className
15911
16296
  }
15912
16297
  ),
15913
- state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
15914
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16298
+ state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
16299
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15915
16300
  TaxDocumentModalContainer,
15916
16301
  {
15917
16302
  isOpen: state.taxDocumentOpen,
@@ -15919,11 +16304,11 @@ function RequirementsChecklistContainer({
15919
16304
  onSubmitted: () => onEvent({ type: "ON_TAX_DOCUMENT_SUBMITTED" })
15920
16305
  }
15921
16306
  ),
15922
- state.verification && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16307
+ state.verification && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15923
16308
  VerificationOverlay,
15924
16309
  {
15925
16310
  onClose: () => onEvent({ type: "ON_CLOSE_VERIFICATION" }),
15926
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16311
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15927
16312
  IdentityVerificationContainer,
15928
16313
  {
15929
16314
  levelName: state.verification.levelName,
@@ -15934,7 +16319,7 @@ function RequirementsChecklistContainer({
15934
16319
  )
15935
16320
  }
15936
16321
  ),
15937
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16322
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15938
16323
  ConnectWalletModalContainer,
15939
16324
  {
15940
16325
  isOpen: state.connectWalletOpen,
@@ -16095,18 +16480,18 @@ function pinoClientLogger(options) {
16095
16480
  }
16096
16481
 
16097
16482
  // src/client/hooks/auth/useCompleteOAuth.ts
16098
- var import_react49 = require("react");
16483
+ var import_react50 = require("react");
16099
16484
  function useCompleteOAuth(options) {
16100
16485
  const { coinlist } = useCoinList();
16101
16486
  const log = useLogger("useCompleteOAuth");
16102
- const postOAuthCompleteRef = (0, import_react49.useRef)(options.postOAuthComplete);
16103
- const onFailureRef = (0, import_react49.useRef)(options.onFailure);
16104
- const onSuccessRef = (0, import_react49.useRef)(options.onSuccess);
16487
+ const postOAuthCompleteRef = (0, import_react50.useRef)(options.postOAuthComplete);
16488
+ const onFailureRef = (0, import_react50.useRef)(options.onFailure);
16489
+ const onSuccessRef = (0, import_react50.useRef)(options.onSuccess);
16105
16490
  postOAuthCompleteRef.current = options.postOAuthComplete;
16106
16491
  onFailureRef.current = options.onFailure;
16107
16492
  onSuccessRef.current = options.onSuccess;
16108
- const hasStartedExchangeRef = (0, import_react49.useRef)(false);
16109
- (0, import_react49.useEffect)(() => {
16493
+ const hasStartedExchangeRef = (0, import_react50.useRef)(false);
16494
+ (0, import_react50.useEffect)(() => {
16110
16495
  if (typeof window === "undefined") return;
16111
16496
  const params = new URLSearchParams(window.location.search);
16112
16497
  if (!params.has("code") && !params.has("error")) return;
@@ -16170,16 +16555,16 @@ function useCompleteOAuth(options) {
16170
16555
  }
16171
16556
 
16172
16557
  // src/client/hooks/checkout/coin-list/token-sale/data/useParticipations.ts
16173
- var import_react50 = require("react");
16174
- var LOADING_STATE8 = { type: "LOADING" };
16558
+ var import_react51 = require("react");
16559
+ var LOADING_STATE9 = { type: "LOADING" };
16175
16560
  function useParticipations(offerId, options = {}) {
16176
16561
  const { coinlist, isReady } = useCoinList();
16177
16562
  const log = useLogger("useParticipations");
16178
16563
  const { data, enabled = true } = options;
16179
- const [participationsState, setParticipationsState] = (0, import_react50.useState)(
16180
- data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE8
16564
+ const [participationsState, setParticipationsState] = (0, import_react51.useState)(
16565
+ data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE9
16181
16566
  );
16182
- (0, import_react50.useEffect)(() => {
16567
+ (0, import_react51.useEffect)(() => {
16183
16568
  let isCancelled = false;
16184
16569
  if (!enabled) {
16185
16570
  return () => {
@@ -16188,7 +16573,7 @@ function useParticipations(offerId, options = {}) {
16188
16573
  }
16189
16574
  if (!isReady) {
16190
16575
  if (data === void 0) {
16191
- setParticipationsState(LOADING_STATE8);
16576
+ setParticipationsState(LOADING_STATE9);
16192
16577
  }
16193
16578
  return () => {
16194
16579
  isCancelled = true;
@@ -16199,7 +16584,7 @@ function useParticipations(offerId, options = {}) {
16199
16584
  isCancelled = true;
16200
16585
  };
16201
16586
  }
16202
- setParticipationsState(LOADING_STATE8);
16587
+ setParticipationsState(LOADING_STATE9);
16203
16588
  coinlist.tokenSale.list(offerId).then((participations) => {
16204
16589
  if (!isCancelled) {
16205
16590
  log.debug(() => ({
@@ -16226,16 +16611,16 @@ function useParticipations(offerId, options = {}) {
16226
16611
  }
16227
16612
 
16228
16613
  // src/client/hooks/offers/data/useOfferDetails.ts
16229
- var import_react51 = require("react");
16230
- var LOADING_STATE9 = { type: "LOADING" };
16614
+ var import_react52 = require("react");
16615
+ var LOADING_STATE10 = { type: "LOADING" };
16231
16616
  function useOfferDetails(offerId, options = {}) {
16232
16617
  const { coinlist, isReady } = useCoinList();
16233
16618
  const log = useLogger("useOfferDetails");
16234
16619
  const { data, enabled = true } = options;
16235
- const [offerDetailsState, setOfferDetailsState] = (0, import_react51.useState)(
16236
- data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE9
16620
+ const [offerDetailsState, setOfferDetailsState] = (0, import_react52.useState)(
16621
+ data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE10
16237
16622
  );
16238
- (0, import_react51.useEffect)(() => {
16623
+ (0, import_react52.useEffect)(() => {
16239
16624
  let isCancelled = false;
16240
16625
  if (!enabled) {
16241
16626
  return () => {
@@ -16244,7 +16629,7 @@ function useOfferDetails(offerId, options = {}) {
16244
16629
  }
16245
16630
  if (!isReady) {
16246
16631
  if (data === void 0) {
16247
- setOfferDetailsState(LOADING_STATE9);
16632
+ setOfferDetailsState(LOADING_STATE10);
16248
16633
  }
16249
16634
  return () => {
16250
16635
  isCancelled = true;
@@ -16255,7 +16640,7 @@ function useOfferDetails(offerId, options = {}) {
16255
16640
  isCancelled = true;
16256
16641
  };
16257
16642
  }
16258
- setOfferDetailsState(LOADING_STATE9);
16643
+ setOfferDetailsState(LOADING_STATE10);
16259
16644
  coinlist.offers.get(offerId).then((offerDetail) => {
16260
16645
  if (!isCancelled) {
16261
16646
  log.debug(() => ({
@@ -16283,15 +16668,23 @@ function useOfferDetails(offerId, options = {}) {
16283
16668
 
16284
16669
  // src/client/hooks/offers/shared/offer-asset-card.types.ts
16285
16670
  var OfferAssetCardUi = {
16286
- fromOffer: (offer) => ({
16671
+ /**
16672
+ * `tokenMetadata` is the registry's entry for the token the offer is about
16673
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
16674
+ * registry names win over the offer's own where both exist: they are the
16675
+ * token's canonical name, ticker and artwork, where the offer's are
16676
+ * catalogue copy.
16677
+ */
16678
+ fromOffer: (offer, tokenMetadata = null) => ({
16287
16679
  id: offer.id,
16288
- logoUrl: offer.logoUrl
16680
+ ...tokenMetadata ? { name: tokenMetadata.name, symbol: String(tokenMetadata.symbol) } : {},
16681
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata)
16289
16682
  }),
16290
- fromDetail: (detail) => ({
16683
+ fromDetail: (detail, tokenMetadata = null) => ({
16291
16684
  id: detail.id,
16292
- name: detail.name,
16293
- symbol: detail.asset.code,
16294
- logoUrl: detail.logoUrl
16685
+ name: tokenMetadata?.name ?? detail.name,
16686
+ symbol: tokenMetadata ? String(tokenMetadata.symbol) : detail.asset.code,
16687
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata)
16295
16688
  })
16296
16689
  };
16297
16690
 
@@ -16334,6 +16727,7 @@ function formatMonthYear(date, locale) {
16334
16727
  OAUTH_STATE_KEY,
16335
16728
  OfferAssetCard,
16336
16729
  OfferAssetCardUi,
16730
+ OfferLogoUi,
16337
16731
  OfferSaleCard,
16338
16732
  OfferSaleCardUi,
16339
16733
  OffersAssetGrid,
@@ -16395,6 +16789,7 @@ function formatMonthYear(date, locale) {
16395
16789
  quoteOverAsks,
16396
16790
  stablecoinIconUrl,
16397
16791
  submitErc20Approval,
16792
+ tokenLogoSrcSet,
16398
16793
  tokenLogoUrl,
16399
16794
  tokenMetadataOf,
16400
16795
  useCheckoutOfferTokenMetadata,
@@ -16437,6 +16832,7 @@ function formatMonthYear(date, locale) {
16437
16832
  useTaxDocument,
16438
16833
  useTaxDocumentModalViewModel,
16439
16834
  useTokenMetadata,
16835
+ useTokenRegistry,
16440
16836
  validateAmount,
16441
16837
  validateSellAmount,
16442
16838
  validateSuperstateAmount