@taskon/widget-react 0.0.1-beta.5 → 0.0.1-beta.7

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 (65) hide show
  1. package/README.md +61 -47
  2. package/dist/CommunityTaskList.css +9 -1
  3. package/dist/EligibilityInfo.css +48 -75
  4. package/dist/LeaderboardWidget.css +73 -71
  5. package/dist/PageBuilder.css +5 -0
  6. package/dist/Quest.css +18 -14
  7. package/dist/TaskOnProvider.css +289 -0
  8. package/dist/ThemeProvider.css +227 -0
  9. package/dist/UserCenterWidget.css +6 -6
  10. package/dist/UserCenterWidget2.css +1388 -1621
  11. package/dist/{dynamic-import-helper.css → WidgetShell.css} +0 -227
  12. package/dist/chunks/{CommunityTaskList-CrMvOB8w.js → CommunityTaskList-D0uVD8wD.js} +393 -208
  13. package/dist/chunks/{EligibilityInfo-Beww12QX.js → EligibilityInfo-Cf6hx9-a.js} +459 -679
  14. package/dist/chunks/{LeaderboardWidget-DwuSpVl0.js → LeaderboardWidget-DyoiiNS6.js} +274 -252
  15. package/dist/chunks/{PageBuilder-DsX6Tv0N.js → PageBuilder-DoAFPm6-.js} +5 -5
  16. package/dist/chunks/{Quest-CuD2LElS.js → Quest-ySZlYd4u.js} +74 -57
  17. package/dist/chunks/TaskOnProvider-CxtFIs3n.js +2072 -0
  18. package/dist/chunks/{dynamic-import-helper-WmIF58Sb.js → ThemeProvider-CulHkqqY.js} +1282 -555
  19. package/dist/chunks/UserCenterWidget-BJsc_GSZ.js +3246 -0
  20. package/dist/chunks/{UserCenterWidget-CvU6K4AC.js → UserCenterWidget-STq8kpV4.js} +1174 -1386
  21. package/dist/chunks/WidgetShell-8xn-Jivw.js +659 -0
  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-DhySaZL8.js → communitytask-ru-CZm2CPoV.js} +211 -1
  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-D-b5xcme.js → quest-es-Dyyy0zaw.js} +8 -93
  31. package/dist/chunks/{quest-ja-Dxd2vqBF.js → quest-ja-Depog33y.js} +8 -93
  32. package/dist/chunks/{quest-ko-CSmRWgK_.js → quest-ko-BMu3uRQJ.js} +8 -93
  33. package/dist/chunks/{quest-ru-CkEKv1_F.js → quest-ru-xne814Rw.js} +8 -93
  34. package/dist/chunks/useIsMobile-D6Ybur-6.js +30 -0
  35. package/dist/chunks/useToast-BGJhd3BX.js +93 -0
  36. package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
  37. package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
  38. package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
  39. package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
  40. package/dist/community-task.d.ts +0 -390
  41. package/dist/community-task.js +2 -7
  42. package/dist/core.d.ts +38 -20
  43. package/dist/core.js +9 -10
  44. package/dist/index.d.ts +86 -709
  45. package/dist/index.js +22 -28
  46. package/dist/leaderboard.d.ts +0 -498
  47. package/dist/leaderboard.js +2 -16
  48. package/dist/page-builder.js +1 -1
  49. package/dist/quest.d.ts +0 -971
  50. package/dist/quest.js +2 -7
  51. package/dist/user-center.d.ts +0 -1610
  52. package/dist/user-center.js +2 -494
  53. package/package.json +2 -2
  54. package/dist/chunks/TaskOnProvider-xUeP2Nro.js +0 -1243
  55. package/dist/chunks/ThemeProvider-Bt4UZ33y.js +0 -1334
  56. package/dist/chunks/UserCenterWidget-CB0hnj-L.js +0 -3230
  57. package/dist/chunks/communitytask-es-1zawvXEX.js +0 -311
  58. package/dist/chunks/communitytask-ja-CmW6nP-L.js +0 -311
  59. package/dist/chunks/communitytask-ko-BD0hzQSi.js +0 -311
  60. package/dist/chunks/createLocaleLoader-BameiEhU.js +0 -65
  61. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
  62. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
  63. package/dist/chunks/useToast-CaRkylKe.js +0 -304
  64. package/dist/chunks/usercenter-ja-B2465c1O.js +0 -326
  65. package/dist/chunks/usercenter-ko-xAEYxqLg.js +0 -326
@@ -121,6 +121,8 @@
121
121
  .taskon-toast-message {
122
122
  flex: 1;
123
123
  margin: 0;
124
+ overflow-wrap: anywhere;
125
+ word-break: break-word;
124
126
  }
125
127
 
126
128
  /* ==================== Toast 类型变体 ==================== */
@@ -180,3 +182,290 @@
180
182
  max-width: calc(100vw - 40px);
181
183
  }
182
184
  }
185
+ /**
186
+ * WalletPickerDialog 组件样式
187
+ * 使用 taskon-bind-wallet-* 命名空间
188
+ * 与 taskon-website 保持一致
189
+ */
190
+
191
+ /*
192
+ * Responsive base styles
193
+ *
194
+ * Keep mobile breakpoints and fallback patterns centralized here.
195
+ * Components should reuse these mixins instead of duplicating query logic.
196
+ */
197
+
198
+ /*
199
+ * Desktop-up mixin:
200
+ * 1) Enable desktop enhancement in wider containers
201
+ * 2) Keep viewport media query as fallback
202
+ */
203
+
204
+ /* Ensure wallet picker always appears above other SDK dialogs */
205
+
206
+ .taskon-wallet-picker-overlay {
207
+ z-index: 10008;
208
+ }
209
+
210
+ .taskon-wallet-picker-content {
211
+ z-index: 10009;
212
+ }
213
+
214
+ /* ==================== 容器 ==================== */
215
+
216
+ .taskon-bind-wallet-dialog {
217
+ position: relative;
218
+ display: flex;
219
+ flex-direction: column;
220
+ }
221
+
222
+ /* ==================== 标题 ==================== */
223
+
224
+ .taskon-bind-wallet-dialog-title {
225
+ margin: 0;
226
+ font-size: 22px;
227
+ font-weight: 700;
228
+ line-height: 28px;
229
+ color: var(--taskon-color-text);
230
+ }
231
+
232
+ /* ==================== 链类型标签 ==================== */
233
+
234
+ .taskon-bind-wallet-dialog-chain-label {
235
+ margin-top: var(--taskon-spacing-md);
236
+ font-size: 16px;
237
+ font-weight: 500;
238
+ line-height: 20px;
239
+ color: var(--taskon-color-text);
240
+ }
241
+
242
+ /* ==================== 钱包网格 ==================== */
243
+
244
+ .taskon-bind-wallet-dialog-grid {
245
+ margin-top: var(--taskon-spacing-sm);
246
+ display: grid;
247
+ grid-template-columns: 1fr;
248
+ gap: var(--taskon-spacing-md);
249
+ }
250
+
251
+ /* ==================== 钱包项 ==================== */
252
+
253
+ .taskon-bind-wallet-item {
254
+ position: relative;
255
+ display: flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ height: 50px;
259
+ padding: 0 12px;
260
+
261
+ background: transparent;
262
+ border: 1px solid var(--taskon-color-border);
263
+ border-radius: 8px;
264
+ cursor: pointer;
265
+ transition: all 0.2s ease;
266
+ }
267
+
268
+ .taskon-bind-wallet-item:hover,
269
+ .taskon-bind-wallet-item:focus {
270
+ background: var(--taskon-color-bg-surface-strong);
271
+ }
272
+
273
+ .taskon-bind-wallet-item:active {
274
+ transform: scale(0.98);
275
+ }
276
+
277
+ /* 钱包图标 */
278
+
279
+ .taskon-bind-wallet-item-icon {
280
+ display: flex;
281
+ align-items: center;
282
+ justify-content: center;
283
+ width: 24px;
284
+ height: 24px;
285
+ flex-shrink: 0;
286
+ }
287
+
288
+ .taskon-bind-wallet-item-icon svg {
289
+ width: 24px;
290
+ height: 24px;
291
+ }
292
+
293
+ /* 钱包名称 */
294
+
295
+ .taskon-bind-wallet-item-name {
296
+ margin-left: 10px;
297
+ font-size: 18px;
298
+ font-weight: 600;
299
+ line-height: 20px;
300
+ color: var(--taskon-color-text);
301
+ }
302
+
303
+ /* 已安装标签 */
304
+
305
+ .taskon-bind-wallet-item-installed {
306
+ position: absolute;
307
+ right: 0;
308
+ bottom: 0;
309
+ padding: 4px 8px;
310
+ font-size: 10px;
311
+ line-height: 14px;
312
+ color: var(--taskon-color-secondary);
313
+ background: var(--taskon-color-secondary-bg);
314
+ border-radius: 8px 0;
315
+ transform-origin: bottom right;
316
+ }
317
+
318
+ /* ==================== 连接中状态 ==================== */
319
+
320
+ .taskon-bind-wallet-item--connecting {
321
+ opacity: 0.7;
322
+ cursor: wait;
323
+ }
324
+
325
+ .taskon-bind-wallet-item--connecting:hover,
326
+ .taskon-bind-wallet-item--connecting:focus {
327
+ background: transparent;
328
+ }
329
+
330
+ /* ==================== 禁用状态 ==================== */
331
+
332
+ .taskon-bind-wallet-item--disabled {
333
+ opacity: 0.5;
334
+ cursor: not-allowed;
335
+ }
336
+
337
+ .taskon-bind-wallet-item--disabled:hover,
338
+ .taskon-bind-wallet-item--disabled:focus {
339
+ background: transparent;
340
+ }
341
+
342
+ .taskon-bind-wallet-item--disabled:active {
343
+ transform: none;
344
+ }
345
+
346
+ /* 不可用标签 */
347
+
348
+ .taskon-bind-wallet-item-unavailable {
349
+ position: absolute;
350
+ right: 0;
351
+ bottom: 0;
352
+ padding: 4px 8px;
353
+ font-size: 10px;
354
+ line-height: 14px;
355
+ color: var(--taskon-color-text-tertiary);
356
+ background: var(--taskon-color-bg-surface-subtle);
357
+ border-radius: 8px 0;
358
+ }
359
+
360
+ /* 连接中 spinner */
361
+
362
+ .taskon-bind-wallet-item-connecting {
363
+ position: absolute;
364
+ right: 8px;
365
+ display: flex;
366
+ align-items: center;
367
+ justify-content: center;
368
+ }
369
+
370
+ .taskon-bind-wallet-spinner {
371
+ width: 16px;
372
+ height: 16px;
373
+ color: var(--taskon-color-primary);
374
+ animation: taskon-bind-wallet-spin 1s linear infinite;
375
+ }
376
+
377
+ @keyframes taskon-bind-wallet-spin {
378
+ from {
379
+ transform: rotate(0deg);
380
+ }
381
+ to {
382
+ transform: rotate(360deg);
383
+ }
384
+ }
385
+
386
+ /* ==================== 提示文字 ==================== */
387
+
388
+ .taskon-bind-wallet-dialog-tip {
389
+ margin: var(--taskon-spacing-md) 0 0;
390
+ font-size: 14px;
391
+ line-height: 1.5;
392
+ color: var(--taskon-color-text-tertiary);
393
+ text-align: center;
394
+ }
395
+
396
+ /* ==================== 连接中遮层 ==================== */
397
+
398
+ .taskon-bind-wallet-loading-overlay {
399
+ position: absolute;
400
+ /* 使用负值覆盖 Dialog body 的 padding */
401
+ inset: -20px;
402
+ display: flex;
403
+ flex-direction: column;
404
+ align-items: center;
405
+ justify-content: center;
406
+ background: var(--taskon-color-bg-mask);
407
+ backdrop-filter: blur(4px);
408
+ border-radius: 12px;
409
+ }
410
+
411
+ .taskon-bind-wallet-loading-spinner {
412
+ width: 40px;
413
+ height: 40px;
414
+ color: var(--taskon-color-text-secondary);
415
+ animation: taskon-bind-wallet-spin 1s linear infinite;
416
+ }
417
+
418
+ .taskon-bind-wallet-loading-text {
419
+ margin: 20px 0 0;
420
+ max-width: 60%;
421
+ font-size: 16px;
422
+ line-height: 20px;
423
+ color: var(--taskon-color-text-secondary);
424
+ text-align: center;
425
+ }
426
+
427
+ @supports (container-type: inline-size) {
428
+ @container (min-width: 751px) {
429
+ .taskon-bind-wallet-dialog-chain-label {
430
+ margin-top: 20px;
431
+ }
432
+
433
+ .taskon-bind-wallet-dialog-grid {
434
+ margin-top: 10px;
435
+ grid-template-columns: 1fr 1fr;
436
+ gap: 18px;
437
+ }
438
+
439
+ .taskon-bind-wallet-dialog-tip {
440
+ margin-top: 20px;
441
+ }
442
+
443
+ .taskon-bind-wallet-loading-overlay {
444
+ inset: -24px;
445
+ border-radius: 16px;
446
+ }
447
+ }
448
+ }
449
+
450
+ @supports not (container-type: inline-size) {
451
+ @media (min-width: 751px) {
452
+ .taskon-bind-wallet-dialog-chain-label {
453
+ margin-top: 20px;
454
+ }
455
+
456
+ .taskon-bind-wallet-dialog-grid {
457
+ margin-top: 10px;
458
+ grid-template-columns: 1fr 1fr;
459
+ gap: 18px;
460
+ }
461
+
462
+ .taskon-bind-wallet-dialog-tip {
463
+ margin-top: 20px;
464
+ }
465
+
466
+ .taskon-bind-wallet-loading-overlay {
467
+ inset: -24px;
468
+ border-radius: 16px;
469
+ }
470
+ }
471
+ }
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Dialog 组件样式
3
+ * 基于 Radix UI Dialog 封装
4
+ * 使用 taskon-dialog-* 命名空间
5
+ */
6
+
7
+ /*
8
+ * Responsive base styles
9
+ *
10
+ * Keep mobile breakpoints and fallback patterns centralized here.
11
+ * Components should reuse these mixins instead of duplicating query logic.
12
+ */
13
+
14
+ /*
15
+ * Desktop-up mixin:
16
+ * 1) Enable desktop enhancement in wider containers
17
+ * 2) Keep viewport media query as fallback
18
+ */
19
+
20
+ /* ==================== 遮罩层 ==================== */
21
+
22
+ .taskon-dialog-overlay {
23
+ position: fixed;
24
+ inset: 0;
25
+ z-index: 9998;
26
+ /* 遮罩层统一使用通用 mask token */
27
+ background-color: var(--taskon-color-bg-mask);
28
+ backdrop-filter: blur(24px);
29
+
30
+ /* 动画 */
31
+ animation: taskon-dialog-overlay-fade-in 150ms ease-out;
32
+ }
33
+
34
+ .taskon-dialog-overlay[data-state="closed"] {
35
+ animation: taskon-dialog-overlay-fade-out 150ms ease-in;
36
+ }
37
+
38
+ @keyframes taskon-dialog-overlay-fade-in {
39
+ from {
40
+ opacity: 0;
41
+ }
42
+ to {
43
+ opacity: 1;
44
+ }
45
+ }
46
+
47
+ @keyframes taskon-dialog-overlay-fade-out {
48
+ from {
49
+ opacity: 1;
50
+ }
51
+ to {
52
+ opacity: 0;
53
+ }
54
+ }
55
+
56
+ /* ==================== 弹窗内容 ==================== */
57
+
58
+ .taskon-dialog-content {
59
+ position: fixed;
60
+ top: 50%;
61
+ left: 50%;
62
+ transform: translate(-50%, -50%);
63
+ z-index: 9999;
64
+
65
+ /* 尺寸 */
66
+ width: 95vw;
67
+ max-width: 500px;
68
+ max-height: 90vh;
69
+
70
+ /* 弹层统一使用更深的背景 token(dark 下最接近最深层) */
71
+ background-color: var(--taskon-color-bg-canvas);
72
+ color: var(--taskon-color-text);
73
+ border-radius: var(--taskon-border-radius);
74
+ box-shadow: 0 25px 50px -12px var(--taskon-color-bg-mask);
75
+
76
+ /* 布局 */
77
+ display: flex;
78
+ flex-direction: column;
79
+ overflow: hidden;
80
+
81
+ /* 移除默认的 focus outline */
82
+ outline: none;
83
+
84
+ /* 动画 */
85
+ animation: taskon-dialog-content-fade-in 200ms ease-out;
86
+ }
87
+
88
+ .taskon-dialog-content[data-state="closed"] {
89
+ animation: taskon-dialog-content-fade-out 150ms ease-in;
90
+ }
91
+
92
+ @keyframes taskon-dialog-content-fade-in {
93
+ from {
94
+ opacity: 0;
95
+ transform: translate(-50%, -48%) scale(0.96);
96
+ }
97
+ to {
98
+ opacity: 1;
99
+ transform: translate(-50%, -50%) scale(1);
100
+ }
101
+ }
102
+
103
+ @keyframes taskon-dialog-content-fade-out {
104
+ from {
105
+ opacity: 1;
106
+ transform: translate(-50%, -50%) scale(1);
107
+ }
108
+ to {
109
+ opacity: 0;
110
+ transform: translate(-50%, -48%) scale(0.96);
111
+ }
112
+ }
113
+
114
+ /* ==================== 无障碍标题/描述(屏幕阅读器可见) ==================== */
115
+
116
+ .taskon-dialog-title--sr-only,
117
+ .taskon-dialog-description--sr-only {
118
+ position: absolute;
119
+ width: 1px;
120
+ height: 1px;
121
+ padding: 0;
122
+ margin: -1px;
123
+ overflow: hidden;
124
+ clip: rect(0, 0, 0, 0);
125
+ white-space: nowrap;
126
+ border: 0;
127
+ }
128
+
129
+ /* ==================== 头部操作区 ==================== */
130
+
131
+ .taskon-dialog-header {
132
+ position: absolute;
133
+ top: 12px;
134
+ right: 12px;
135
+ z-index: 1;
136
+
137
+ display: flex;
138
+ align-items: center;
139
+ gap: 8px;
140
+ }
141
+
142
+ .taskon-dialog-header-slot {
143
+ display: flex;
144
+ align-items: center;
145
+ }
146
+
147
+ /* ==================== 关闭按钮 ==================== */
148
+
149
+ .taskon-dialog-close {
150
+ display: flex;
151
+ align-items: center;
152
+ justify-content: center;
153
+
154
+ width: 32px;
155
+ height: 32px;
156
+ padding: 0;
157
+
158
+ background: var(--taskon-color-bg-surface-subtle);
159
+ border: none;
160
+ border-radius: var(--taskon-border-radius-sm);
161
+ cursor: pointer;
162
+
163
+ color: var(--taskon-color-text-secondary);
164
+ transition: all 0.2s ease;
165
+ }
166
+
167
+ .taskon-dialog-close:hover {
168
+ background-color: var(--taskon-color-bg-surface);
169
+ color: var(--taskon-color-text);
170
+ }
171
+
172
+ .taskon-dialog-close:focus-visible {
173
+ outline: 2px solid var(--taskon-color-primary);
174
+ outline-offset: 2px;
175
+ }
176
+
177
+ /* ==================== 主体内容 ==================== */
178
+
179
+ .taskon-dialog-body {
180
+ flex: 1;
181
+ overflow-y: auto;
182
+ padding: 20px;
183
+ }
184
+
185
+ .taskon-dialog-body--no-padding {
186
+ padding: 0;
187
+ }
188
+
189
+ /* ==================== Desktop 增强 ==================== */
190
+
191
+ @supports (container-type: inline-size) {
192
+ @container (min-width: 751px) {
193
+ .taskon-dialog-content {
194
+ width: 90vw;
195
+ max-height: 85vh;
196
+ border-radius: var(--taskon-border-radius-lg);
197
+ }
198
+
199
+ .taskon-dialog-body {
200
+ padding: 24px;
201
+ }
202
+
203
+ .taskon-dialog-header {
204
+ top: 16px;
205
+ right: 16px;
206
+ }
207
+ }
208
+ }
209
+
210
+ @supports not (container-type: inline-size) {
211
+ @media (min-width: 751px) {
212
+ .taskon-dialog-content {
213
+ width: 90vw;
214
+ max-height: 85vh;
215
+ border-radius: var(--taskon-border-radius-lg);
216
+ }
217
+
218
+ .taskon-dialog-body {
219
+ padding: 24px;
220
+ }
221
+
222
+ .taskon-dialog-header {
223
+ top: 16px;
224
+ right: 16px;
225
+ }
226
+ }
227
+ }
@@ -122,7 +122,7 @@
122
122
  .taskon-email-bind-dialog__title {
123
123
  font-size: 20px;
124
124
  font-weight: 600;
125
- line-height: 28px;
125
+ line-height: 1.4;
126
126
  color: var(--taskon-color-text);
127
127
  margin: 0 0 24px 0;
128
128
  }
@@ -133,9 +133,9 @@
133
133
 
134
134
  .taskon-email-bind-dialog__label {
135
135
  display: block;
136
- font-size: 14px;
136
+ font-size: var(--taskon-font-size);
137
137
  font-weight: 500;
138
- line-height: 20px;
138
+ line-height: 1.43;
139
139
  color: var(--taskon-color-text);
140
140
  margin-bottom: 8px;
141
141
  }
@@ -148,8 +148,8 @@
148
148
 
149
149
  @media (max-width: 750px) {
150
150
  .taskon-email-bind-dialog__title {
151
- font-size: 18px;
152
- line-height: 24px;
151
+ font-size: var(--taskon-font-size-xl);
152
+ line-height: 1.33;
153
153
  margin-bottom: 16px;
154
154
  }
155
155
 
@@ -158,7 +158,7 @@
158
158
  }
159
159
 
160
160
  .taskon-email-bind-dialog__label {
161
- font-size: 13px;
161
+ font-size: var(--taskon-font-size-sm);
162
162
  margin-bottom: 6px;
163
163
  }
164
164