@coinlist-co/react 0.1.2 → 0.3.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.
Files changed (49) hide show
  1. package/dist/RequirementItem-BpkJQep8.d.ts +37 -0
  2. package/dist/RequirementItem-BvwsFu9e.d.cts +37 -0
  3. package/dist/{chunk-WFA6X7E2.js → chunk-IADBIDY6.js} +3 -3
  4. package/dist/chunk-IDCROXPS.js +412 -0
  5. package/dist/chunk-IDCROXPS.js.map +1 -0
  6. package/dist/{chunk-6CG7JT7Q.js → chunk-P4DTIPEX.js} +144 -5
  7. package/dist/chunk-P4DTIPEX.js.map +1 -0
  8. package/dist/{chunk-DLEKT4T4.js → chunk-V5M7SA3C.js} +47 -4
  9. package/dist/chunk-V5M7SA3C.js.map +1 -0
  10. package/dist/client/components/index.cjs +467 -5
  11. package/dist/client/components/index.cjs.map +1 -1
  12. package/dist/client/components/index.d.cts +61 -11
  13. package/dist/client/components/index.d.ts +61 -11
  14. package/dist/client/components/index.js +268 -240
  15. package/dist/client/components/index.js.map +1 -1
  16. package/dist/client/core/index.cjs +146 -4
  17. package/dist/client/core/index.cjs.map +1 -1
  18. package/dist/client/core/index.d.cts +2 -2
  19. package/dist/client/core/index.d.ts +2 -2
  20. package/dist/client/core/index.js +13 -1
  21. package/dist/client/hooks/index.cjs +49 -6
  22. package/dist/client/hooks/index.cjs.map +1 -1
  23. package/dist/client/hooks/index.d.cts +6 -5
  24. package/dist/client/hooks/index.d.ts +6 -5
  25. package/dist/client/hooks/index.js +5 -3
  26. package/dist/client/index.cjs +244 -10
  27. package/dist/client/index.cjs.map +1 -1
  28. package/dist/client/index.d.cts +6 -4
  29. package/dist/client/index.d.ts +6 -4
  30. package/dist/client/index.js +30 -2
  31. package/dist/client/styles.css +1 -1
  32. package/dist/coinlist-client-B_dJkbwB.d.ts +283 -0
  33. package/dist/coinlist-client-DBKa6j3f.d.cts +283 -0
  34. package/dist/requirement-CxbdY8l4.d.cts +202 -0
  35. package/dist/requirement-fJsQ3f9_.d.ts +202 -0
  36. package/dist/{useCoinListOffers-DIdOb5hB.d.ts → useCoinListOffers-C5lBlzcC.d.ts} +1 -1
  37. package/dist/{useCoinListOffers-DvJxu6qj.d.cts → useCoinListOffers-CguwXaCX.d.cts} +1 -1
  38. package/dist/useCoinListRequirements-BECx1cIw.d.ts +31 -0
  39. package/dist/useCoinListRequirements-CX2gV9gJ.d.cts +31 -0
  40. package/dist/{useCompleteCoinListOAuth-6Z4DGuiH.d.cts → useCompleteCoinListOAuth-BRhAqD4_.d.cts} +1 -1
  41. package/dist/{useCompleteCoinListOAuth-C3G1Vsf8.d.ts → useCompleteCoinListOAuth-DEZpHjd6.d.ts} +1 -1
  42. package/package.json +4 -4
  43. package/dist/chunk-6CG7JT7Q.js.map +0 -1
  44. package/dist/chunk-DLEKT4T4.js.map +0 -1
  45. package/dist/coinlist-client-BiA8a2yU.d.ts +0 -272
  46. package/dist/coinlist-client-DXKFDGhP.d.cts +0 -272
  47. package/dist/offer-D6p_Ijme.d.cts +0 -30
  48. package/dist/offer-DnFEFJw9.d.ts +0 -30
  49. /package/dist/{chunk-WFA6X7E2.js.map → chunk-IADBIDY6.js.map} +0 -0
@@ -0,0 +1,37 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { h as RequirementStatusInfo, i as RequirementStatusValue, j as RequirementType, R as Requirement } from './requirement-fJsQ3f9_.js';
3
+
4
+ type RequirementVariant = 'verification' | 'wallet';
5
+ declare const RequirementVariant: {
6
+ fromType(type: RequirementType): RequirementVariant;
7
+ };
8
+ type RequirementStatus = 'required' | 'pending' | 'completed' | 'rejected';
9
+ declare const RequirementStatus: {
10
+ fromStatusValue(status: RequirementStatusValue): RequirementStatus;
11
+ };
12
+ type ChecklistStatus = 'inProgress' | 'eligible' | 'ineligible';
13
+ declare const ChecklistStatus: {
14
+ derive(statuses: RequirementStatusInfo[]): ChecklistStatus;
15
+ };
16
+ type RequirementItemUi = {
17
+ variant: RequirementVariant;
18
+ status: RequirementStatus;
19
+ label: string;
20
+ description: string;
21
+ walletAddress?: string;
22
+ };
23
+ declare const RequirementItemUi: {
24
+ fromDomain(req: Requirement, statusInfo: RequirementStatusInfo | undefined, label: string, description: string, walletAddress?: string): RequirementItemUi;
25
+ };
26
+ interface RequirementItemProps {
27
+ ui: RequirementItemUi;
28
+ expanded?: boolean;
29
+ onToggle?: () => void;
30
+ walletAddress?: string;
31
+ className?: string;
32
+ onAction?: () => void;
33
+ onContactSupport?: () => void;
34
+ }
35
+ declare function RequirementItem({ ui, expanded, onToggle, className, onAction, onContactSupport, }: RequirementItemProps): react_jsx_runtime.JSX.Element;
36
+
37
+ export { ChecklistStatus as C, RequirementStatus as R, RequirementVariant as a, RequirementItem as b, type RequirementItemProps as c, RequirementItemUi as d };
@@ -0,0 +1,37 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { h as RequirementStatusInfo, i as RequirementStatusValue, j as RequirementType, R as Requirement } from './requirement-CxbdY8l4.cjs';
3
+
4
+ type RequirementVariant = 'verification' | 'wallet';
5
+ declare const RequirementVariant: {
6
+ fromType(type: RequirementType): RequirementVariant;
7
+ };
8
+ type RequirementStatus = 'required' | 'pending' | 'completed' | 'rejected';
9
+ declare const RequirementStatus: {
10
+ fromStatusValue(status: RequirementStatusValue): RequirementStatus;
11
+ };
12
+ type ChecklistStatus = 'inProgress' | 'eligible' | 'ineligible';
13
+ declare const ChecklistStatus: {
14
+ derive(statuses: RequirementStatusInfo[]): ChecklistStatus;
15
+ };
16
+ type RequirementItemUi = {
17
+ variant: RequirementVariant;
18
+ status: RequirementStatus;
19
+ label: string;
20
+ description: string;
21
+ walletAddress?: string;
22
+ };
23
+ declare const RequirementItemUi: {
24
+ fromDomain(req: Requirement, statusInfo: RequirementStatusInfo | undefined, label: string, description: string, walletAddress?: string): RequirementItemUi;
25
+ };
26
+ interface RequirementItemProps {
27
+ ui: RequirementItemUi;
28
+ expanded?: boolean;
29
+ onToggle?: () => void;
30
+ walletAddress?: string;
31
+ className?: string;
32
+ onAction?: () => void;
33
+ onContactSupport?: () => void;
34
+ }
35
+ declare function RequirementItem({ ui, expanded, onToggle, className, onAction, onContactSupport, }: RequirementItemProps): react_jsx_runtime.JSX.Element;
36
+
37
+ export { ChecklistStatus as C, RequirementStatus as R, RequirementVariant as a, RequirementItem as b, type RequirementItemProps as c, RequirementItemUi as d };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useCoinList
3
- } from "./chunk-DLEKT4T4.js";
3
+ } from "./chunk-V5M7SA3C.js";
4
4
  import {
5
5
  NotAuthenticatedError
6
- } from "./chunk-6CG7JT7Q.js";
6
+ } from "./chunk-P4DTIPEX.js";
7
7
 
8
8
  // src/client/hooks/useCoinListOfferDetails.ts
9
9
  import { useEffect, useState } from "react";
@@ -73,4 +73,4 @@ export {
73
73
  useCoinListOfferDetails,
74
74
  useCoinListOffers
75
75
  };
76
- //# sourceMappingURL=chunk-WFA6X7E2.js.map
76
+ //# sourceMappingURL=chunk-IADBIDY6.js.map
@@ -0,0 +1,412 @@
1
+ // src/client/components/requirements/RequirementItem.tsx
2
+ import { ChevronRight } from "lucide-react";
3
+
4
+ // src/client/components/design-system/AlertBanner.tsx
5
+ import { CircleCheck, Info } from "lucide-react";
6
+
7
+ // src/client/components/design-system/tokens/typography.ts
8
+ var typeClasses = {
9
+ hero: "text-[64px] leading-[110%] font-semibold",
10
+ display: "text-[48px] leading-[110%] font-semibold",
11
+ h1: "text-[36px] leading-[120%] font-semibold",
12
+ h2: "text-[28px] leading-[125%] font-semibold",
13
+ h3: "text-[22px] leading-[130%] font-semibold",
14
+ h4: "text-[18px] leading-[135%] font-medium",
15
+ body: "text-[16px] leading-[150%] font-normal",
16
+ subhead: "text-[14px] leading-[150%] font-normal",
17
+ caption: "text-[12px] leading-[140%] font-normal",
18
+ label: "text-[14px] leading-[140%] font-medium",
19
+ data: "text-[14px] leading-[140%] font-normal"
20
+ };
21
+
22
+ // src/client/components/design-system/utils.ts
23
+ import { clsx } from "clsx";
24
+ function cn(...inputs) {
25
+ return clsx(inputs);
26
+ }
27
+
28
+ // src/client/components/design-system/AlertBanner.tsx
29
+ import { jsx, jsxs } from "react/jsx-runtime";
30
+ var variantConfig = {
31
+ info: {
32
+ container: "bg-surface border-border",
33
+ text: "text-text-secondary",
34
+ Icon: Info
35
+ },
36
+ success: {
37
+ container: "bg-success-subtle border-success-border",
38
+ text: "text-success",
39
+ Icon: CircleCheck
40
+ },
41
+ warning: {
42
+ container: "bg-warning-subtle border-warning-border",
43
+ text: "text-warning",
44
+ Icon: Info
45
+ },
46
+ error: {
47
+ container: "bg-error-subtle border-error-border",
48
+ text: "text-error",
49
+ Icon: Info
50
+ }
51
+ };
52
+ function AlertBanner({
53
+ variant,
54
+ content,
55
+ icon = false,
56
+ className
57
+ }) {
58
+ const { container, text, Icon } = variantConfig[variant];
59
+ return /* @__PURE__ */ jsxs(
60
+ "div",
61
+ {
62
+ className: cn(
63
+ "flex items-center rounded-btn border p-3",
64
+ icon && "gap-2",
65
+ container,
66
+ className
67
+ ),
68
+ children: [
69
+ icon && /* @__PURE__ */ jsx(Icon, { className: cn("h-4 w-4 shrink-0", text), "aria-hidden": "true" }),
70
+ /* @__PURE__ */ jsx("p", { className: cn(typeClasses.subhead, text), children: content })
71
+ ]
72
+ }
73
+ );
74
+ }
75
+
76
+ // src/client/components/design-system/ClButton.tsx
77
+ import { cva } from "class-variance-authority";
78
+ import { forwardRef } from "react";
79
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
80
+ var buttonVariants = cva(
81
+ "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",
82
+ {
83
+ variants: {
84
+ variant: {
85
+ // Primary — tokens auto-switch: dark bg (#171717) → light bg (#f4f4f5) in dark mode
86
+ primary: "bg-brand-primary text-text-inverse font-semibold hover:bg-brand-primary-hover active:bg-brand-primary-active focus-visible:ring-gray-500",
87
+ // Secondary — bg-section, border-border, text-text-primary all auto-switch
88
+ // hover maps to border token value; active has no token so uses dark: override
89
+ 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",
90
+ // Destructive — error tokens auto-switch to translucent dark equivalents
91
+ // hover/active have no tokens so use dark: overrides
92
+ 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",
93
+ // Ghost — transparent base; hover/active use section/border tokens (auto-switch)
94
+ ghost: "bg-transparent text-text-primary font-medium hover:bg-section active:bg-border focus-visible:ring-gray-400",
95
+ // Link — text-text-primary auto-switches light/dark
96
+ link: "h-auto p-0 text-text-primary font-medium underline-offset-4 hover:underline focus-visible:ring-gray-500",
97
+ // Destructive link — text-error auto-switches (#b42318 → #f87171 in dark)
98
+ 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"
99
+ },
100
+ size: {
101
+ sm: "h-9 px-4 text-sm tracking-[0.28px]",
102
+ default: "h-11 px-5 text-sm tracking-[0.28px]",
103
+ lg: "h-14 px-6 text-base",
104
+ icon: "h-12 w-12"
105
+ },
106
+ radius: {
107
+ pill: "rounded-full",
108
+ // compound variants below handle size-specific radii
109
+ rounded: ""
110
+ },
111
+ fullWidth: {
112
+ true: "w-full",
113
+ false: ""
114
+ }
115
+ },
116
+ compoundVariants: [
117
+ { size: "sm", radius: "rounded", className: "rounded-lg" },
118
+ { size: "default", radius: "rounded", className: "rounded-2xl" },
119
+ { size: "lg", radius: "rounded", className: "rounded-2xl" },
120
+ { size: "icon", radius: "rounded", className: "rounded-md" }
121
+ ],
122
+ defaultVariants: {
123
+ variant: "primary",
124
+ size: "default",
125
+ radius: "pill",
126
+ fullWidth: false
127
+ }
128
+ }
129
+ );
130
+ var ClButton = forwardRef(
131
+ ({
132
+ className,
133
+ variant,
134
+ size,
135
+ radius,
136
+ fullWidth,
137
+ children,
138
+ isLoading = false,
139
+ loadingText,
140
+ startIcon,
141
+ endIcon,
142
+ disabled,
143
+ ...props
144
+ }, ref) => {
145
+ const isDisabled = disabled || isLoading;
146
+ return /* @__PURE__ */ jsxs2(
147
+ "button",
148
+ {
149
+ className: cn(
150
+ buttonVariants({ variant, size, radius, fullWidth }),
151
+ className
152
+ ),
153
+ ref,
154
+ disabled: isDisabled,
155
+ ...props,
156
+ children: [
157
+ isLoading && /* @__PURE__ */ jsx2(
158
+ "span",
159
+ {
160
+ className: "h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-current border-t-transparent opacity-60",
161
+ "aria-hidden": "true"
162
+ }
163
+ ),
164
+ startIcon && !isLoading && /* @__PURE__ */ jsx2("span", { className: "shrink-0", children: startIcon }),
165
+ /* @__PURE__ */ jsx2("span", { className: cn(isLoading && "opacity-60"), children: isLoading && loadingText ? loadingText : children }),
166
+ endIcon && !isLoading && /* @__PURE__ */ jsx2("span", { className: "shrink-0", children: endIcon })
167
+ ]
168
+ }
169
+ );
170
+ }
171
+ );
172
+ ClButton.displayName = "ClButton";
173
+
174
+ // src/client/components/design-system/StepStatusIcon.tsx
175
+ import { CircleCheck as CircleCheck2, CircleX, Info as Info2 } from "lucide-react";
176
+ import { jsx as jsx3 } from "react/jsx-runtime";
177
+ var statusConfig = {
178
+ required: {
179
+ Icon: Info2,
180
+ colorClass: "text-warning",
181
+ fillClass: "[&_circle]:fill-warning-subtle"
182
+ },
183
+ pending: {
184
+ Icon: Info2,
185
+ colorClass: "text-warning",
186
+ fillClass: "[&_circle]:fill-warning-subtle"
187
+ },
188
+ completed: {
189
+ Icon: CircleCheck2,
190
+ colorClass: "text-success",
191
+ fillClass: "[&_circle]:fill-success-subtle"
192
+ },
193
+ rejected: {
194
+ Icon: CircleX,
195
+ colorClass: "text-error",
196
+ fillClass: "[&_circle]:fill-error-subtle"
197
+ }
198
+ };
199
+ function StepStatusIcon({ status, className }) {
200
+ const { Icon, colorClass, fillClass } = statusConfig[status];
201
+ return /* @__PURE__ */ jsx3(
202
+ Icon,
203
+ {
204
+ className: cn("h-6 w-6 shrink-0", colorClass, fillClass, className),
205
+ "aria-hidden": "true"
206
+ }
207
+ );
208
+ }
209
+
210
+ // src/client/components/requirements/RequirementItem.tsx
211
+ import { Fragment, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
212
+ var RequirementVariant = {
213
+ fromType(type) {
214
+ switch (type) {
215
+ case "external_wallet":
216
+ case "whitelisted_wallet":
217
+ return "wallet";
218
+ default:
219
+ return "verification";
220
+ }
221
+ }
222
+ };
223
+ var RequirementStatus = {
224
+ fromStatusValue(status) {
225
+ switch (status) {
226
+ case "not_started":
227
+ case "action_needed":
228
+ return "required";
229
+ case "in_progress":
230
+ return "pending";
231
+ case "completed":
232
+ return "completed";
233
+ case "rejected":
234
+ return "rejected";
235
+ }
236
+ }
237
+ };
238
+ var ChecklistStatus = {
239
+ derive(statuses) {
240
+ if (statuses.some((s) => s.status === "rejected")) return "ineligible";
241
+ if (statuses.every((s) => s.status === "completed")) return "eligible";
242
+ return "inProgress";
243
+ }
244
+ };
245
+ var RequirementItemUi = {
246
+ fromDomain(req, statusInfo, label, description, walletAddress) {
247
+ return {
248
+ variant: RequirementVariant.fromType(req.type),
249
+ status: statusInfo ? RequirementStatus.fromStatusValue(statusInfo.status) : "required",
250
+ label,
251
+ description,
252
+ walletAddress
253
+ };
254
+ }
255
+ };
256
+ function VerificationActionZone({
257
+ status,
258
+ onAction,
259
+ onContactSupport
260
+ }) {
261
+ switch (status) {
262
+ case "required":
263
+ return /* @__PURE__ */ jsx4(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
264
+ case "pending":
265
+ return /* @__PURE__ */ jsx4(
266
+ AlertBanner,
267
+ {
268
+ variant: "warning",
269
+ content: "Under review. We'll notify you when complete."
270
+ }
271
+ );
272
+ case "completed":
273
+ return /* @__PURE__ */ jsx4(AlertBanner, { variant: "success", content: "Identity verified." });
274
+ case "rejected":
275
+ return /* @__PURE__ */ jsx4(
276
+ AlertBanner,
277
+ {
278
+ variant: "error",
279
+ content: /* @__PURE__ */ jsxs3(Fragment, { children: [
280
+ "Verification rejected.",
281
+ " ",
282
+ /* @__PURE__ */ jsx4(
283
+ "button",
284
+ {
285
+ type: "button",
286
+ onClick: onContactSupport,
287
+ className: "underline",
288
+ children: "Contact support"
289
+ }
290
+ ),
291
+ "."
292
+ ] })
293
+ }
294
+ );
295
+ }
296
+ }
297
+ function WalletActionZone({
298
+ status,
299
+ walletAddress,
300
+ onAction
301
+ }) {
302
+ if (status === "completed") {
303
+ return /* @__PURE__ */ jsxs3(Fragment, { children: [
304
+ /* @__PURE__ */ jsx4(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
305
+ /* @__PURE__ */ jsx4(
306
+ AlertBanner,
307
+ {
308
+ variant: "success",
309
+ content: walletAddress ?? "Connected: 0xBa4b...9f2c"
310
+ }
311
+ )
312
+ ] });
313
+ }
314
+ if (status === "rejected") {
315
+ return /* @__PURE__ */ jsxs3(Fragment, { children: [
316
+ /* @__PURE__ */ jsx4(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
317
+ /* @__PURE__ */ jsx4(
318
+ AlertBanner,
319
+ {
320
+ variant: "error",
321
+ content: "This wallet is not eligible for this sale."
322
+ }
323
+ )
324
+ ] });
325
+ }
326
+ return /* @__PURE__ */ jsx4(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
327
+ }
328
+ function RequirementItem({
329
+ ui,
330
+ expanded = false,
331
+ onToggle,
332
+ className,
333
+ onAction,
334
+ onContactSupport
335
+ }) {
336
+ return /* @__PURE__ */ jsxs3("div", { className: cn("flex w-full flex-col", className), children: [
337
+ /* @__PURE__ */ jsxs3(
338
+ "button",
339
+ {
340
+ type: "button",
341
+ onClick: onToggle,
342
+ "aria-expanded": expanded,
343
+ className: "flex h-14 w-full cursor-pointer items-center justify-between rounded-2xl px-2 transition-colors hover:bg-surface",
344
+ children: [
345
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
346
+ /* @__PURE__ */ jsx4(StepStatusIcon, { status: ui.status }),
347
+ /* @__PURE__ */ jsx4(
348
+ "span",
349
+ {
350
+ className: cn(
351
+ typeClasses.body,
352
+ "whitespace-nowrap font-medium text-text-primary"
353
+ ),
354
+ children: ui.label
355
+ }
356
+ )
357
+ ] }),
358
+ /* @__PURE__ */ jsx4(
359
+ ChevronRight,
360
+ {
361
+ className: cn(
362
+ "h-6 w-6 shrink-0 text-text-secondary transition-transform duration-300",
363
+ expanded && "rotate-90"
364
+ ),
365
+ "aria-hidden": "true"
366
+ }
367
+ )
368
+ ]
369
+ }
370
+ ),
371
+ /* @__PURE__ */ jsx4(
372
+ "div",
373
+ {
374
+ className: cn(
375
+ "grid transition-[grid-template-rows] duration-300 ease-in-out",
376
+ expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
377
+ ),
378
+ children: /* @__PURE__ */ jsx4("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsxs3("div", { className: "flex flex-col gap-4 px-2 pb-4", children: [
379
+ /* @__PURE__ */ jsx4("p", { className: cn(typeClasses.subhead, "text-text-secondary"), children: ui.description }),
380
+ ui.variant === "verification" ? /* @__PURE__ */ jsx4(
381
+ VerificationActionZone,
382
+ {
383
+ status: ui.status,
384
+ onAction,
385
+ onContactSupport
386
+ }
387
+ ) : /* @__PURE__ */ jsx4(
388
+ WalletActionZone,
389
+ {
390
+ status: ui.status,
391
+ walletAddress: ui.walletAddress,
392
+ onAction
393
+ }
394
+ )
395
+ ] }) })
396
+ }
397
+ )
398
+ ] });
399
+ }
400
+
401
+ export {
402
+ typeClasses,
403
+ cn,
404
+ AlertBanner,
405
+ ClButton,
406
+ RequirementVariant,
407
+ RequirementStatus,
408
+ ChecklistStatus,
409
+ RequirementItemUi,
410
+ RequirementItem
411
+ };
412
+ //# sourceMappingURL=chunk-IDCROXPS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/components/requirements/RequirementItem.tsx","../src/client/components/design-system/AlertBanner.tsx","../src/client/components/design-system/tokens/typography.ts","../src/client/components/design-system/utils.ts","../src/client/components/design-system/ClButton.tsx","../src/client/components/design-system/StepStatusIcon.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { AlertBanner } from '@/client/components/design-system/AlertBanner';\nimport { ClButton } from '@/client/components/design-system/ClButton';\nimport { StepStatusIcon } from '@/client/components/design-system/StepStatusIcon';\nimport { typeClasses } from '@/client/components/design-system/tokens/typography';\nimport { cn } from '@/client/components/design-system/utils';\nimport type {\n Requirement,\n RequirementStatusInfo,\n RequirementStatusValue,\n RequirementType,\n} from '@/shared/types/requirement';\n\nexport type RequirementVariant = 'verification' | 'wallet';\nexport const RequirementVariant = {\n fromType(type: RequirementType): RequirementVariant {\n switch (type) {\n case 'external_wallet':\n case 'whitelisted_wallet':\n return 'wallet';\n default:\n return 'verification';\n }\n },\n};\n\nexport type RequirementStatus =\n | 'required'\n | 'pending'\n | 'completed'\n | 'rejected';\nexport const RequirementStatus = {\n fromStatusValue(status: RequirementStatusValue): RequirementStatus {\n switch (status) {\n case 'not_started':\n case 'action_needed':\n return 'required';\n case 'in_progress':\n return 'pending';\n case 'completed':\n return 'completed';\n case 'rejected':\n return 'rejected';\n }\n },\n};\n\nexport type ChecklistStatus = 'inProgress' | 'eligible' | 'ineligible';\nexport const ChecklistStatus = {\n derive(statuses: RequirementStatusInfo[]): ChecklistStatus {\n if (statuses.some((s) => s.status === 'rejected')) return 'ineligible';\n if (statuses.every((s) => s.status === 'completed')) return 'eligible';\n return 'inProgress';\n },\n};\n\nexport type RequirementItemUi = {\n variant: RequirementVariant;\n status: RequirementStatus;\n label: string;\n description: string;\n walletAddress?: string;\n};\n\nexport const RequirementItemUi = {\n fromDomain(\n req: Requirement,\n statusInfo: RequirementStatusInfo | undefined,\n label: string,\n description: string,\n walletAddress?: string\n ): RequirementItemUi {\n return {\n variant: RequirementVariant.fromType(req.type),\n status: statusInfo\n ? RequirementStatus.fromStatusValue(statusInfo.status)\n : 'required',\n label,\n description,\n walletAddress,\n };\n },\n};\n\nexport interface RequirementItemProps {\n ui: RequirementItemUi;\n expanded?: boolean;\n onToggle?: () => void;\n walletAddress?: string;\n className?: string;\n onAction?: () => void;\n onContactSupport?: () => void;\n}\n\nfunction VerificationActionZone({\n status,\n onAction,\n onContactSupport,\n}: {\n status: RequirementStatus;\n onAction?: () => void;\n onContactSupport?: () => void;\n}): ReactNode {\n switch (status) {\n case 'required':\n return (\n <ClButton size=\"sm\" onClick={onAction}>\n Continue\n </ClButton>\n );\n case 'pending':\n return (\n <AlertBanner\n variant=\"warning\"\n content=\"Under review. We'll notify you when complete.\"\n />\n );\n case 'completed':\n return <AlertBanner variant=\"success\" content=\"Identity verified.\" />;\n case 'rejected':\n return (\n <AlertBanner\n variant=\"error\"\n content={\n <>\n Verification rejected.{' '}\n <button\n type=\"button\"\n onClick={onContactSupport}\n className=\"underline\"\n >\n Contact support\n </button>\n .\n </>\n }\n />\n );\n }\n}\n\nfunction WalletActionZone({\n status,\n walletAddress,\n onAction,\n}: {\n status: RequirementStatus;\n walletAddress?: string;\n onAction?: () => void;\n}): ReactNode {\n if (status === 'completed') {\n return (\n <>\n <ClButton size=\"sm\" variant=\"secondary\" onClick={onAction}>\n Change wallet\n </ClButton>\n <AlertBanner\n variant=\"success\"\n content={walletAddress ?? 'Connected: 0xBa4b...9f2c'}\n />\n </>\n );\n }\n\n if (status === 'rejected') {\n return (\n <>\n <ClButton size=\"sm\" onClick={onAction}>\n Connect wallet\n </ClButton>\n <AlertBanner\n variant=\"error\"\n content=\"This wallet is not eligible for this sale.\"\n />\n </>\n );\n }\n\n return (\n <ClButton size=\"sm\" onClick={onAction}>\n Connect wallet\n </ClButton>\n );\n}\n\nexport function RequirementItem({\n ui,\n expanded = false,\n onToggle,\n className,\n onAction,\n onContactSupport,\n}: RequirementItemProps) {\n return (\n <div className={cn('flex w-full flex-col', className)}>\n <button\n type=\"button\"\n onClick={onToggle}\n aria-expanded={expanded}\n className=\"flex h-14 w-full cursor-pointer items-center justify-between rounded-2xl px-2 transition-colors hover:bg-surface\"\n >\n <div className=\"flex items-center gap-3\">\n <StepStatusIcon status={ui.status} />\n <span\n className={cn(\n typeClasses.body,\n 'whitespace-nowrap font-medium text-text-primary'\n )}\n >\n {ui.label}\n </span>\n </div>\n <ChevronRight\n className={cn(\n 'h-6 w-6 shrink-0 text-text-secondary transition-transform duration-300',\n expanded && 'rotate-90'\n )}\n aria-hidden=\"true\"\n />\n </button>\n\n <div\n className={cn(\n 'grid transition-[grid-template-rows] duration-300 ease-in-out',\n expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n {/* min-h-0 lets the grid item collapse to 0 when grid-rows is 0fr */}\n <div className=\"min-h-0 overflow-hidden\">\n <div className=\"flex flex-col gap-4 px-2 pb-4\">\n <p className={cn(typeClasses.subhead, 'text-text-secondary')}>\n {ui.description}\n </p>\n {ui.variant === 'verification' ? (\n <VerificationActionZone\n status={ui.status}\n onAction={onAction}\n onContactSupport={onContactSupport}\n />\n ) : (\n <WalletActionZone\n status={ui.status}\n walletAddress={ui.walletAddress}\n onAction={onAction}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import type { LucideIcon } from 'lucide-react';\nimport { CircleCheck, Info } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { typeClasses } from '@/client/components/design-system/tokens/typography';\nimport { cn } from '@/client/components/design-system/utils';\n\nexport type AlertBannerVariant = 'info' | 'success' | 'warning' | 'error';\n\ninterface AlertBannerProps {\n variant: AlertBannerVariant;\n content: ReactNode;\n icon?: boolean;\n className?: string;\n}\n\nconst variantConfig: Record<\n AlertBannerVariant,\n { container: string; text: string; Icon: LucideIcon }\n> = {\n info: {\n container: 'bg-surface border-border',\n text: 'text-text-secondary',\n Icon: Info,\n },\n success: {\n container: 'bg-success-subtle border-success-border',\n text: 'text-success',\n Icon: CircleCheck,\n },\n warning: {\n container: 'bg-warning-subtle border-warning-border',\n text: 'text-warning',\n Icon: Info,\n },\n error: {\n container: 'bg-error-subtle border-error-border',\n text: 'text-error',\n Icon: Info,\n },\n};\n\nexport function AlertBanner({\n variant,\n content,\n icon = false,\n className,\n}: AlertBannerProps) {\n const { container, text, Icon } = variantConfig[variant];\n\n return (\n <div\n className={cn(\n 'flex items-center rounded-btn border p-3',\n icon && 'gap-2',\n container,\n className\n )}\n >\n {icon && (\n <Icon className={cn('h-4 w-4 shrink-0', text)} aria-hidden=\"true\" />\n )}\n <p className={cn(typeClasses.subhead, text)}>{content}</p>\n </div>\n );\n}\n","/**\n * CoinList Sale SDK — Typography Tokens\n *\n * Scale based on design system.\n * fontSize in px, lineHeight as percentage string, fontWeight as number.\n * Use the cn() Tailwind classes where possible, these values\n * are for programmatic access or non-Tailwind contexts.\n */\n\nexport const typeScale = {\n hero: {\n fontSize: 64,\n lineHeight: '110%',\n fontWeight: 600,\n },\n display: {\n fontSize: 48,\n lineHeight: '110%',\n fontWeight: 600,\n },\n h1: {\n fontSize: 36,\n lineHeight: '120%',\n fontWeight: 600,\n },\n h2: {\n fontSize: 28,\n lineHeight: '125%',\n fontWeight: 600,\n },\n h3: {\n fontSize: 22,\n lineHeight: '130%',\n fontWeight: 600,\n },\n h4: {\n fontSize: 18,\n lineHeight: '135%',\n fontWeight: 500,\n },\n body: {\n fontSize: 16,\n lineHeight: '150%',\n fontWeight: 400,\n },\n subhead: {\n fontSize: 14,\n lineHeight: '150%',\n fontWeight: 400,\n },\n caption: {\n fontSize: 12,\n lineHeight: '140%',\n fontWeight: 400,\n },\n label: {\n fontSize: 14,\n lineHeight: '140%',\n fontWeight: 500,\n },\n data: {\n fontSize: 14,\n lineHeight: '140%',\n fontWeight: 400,\n },\n} as const;\n\n/**\n * Tailwind class mappings for each type style.\n * Use these className strings directly in components.\n *\n * e.g. <h1 className={typeClasses.h1}>Hello</h1>\n */\nexport const typeClasses = {\n hero: 'text-[64px] leading-[110%] font-semibold',\n display: 'text-[48px] leading-[110%] font-semibold',\n h1: 'text-[36px] leading-[120%] font-semibold',\n h2: 'text-[28px] leading-[125%] font-semibold',\n h3: 'text-[22px] leading-[130%] font-semibold',\n h4: 'text-[18px] leading-[135%] font-medium',\n body: 'text-[16px] leading-[150%] font-normal',\n subhead: 'text-[14px] leading-[150%] font-normal',\n caption: 'text-[12px] leading-[140%] font-normal',\n label: 'text-[14px] leading-[140%] font-medium',\n data: 'text-[14px] leading-[140%] font-normal',\n} as const;\n\nexport type TypeScale = keyof typeof typeScale;\n","import { type ClassValue, clsx } from 'clsx';\n\n/**\n * Utility function to merge class names using clsx.\n */\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs);\n}\n","'use client';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { type ButtonHTMLAttributes, forwardRef, type ReactNode } from 'react';\nimport { cn } from '@/client/components/design-system/utils';\n\n// Button variants using class-variance-authority for consistent styling\nconst buttonVariants = cva(\n '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',\n {\n variants: {\n variant: {\n // Primary — tokens auto-switch: dark bg (#171717) → light bg (#f4f4f5) in dark mode\n primary:\n 'bg-brand-primary text-text-inverse font-semibold hover:bg-brand-primary-hover active:bg-brand-primary-active focus-visible:ring-gray-500',\n // Secondary — bg-section, border-border, text-text-primary all auto-switch\n // hover maps to border token value; active has no token so uses dark: override\n secondary:\n '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',\n // Destructive — error tokens auto-switch to translucent dark equivalents\n // hover/active have no tokens so use dark: overrides\n destructive:\n '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',\n // Ghost — transparent base; hover/active use section/border tokens (auto-switch)\n ghost:\n 'bg-transparent text-text-primary font-medium hover:bg-section active:bg-border focus-visible:ring-gray-400',\n // Link — text-text-primary auto-switches light/dark\n link: 'h-auto p-0 text-text-primary font-medium underline-offset-4 hover:underline focus-visible:ring-gray-500',\n // Destructive link — text-error auto-switches (#b42318 → #f87171 in dark)\n destructiveLink:\n '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',\n },\n size: {\n sm: 'h-9 px-4 text-sm tracking-[0.28px]',\n default: 'h-11 px-5 text-sm tracking-[0.28px]',\n lg: 'h-14 px-6 text-base',\n icon: 'h-12 w-12',\n },\n radius: {\n pill: 'rounded-full',\n // compound variants below handle size-specific radii\n rounded: '',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n },\n compoundVariants: [\n { size: 'sm', radius: 'rounded', className: 'rounded-lg' },\n { size: 'default', radius: 'rounded', className: 'rounded-2xl' },\n { size: 'lg', radius: 'rounded', className: 'rounded-2xl' },\n { size: 'icon', radius: 'rounded', className: 'rounded-md' },\n ],\n defaultVariants: {\n variant: 'primary',\n size: 'default',\n radius: 'pill',\n fullWidth: false,\n },\n }\n);\n\ninterface ClButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n children?: ReactNode;\n isLoading?: boolean;\n loadingText?: string;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n}\n\nconst ClButton = forwardRef<HTMLButtonElement, ClButtonProps>(\n (\n {\n className,\n variant,\n size,\n radius,\n fullWidth,\n children,\n isLoading = false,\n loadingText,\n startIcon,\n endIcon,\n disabled,\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || isLoading;\n\n return (\n <button\n className={cn(\n buttonVariants({ variant, size, radius, fullWidth }),\n className\n )}\n ref={ref}\n disabled={isDisabled}\n {...props}\n >\n {isLoading && (\n <span\n className=\"h-4 w-4 shrink-0 animate-spin rounded-full border-2 border-current border-t-transparent opacity-60\"\n aria-hidden=\"true\"\n />\n )}\n\n {startIcon && !isLoading && (\n <span className=\"shrink-0\">{startIcon}</span>\n )}\n\n <span className={cn(isLoading && 'opacity-60')}>\n {isLoading && loadingText ? loadingText : children}\n </span>\n\n {endIcon && !isLoading && <span className=\"shrink-0\">{endIcon}</span>}\n </button>\n );\n }\n);\n\nClButton.displayName = 'ClButton';\n\nexport { ClButton, buttonVariants };\nexport type { ClButtonProps };\n","import type { LucideIcon } from 'lucide-react';\nimport { CircleCheck, CircleX, Info } from 'lucide-react';\nimport { cn } from '@/client/components/design-system/utils';\n\nexport type StepStatus = 'required' | 'pending' | 'completed' | 'rejected';\n\ninterface StepStatusIconProps {\n status: StepStatus;\n className?: string;\n}\n\nconst statusConfig: Record<\n StepStatus,\n { Icon: LucideIcon; colorClass: string; fillClass: string }\n> = {\n required: {\n Icon: Info,\n colorClass: 'text-warning',\n fillClass: '[&_circle]:fill-warning-subtle',\n },\n pending: {\n Icon: Info,\n colorClass: 'text-warning',\n fillClass: '[&_circle]:fill-warning-subtle',\n },\n completed: {\n Icon: CircleCheck,\n colorClass: 'text-success',\n fillClass: '[&_circle]:fill-success-subtle',\n },\n rejected: {\n Icon: CircleX,\n colorClass: 'text-error',\n fillClass: '[&_circle]:fill-error-subtle',\n },\n};\n\nexport function StepStatusIcon({ status, className }: StepStatusIconProps) {\n const { Icon, colorClass, fillClass } = statusConfig[status];\n return (\n <Icon\n className={cn('h-6 w-6 shrink-0', colorClass, fillClass, className)}\n aria-hidden=\"true\"\n />\n );\n}\n"],"mappings":";AAEA,SAAS,oBAAoB;;;ACD7B,SAAS,aAAa,YAAY;;;ACwE3B,IAAM,cAAc;AAAA,EACzB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACR;;;ACrFA,SAA0B,YAAY;AAK/B,SAAS,MAAM,QAAsB;AAC1C,SAAO,KAAK,MAAM;AACpB;;;AF2CI,SASI,KATJ;AAnCJ,IAAM,gBAGF;AAAA,EACF,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACF,GAAqB;AACnB,QAAM,EAAE,WAAW,MAAM,KAAK,IAAI,cAAc,OAAO;AAEvD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA,gBACC,oBAAC,QAAK,WAAW,GAAG,oBAAoB,IAAI,GAAG,eAAY,QAAO;AAAA,QAEpE,oBAAC,OAAE,WAAW,GAAG,YAAY,SAAS,IAAI,GAAI,mBAAQ;AAAA;AAAA;AAAA,EACxD;AAEJ;;;AG9DA,SAAS,WAA8B;AACvC,SAAoC,kBAAkC;AA2FhE,SAUI,OAAAA,MAVJ,QAAAC,aAAA;AAvFN,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA;AAAA,QAEP,SACE;AAAA;AAAA;AAAA,QAGF,WACE;AAAA;AAAA;AAAA,QAGF,aACE;AAAA;AAAA,QAEF,OACE;AAAA;AAAA,QAEF,MAAM;AAAA;AAAA,QAEN,iBACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA;AAAA,QAEN,SAAS;AAAA,MACX;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB,EAAE,MAAM,MAAM,QAAQ,WAAW,WAAW,aAAa;AAAA,MACzD,EAAE,MAAM,WAAW,QAAQ,WAAW,WAAW,cAAc;AAAA,MAC/D,EAAE,MAAM,MAAM,QAAQ,WAAW,WAAW,cAAc;AAAA,MAC1D,EAAE,MAAM,QAAQ,QAAQ,WAAW,WAAW,aAAa;AAAA,IAC7D;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAYA,IAAM,WAAW;AAAA,EACf,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,aAAa,YAAY;AAE/B,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT,eAAe,EAAE,SAAS,MAAM,QAAQ,UAAU,CAAC;AAAA,UACnD;AAAA,QACF;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACT,GAAG;AAAA,QAEH;AAAA,uBACC,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,eAAY;AAAA;AAAA,UACd;AAAA,UAGD,aAAa,CAAC,aACb,gBAAAA,KAAC,UAAK,WAAU,YAAY,qBAAU;AAAA,UAGxC,gBAAAA,KAAC,UAAK,WAAW,GAAG,aAAa,YAAY,GAC1C,uBAAa,cAAc,cAAc,UAC5C;AAAA,UAEC,WAAW,CAAC,aAAa,gBAAAA,KAAC,UAAK,WAAU,YAAY,mBAAQ;AAAA;AAAA;AAAA,IAChE;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;;;AC3HvB,SAAS,eAAAE,cAAa,SAAS,QAAAC,aAAY;AAuCvC,gBAAAC,YAAA;AA7BJ,IAAM,eAGF;AAAA,EACF,UAAU;AAAA,IACR,MAAMC;AAAA,IACN,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,MAAMA;AAAA,IACN,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,MAAMC;AAAA,IACN,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AACF;AAEO,SAAS,eAAe,EAAE,QAAQ,UAAU,GAAwB;AACzE,QAAM,EAAE,MAAM,YAAY,UAAU,IAAI,aAAa,MAAM;AAC3D,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,oBAAoB,YAAY,WAAW,SAAS;AAAA,MAClE,eAAY;AAAA;AAAA,EACd;AAEJ;;;ALgEQ,SAkBI,UAlBJ,OAAAG,MAkBI,QAAAC,aAlBJ;AA5FD,IAAM,qBAAqB;AAAA,EAChC,SAAS,MAA2C;AAClD,YAAQ,MAAM;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AACF;AAOO,IAAM,oBAAoB;AAAA,EAC/B,gBAAgB,QAAmD;AACjE,YAAQ,QAAQ;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,IACX;AAAA,EACF;AACF;AAGO,IAAM,kBAAkB;AAAA,EAC7B,OAAO,UAAoD;AACzD,QAAI,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,UAAU,EAAG,QAAO;AAC1D,QAAI,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,WAAW,EAAG,QAAO;AAC5D,WAAO;AAAA,EACT;AACF;AAUO,IAAM,oBAAoB;AAAA,EAC/B,WACE,KACA,YACA,OACA,aACA,eACmB;AACnB,WAAO;AAAA,MACL,SAAS,mBAAmB,SAAS,IAAI,IAAI;AAAA,MAC7C,QAAQ,aACJ,kBAAkB,gBAAgB,WAAW,MAAM,IACnD;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAYA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAIc;AACZ,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aACE,gBAAAD,KAAC,YAAS,MAAK,MAAK,SAAS,UAAU,sBAEvC;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAQ;AAAA;AAAA,MACV;AAAA,IAEJ,KAAK;AACH,aAAO,gBAAAA,KAAC,eAAY,SAAQ,WAAU,SAAQ,sBAAqB;AAAA,IACrE,KAAK;AACH,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SACE,gBAAAC,MAAA,YAAE;AAAA;AAAA,YACuB;AAAA,YACvB,gBAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,WAAU;AAAA,gBACX;AAAA;AAAA,YAED;AAAA,YAAS;AAAA,aAEX;AAAA;AAAA,MAEJ;AAAA,EAEN;AACF;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAIc;AACZ,MAAI,WAAW,aAAa;AAC1B,WACE,gBAAAC,MAAA,YACE;AAAA,sBAAAD,KAAC,YAAS,MAAK,MAAK,SAAQ,aAAY,SAAS,UAAU,2BAE3D;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,iBAAiB;AAAA;AAAA,MAC5B;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,WAAW,YAAY;AACzB,WACE,gBAAAC,MAAA,YACE;AAAA,sBAAAD,KAAC,YAAS,MAAK,MAAK,SAAS,UAAU,4BAEvC;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAQ;AAAA;AAAA,MACV;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAA,KAAC,YAAS,MAAK,MAAK,SAAS,UAAU,4BAEvC;AAEJ;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,SACE,gBAAAC,MAAC,SAAI,WAAW,GAAG,wBAAwB,SAAS,GAClD;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,iBAAe;AAAA,QACf,WAAU;AAAA,QAEV;AAAA,0BAAAA,MAAC,SAAI,WAAU,2BACb;AAAA,4BAAAD,KAAC,kBAAe,QAAQ,GAAG,QAAQ;AAAA,YACnC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT,YAAY;AAAA,kBACZ;AAAA,gBACF;AAAA,gBAEC,aAAG;AAAA;AAAA,YACN;AAAA,aACF;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,YAAY;AAAA,cACd;AAAA,cACA,eAAY;AAAA;AAAA,UACd;AAAA;AAAA;AAAA,IACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,oBAAoB;AAAA,QACjC;AAAA,QAGA,0BAAAA,KAAC,SAAI,WAAU,2BACb,0BAAAC,MAAC,SAAI,WAAU,iCACb;AAAA,0BAAAD,KAAC,OAAE,WAAW,GAAG,YAAY,SAAS,qBAAqB,GACxD,aAAG,aACN;AAAA,UACC,GAAG,YAAY,iBACd,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,GAAG;AAAA,cACX;AAAA,cACA;AAAA;AAAA,UACF,IAEA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,GAAG;AAAA,cACX,eAAe,GAAG;AAAA,cAClB;AAAA;AAAA,UACF;AAAA,WAEJ,GACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":["jsx","jsxs","CircleCheck","Info","jsx","Info","CircleCheck","jsx","jsxs"]}