@coinlist-co/react 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,8 +23,10 @@ __export(client_exports, {
23
23
  ChecklistStatus: () => ChecklistStatus,
24
24
  CoinListClientInitializationError: () => CoinListClientInitializationError,
25
25
  CoinListContext: () => CoinListContext,
26
+ CoinListContextProvider: () => CoinListContextProvider,
26
27
  CoinListProvider: () => CoinListProvider,
27
28
  CoinListSignInCard: () => CoinListSignInCard,
29
+ CoinListStyleScope: () => CoinListStyleScope,
28
30
  OAUTH_CODE_VERIFIER_KEY: () => OAUTH_CODE_VERIFIER_KEY,
29
31
  OAUTH_STATE_KEY: () => OAUTH_STATE_KEY,
30
32
  OfferCard: () => OfferCard,
@@ -44,11 +46,40 @@ __export(client_exports, {
44
46
  useRequirements: () => useRequirements
45
47
  });
46
48
  module.exports = __toCommonJS(client_exports);
47
- var import_styles = require("./styles.css");
48
49
 
49
50
  // src/client/CoinListProvider.tsx
50
51
  var import_react = require("react");
51
52
 
53
+ // src/client/generated/sdk-styles.gen.ts
54
+ var sdkStyles = '/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--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-spacing:.25rem;--clcosdk-container-md:28rem;--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-font-weight-normal:400;--clcosdk-font-weight-medium:500;--clcosdk-font-weight-semibold:600;--clcosdk-radius-md:.375rem;--clcosdk-radius-lg:.5rem;--clcosdk-radius-2xl:1rem;--clcosdk-ease-in-out:cubic-bezier(.4, 0, .2, 1);--clcosdk-animate-spin:spin 1s linear 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}@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}}: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}.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 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 img,.clco-sdk-root svg{max-width:100%;display:block}}@layer components;@layer utilities{.clcosdk\\:absolute{position:absolute}.clcosdk\\:relative{position:relative}.clcosdk\\:inset-0{inset:calc(var(--clcosdk-spacing) * 0)}.clcosdk\\:top-4{top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:right-4{right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mb-6{margin-bottom:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.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-9{height:calc(var(--clcosdk-spacing) * 9)}.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-28{height:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:h-52{height:calc(var(--clcosdk-spacing) * 52)}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:min-h-0{min-height:calc(var(--clcosdk-spacing) * 0)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[2\\.4rem\\]{min-height:2.4rem}.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-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.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-\\[448px\\]{width:448px}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-full{width:100%}.clcosdk\\:max-w-\\[22rem\\]{max-width:22rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[1200px\\]{max-width:1200px}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-2{grid-template-columns:repeat(2,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-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:gap-1{gap:calc(var(--clcosdk-spacing) * 1)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-5{gap:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-8{gap:calc(var(--clcosdk-spacing) * 8)}.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\\:overflow-hidden{overflow:hidden}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.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\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.clcosdk\\:border-accent\\/50{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/50{border-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.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-border,.clcosdk\\:border-border\\/60{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-border\\/60{border-color:color-mix(in oklab, var(--color-border) 60%, transparent)}}.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-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-accent\\/10{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-accent\\/10{background-color:color-mix(in oklab, var(--color-accent) 10%, transparent)}}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.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-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.clcosdk\\:bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.clcosdk\\:from-surface{--tw-gradient-from:var(--color-surface);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.clcosdk\\:from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.clcosdk\\:via-section{--tw-gradient-via:var(--color-section);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.clcosdk\\:via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.clcosdk\\:to-background{--tw-gradient-to:var(--color-background);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.clcosdk\\:to-overlay\\/35{--tw-gradient-to:var(--color-overlay)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:to-overlay\\/35{--tw-gradient-to:color-mix(in oklab, var(--color-overlay) 35%, transparent)}}.clcosdk\\:to-overlay\\/35{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:calc(var(--clcosdk-spacing) * 0)}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.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\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--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-\\[14px\\]{font-size:14px}.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-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[125\\%\\]{--tw-leading:125%;line-height:125%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[135\\%\\]{--tw-leading:135%;line-height:135%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.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\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-success{color:var(--color-success)}.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\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.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-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.18\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f62e);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-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.25\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f640);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-\\[0_10px_24px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 10px 24px var(--tw-shadow-color,#0000002e);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-\\[0_10px_24px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 10px 24px var(--tw-shadow-color,#00000040);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\\: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-all{transition-property:all;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-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\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}@media (hover:hover){.clcosdk\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--clcosdk-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:hover\\:border-divider:hover{border-color:var(--color-divider)}.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\\:shadow-\\[0px_14px_32px_-10px_rgba\\(0\\,0\\,0\\,0\\.35\\)\\]:hover{--tw-shadow:0px 14px 32px -10px var(--tw-shadow-color,#00000059);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-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-accent-focus:focus-visible{--tw-ring-color:var(--color-accent-focus)}.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-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\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}@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-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-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-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}@keyframes spin{to{transform:rotate(360deg)}}';
55
+
56
+ // src/client/CoinListStyleScope.tsx
57
+ var import_jsx_runtime = require("react/jsx-runtime");
58
+ function CoinListStyleScope({ children }) {
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }),
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
62
+ "link",
63
+ {
64
+ rel: "preconnect",
65
+ href: "https://fonts.gstatic.com",
66
+ crossOrigin: "anonymous"
67
+ }
68
+ ),
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
70
+ "link",
71
+ {
72
+ rel: "stylesheet",
73
+ href: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap"
74
+ }
75
+ ),
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "clco-sdk-root", children: [
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("style", { dangerouslySetInnerHTML: { __html: sdkStyles } }),
78
+ children
79
+ ] })
80
+ ] });
81
+ }
82
+
52
83
  // src/shared/utils.ts
53
84
  async function sha256(data) {
54
85
  const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
@@ -788,6 +819,29 @@ async function fetchRequirementStatuses(api, offerId) {
788
819
  return RequirementStatusInfo.fromStatusesDto(response);
789
820
  }
790
821
 
822
+ // src/shared/types/oauth.ts
823
+ var AuthorizationCode = (value) => value;
824
+ var CodeVerifier = (value) => value;
825
+ var CodeChallenge = (value) => value;
826
+ var PKCEState = (value) => value;
827
+
828
+ // src/shared/pkce.ts
829
+ async function generatePKCEParams(config) {
830
+ const state = generateSecureRandomBase64Url(32);
831
+ const codeVerifier = generateSecureRandomBase64Url(32);
832
+ const codeChallengeRaw = await sha256(codeVerifier);
833
+ const codeChallenge = arrayBufferToBase64Url(codeChallengeRaw, false);
834
+ return {
835
+ clientId: config.clientId,
836
+ responseType: "code",
837
+ redirectUri: config.redirectUri,
838
+ codeChallenge: CodeChallenge(codeChallenge),
839
+ codeChallengeMethod: "S256",
840
+ state: PKCEState(state),
841
+ codeVerifier: CodeVerifier(codeVerifier)
842
+ };
843
+ }
844
+
791
845
  // src/shared/types/errors.ts
792
846
  var NotAuthenticatedError = class extends Error {
793
847
  constructor(message = "The user is not authenticated. Go through the OAuth flow first!") {
@@ -796,10 +850,6 @@ var NotAuthenticatedError = class extends Error {
796
850
  }
797
851
  };
798
852
 
799
- // src/shared/types/oauth.ts
800
- var AuthorizationCode = (value) => value;
801
- var CodeVerifier = (value) => value;
802
-
803
853
  // src/client/core/coinlist-client.ts
804
854
  var OAUTH_STATE_KEY = "coinlist.oauth_state";
805
855
  var OAUTH_CODE_VERIFIER_KEY = "coinlist.oauth_code_verifier";
@@ -838,19 +888,16 @@ var CoinListClientImpl = class {
838
888
  return this._accessToken !== null ? "logged-in" : "logged-out";
839
889
  }
840
890
  async startOAuth() {
841
- const state = generateSecureRandomBase64Url(32);
842
- const codeVerifier = generateSecureRandomBase64Url(32);
843
- const codeChallengeRaw = await sha256(codeVerifier);
844
- const codeChallenge = arrayBufferToBase64Url(codeChallengeRaw, false);
845
- sessionStorage.setItem(OAUTH_STATE_KEY, state);
846
- sessionStorage.setItem(OAUTH_CODE_VERIFIER_KEY, codeVerifier);
891
+ const pkceParams = await generatePKCEParams(this._config);
892
+ sessionStorage.setItem(OAUTH_STATE_KEY, pkceParams.state);
893
+ sessionStorage.setItem(OAUTH_CODE_VERIFIER_KEY, pkceParams.codeVerifier);
847
894
  const params = new URLSearchParams({
848
- client_id: this._config.clientId,
849
- response_type: "code",
850
- redirect_uri: this._config.redirectUri,
851
- code_challenge: codeChallenge,
852
- code_challenge_method: "S256",
853
- state
895
+ client_id: pkceParams.clientId,
896
+ response_type: pkceParams.responseType,
897
+ redirect_uri: pkceParams.redirectUri,
898
+ code_challenge: pkceParams.codeChallenge,
899
+ code_challenge_method: pkceParams.codeChallengeMethod,
900
+ state: pkceParams.state
854
901
  });
855
902
  const baseUrl = this._config.coinlistBaseUrl ?? COINLIST_BASE_URL;
856
903
  const url = `${baseUrl}${OAUTH_PAGE_PATH}?${params.toString()}`;
@@ -974,9 +1021,12 @@ function createCoinListClient(config) {
974
1021
  }
975
1022
 
976
1023
  // src/client/CoinListProvider.tsx
977
- var import_jsx_runtime = require("react/jsx-runtime");
1024
+ var import_jsx_runtime2 = require("react/jsx-runtime");
978
1025
  var CoinListContext = (0, import_react.createContext)(null);
979
- function CoinListProvider({ config, children }) {
1026
+ function CoinListContextProvider({
1027
+ config,
1028
+ children
1029
+ }) {
980
1030
  const [isReady, setIsReady] = (0, import_react.useState)(false);
981
1031
  const coinlist = (0, import_react.useMemo)(() => createCoinListClient(config), [config]);
982
1032
  (0, import_react.useEffect)(() => {
@@ -999,7 +1049,10 @@ function CoinListProvider({ config, children }) {
999
1049
  };
1000
1050
  }, [coinlist]);
1001
1051
  const value = (0, import_react.useMemo)(() => ({ coinlist, isReady }), [coinlist, isReady]);
1002
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CoinListContext.Provider, { value, children });
1052
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CoinListContext.Provider, { value, children });
1053
+ }
1054
+ function CoinListProvider({ config, children }) {
1055
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CoinListContextProvider, { config, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CoinListStyleScope, { children }) });
1003
1056
  }
1004
1057
 
1005
1058
  // src/client/components/design-system/AlertBanner.tsx
@@ -1007,17 +1060,17 @@ var import_lucide_react = require("lucide-react");
1007
1060
 
1008
1061
  // src/client/components/design-system/tokens/typography.ts
1009
1062
  var typeClasses = {
1010
- hero: "text-[64px] leading-[110%] font-semibold",
1011
- display: "text-[48px] leading-[110%] font-semibold",
1012
- h1: "text-[36px] leading-[120%] font-semibold",
1013
- h2: "text-[28px] leading-[125%] font-semibold",
1014
- h3: "text-[22px] leading-[130%] font-semibold",
1015
- h4: "text-[18px] leading-[135%] font-medium",
1016
- body: "text-[16px] leading-[150%] font-normal",
1017
- subhead: "text-[14px] leading-[150%] font-normal",
1018
- caption: "text-[12px] leading-[140%] font-normal",
1019
- label: "text-[14px] leading-[140%] font-medium",
1020
- data: "text-[14px] leading-[140%] font-normal"
1063
+ hero: "clcosdk:text-[64px] clcosdk:leading-[110%] clcosdk:font-semibold",
1064
+ display: "clcosdk:text-[48px] clcosdk:leading-[110%] clcosdk:font-semibold",
1065
+ h1: "clcosdk:text-[36px] clcosdk:leading-[120%] clcosdk:font-semibold",
1066
+ h2: "clcosdk:text-[28px] clcosdk:leading-[125%] clcosdk:font-semibold",
1067
+ h3: "clcosdk:text-[22px] clcosdk:leading-[130%] clcosdk:font-semibold",
1068
+ h4: "clcosdk:text-[18px] clcosdk:leading-[135%] clcosdk:font-medium",
1069
+ body: "clcosdk:text-[16px] clcosdk:leading-[150%] clcosdk:font-normal",
1070
+ subhead: "clcosdk:text-[14px] clcosdk:leading-[150%] clcosdk:font-normal",
1071
+ caption: "clcosdk:text-[12px] clcosdk:leading-[140%] clcosdk:font-normal",
1072
+ label: "clcosdk:text-[14px] clcosdk:leading-[140%] clcosdk:font-medium",
1073
+ data: "clcosdk:text-[14px] clcosdk:leading-[140%] clcosdk:font-normal"
1021
1074
  };
1022
1075
 
1023
1076
  // src/client/components/design-system/utils.ts
@@ -1027,26 +1080,26 @@ function cn(...inputs) {
1027
1080
  }
1028
1081
 
1029
1082
  // src/client/components/design-system/AlertBanner.tsx
1030
- var import_jsx_runtime2 = require("react/jsx-runtime");
1083
+ var import_jsx_runtime3 = require("react/jsx-runtime");
1031
1084
  var variantConfig = {
1032
1085
  info: {
1033
- container: "bg-surface border-border",
1034
- text: "text-text-secondary",
1086
+ container: "clcosdk:bg-surface clcosdk:border-border",
1087
+ text: "clcosdk:text-text-secondary",
1035
1088
  Icon: import_lucide_react.Info
1036
1089
  },
1037
1090
  success: {
1038
- container: "bg-success-subtle border-success-border",
1039
- text: "text-success",
1091
+ container: "clcosdk:bg-success-subtle clcosdk:border-success-border",
1092
+ text: "clcosdk:text-success",
1040
1093
  Icon: import_lucide_react.CircleCheck
1041
1094
  },
1042
1095
  warning: {
1043
- container: "bg-warning-subtle border-warning-border",
1044
- text: "text-warning",
1096
+ container: "clcosdk:bg-warning-subtle clcosdk:border-warning-border",
1097
+ text: "clcosdk:text-warning",
1045
1098
  Icon: import_lucide_react.Info
1046
1099
  },
1047
1100
  error: {
1048
- container: "bg-error-subtle border-error-border",
1049
- text: "text-error",
1101
+ container: "clcosdk:bg-error-subtle clcosdk:border-error-border",
1102
+ text: "clcosdk:text-error",
1050
1103
  Icon: import_lucide_react.Info
1051
1104
  }
1052
1105
  };
@@ -1057,18 +1110,24 @@ function AlertBanner({
1057
1110
  className
1058
1111
  }) {
1059
1112
  const { container, text, Icon } = variantConfig[variant];
1060
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
1113
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1061
1114
  "div",
1062
1115
  {
1063
1116
  className: cn(
1064
- "flex items-center rounded-btn border p-3",
1065
- icon && "gap-2",
1117
+ "clcosdk:flex clcosdk:items-center clcosdk:rounded-btn clcosdk:border clcosdk:p-3",
1118
+ icon && "clcosdk:gap-2",
1066
1119
  container,
1067
1120
  className
1068
1121
  ),
1069
1122
  children: [
1070
- icon && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { className: cn("h-4 w-4 shrink-0", text), "aria-hidden": "true" }),
1071
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: cn(typeClasses.subhead, text), children: content })
1123
+ icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1124
+ Icon,
1125
+ {
1126
+ className: cn("clcosdk:h-4 clcosdk:w-4 clcosdk:shrink-0", text),
1127
+ "aria-hidden": "true"
1128
+ }
1129
+ ),
1130
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: cn(typeClasses.subhead, text), children: content })
1072
1131
  ]
1073
1132
  }
1074
1133
  );
@@ -1076,31 +1135,31 @@ function AlertBanner({
1076
1135
 
1077
1136
  // src/client/components/design-system/CloseButton.tsx
1078
1137
  var import_lucide_react2 = require("lucide-react");
1079
- var import_jsx_runtime3 = require("react/jsx-runtime");
1138
+ var import_jsx_runtime4 = require("react/jsx-runtime");
1080
1139
  function CloseButton({
1081
1140
  onClick,
1082
1141
  "aria-label": ariaLabel = "Close",
1083
1142
  className
1084
1143
  }) {
1085
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1144
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1086
1145
  "button",
1087
1146
  {
1088
1147
  type: "button",
1089
1148
  onClick,
1090
1149
  "aria-label": ariaLabel,
1091
1150
  className: cn(
1092
- "cursor-pointer rounded-full p-1.5 text-text-secondary transition-colors hover:bg-surface hover:text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-400 focus-visible:ring-offset-2",
1151
+ "clcosdk:cursor-pointer clcosdk:rounded-full clcosdk:p-1.5 clcosdk:text-text-secondary clcosdk:transition-colors clcosdk:hover:bg-surface clcosdk:hover:text-text-primary clcosdk:focus-visible:outline-none clcosdk:focus-visible:ring-2 clcosdk:focus-visible:ring-gray-400 clcosdk:focus-visible:ring-offset-2",
1093
1152
  className
1094
1153
  ),
1095
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.X, { className: "h-5 w-5" })
1154
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.X, { className: "clcosdk:h-5 clcosdk:w-5" })
1096
1155
  }
1097
1156
  );
1098
1157
  }
1099
1158
 
1100
1159
  // src/client/components/design-system/logos/CoinListWordmark.tsx
1101
- var import_jsx_runtime4 = require("react/jsx-runtime");
1160
+ var import_jsx_runtime5 = require("react/jsx-runtime");
1102
1161
  function CoinListWordmark(props) {
1103
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1162
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1104
1163
  "svg",
1105
1164
  {
1106
1165
  width: "638",
@@ -1111,35 +1170,35 @@ function CoinListWordmark(props) {
1111
1170
  "aria-hidden": "true",
1112
1171
  ...props,
1113
1172
  children: [
1114
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1173
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1115
1174
  "path",
1116
1175
  {
1117
1176
  d: "M68.7724 123.966C74.8226 124.172 80.7696 123.519 86.5104 121.799C97.4076 118.531 106.551 112.58 113.942 103.947C113.942 103.947 113.942 103.947 113.908 103.912C111.879 102.193 109.851 100.507 107.857 98.8218L105.829 97.1363C105.451 96.8268 105.107 96.5172 104.729 96.2076C103.939 95.5197 103.148 94.8662 102.323 94.2126C95.3107 98.8562 87.6104 101.539 79.1196 101.883C74.8569 102.055 70.6287 101.642 66.5036 100.507C59.5252 98.6154 53.2688 95.1757 48.2499 89.7755C39.1059 79.938 35.8745 68.1743 38.2465 55.0348C39.7246 46.9172 43.4373 40.0723 49.1093 34.5C47.9061 34.7408 46.703 35.016 45.5342 35.3943C36.5277 38.2148 29.6181 43.6839 24.6336 51.6639C20.6803 58.0273 18.5834 64.9411 18.3428 72.4739C18.2053 76.7047 18.4803 80.7979 19.4428 84.7879C22.5023 97.2395 29.3087 107.043 39.6903 114.335H39.7934V114.403C40.1372 114.644 40.4809 114.919 40.8247 115.16C49.2812 120.801 58.5971 123.691 68.7724 124.035V123.966Z",
1118
1177
  fill: "currentColor"
1119
1178
  }
1120
1179
  ),
1121
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1180
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1122
1181
  "path",
1123
1182
  {
1124
1183
  d: "M72.2101 89.052C68.1881 90.8406 64.0286 91.8725 59.6973 92.2165C64.9912 95.209 70.8007 96.688 77.1259 96.8256C79.1885 96.86 81.251 96.6536 83.4167 96.3097C88.745 95.4841 93.6951 93.5579 98.3015 90.7374C93.9358 87.057 89.6044 83.4109 85.2386 79.7305C81.526 83.6861 77.1946 86.8506 72.2101 89.052Z",
1125
1184
  fill: "currentColor"
1126
1185
  }
1127
1186
  ),
1128
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1187
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1129
1188
  "path",
1130
1189
  {
1131
1190
  d: "M66.9848 0.241609C66.4348 0.276006 65.8848 0.344799 65.3691 0.413592C70.663 1.4111 75.7851 3.13093 80.6321 5.71068C90.0511 10.7326 97.3732 17.9215 102.289 27.4494L104.936 25.1448C107.652 22.7714 110.368 20.3981 113.084 18.0247C106.655 11.1797 99.092 6.15784 90.223 3.06214C84.3103 0.998336 78.2601 -0.0335643 72.0381 0.000832319C70.388 0.000832319 68.7036 0.138419 66.9848 0.241609Z",
1132
1191
  fill: "currentColor"
1133
1192
  }
1134
1193
  ),
1135
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1194
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1136
1195
  "path",
1137
1196
  {
1138
1197
  d: "M25.4242 107.871C17.4833 97.9988 13.1519 86.7167 13.2207 73.818C13.2207 67.317 14.5614 61.0568 17.1396 55.1062C20.9553 46.2662 26.9711 39.1805 35.4276 34.2962C43.3685 29.687 51.9968 27.8984 61.1752 29.2743C70.5943 30.7189 78.3976 35.2249 84.6541 42.2762C84.6541 42.2762 84.8603 42.5514 84.9634 42.6546C85.8916 41.8291 86.8541 41.0035 87.7823 40.178L88.9167 39.1805C89.8792 38.355 90.8417 37.4951 91.8043 36.6696C94.0043 34.7434 96.17 32.8515 98.3357 30.9253C94.1075 22.223 87.7479 15.55 79.3258 10.8377C69.3911 5.26541 58.7002 3.54557 47.3904 5.02463C41.7528 5.78136 36.3557 7.50119 31.1993 10.0465C13.702 18.7145 1.08597 36.532 0.0546833 58.4771C-0.117196 62.0887 0.123436 65.7348 0.673452 69.3464C2.04849 78.3239 5.34859 86.4759 10.6425 93.8368C14.7676 99.5123 19.6834 104.19 25.3898 107.871H25.4242Z",
1139
1198
  fill: "currentColor"
1140
1199
  }
1141
1200
  ),
1142
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1201
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1143
1202
  "path",
1144
1203
  {
1145
1204
  fillRule: "evenodd",
@@ -1154,18 +1213,18 @@ function CoinListWordmark(props) {
1154
1213
  }
1155
1214
 
1156
1215
  // src/client/components/design-system/PoweredByCoinList.tsx
1157
- var import_jsx_runtime5 = require("react/jsx-runtime");
1216
+ var import_jsx_runtime6 = require("react/jsx-runtime");
1158
1217
  function PoweredByCoinList({ className }) {
1159
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1218
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1160
1219
  "div",
1161
1220
  {
1162
1221
  className: cn(
1163
- "flex items-center justify-center gap-[5px] text-text-secondary",
1222
+ "clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:gap-[5px] clcosdk:text-text-secondary",
1164
1223
  className
1165
1224
  ),
1166
1225
  children: [
1167
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(typeClasses.caption, "tracking-[0.12px]"), children: "Powered by" }),
1168
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CoinListWordmark, { className: "h-3 w-auto" })
1226
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: cn(typeClasses.caption, "clcosdk:tracking-[0.12px]"), children: "Powered by" }),
1227
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(CoinListWordmark, { className: "clcosdk:h-3 clcosdk:w-auto" })
1169
1228
  ]
1170
1229
  }
1171
1230
  );
@@ -1174,48 +1233,48 @@ function PoweredByCoinList({ className }) {
1174
1233
  // src/client/components/design-system/ClButton.tsx
1175
1234
  var import_class_variance_authority = require("class-variance-authority");
1176
1235
  var import_react2 = require("react");
1177
- var import_jsx_runtime6 = require("react/jsx-runtime");
1236
+ var import_jsx_runtime7 = require("react/jsx-runtime");
1178
1237
  var buttonVariants = (0, import_class_variance_authority.cva)(
1179
- "inline-flex items-center justify-center gap-3 whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-40 cursor-pointer",
1238
+ "clcosdk:inline-flex clcosdk:items-center clcosdk:justify-center clcosdk:gap-3 clcosdk:whitespace-nowrap clcosdk:transition-colors clcosdk:focus-visible:outline-none clcosdk:focus-visible:ring-2 clcosdk:focus-visible:ring-offset-2 clcosdk:disabled:pointer-events-none clcosdk:disabled:opacity-40 clcosdk:cursor-pointer",
1180
1239
  {
1181
1240
  variants: {
1182
1241
  variant: {
1183
1242
  // Primary — tokens auto-switch: dark bg (#171717) → light bg (#f4f4f5) in dark mode
1184
- primary: "bg-brand-primary text-text-inverse font-semibold hover:bg-brand-primary-hover active:bg-brand-primary-active focus-visible:ring-gray-500",
1243
+ primary: "clcosdk:bg-brand-primary clcosdk:text-text-inverse clcosdk:font-semibold clcosdk:hover:bg-brand-primary-hover clcosdk:active:bg-brand-primary-active clcosdk:focus-visible:ring-gray-500",
1185
1244
  // Secondary — bg-section, border-border, text-text-primary all auto-switch
1186
1245
  // hover maps to border token value; active has no token so uses dark: override
1187
- secondary: "bg-section border border-border text-text-primary font-medium hover:bg-border active:bg-[#d9d9d9] dark:active:bg-divider focus-visible:ring-gray-400",
1246
+ secondary: "clcosdk:bg-section clcosdk:border clcosdk:border-border clcosdk:text-text-primary clcosdk:font-medium clcosdk:hover:bg-border clcosdk:active:bg-[#d9d9d9] clcosdk:dark:active:bg-divider clcosdk:focus-visible:ring-gray-400",
1188
1247
  // Destructive — error tokens auto-switch to translucent dark equivalents
1189
1248
  // hover/active have no tokens so use dark: overrides
1190
- destructive: "bg-error-subtle border border-error-border text-error font-semibold hover:bg-[#fcdcd8] active:bg-[#f9c9c4] dark:hover:bg-[rgba(248,113,113,0.20)] dark:active:bg-[rgba(248,113,113,0.30)] focus-visible:ring-red-400",
1249
+ destructive: "clcosdk:bg-error-subtle clcosdk:border clcosdk:border-error-border clcosdk:text-error clcosdk:font-semibold clcosdk:hover:bg-[#fcdcd8] clcosdk:active:bg-[#f9c9c4] clcosdk:dark:hover:bg-[rgba(248,113,113,0.20)] clcosdk:dark:active:bg-[rgba(248,113,113,0.30)] clcosdk:focus-visible:ring-red-400",
1191
1250
  // Ghost — transparent base; hover/active use section/border tokens (auto-switch)
1192
- ghost: "bg-transparent text-text-primary font-medium hover:bg-section active:bg-border focus-visible:ring-gray-400",
1251
+ ghost: "clcosdk:bg-transparent clcosdk:text-text-primary clcosdk:font-medium clcosdk:hover:bg-section clcosdk:active:bg-border clcosdk:focus-visible:ring-gray-400",
1193
1252
  // Link — text-text-primary auto-switches light/dark
1194
- link: "h-auto p-0 text-text-primary font-medium underline-offset-4 hover:underline focus-visible:ring-gray-500",
1253
+ link: "clcosdk:h-auto clcosdk:p-0 clcosdk:text-text-primary clcosdk:font-medium clcosdk:underline-offset-4 clcosdk:hover:underline clcosdk:focus-visible:ring-gray-500",
1195
1254
  // Destructive link — text-error auto-switches (#b42318 → #f87171 in dark)
1196
- destructiveLink: "h-auto p-0 text-error font-medium hover:text-[#8b1a13] active:text-[#6d1510] dark:hover:text-[#fca5a5] dark:active:text-[#f87171] focus-visible:ring-red-500"
1255
+ destructiveLink: "clcosdk:h-auto clcosdk:p-0 clcosdk:text-error clcosdk:font-medium clcosdk:hover:text-[#8b1a13] clcosdk:active:text-[#6d1510] clcosdk:dark:hover:text-[#fca5a5] clcosdk:dark:active:text-[#f87171] clcosdk:focus-visible:ring-red-500"
1197
1256
  },
1198
1257
  size: {
1199
- sm: "h-9 px-4 text-sm tracking-[0.28px]",
1200
- default: "h-11 px-5 text-sm tracking-[0.28px]",
1201
- lg: "h-14 px-6 text-base",
1202
- icon: "h-12 w-12"
1258
+ sm: "clcosdk:h-9 clcosdk:px-4 clcosdk:text-sm clcosdk:tracking-[0.28px]",
1259
+ default: "clcosdk:h-11 clcosdk:px-5 clcosdk:text-sm clcosdk:tracking-[0.28px]",
1260
+ lg: "clcosdk:h-14 clcosdk:px-6 clcosdk:text-base",
1261
+ icon: "clcosdk:h-12 clcosdk:w-12"
1203
1262
  },
1204
1263
  radius: {
1205
- pill: "rounded-full",
1264
+ pill: "clcosdk:rounded-full",
1206
1265
  // compound variants below handle size-specific radii
1207
1266
  rounded: ""
1208
1267
  },
1209
1268
  fullWidth: {
1210
- true: "w-full",
1269
+ true: "clcosdk:w-full",
1211
1270
  false: ""
1212
1271
  }
1213
1272
  },
1214
1273
  compoundVariants: [
1215
- { size: "sm", radius: "rounded", className: "rounded-lg" },
1216
- { size: "default", radius: "rounded", className: "rounded-2xl" },
1217
- { size: "lg", radius: "rounded", className: "rounded-2xl" },
1218
- { size: "icon", radius: "rounded", className: "rounded-md" }
1274
+ { size: "sm", radius: "rounded", className: "clcosdk:rounded-lg" },
1275
+ { size: "default", radius: "rounded", className: "clcosdk:rounded-2xl" },
1276
+ { size: "lg", radius: "rounded", className: "clcosdk:rounded-2xl" },
1277
+ { size: "icon", radius: "rounded", className: "clcosdk:rounded-md" }
1219
1278
  ],
1220
1279
  defaultVariants: {
1221
1280
  variant: "primary",
@@ -1241,7 +1300,7 @@ var ClButton = (0, import_react2.forwardRef)(
1241
1300
  ...props
1242
1301
  }, ref) => {
1243
1302
  const isDisabled = disabled || isLoading;
1244
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1303
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
1245
1304
  "button",
1246
1305
  {
1247
1306
  className: cn(
@@ -1252,16 +1311,16 @@ var ClButton = (0, import_react2.forwardRef)(
1252
1311
  disabled: isDisabled,
1253
1312
  ...props,
1254
1313
  children: [
1255
- isLoading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1314
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1256
1315
  "span",
1257
1316
  {
1258
- className: "h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-current border-t-transparent opacity-60",
1317
+ className: "clcosdk:h-4 clcosdk:w-4 clcosdk:shrink-0 clcosdk:animate-spin clcosdk:rounded-full clcosdk:border-2 clcosdk:border-current clcosdk:border-t-transparent clcosdk:opacity-60",
1259
1318
  "aria-hidden": "true"
1260
1319
  }
1261
1320
  ),
1262
- startIcon && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "shrink-0", children: startIcon }),
1263
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: cn(isLoading && "opacity-60"), children: isLoading && loadingText ? loadingText : children }),
1264
- endIcon && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "shrink-0", children: endIcon })
1321
+ startIcon && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "clcosdk:shrink-0", children: startIcon }),
1322
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: cn(isLoading && "clcosdk:opacity-60"), children: isLoading && loadingText ? loadingText : children }),
1323
+ endIcon && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "clcosdk:shrink-0", children: endIcon })
1265
1324
  ]
1266
1325
  }
1267
1326
  );
@@ -1270,9 +1329,9 @@ var ClButton = (0, import_react2.forwardRef)(
1270
1329
  ClButton.displayName = "ClButton";
1271
1330
 
1272
1331
  // src/client/components/design-system/logos/CoinListLogomark.tsx
1273
- var import_jsx_runtime7 = require("react/jsx-runtime");
1332
+ var import_jsx_runtime8 = require("react/jsx-runtime");
1274
1333
  function CoinListLogomark(props) {
1275
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
1334
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
1276
1335
  "svg",
1277
1336
  {
1278
1337
  width: "115",
@@ -1283,28 +1342,28 @@ function CoinListLogomark(props) {
1283
1342
  "aria-hidden": "true",
1284
1343
  ...props,
1285
1344
  children: [
1286
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1345
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1287
1346
  "path",
1288
1347
  {
1289
1348
  d: "M69.7519 123.966C75.8021 124.172 81.7491 123.519 87.4899 121.799C98.3871 118.531 107.531 112.58 114.922 103.947C114.922 103.947 114.922 103.947 114.888 103.912C112.859 102.193 110.831 100.507 108.837 98.8218L106.809 97.1363C106.431 96.8268 106.087 96.5172 105.709 96.2076C104.919 95.5197 104.128 94.8662 103.303 94.2126C96.2902 98.8562 88.5899 101.539 80.0991 101.883C75.8364 102.055 71.6082 101.642 67.4831 100.507C60.5047 98.6154 54.2483 95.1757 49.2294 89.7755C40.0854 79.938 36.854 68.1743 39.226 55.0348C40.7041 46.9172 44.4168 40.0723 50.0888 34.5C48.8856 34.7408 47.6825 35.016 46.5137 35.3943C37.5072 38.2148 30.5976 43.6839 25.6131 51.6639C21.6598 58.0273 19.5629 64.9411 19.3223 72.4739C19.1848 76.7047 19.4598 80.7979 20.4223 84.7879C23.4818 97.2395 30.2882 107.043 40.6698 114.335H40.7729V114.403C41.1167 114.644 41.4604 114.919 41.8042 115.16C50.2607 120.801 59.5766 123.691 69.7519 124.035V123.966Z",
1290
1349
  fill: "currentColor"
1291
1350
  }
1292
1351
  ),
1293
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1352
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1294
1353
  "path",
1295
1354
  {
1296
1355
  d: "M73.1896 89.052C69.1676 90.8406 65.0081 91.8725 60.6768 92.2165C65.9707 95.209 71.7802 96.688 78.1054 96.8256C80.168 96.86 82.2305 96.6536 84.3962 96.3097C89.7245 95.4841 94.6746 93.5579 99.281 90.7374C94.9153 87.057 90.5839 83.4109 86.2181 79.7305C82.5055 83.6861 78.1741 86.8506 73.1896 89.052Z",
1297
1356
  fill: "currentColor"
1298
1357
  }
1299
1358
  ),
1300
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1359
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1301
1360
  "path",
1302
1361
  {
1303
1362
  d: "M67.9643 0.241609C67.4143 0.276006 66.8643 0.344799 66.3486 0.413592C71.6425 1.4111 76.7646 3.13093 81.6116 5.71068C91.0306 10.7326 98.3527 17.9215 103.268 27.4494L105.915 25.1448C108.631 22.7714 111.347 20.3981 114.063 18.0247C107.634 11.1797 100.072 6.15784 91.2025 3.06214C85.2898 0.998336 79.2396 -0.0335643 73.0176 0.000832322C71.3675 0.000832322 69.6831 0.138419 67.9643 0.241609Z",
1304
1363
  fill: "currentColor"
1305
1364
  }
1306
1365
  ),
1307
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1366
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1308
1367
  "path",
1309
1368
  {
1310
1369
  d: "M26.4037 107.871C18.4628 97.9988 14.1314 86.7167 14.2002 73.818C14.2002 67.317 15.5409 61.0568 18.1191 55.1062C21.9348 46.2662 27.9506 39.1805 36.4071 34.2962C44.348 29.687 52.9763 27.8984 62.1547 29.2743C71.5738 30.7189 79.3771 35.2249 85.6336 42.2762C85.6336 42.2762 85.8398 42.5514 85.9429 42.6546C86.8711 41.8291 87.8336 41.0035 88.7618 40.178L89.8962 39.1805C90.8587 38.355 91.8212 37.4951 92.7838 36.6696C94.9838 34.7434 97.1495 32.8515 99.3152 30.9253C95.087 22.223 88.7274 15.55 80.3053 10.8377C70.3706 5.26541 59.6797 3.54557 48.37 5.02463C42.7323 5.78136 37.3352 7.50119 32.1788 10.0465C14.6815 18.7145 2.06546 36.532 1.03418 58.4771C0.862296 62.0887 1.10293 65.7348 1.65294 69.3464C3.02798 78.3239 6.32808 86.4759 11.622 93.8368C15.7471 99.5123 20.6629 104.19 26.3693 107.871H26.4037Z",
@@ -1317,7 +1376,7 @@ function CoinListLogomark(props) {
1317
1376
  }
1318
1377
 
1319
1378
  // src/client/components/oauth/CoinListSignInButton.tsx
1320
- var import_jsx_runtime8 = require("react/jsx-runtime");
1379
+ var import_jsx_runtime9 = require("react/jsx-runtime");
1321
1380
  function CoinListSignInButton({
1322
1381
  onClick,
1323
1382
  disabled = false,
@@ -1325,7 +1384,7 @@ function CoinListSignInButton({
1325
1384
  isLoading = false,
1326
1385
  className
1327
1386
  }) {
1328
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1387
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1329
1388
  ClButton,
1330
1389
  {
1331
1390
  variant: "primary",
@@ -1335,7 +1394,7 @@ function CoinListSignInButton({
1335
1394
  disabled,
1336
1395
  isLoading,
1337
1396
  loadingText: "Signing in...",
1338
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CoinListLogomark, { className: "h-[18px] w-[16px] shrink-0" }),
1397
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CoinListLogomark, { className: "clcosdk:h-[18px] clcosdk:w-[16px] clcosdk:shrink-0" }),
1339
1398
  className,
1340
1399
  children: "Continue with CoinList"
1341
1400
  }
@@ -1362,7 +1421,7 @@ var CoinListClientInitializationError = class extends Error {
1362
1421
  };
1363
1422
 
1364
1423
  // src/client/components/oauth/CoinListSignInCard.tsx
1365
- var import_jsx_runtime9 = require("react/jsx-runtime");
1424
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1366
1425
  function CoinListSignInCard({
1367
1426
  state = "idle",
1368
1427
  onSignIn,
@@ -1373,37 +1432,50 @@ function CoinListSignInCard({
1373
1432
  const handleSignIn = onSignIn ?? (() => {
1374
1433
  void coinlist.startOAuth();
1375
1434
  });
1376
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1435
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1377
1436
  "div",
1378
1437
  {
1379
1438
  className: cn(
1380
- "relative flex w-full max-w-md flex-col rounded-card border border-border bg-background p-6 shadow-card",
1439
+ "clcosdk:relative clcosdk:flex clcosdk:w-full clcosdk:max-w-md clcosdk:flex-col clcosdk:rounded-card clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6 clcosdk:shadow-card",
1381
1440
  className
1382
1441
  ),
1383
1442
  children: [
1384
- onClose && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CloseButton, { onClick: onClose, className: "absolute right-4 top-4" }),
1385
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-2", children: [
1386
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: cn(typeClasses.h3, "text-text-primary"), children: "Sign in to participate" }),
1387
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: cn(typeClasses.body, "text-text-secondary"), children: "A CoinList account is required to participate in this sale." })
1443
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1444
+ CloseButton,
1445
+ {
1446
+ onClick: onClose,
1447
+ className: "clcosdk:absolute clcosdk:right-4 clcosdk:top-4"
1448
+ }
1449
+ ),
1450
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
1451
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: "Sign in to participate" }),
1452
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "A CoinList account is required to participate in this sale." })
1388
1453
  ] }),
1389
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CoinListSignInButton, { onClick: handleSignIn, fullWidth: true, className: "mt-4" }),
1390
- state === "error" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1454
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1455
+ CoinListSignInButton,
1456
+ {
1457
+ onClick: handleSignIn,
1458
+ fullWidth: true,
1459
+ className: "clcosdk:mt-4"
1460
+ }
1461
+ ),
1462
+ state === "error" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1391
1463
  AlertBanner,
1392
1464
  {
1393
1465
  variant: "error",
1394
1466
  icon: true,
1395
1467
  content: "Error signing in. Please try again.",
1396
- className: "mt-4"
1468
+ className: "clcosdk:mt-4"
1397
1469
  }
1398
1470
  ),
1399
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PoweredByCoinList, { className: "mt-4" })
1471
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PoweredByCoinList, { className: "clcosdk:mt-4" })
1400
1472
  ]
1401
1473
  }
1402
1474
  );
1403
1475
  }
1404
1476
 
1405
1477
  // src/client/components/offers/OfferCard.tsx
1406
- var import_jsx_runtime10 = require("react/jsx-runtime");
1478
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1407
1479
  var monthYearFormatter = new Intl.DateTimeFormat("en-US", {
1408
1480
  month: "short",
1409
1481
  year: "numeric"
@@ -1424,46 +1496,67 @@ function OfferCard({
1424
1496
  containerClassName
1425
1497
  }) {
1426
1498
  const cardLabel = "Open offer details";
1427
- const cardContent = /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1428
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "relative mb-6 h-52 w-full overflow-hidden rounded-2xl border border-border/60 bg-section", children: [
1429
- offer.bannerUrl ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1499
+ const cardContent = /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1500
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "clcosdk:relative clcosdk:mb-6 clcosdk:h-52 clcosdk:w-full clcosdk:overflow-hidden clcosdk:rounded-2xl clcosdk:border clcosdk:border-border/60 clcosdk:bg-section", children: [
1501
+ offer.bannerUrl ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1430
1502
  "img",
1431
1503
  {
1432
1504
  src: offer.bannerUrl,
1433
1505
  alt: "Offer banner",
1434
- className: "h-full w-full object-cover"
1506
+ className: "clcosdk:h-full clcosdk:w-full clcosdk:object-cover"
1435
1507
  }
1436
- ) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "h-full w-full bg-gradient-to-br from-surface via-section to-background" }),
1437
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-overlay/35" }),
1438
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "absolute inset-0 flex items-center justify-center p-6", children: offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1508
+ ) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "clcosdk:h-full clcosdk:w-full clcosdk:bg-gradient-to-br clcosdk:from-surface clcosdk:via-section clcosdk:to-background" }),
1509
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "clcosdk:absolute clcosdk:inset-0 clcosdk:bg-gradient-to-b clcosdk:from-transparent clcosdk:via-transparent clcosdk:to-overlay/35" }),
1510
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "clcosdk:absolute clcosdk:inset-0 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:p-6", children: offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1439
1511
  "img",
1440
1512
  {
1441
1513
  src: offer.logoUrl,
1442
1514
  alt: "Offer logo",
1443
- className: "h-28 w-28 rounded-full border border-border bg-surface object-cover shadow-[0_10px_24px_rgba(0,0,0,0.25)]"
1515
+ className: "clcosdk:h-28 clcosdk:w-28 clcosdk:rounded-full clcosdk:border clcosdk:border-border clcosdk:bg-surface clcosdk:object-cover clcosdk:shadow-[0_10px_24px_rgba(0,0,0,0.25)]"
1444
1516
  }
1445
- ) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "h-28 w-28 rounded-full border border-border bg-surface shadow-[0_10px_24px_rgba(0,0,0,0.18)]" }) })
1517
+ ) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "clcosdk:h-28 clcosdk:w-28 clcosdk:rounded-full clcosdk:border clcosdk:border-border clcosdk:bg-surface clcosdk:shadow-[0_10px_24px_rgba(0,0,0,0.18)]" }) })
1446
1518
  ] }),
1447
- offer.tagline && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: cn(typeClasses.h3, "min-h-[2.4rem] text-text-primary"), children: offer.tagline }),
1448
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mt-4 grid grid-cols-2 gap-5 border-t border-divider pt-4", children: [
1449
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-1", children: [
1450
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: cn(typeClasses.subhead, "text-text-secondary"), children: "Starts" }),
1451
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: cn(typeClasses.label, "text-text-primary"), children: offer.formattedStartsAt })
1519
+ offer.tagline && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1520
+ "p",
1521
+ {
1522
+ className: cn(
1523
+ typeClasses.h3,
1524
+ "clcosdk:min-h-[2.4rem] clcosdk:text-text-primary"
1525
+ ),
1526
+ children: offer.tagline
1527
+ }
1528
+ ),
1529
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "clcosdk:mt-4 clcosdk:grid clcosdk:grid-cols-2 clcosdk:gap-5 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
1530
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
1531
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1532
+ "span",
1533
+ {
1534
+ className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
1535
+ children: "Starts"
1536
+ }
1537
+ ),
1538
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: cn(typeClasses.label, "clcosdk:text-text-primary"), children: offer.formattedStartsAt })
1452
1539
  ] }),
1453
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-1", children: [
1454
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: cn(typeClasses.subhead, "text-text-secondary"), children: "Ends" }),
1455
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: cn(typeClasses.label, "text-text-primary"), children: offer.formattedEndsAt })
1540
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
1541
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1542
+ "span",
1543
+ {
1544
+ className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
1545
+ children: "Ends"
1546
+ }
1547
+ ),
1548
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: cn(typeClasses.label, "clcosdk:text-text-primary"), children: offer.formattedEndsAt })
1456
1549
  ] })
1457
1550
  ] })
1458
1551
  ] });
1459
1552
  const baseClasses = cn(
1460
- "relative flex w-full max-w-[28rem] flex-col rounded-card border border-border bg-background p-6 text-left shadow-card transition-all duration-200",
1553
+ "clcosdk:relative clcosdk:flex clcosdk:w-full clcosdk:max-w-[28rem] clcosdk:flex-col clcosdk:rounded-card clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6 clcosdk:text-left clcosdk:shadow-card clcosdk:transition-all clcosdk:duration-200",
1461
1554
  className,
1462
- onClick && "cursor-pointer hover:-translate-y-0.5 hover:border-divider hover:shadow-[0px_14px_32px_-10px_rgba(0,0,0,0.35)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-focus focus-visible:ring-offset-2"
1555
+ onClick && "clcosdk:cursor-pointer clcosdk:hover:-translate-y-0.5 clcosdk:hover:border-divider clcosdk:hover:shadow-[0px_14px_32px_-10px_rgba(0,0,0,0.35)] clcosdk:focus-visible:outline-none clcosdk:focus-visible:ring-2 clcosdk:focus-visible:ring-accent-focus clcosdk:focus-visible:ring-offset-2"
1463
1556
  );
1464
1557
  let cardNode;
1465
1558
  if (onClick) {
1466
- cardNode = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1559
+ cardNode = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1467
1560
  "button",
1468
1561
  {
1469
1562
  type: "button",
@@ -1474,12 +1567,12 @@ function OfferCard({
1474
1567
  }
1475
1568
  );
1476
1569
  } else {
1477
- cardNode = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: baseClasses, children: cardContent });
1570
+ cardNode = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: baseClasses, children: cardContent });
1478
1571
  }
1479
1572
  if (!containerClassName) {
1480
1573
  return cardNode;
1481
1574
  }
1482
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: containerClassName, children: cardNode });
1575
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: containerClassName, children: cardNode });
1483
1576
  }
1484
1577
 
1485
1578
  // src/client/hooks/useOffers.ts
@@ -1525,7 +1618,7 @@ function useOffers(options = {}) {
1525
1618
  }
1526
1619
 
1527
1620
  // src/client/components/offers/OffersGrid.tsx
1528
- var import_jsx_runtime11 = require("react/jsx-runtime");
1621
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1529
1622
  var DEFAULT_MAX_COLUMNS = 3;
1530
1623
  function OffersGrid({
1531
1624
  data,
@@ -1543,12 +1636,12 @@ function OffersGrid({
1543
1636
  if (loading) {
1544
1637
  return loading;
1545
1638
  }
1546
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1639
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1547
1640
  "output",
1548
1641
  {
1549
1642
  "aria-live": "polite",
1550
- className: "flex min-h-40 items-center justify-center rounded-2xl border border-border bg-background p-6",
1551
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: cn(typeClasses.body, "text-text-secondary"), children: "Loading offers..." })
1643
+ 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",
1644
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
1552
1645
  }
1553
1646
  );
1554
1647
  }
@@ -1557,13 +1650,13 @@ function OffersGrid({
1557
1650
  return error;
1558
1651
  }
1559
1652
  const errorMessage = offersState.reason === "not-authenticated" ? "Sign in to view available offers." : "Unable to load offers right now. Please try again.";
1560
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1653
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1561
1654
  AlertBanner,
1562
1655
  {
1563
1656
  variant: "error",
1564
1657
  icon: true,
1565
1658
  content: errorMessage,
1566
- className: "w-full max-w-[28rem]"
1659
+ className: "clcosdk:w-full clcosdk:max-w-[28rem]"
1567
1660
  }
1568
1661
  );
1569
1662
  }
@@ -1571,37 +1664,55 @@ function OffersGrid({
1571
1664
  if (emptyState) {
1572
1665
  return emptyState;
1573
1666
  }
1574
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1667
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1575
1668
  "output",
1576
1669
  {
1577
1670
  "aria-live": "polite",
1578
- className: "flex min-h-40 flex-col items-center justify-center rounded-2xl border border-border bg-background p-6 text-center",
1671
+ className: "clcosdk:flex clcosdk:min-h-40 clcosdk:flex-col clcosdk:items-center clcosdk:justify-center clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6 clcosdk:text-center",
1579
1672
  children: [
1580
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: cn(typeClasses.body, "font-medium text-text-primary"), children: "No offers available" }),
1581
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: cn(typeClasses.subhead, "text-text-secondary"), children: "Check back soon for upcoming opportunities." })
1673
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1674
+ "p",
1675
+ {
1676
+ className: cn(
1677
+ typeClasses.body,
1678
+ "clcosdk:font-medium clcosdk:text-text-primary"
1679
+ ),
1680
+ children: "No offers available"
1681
+ }
1682
+ ),
1683
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
1582
1684
  ]
1583
1685
  }
1584
1686
  );
1585
1687
  }
1586
1688
  const maxGridWidth = `calc(${cols} * 28rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
1587
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("flex w-full justify-center", containerClassName), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1689
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1588
1690
  "div",
1589
1691
  {
1590
- className: cn("grid w-full gap-6", className),
1591
- style: {
1592
- gridTemplateColumns: "repeat(auto-fit, minmax(min(100%, 20rem), 1fr))",
1593
- maxWidth: maxGridWidth
1594
- },
1595
- children: offersState.offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1596
- OfferCard,
1692
+ className: cn(
1693
+ "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
1694
+ containerClassName
1695
+ ),
1696
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1697
+ "div",
1597
1698
  {
1598
- offer: OfferCardUi.fromDomain(offer),
1599
- onClick: onOfferClick ? () => onOfferClick(offer) : void 0
1600
- },
1601
- offer.id
1602
- ))
1699
+ className: cn("clcosdk:grid clcosdk:w-full clcosdk:gap-6", className),
1700
+ style: {
1701
+ gridTemplateColumns: "repeat(auto-fit, minmax(min(100%, 20rem), 1fr))",
1702
+ maxWidth: maxGridWidth
1703
+ },
1704
+ children: offersState.offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1705
+ OfferCard,
1706
+ {
1707
+ offer: OfferCardUi.fromDomain(offer),
1708
+ onClick: onOfferClick ? () => onOfferClick(offer) : void 0
1709
+ },
1710
+ offer.id
1711
+ ))
1712
+ }
1713
+ )
1603
1714
  }
1604
- ) });
1715
+ );
1605
1716
  }
1606
1717
 
1607
1718
  // src/client/components/requirements/RequirementItem.tsx
@@ -1609,42 +1720,47 @@ var import_lucide_react4 = require("lucide-react");
1609
1720
 
1610
1721
  // src/client/components/design-system/StepStatusIcon.tsx
1611
1722
  var import_lucide_react3 = require("lucide-react");
1612
- var import_jsx_runtime12 = require("react/jsx-runtime");
1723
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1613
1724
  var statusConfig = {
1614
1725
  required: {
1615
1726
  Icon: import_lucide_react3.Info,
1616
- colorClass: "text-warning",
1617
- fillClass: "[&_circle]:fill-warning-subtle"
1727
+ colorClass: "clcosdk:text-warning",
1728
+ fillClass: "clcosdk:[&_circle]:fill-warning-subtle"
1618
1729
  },
1619
1730
  pending: {
1620
1731
  Icon: import_lucide_react3.Info,
1621
- colorClass: "text-warning",
1622
- fillClass: "[&_circle]:fill-warning-subtle"
1732
+ colorClass: "clcosdk:text-warning",
1733
+ fillClass: "clcosdk:[&_circle]:fill-warning-subtle"
1623
1734
  },
1624
1735
  completed: {
1625
1736
  Icon: import_lucide_react3.CircleCheck,
1626
- colorClass: "text-success",
1627
- fillClass: "[&_circle]:fill-success-subtle"
1737
+ colorClass: "clcosdk:text-success",
1738
+ fillClass: "clcosdk:[&_circle]:fill-success-subtle"
1628
1739
  },
1629
1740
  rejected: {
1630
1741
  Icon: import_lucide_react3.CircleX,
1631
- colorClass: "text-error",
1632
- fillClass: "[&_circle]:fill-error-subtle"
1742
+ colorClass: "clcosdk:text-error",
1743
+ fillClass: "clcosdk:[&_circle]:fill-error-subtle"
1633
1744
  }
1634
1745
  };
1635
1746
  function StepStatusIcon({ status, className }) {
1636
1747
  const { Icon, colorClass, fillClass } = statusConfig[status];
1637
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1748
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1638
1749
  Icon,
1639
1750
  {
1640
- className: cn("h-6 w-6 shrink-0", colorClass, fillClass, className),
1751
+ className: cn(
1752
+ "clcosdk:h-6 clcosdk:w-6 clcosdk:shrink-0",
1753
+ colorClass,
1754
+ fillClass,
1755
+ className
1756
+ ),
1641
1757
  "aria-hidden": "true"
1642
1758
  }
1643
1759
  );
1644
1760
  }
1645
1761
 
1646
1762
  // src/client/components/requirements/RequirementItem.tsx
1647
- var import_jsx_runtime13 = require("react/jsx-runtime");
1763
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1648
1764
  var RequirementVariant = {
1649
1765
  fromType(type) {
1650
1766
  switch (type) {
@@ -1697,9 +1813,9 @@ function VerificationActionZone({
1697
1813
  switch (status) {
1698
1814
  case "required":
1699
1815
  if (onAction === null) return null;
1700
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
1816
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
1701
1817
  case "pending":
1702
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1818
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1703
1819
  AlertBanner,
1704
1820
  {
1705
1821
  variant: "warning",
@@ -1707,21 +1823,21 @@ function VerificationActionZone({
1707
1823
  }
1708
1824
  );
1709
1825
  case "completed":
1710
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
1826
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
1711
1827
  case "rejected":
1712
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1828
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1713
1829
  AlertBanner,
1714
1830
  {
1715
1831
  variant: "error",
1716
- content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1832
+ content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1717
1833
  "Verification rejected.",
1718
1834
  " ",
1719
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1835
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1720
1836
  "button",
1721
1837
  {
1722
1838
  type: "button",
1723
1839
  onClick: onContactSupport,
1724
- className: "underline",
1840
+ className: "clcosdk:underline",
1725
1841
  children: "Contact support"
1726
1842
  }
1727
1843
  ),
@@ -1737,9 +1853,9 @@ function WalletActionZone({
1737
1853
  onAction
1738
1854
  }) {
1739
1855
  if (status === "completed") {
1740
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1741
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
1742
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1856
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1857
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
1858
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1743
1859
  AlertBanner,
1744
1860
  {
1745
1861
  variant: "success",
@@ -1749,9 +1865,9 @@ function WalletActionZone({
1749
1865
  ] });
1750
1866
  }
1751
1867
  if (status === "rejected") {
1752
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1753
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
1754
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1868
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1869
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
1870
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1755
1871
  AlertBanner,
1756
1872
  {
1757
1873
  variant: "error",
@@ -1761,7 +1877,7 @@ function WalletActionZone({
1761
1877
  ] });
1762
1878
  }
1763
1879
  if (onAction === null) return null;
1764
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
1880
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
1765
1881
  }
1766
1882
  function RequirementItem({
1767
1883
  ui,
@@ -1771,69 +1887,81 @@ function RequirementItem({
1771
1887
  onAction,
1772
1888
  onContactSupport
1773
1889
  }) {
1774
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: cn("flex w-full flex-col", className), children: [
1775
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1776
- "button",
1777
- {
1778
- type: "button",
1779
- onClick: onToggle,
1780
- "aria-expanded": expanded,
1781
- className: "flex h-14 w-full cursor-pointer items-center justify-between rounded-2xl px-2 transition-colors hover:bg-surface",
1782
- children: [
1783
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-3", children: [
1784
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(StepStatusIcon, { status: ui.status }),
1785
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1786
- "span",
1787
- {
1788
- className: cn(
1789
- typeClasses.body,
1790
- "whitespace-nowrap font-medium text-text-primary"
1791
- ),
1792
- children: ui.label
1793
- }
1794
- )
1795
- ] }),
1796
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1797
- import_lucide_react4.ChevronRight,
1798
- {
1799
- className: cn(
1800
- "h-6 w-6 shrink-0 text-text-secondary transition-transform duration-300",
1801
- expanded && "rotate-90"
1802
- ),
1803
- "aria-hidden": "true"
1804
- }
1805
- )
1806
- ]
1807
- }
1808
- ),
1809
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1810
- "div",
1811
- {
1812
- className: cn(
1813
- "grid transition-[grid-template-rows] duration-300 ease-in-out",
1814
- expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
1890
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1891
+ "div",
1892
+ {
1893
+ className: cn("clcosdk:flex clcosdk:w-full clcosdk:flex-col", className),
1894
+ children: [
1895
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1896
+ "button",
1897
+ {
1898
+ type: "button",
1899
+ onClick: onToggle,
1900
+ "aria-expanded": expanded,
1901
+ 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",
1902
+ children: [
1903
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
1904
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StepStatusIcon, { status: ui.status }),
1905
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1906
+ "span",
1907
+ {
1908
+ className: cn(
1909
+ typeClasses.body,
1910
+ "clcosdk:whitespace-nowrap clcosdk:font-medium clcosdk:text-text-primary"
1911
+ ),
1912
+ children: ui.label
1913
+ }
1914
+ )
1915
+ ] }),
1916
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1917
+ import_lucide_react4.ChevronRight,
1918
+ {
1919
+ className: cn(
1920
+ "clcosdk:h-6 clcosdk:w-6 clcosdk:shrink-0 clcosdk:text-text-secondary clcosdk:transition-transform clcosdk:duration-300",
1921
+ expanded && "clcosdk:rotate-90"
1922
+ ),
1923
+ "aria-hidden": "true"
1924
+ }
1925
+ )
1926
+ ]
1927
+ }
1815
1928
  ),
1816
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-4 px-2 pb-4", children: [
1817
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: cn(typeClasses.subhead, "text-text-secondary"), children: ui.description }),
1818
- ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1819
- VerificationActionZone,
1820
- {
1821
- status: ui.status,
1822
- onAction,
1823
- onContactSupport
1824
- }
1825
- ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1826
- WalletActionZone,
1827
- {
1828
- status: ui.status,
1829
- walletAddress: ui.walletAddress,
1830
- onAction
1831
- }
1832
- )
1833
- ] }) })
1834
- }
1835
- )
1836
- ] });
1929
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1930
+ "div",
1931
+ {
1932
+ className: cn(
1933
+ "clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
1934
+ expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
1935
+ ),
1936
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
1937
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1938
+ "p",
1939
+ {
1940
+ className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
1941
+ children: ui.description
1942
+ }
1943
+ ),
1944
+ ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1945
+ VerificationActionZone,
1946
+ {
1947
+ status: ui.status,
1948
+ onAction,
1949
+ onContactSupport
1950
+ }
1951
+ ) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1952
+ WalletActionZone,
1953
+ {
1954
+ status: ui.status,
1955
+ walletAddress: ui.walletAddress,
1956
+ onAction
1957
+ }
1958
+ )
1959
+ ] }) })
1960
+ }
1961
+ )
1962
+ ]
1963
+ }
1964
+ );
1837
1965
  }
1838
1966
 
1839
1967
  // src/client/components/requirements/RequirementsChecklist.tsx
@@ -1891,7 +2019,7 @@ function useRequirements(offerId, options = {}) {
1891
2019
  }
1892
2020
 
1893
2021
  // src/client/components/requirements/RequirementsChecklist.tsx
1894
- var import_jsx_runtime14 = require("react/jsx-runtime");
2022
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1895
2023
  var DEFAULT_LABELS = {
1896
2024
  kyc_approved: "KYC Verification",
1897
2025
  identity_verified: "Identity Verification",
@@ -1934,25 +2062,25 @@ function RequirementsChecklist({
1934
2062
  const onContactSupport = onContactSupportOverride !== void 0 ? onContactSupportOverride : () => coinlist.contactSupport();
1935
2063
  if (requirementsState.type === "LOADING") {
1936
2064
  if (loading) return loading;
1937
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2065
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1938
2066
  "output",
1939
2067
  {
1940
2068
  "aria-live": "polite",
1941
- className: "flex min-h-40 items-center justify-center rounded-2xl border border-border bg-background p-6",
1942
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: cn(typeClasses.body, "text-text-secondary"), children: "Loading requirements..." })
2069
+ 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",
2070
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
1943
2071
  }
1944
2072
  );
1945
2073
  }
1946
2074
  if (requirementsState.type === "ERROR") {
1947
2075
  if (error) return error;
1948
2076
  const errorMessage = requirementsState.reason === "not-authenticated" ? "Sign in to view requirements." : "Unable to load requirements right now. Please try again.";
1949
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2077
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1950
2078
  AlertBanner,
1951
2079
  {
1952
2080
  variant: "error",
1953
2081
  icon: true,
1954
2082
  content: errorMessage,
1955
- className: "w-full max-w-[28rem]"
2083
+ className: "clcosdk:w-full clcosdk:max-w-[28rem]"
1956
2084
  }
1957
2085
  );
1958
2086
  }
@@ -1962,62 +2090,71 @@ function RequirementsChecklist({
1962
2090
  const optionStatuses = statuses.filter((s) => requirementIds.has(s.id));
1963
2091
  const statusByRequirementId = new Map(optionStatuses.map((s) => [s.id, s]));
1964
2092
  const checklistStatus = ChecklistStatus.derive(optionStatuses);
1965
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: cn("flex w-full flex-col gap-4", className), children: [
1966
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col gap-2", children: [
1967
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { className: cn(typeClasses.h3, "text-text-primary"), children: title }),
1968
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: cn(typeClasses.body, "text-text-secondary"), children: description })
1969
- ] }),
1970
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-col divide-y divide-divider", children: requirements.map((req, index) => {
1971
- const statusInfo = statusByRequirementId.get(req.id);
1972
- const label = getLabel ? getLabel(req) : DEFAULT_LABELS[req.type];
1973
- const itemDescription = (getDescription ? getDescription(req) : null) ?? DEFAULT_DESCRIPTIONS[req.type];
1974
- let onActionBound;
1975
- if (onRequirementAction === null) {
1976
- onActionBound = null;
1977
- } else if (onRequirementAction) {
1978
- onActionBound = () => onRequirementAction(req);
1979
- }
1980
- let onContactSupportBound;
1981
- if (onContactSupport === null) {
1982
- onContactSupportBound = null;
1983
- } else if (onContactSupport) {
1984
- onContactSupportBound = () => onContactSupport(req);
1985
- }
1986
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1987
- RequirementItem,
1988
- {
1989
- ui: RequirementItemUi.fromDomain(
1990
- req,
1991
- statusInfo,
1992
- label,
1993
- itemDescription
1994
- ),
1995
- expanded: expandedIndex === index,
1996
- onToggle: () => setExpandedIndex((prev) => prev === index ? null : index),
1997
- onAction: onActionBound,
1998
- onContactSupport: onContactSupportBound
1999
- },
2000
- req.id
2001
- );
2002
- }) }),
2003
- checklistStatus === "ineligible" && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2004
- AlertBanner,
2005
- {
2006
- variant: "error",
2007
- icon: true,
2008
- content: "You are not eligible to participate."
2009
- }
2010
- ),
2011
- onContinue && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2012
- ClButton,
2013
- {
2014
- fullWidth: true,
2015
- disabled: checklistStatus !== "eligible",
2016
- onClick: onContinue,
2017
- children: "Continue"
2018
- }
2019
- )
2020
- ] });
2093
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
2094
+ "div",
2095
+ {
2096
+ className: cn(
2097
+ "clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
2098
+ className
2099
+ ),
2100
+ children: [
2101
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
2102
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: title }),
2103
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: description })
2104
+ ] }),
2105
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: requirements.map((req, index) => {
2106
+ const statusInfo = statusByRequirementId.get(req.id);
2107
+ const label = getLabel ? getLabel(req) : DEFAULT_LABELS[req.type];
2108
+ const itemDescription = (getDescription ? getDescription(req) : null) ?? DEFAULT_DESCRIPTIONS[req.type];
2109
+ let onActionBound;
2110
+ if (onRequirementAction === null) {
2111
+ onActionBound = null;
2112
+ } else if (onRequirementAction) {
2113
+ onActionBound = () => onRequirementAction(req);
2114
+ }
2115
+ let onContactSupportBound;
2116
+ if (onContactSupport === null) {
2117
+ onContactSupportBound = null;
2118
+ } else if (onContactSupport) {
2119
+ onContactSupportBound = () => onContactSupport(req);
2120
+ }
2121
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2122
+ RequirementItem,
2123
+ {
2124
+ ui: RequirementItemUi.fromDomain(
2125
+ req,
2126
+ statusInfo,
2127
+ label,
2128
+ itemDescription
2129
+ ),
2130
+ expanded: expandedIndex === index,
2131
+ onToggle: () => setExpandedIndex((prev) => prev === index ? null : index),
2132
+ onAction: onActionBound,
2133
+ onContactSupport: onContactSupportBound
2134
+ },
2135
+ req.id
2136
+ );
2137
+ }) }),
2138
+ checklistStatus === "ineligible" && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2139
+ AlertBanner,
2140
+ {
2141
+ variant: "error",
2142
+ icon: true,
2143
+ content: "You are not eligible to participate."
2144
+ }
2145
+ ),
2146
+ onContinue && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2147
+ ClButton,
2148
+ {
2149
+ fullWidth: true,
2150
+ disabled: checklistStatus !== "eligible",
2151
+ onClick: onContinue,
2152
+ children: "Continue"
2153
+ }
2154
+ )
2155
+ ]
2156
+ }
2157
+ );
2021
2158
  }
2022
2159
 
2023
2160
  // src/client/hooks/useCompleteOAuth.ts
@@ -2162,8 +2299,10 @@ function useParticipations(offerId, options = {}) {
2162
2299
  ChecklistStatus,
2163
2300
  CoinListClientInitializationError,
2164
2301
  CoinListContext,
2302
+ CoinListContextProvider,
2165
2303
  CoinListProvider,
2166
2304
  CoinListSignInCard,
2305
+ CoinListStyleScope,
2167
2306
  OAUTH_CODE_VERIFIER_KEY,
2168
2307
  OAUTH_STATE_KEY,
2169
2308
  OfferCard,