@taskon/widget-react 0.0.1 → 0.0.2

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 (66) hide show
  1. package/README.md +118 -64
  2. package/dist/CommunityTaskList.css +2694 -2951
  3. package/dist/EligibilityInfo.css +2221 -1332
  4. package/dist/LeaderboardWidget.css +403 -198
  5. package/dist/PageBuilder.css +57 -0
  6. package/dist/Quest.css +1347 -1477
  7. package/dist/TaskOnProvider.css +337 -29
  8. package/dist/ThemeProvider.css +228 -0
  9. package/dist/UserCenterWidget.css +168 -0
  10. package/dist/UserCenterWidget2.css +4917 -0
  11. package/dist/WidgetShell.css +417 -130
  12. package/dist/chunks/{CommunityTaskList-CrH6r4Av.js → CommunityTaskList-2nFy6l6m.js} +2612 -2074
  13. package/dist/chunks/{EligibilityInfo-DesW9-k9.js → EligibilityInfo-CKTl_cdU.js} +2714 -4077
  14. package/dist/chunks/{LeaderboardWidget-BSGpHKTk.js → LeaderboardWidget-DyoiiNS6.js} +288 -349
  15. package/dist/chunks/PageBuilder-DHM3Il6f.js +150 -0
  16. package/dist/chunks/{Quest-uSIVq78I.js → Quest-Dqx4OCat.js} +1380 -726
  17. package/dist/chunks/TaskOnProvider-CxtFIs3n.js +2072 -0
  18. package/dist/chunks/{WidgetShell-NlOgn1x5.js → ThemeProvider-CulHkqqY.js} +1397 -103
  19. package/dist/chunks/UserCenterWidget-SE5hqpnZ.js +8335 -0
  20. package/dist/chunks/UserCenterWidget-XL6LZRZM.js +3259 -0
  21. package/dist/chunks/{Table-CWGf2FKV.js → WidgetShell-8xn-Jivw.js} +237 -27
  22. package/dist/chunks/communitytask-es-CBNnS4o2.js +521 -0
  23. package/dist/chunks/communitytask-ja-GRf9cbdx.js +521 -0
  24. package/dist/chunks/communitytask-ko-Bf24PQKI.js +521 -0
  25. package/dist/chunks/communitytask-ru-CZm2CPoV.js +521 -0
  26. package/dist/chunks/leaderboardwidget-es-vKjrjQaz.js +146 -0
  27. package/dist/chunks/leaderboardwidget-ja-Q6u0HxKG.js +146 -0
  28. package/dist/chunks/leaderboardwidget-ko-CG6SWgxf.js +146 -0
  29. package/dist/chunks/leaderboardwidget-ru-DCcHcJGz.js +146 -0
  30. package/dist/chunks/quest-es-Dyyy0zaw.js +863 -0
  31. package/dist/chunks/quest-ja-Depog33y.js +863 -0
  32. package/dist/chunks/quest-ko-BMu3uRQJ.js +863 -0
  33. package/dist/chunks/quest-ru-xne814Rw.js +863 -0
  34. package/dist/chunks/taskwidget-es-Do9b3Mqw.js +245 -0
  35. package/dist/chunks/taskwidget-ja-CqSu-yWA.js +245 -0
  36. package/dist/chunks/taskwidget-ko-EHgXFV4B.js +245 -0
  37. package/dist/chunks/taskwidget-ru-CMbLQDK4.js +245 -0
  38. package/dist/chunks/useIsMobile-D6Ybur-6.js +30 -0
  39. package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
  40. package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
  41. package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
  42. package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
  43. package/dist/community-task.d.ts +29 -388
  44. package/dist/community-task.js +2 -7
  45. package/dist/core.d.ts +95 -28
  46. package/dist/core.js +11 -12
  47. package/dist/index.d.ts +260 -602
  48. package/dist/index.js +28 -7361
  49. package/dist/leaderboard.d.ts +5 -496
  50. package/dist/leaderboard.js +2 -15
  51. package/dist/page-builder.d.ts +20 -0
  52. package/dist/page-builder.js +4 -0
  53. package/dist/quest.d.ts +20 -292
  54. package/dist/quest.js +2 -5
  55. package/dist/user-center.d.ts +56 -0
  56. package/dist/user-center.js +4 -0
  57. package/package.json +22 -3
  58. package/dist/Table.css +0 -389
  59. package/dist/chunks/TaskOnProvider-QMwxGL44.js +0 -1435
  60. package/dist/chunks/ThemeProvider-Cs8IUVQj.js +0 -1118
  61. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
  62. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
  63. package/dist/chunks/useWidgetLocale-BVcopbZS.js +0 -74
  64. package/dist/chunks/usercenter-ja-DBj_dtuz.js +0 -329
  65. package/dist/chunks/usercenter-ko-DYTkHAld.js +0 -329
  66. package/dist/index.css +0 -3662
@@ -1,247 +1,5 @@
1
- import { ChainType } from '@taskon/core';
2
- import { CommunityTaskInfo } from '@taskon/core';
3
1
  import { default as default_2 } from 'react';
4
- import { RecurrenceType } from '@taskon/core';
5
- import { SnsType } from '@taskon/core';
6
- import { TaskReviewResult } from '@taskon/core';
7
-
8
- /**
9
- * BaseTask 组件
10
- * @description 基础任务卡片,职责:
11
- * - 卡片布局(flex 容器)
12
- * - 周期标签显示
13
- * - 任务标题显示
14
- * - 有效时间显示
15
- * - 按钮区域管理
16
- * - 完成状态样式
17
- *
18
- * @example
19
- * ```tsx
20
- * <BaseTask
21
- * title="Follow @TaskOn_xyz"
22
- * isWon={false}
23
- * isCompleted={false}
24
- * isPeriodic={true}
25
- * recurrenceLabel="Daily"
26
- * taskId={123}
27
- * actionLabel="Follow"
28
- * actionLink="https://twitter.com/TaskOn_xyz"
29
- * reward={{ type: 'points', amount: 100, name: 'Points', icon: '/icon.png' }}
30
- * onClick={() => console.log('卡片被点击')}
31
- * onClaim={() => console.log('Claim 按钮被点击')}
32
- * >
33
- * <div>额外的任务描述内容</div>
34
- * </BaseTask>
35
- * ```
36
- */
37
- declare function BaseTask(props: BaseTaskProps): default_2.ReactElement;
38
- export { BaseTask }
39
- export { BaseTask as CommunityTask }
40
-
41
- /**
42
- * 任务卡片基础 Props(最小知识原则)
43
- * BaseTask 只需要知道这些信息
44
- */
45
- declare interface BaseTaskProps {
46
- /** 任务名称/标题(字符串或自定义渲染节点) */
47
- title: string | React.ReactNode;
48
- /** 是否已中奖/完成 */
49
- isWon: boolean;
50
- /** 是否已提交(可能未中奖) */
51
- isCompleted: boolean;
52
- /** 是否是周期任务 */
53
- isPeriodic: boolean;
54
- /** 操作按钮文案(如 "Follow"、"Join") */
55
- actionLabel?: string;
56
- /** 操作按钮链接(默认在新标签页打开) */
57
- actionLink?: string;
58
- /** 点击操作按钮后是否自动验证 */
59
- actionAutoVerify?: boolean;
60
- /**
61
- * 点击 Action 按钮时自动打开弹窗
62
- * 用于 PowTask、InviteFriends 等需要在弹窗中填写内容的任务
63
- */
64
- actionAutoDialog?: boolean;
65
- /** 是否总是显示操作按钮(即使已完成) */
66
- alwaysShowAction?: boolean;
67
- /**
68
- * 标题跳转链接
69
- * 如果提供,标题将变成可点击的链接,在新标签页打开
70
- */
71
- targetLink?: string;
72
- /** 是否隐藏 Claim 按钮 */
73
- noClaim?: boolean;
74
- /**
75
- * 是否需要验证后才能 Claim
76
- * - true: 显示 "Verify & Claim"
77
- * - false: 显示 "Claim"
78
- */
79
- verifyClaim?: boolean;
80
- /**
81
- * 点击 Claim 仅打开弹窗(不提交)
82
- * 用于 QuizTask、SurveyTask 等需要在弹窗中选择答案的任务
83
- */
84
- claimDialog?: boolean;
85
- /**
86
- * 社交账号类型(用于 OAuth 绑定)
87
- * 决定 Claim 时需要绑定哪种社交账号
88
- */
89
- snsType?: SnsType;
90
- /**
91
- * 链类型(用于钱包绑定)
92
- * 决定 Claim 时需要绑定哪种链的钱包
93
- */
94
- chainType?: ChainType;
95
- /** 周期标签文本(如 "Daily"、"Weekly") */
96
- recurrenceLabel?: string;
97
- /** 任务重复类型(用于 Claim 按钮文案逻辑) */
98
- recurrence?: RecurrenceType;
99
- /** 是否隐藏周期标签 */
100
- noRecurrence?: boolean;
101
- /**
102
- * Unlimited 任务是否显示大的 Claim 按钮
103
- * - true: 显示正常大小的 Claim 按钮
104
- * - false: 显示小的 Update 按钮(已有积分)
105
- * @default true
106
- */
107
- showUnlimitedClaim?: boolean;
108
- /** 任务 ID */
109
- taskId: number;
110
- /** 有效时间相关 */
111
- validTime?: {
112
- /** 开始时间(格式化字符串) */
113
- startTime?: string;
114
- /** 结束时间(格式化字符串) */
115
- endTime?: string;
116
- /** 是否已过期 */
117
- isExpired?: boolean;
118
- };
119
- /**
120
- * 验证时间范围(OnChain 任务专用)
121
- * 显示 "This task only verify action during {start} - {end}(UTC)"
122
- */
123
- validationTimeFrame?: {
124
- /** 开始时间(毫秒或秒时间戳) */
125
- start_time: number;
126
- /** 结束时间(毫秒或秒时间戳) */
127
- end_time: number;
128
- };
129
- /** 奖励信息 */
130
- reward?: {
131
- /** 奖励类型 */
132
- type: "points" | "token" | "none";
133
- /** 积分数量(points 类型,单次奖励) */
134
- amount?: number;
135
- /** 积分名称(points 类型) */
136
- name?: string;
137
- /** 积分图标(points 类型) */
138
- icon?: string;
139
- /** 累计积分(周期任务完成时显示) */
140
- totalAmount?: number;
141
- /** Token 信息(token 类型) */
142
- token?: {
143
- /** Token 名称 */
144
- name: string;
145
- /** 每次奖励数量 */
146
- amount: string;
147
- /** Token 图标 */
148
- icon?: string;
149
- /** 链名称 */
150
- chain?: string;
151
- /** 链图标 */
152
- chainIcon?: string;
153
- /** 总奖励单位数 */
154
- totalUnit?: number;
155
- /** 可用单位数 */
156
- availableUnit?: number;
157
- };
158
- };
159
- /** 卡片内容(由具体任务组件提供,用于展示任务特定内容) */
160
- children?: React.ReactNode;
161
- /**
162
- * 自定义 Action 按钮区域
163
- * 如果提供,将替换默认的 Action 按钮
164
- * @example
165
- * ```tsx
166
- * <BaseTask
167
- * actionSlot={<CustomActionButton onClick={handleAction} />}
168
- * />
169
- * ```
170
- */
171
- actionSlot?: React.ReactNode;
172
- /**
173
- * 自定义奖励展示(已完成状态)
174
- * 如果提供,将替换默认的 Won 奖励显示
175
- * @example
176
- * ```tsx
177
- * <BaseTask
178
- * rewardSlot={<CustomRewardDisplay amount={100} />}
179
- * />
180
- * ```
181
- */
182
- rewardSlot?: React.ReactNode;
183
- /**
184
- * 是否已登录
185
- * - true: 正常显示卡片
186
- * - false/undefined: 显示登录遮层,点击触发 onLogin
187
- * @default true
188
- */
189
- isLoggedIn?: boolean;
190
- /** 点击卡片回调(用于打开弹窗) */
191
- onClick?: () => void;
192
- /**
193
- * 点击 Claim 按钮回调
194
- * @param token - 可选的 OAuth token(reAuth 成功后传入)
195
- * @returns 可选返回 Promise,包含结果信息用于 reAuth 判断和 coolDown 更新
196
- */
197
- onClaim?: (token?: string) => void | Promise<{
198
- successful: boolean;
199
- errorCode?: string;
200
- cool_down?: number;
201
- }>;
202
- /**
203
- * 点击登录遮层回调
204
- * 未登录时(isLoggedIn=false)点击卡片会触发此回调
205
- */
206
- onLogin?: () => void;
207
- /** 是否正在提交 */
208
- isSubmitting?: boolean;
209
- /** 冷却时间(毫秒) */
210
- coolDown?: number;
211
- /** 冷却结束回调(用于重置 coolDown 状态) */
212
- onCoolDownComplete?: () => void;
213
- /** 是否禁用交互 */
214
- disabled?: boolean;
215
- /**
216
- * 审核结果状态
217
- * - Passed: 审核通过
218
- * - Failed: 审核失败(显示 "Oops! Failed")
219
- * - UnReviewed: 审核中(显示 "Under Review")
220
- */
221
- reviewResult?: TaskReviewResult;
222
- /**
223
- * CheckProgressTip 需要的社区信息
224
- * 用于显示 "Contact {name} to check your progress"
225
- */
226
- communityInfo?: {
227
- /** 社区名称 */
228
- name?: string;
229
- /** 社区联系链接(Discord/Telegram/Twitter) */
230
- contactLink?: string;
231
- };
232
- /**
233
- * 周期任务:当前周期是否已完成
234
- * 配合 nextTime 用于显示 DoneCountdown
235
- */
236
- currentCompleted?: boolean;
237
- /**
238
- * 周期任务:下次可完成的时间戳(毫秒)
239
- * 用于显示 DoneCountdown 倒计时
240
- */
241
- nextTime?: number;
242
- }
243
- export { BaseTaskProps }
244
- export { BaseTaskProps as CommunityTaskProps }
2
+ import { RewardDisplayMode } from '@taskon/core';
245
3
 
246
4
  /**
247
5
  * CommunityTaskList outer wrapper
@@ -260,6 +18,11 @@ export declare interface CommunityTaskListProps {
260
18
  * Cloud config includes display options, sector filtering, etc.
261
19
  */
262
20
  widgetId?: number;
21
+ /**
22
+ * Manual theme mode override (highest priority when provided).
23
+ * Recommended with dual + toggle cloud strategy.
24
+ */
25
+ themeMode?: "light" | "dark" | "auto";
263
26
  /** Whether in preview mode */
264
27
  isPreview?: boolean;
265
28
  /** 社区信息(用于前置任务链接跳转) */
@@ -278,8 +41,9 @@ export declare interface CommunityTaskListProps {
278
41
  */
279
42
  initialTaskId?: number;
280
43
  /**
281
- * Callback when dialog opens (host can use to update URL params)
282
- * @param taskId Currently opened task ID
44
+ * Callback when dialog opens or switches task (host can use to update URL params).
45
+ * Fires whenever active task changes, including eligibility-driven task switches.
46
+ * @param taskId Currently active task ID
283
47
  * @example
284
48
  * ```tsx
285
49
  * onTaskOpen={(taskId) => router.replace(`?task=${taskId}`)}
@@ -287,13 +51,28 @@ export declare interface CommunityTaskListProps {
287
51
  */
288
52
  onTaskOpen?: (taskId: number) => void;
289
53
  /**
290
- * Callback when dialog closes (host can use to clear URL params)
54
+ * Callback when dialog closes (host can use to clear URL params).
55
+ * Fires only when dialog is actually closed; in-place task switches do not emit close first.
291
56
  * @example
292
57
  * ```tsx
293
58
  * onTaskClose={() => router.replace(pathname)}
294
59
  * ```
295
60
  */
296
61
  onTaskClose?: () => void;
62
+ /**
63
+ * Initial TaskChain campaign ID from URL (passed by host after parsing URL)
64
+ * Used to auto-open TaskChain dialog on page refresh or shared links
65
+ */
66
+ initialTaskChainId?: number;
67
+ /**
68
+ * Callback when TaskChain dialog opens (host can use to update URL params)
69
+ * @param taskChainId Currently opened TaskChain campaign ID
70
+ */
71
+ onTaskChainOpen?: (taskChainId: number) => void;
72
+ /**
73
+ * Callback when TaskChain dialog closes (host can use to clear URL params)
74
+ */
75
+ onTaskChainClose?: () => void;
297
76
  /** Sector IDs to display; undefined means show all */
298
77
  sectorIds?: number[];
299
78
  /** Whether to show sector tab selector (default: true) */
@@ -304,148 +83,10 @@ export declare interface CommunityTaskListProps {
304
83
  showSectorDescription?: boolean;
305
84
  /** Whether to show sector reward (default: true) */
306
85
  showSectorReward?: boolean;
86
+ /** How reward details are displayed in TaskChain claimed NFT cards */
87
+ rewardDisplayMode?: RewardDisplayMode;
88
+ /** Redirect URL for reward details when mode is redirect */
89
+ rewardRedirectUrl?: string;
307
90
  }
308
91
 
309
- /** 奖励信息(统一格式) */
310
- declare interface RewardInfo {
311
- /** 奖励类型 */
312
- type: "points" | "token" | "none";
313
- /** 积分数量(仅 points 类型) */
314
- amount?: number;
315
- /** 积分名称(仅 points 类型) */
316
- name?: string;
317
- /** 积分图标(仅 points 类型) */
318
- icon?: string;
319
- /** 积分 ID(仅 points 类型) */
320
- pointsId?: number;
321
- /** 代币信息(仅 token 类型) */
322
- token?: {
323
- name: string;
324
- amount: string;
325
- address: string;
326
- chain: string;
327
- icon?: string;
328
- /** 链图标 URL */
329
- chainIcon?: string;
330
- /** 总奖励单位数 */
331
- totalUnit?: number;
332
- /** 可用单位数 */
333
- availableUnit?: number;
334
- };
335
- }
336
-
337
- /**
338
- * useSubmitTask Hook
339
- * @description 处理任务提交逻辑
340
- * @module widgets/CommunityTask/hooks/useSubmitTask
341
- */
342
- /** 任务提交返回值 */
343
- declare interface SubmitTaskResult {
344
- /** 是否成功 */
345
- successful: boolean;
346
- /** 冷却时间(毫秒) */
347
- cool_down?: number;
348
- /** 错误信息 */
349
- error?: string;
350
- /** 错误码(用于判断是否是 UNAUTHORIZED 等特殊错误) */
351
- errorCode?: string;
352
- }
353
-
354
- /** 时间信息返回值 */
355
- declare interface TimeInfo {
356
- /** 开始时间(格式化后的字符串) */
357
- startTime: string;
358
- /** 结束时间(格式化后的字符串) */
359
- endTime: string;
360
- /** 开始时间戳 */
361
- startTimestamp: number | null;
362
- /** 结束时间戳 */
363
- endTimestamp: number | null;
364
- /** 是否即将开始(未到开始时间) */
365
- isUpcoming: boolean;
366
- /** 是否已过期(超过结束时间) */
367
- isExpired: boolean;
368
- }
369
-
370
- /**
371
- * useSubmitTask Hook
372
- * @description 提供任务提交功能,处理提交状态和错误
373
- *
374
- * @param taskId 任务 ID
375
- * @param onSuccess 提交成功回调(用于刷新任务状态)
376
- * @param platform 任务平台类型(用于显示平台相关的错误提示)
377
- * @param options 配置选项
378
- * @returns 提交函数和提交状态
379
- *
380
- * @example
381
- * ```tsx
382
- * const { submitTask, isSubmitting, error } = useSubmitTask(task.id, () => {
383
- * console.log('任务提交成功,刷新状态');
384
- * onUpdate();
385
- * }, 'Twitter');
386
- *
387
- * // 提交任务
388
- * const result = await submitTask();
389
- * if (result.successful) {
390
- * // 成功处理
391
- * }
392
- * ```
393
- */
394
- export declare function useSubmitTask(taskId: number, onSuccess?: () => void, platform?: string, options?: UseSubmitTaskOptions): {
395
- /** 提交任务函数 */
396
- submitTask: (taskValue?: string) => Promise<SubmitTaskResult>;
397
- /** 是否正在提交 */
398
- isSubmitting: boolean;
399
- /** 错误信息 */
400
- error: string | null;
401
- };
402
-
403
- /**
404
- * useSubmitTask Hook 配置选项
405
- */
406
- declare interface UseSubmitTaskOptions {
407
- /**
408
- * 验证失败时是否也刷新数据
409
- * 用于 SwapDex 等任务:用户完成了链上操作(times 增加),但还没达到要求次数
410
- * 此时验证返回 false,但需要刷新以显示更新后的 times
411
- */
412
- refreshOnFail?: boolean;
413
- }
414
-
415
- /**
416
- * useTaskReward Hook
417
- * @description 根据任务信息计算奖励信息
418
- *
419
- * @param task 任务完整信息(可选,为 undefined 时返回无奖励)
420
- * @returns 奖励信息对象
421
- *
422
- * @example
423
- * ```tsx
424
- * const reward = useTaskReward(task);
425
- * if (reward.type === 'points') {
426
- * console.log(reward.amount); // 100
427
- * console.log(reward.name); // "TaskOn Points"
428
- * }
429
- * ```
430
- */
431
- export declare function useTaskReward(task: CommunityTaskInfo | undefined): RewardInfo;
432
-
433
- /**
434
- * useTaskTime Hook
435
- * @description 根据任务信息计算时间相关状态
436
- *
437
- * @param task 任务完整信息
438
- * @returns 时间信息对象
439
- *
440
- * @example
441
- * ```tsx
442
- * const timeInfo = useTaskTime(task);
443
- * if (timeInfo.isExpired) {
444
- * console.log('任务已过期');
445
- * }
446
- * console.log(timeInfo.endTime); // "03/05/2026 02:18:52 UTC"
447
- * ```
448
- */
449
- export declare function useTaskTime(task: CommunityTaskInfo): TimeInfo;
450
-
451
92
  export { }
@@ -1,9 +1,4 @@
1
- import { B, B as B2, C, b, u, a } from "./chunks/CommunityTaskList-CrH6r4Av.js";
1
+ import { C } from "./chunks/CommunityTaskList-2nFy6l6m.js";
2
2
  export {
3
- B as BaseTask,
4
- B2 as CommunityTask,
5
- C as CommunityTaskList,
6
- b as useSubmitTask,
7
- u as useTaskReward,
8
- a as useTaskTime
3
+ C as CommunityTaskList
9
4
  };