@coinlist-co/react 0.4.0 → 0.5.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 (61) hide show
  1. package/dist/chunk-CRACFEJ4.js +17 -0
  2. package/dist/chunk-CRACFEJ4.js.map +1 -0
  3. package/dist/{chunk-NC45IO63.js → chunk-N3WBC2VS.js} +20 -325
  4. package/dist/chunk-N3WBC2VS.js.map +1 -0
  5. package/dist/chunk-V6WO67RO.js +311 -0
  6. package/dist/chunk-V6WO67RO.js.map +1 -0
  7. package/dist/client/index.cjs +1013 -220
  8. package/dist/client/index.cjs.map +1 -1
  9. package/dist/client/index.d.cts +526 -9
  10. package/dist/client/index.d.ts +526 -9
  11. package/dist/client/index.js +1464 -94
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/{participation-DMMEDxON.d.cts → requirement-BEO42QOr.d.cts} +204 -2
  14. package/dist/{participation-E-bT-GXJ.d.ts → requirement-BEO42QOr.d.ts} +204 -2
  15. package/dist/server/index.cjs +9 -91
  16. package/dist/server/index.cjs.map +1 -1
  17. package/dist/server/index.d.cts +4 -21
  18. package/dist/server/index.d.ts +4 -21
  19. package/dist/server/index.js +14 -78
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/shared/index.cjs +375 -0
  22. package/dist/shared/index.cjs.map +1 -0
  23. package/dist/shared/index.d.cts +35 -0
  24. package/dist/shared/index.d.ts +35 -0
  25. package/dist/{client/core → shared}/index.js +35 -16
  26. package/dist/shared/index.js.map +1 -0
  27. package/package.json +7 -22
  28. package/dist/RequirementItem-B-MvcxSr.d.cts +0 -37
  29. package/dist/RequirementItem-DcYot2uC.d.ts +0 -37
  30. package/dist/chunk-EHZ6PIGN.js +0 -414
  31. package/dist/chunk-EHZ6PIGN.js.map +0 -1
  32. package/dist/chunk-NC45IO63.js.map +0 -1
  33. package/dist/chunk-RIFATQB5.js +0 -257
  34. package/dist/chunk-RIFATQB5.js.map +0 -1
  35. package/dist/chunk-UGJUTRXC.js +0 -304
  36. package/dist/chunk-UGJUTRXC.js.map +0 -1
  37. package/dist/chunk-YJQMJFA7.js +0 -16
  38. package/dist/chunk-YJQMJFA7.js.map +0 -1
  39. package/dist/client/components/index.cjs +0 -1108
  40. package/dist/client/components/index.cjs.map +0 -1
  41. package/dist/client/components/index.d.cts +0 -139
  42. package/dist/client/components/index.d.ts +0 -139
  43. package/dist/client/components/index.js +0 -558
  44. package/dist/client/components/index.js.map +0 -1
  45. package/dist/client/core/index.cjs +0 -1047
  46. package/dist/client/core/index.cjs.map +0 -1
  47. package/dist/client/core/index.d.cts +0 -23
  48. package/dist/client/core/index.d.ts +0 -23
  49. package/dist/client/core/index.js.map +0 -1
  50. package/dist/client/hooks/index.cjs +0 -307
  51. package/dist/client/hooks/index.cjs.map +0 -1
  52. package/dist/client/hooks/index.d.cts +0 -126
  53. package/dist/client/hooks/index.d.ts +0 -126
  54. package/dist/client/hooks/index.js +0 -19
  55. package/dist/client/hooks/index.js.map +0 -1
  56. package/dist/coinlist-client-BSxpqylo.d.ts +0 -158
  57. package/dist/coinlist-client-Cah5c_aF.d.cts +0 -158
  58. package/dist/requirement-XWT0T_zO.d.cts +0 -205
  59. package/dist/requirement-XWT0T_zO.d.ts +0 -205
  60. package/dist/useCoinListRequirements-B5-ZPOMz.d.ts +0 -80
  61. package/dist/useCoinListRequirements-Cuc32Tqw.d.cts +0 -80
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/types/user.ts"],"sourcesContent":["import type { UserDto } from '@/shared/types/dto/user';\nimport type { Newtype } from '@/shared/types/newtype';\n\nexport type UserId = Newtype<string, 'UserId'>;\nexport const UserId = (value: string) => value as UserId;\nexport type UserEmail = Newtype<string, 'UserEmail'>;\nexport const UserEmail = (value: string) => value as UserEmail;\n\nexport type User = {\n id: UserId;\n email: UserEmail;\n};\n\nexport const User = {\n fromDto: (dto: UserDto): User => ({\n id: UserId(dto.id),\n email: UserEmail(dto.email),\n }),\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAAM,SAAS,CAAC,UAAkB;AAElC,IAAM,YAAY,CAAC,UAAkB;AAOrC,IAAM,OAAO;AAAA,EAClB,SAAS,CAAC,SAAwB;AAAA,IAChC,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB,OAAO,UAAU,IAAI,KAAK;AAAA,EAC5B;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinlist-co/react",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "CoinList Partner SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/client/index.cjs",
@@ -12,31 +12,16 @@
12
12
  "import": "./dist/client/index.js",
13
13
  "require": "./dist/client/index.cjs"
14
14
  },
15
- "./client": {
16
- "types": "./dist/client/index.d.ts",
17
- "import": "./dist/client/index.js",
18
- "require": "./dist/client/index.cjs"
19
- },
20
- "./client/hooks": {
21
- "types": "./dist/client/hooks/index.d.ts",
22
- "import": "./dist/client/hooks/index.js",
23
- "require": "./dist/client/hooks/index.cjs"
24
- },
25
- "./client/components": {
26
- "types": "./dist/client/components/index.d.ts",
27
- "import": "./dist/client/components/index.js",
28
- "require": "./dist/client/components/index.cjs"
29
- },
30
- "./client/core": {
31
- "types": "./dist/client/core/index.d.ts",
32
- "import": "./dist/client/core/index.js",
33
- "require": "./dist/client/core/index.cjs"
34
- },
35
15
  "./server": {
36
16
  "types": "./dist/server/index.d.ts",
37
17
  "import": "./dist/server/index.js",
38
18
  "require": "./dist/server/index.cjs"
39
19
  },
20
+ "./shared": {
21
+ "types": "./dist/shared/index.d.ts",
22
+ "import": "./dist/shared/index.js",
23
+ "require": "./dist/shared/index.cjs"
24
+ },
40
25
  "./styles.css": "./dist/client/styles.css"
41
26
  },
42
27
  "files": [
@@ -52,7 +37,7 @@
52
37
  },
53
38
  "devDependencies": {
54
39
  "@biomejs/biome": "^2.4.4",
55
- "@ivy-apps/deslop": "^0.4.10",
40
+ "@ivy-apps/deslop": "^0.6.1",
56
41
  "@storybook/addon-docs": "^10.2.15",
57
42
  "@storybook/addon-themes": "^10.2.15",
58
43
  "@storybook/react": "^10.2.15",
@@ -1,37 +0,0 @@
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-XWT0T_zO.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) | null;
33
- onContactSupport?: (() => void) | null;
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,37 +0,0 @@
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-XWT0T_zO.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) | null;
33
- onContactSupport?: (() => void) | null;
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,414 +0,0 @@
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
- if (onAction === null) return null;
264
- return /* @__PURE__ */ jsx4(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
265
- case "pending":
266
- return /* @__PURE__ */ jsx4(
267
- AlertBanner,
268
- {
269
- variant: "warning",
270
- content: "Under review. We'll notify you when complete."
271
- }
272
- );
273
- case "completed":
274
- return /* @__PURE__ */ jsx4(AlertBanner, { variant: "success", content: "Identity verified." });
275
- case "rejected":
276
- return /* @__PURE__ */ jsx4(
277
- AlertBanner,
278
- {
279
- variant: "error",
280
- content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ jsxs3(Fragment, { children: [
281
- "Verification rejected.",
282
- " ",
283
- /* @__PURE__ */ jsx4(
284
- "button",
285
- {
286
- type: "button",
287
- onClick: onContactSupport,
288
- className: "underline",
289
- children: "Contact support"
290
- }
291
- ),
292
- "."
293
- ] })
294
- }
295
- );
296
- }
297
- }
298
- function WalletActionZone({
299
- status,
300
- walletAddress,
301
- onAction
302
- }) {
303
- if (status === "completed") {
304
- return /* @__PURE__ */ jsxs3(Fragment, { children: [
305
- onAction !== null && /* @__PURE__ */ jsx4(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
306
- /* @__PURE__ */ jsx4(
307
- AlertBanner,
308
- {
309
- variant: "success",
310
- content: walletAddress ?? "Connected: 0xBa4b...9f2c"
311
- }
312
- )
313
- ] });
314
- }
315
- if (status === "rejected") {
316
- return /* @__PURE__ */ jsxs3(Fragment, { children: [
317
- onAction !== null && /* @__PURE__ */ jsx4(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
318
- /* @__PURE__ */ jsx4(
319
- AlertBanner,
320
- {
321
- variant: "error",
322
- content: "This wallet is not eligible for this sale."
323
- }
324
- )
325
- ] });
326
- }
327
- if (onAction === null) return null;
328
- return /* @__PURE__ */ jsx4(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
329
- }
330
- function RequirementItem({
331
- ui,
332
- expanded = false,
333
- onToggle,
334
- className,
335
- onAction,
336
- onContactSupport
337
- }) {
338
- return /* @__PURE__ */ jsxs3("div", { className: cn("flex w-full flex-col", className), children: [
339
- /* @__PURE__ */ jsxs3(
340
- "button",
341
- {
342
- type: "button",
343
- onClick: onToggle,
344
- "aria-expanded": expanded,
345
- className: "flex h-14 w-full cursor-pointer items-center justify-between rounded-2xl px-2 transition-colors hover:bg-surface",
346
- children: [
347
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
348
- /* @__PURE__ */ jsx4(StepStatusIcon, { status: ui.status }),
349
- /* @__PURE__ */ jsx4(
350
- "span",
351
- {
352
- className: cn(
353
- typeClasses.body,
354
- "whitespace-nowrap font-medium text-text-primary"
355
- ),
356
- children: ui.label
357
- }
358
- )
359
- ] }),
360
- /* @__PURE__ */ jsx4(
361
- ChevronRight,
362
- {
363
- className: cn(
364
- "h-6 w-6 shrink-0 text-text-secondary transition-transform duration-300",
365
- expanded && "rotate-90"
366
- ),
367
- "aria-hidden": "true"
368
- }
369
- )
370
- ]
371
- }
372
- ),
373
- /* @__PURE__ */ jsx4(
374
- "div",
375
- {
376
- className: cn(
377
- "grid transition-[grid-template-rows] duration-300 ease-in-out",
378
- expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
379
- ),
380
- 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: [
381
- /* @__PURE__ */ jsx4("p", { className: cn(typeClasses.subhead, "text-text-secondary"), children: ui.description }),
382
- ui.variant === "verification" ? /* @__PURE__ */ jsx4(
383
- VerificationActionZone,
384
- {
385
- status: ui.status,
386
- onAction,
387
- onContactSupport
388
- }
389
- ) : /* @__PURE__ */ jsx4(
390
- WalletActionZone,
391
- {
392
- status: ui.status,
393
- walletAddress: ui.walletAddress,
394
- onAction
395
- }
396
- )
397
- ] }) })
398
- }
399
- )
400
- ] });
401
- }
402
-
403
- export {
404
- typeClasses,
405
- cn,
406
- AlertBanner,
407
- ClButton,
408
- RequirementVariant,
409
- RequirementStatus,
410
- ChecklistStatus,
411
- RequirementItemUi,
412
- RequirementItem
413
- };
414
- //# sourceMappingURL=chunk-EHZ6PIGN.js.map
@@ -1 +0,0 @@
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) | null;\n onContactSupport?: (() => void) | null;\n}\n\nfunction VerificationActionZone({\n status,\n onAction,\n onContactSupport,\n}: {\n status: RequirementStatus;\n onAction?: (() => void) | null;\n onContactSupport?: (() => void) | null;\n}): ReactNode {\n switch (status) {\n case 'required':\n if (onAction === null) return null;\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 onContactSupport === null ? (\n 'Verification rejected.'\n ) : (\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}\n\nfunction WalletActionZone({\n status,\n walletAddress,\n onAction,\n}: {\n status: RequirementStatus;\n walletAddress?: string;\n onAction?: (() => void) | null;\n}): ReactNode {\n if (status === 'completed') {\n return (\n <>\n {onAction !== null && (\n <ClButton size=\"sm\" variant=\"secondary\" onClick={onAction}>\n Change wallet\n </ClButton>\n )}\n <AlertBanner\n variant=\"success\"\n content={walletAddress ?? 'Connected: 0xBa4b...9f2c'}\n />\n </>\n );\n }\n\n if (status === 'rejected') {\n return (\n <>\n {onAction !== null && (\n <ClButton size=\"sm\" onClick={onAction}>\n Connect wallet\n </ClButton>\n )}\n <AlertBanner\n variant=\"error\"\n content=\"This wallet is not eligible for this sale.\"\n />\n </>\n );\n }\n\n if (onAction === null) return null;\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":"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","names":["jsx","jsxs","CircleCheck","Info","jsx","Info","CircleCheck","jsx","jsxs"]}