@taskon/widget-react 0.0.1-beta.2 → 0.0.1-beta.4

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 (44) hide show
  1. package/README.md +56 -17
  2. package/dist/CommunityTaskList.css +1593 -1741
  3. package/dist/EligibilityInfo.css +1275 -582
  4. package/dist/LeaderboardWidget.css +355 -152
  5. package/dist/PageBuilder.css +0 -2
  6. package/dist/Quest.css +1140 -903
  7. package/dist/TaskOnProvider.css +50 -31
  8. package/dist/UserCenterWidget.css +108 -237
  9. package/dist/UserCenterWidget2.css +2016 -711
  10. package/dist/chunks/{CommunityTaskList-BlH1Wdd5.js → CommunityTaskList-C9Gv8KOF.js} +962 -827
  11. package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-D-Fuy9GE.js} +1137 -449
  12. package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-BV2D2q1N.js} +15 -10
  13. package/dist/chunks/{PageBuilder-Bw0zSkFh.js → PageBuilder-DQoU4Mwf.js} +5 -5
  14. package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-B5NyVr3o.js} +516 -325
  15. package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-93UxARFo.js} +2 -207
  16. package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-CPI_roeh.js} +249 -57
  17. package/dist/chunks/{UserCenterWidget-Cw6h_5hT.js → UserCenterWidget-BRtigY_S.js} +206 -1002
  18. package/dist/chunks/UserCenterWidget-cADBSVg7.js +8358 -0
  19. package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-DwXlQC0S.js} +607 -40
  20. package/dist/chunks/useToast-CaRkylKe.js +304 -0
  21. package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
  22. package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
  23. package/dist/community-task.d.ts +34 -3
  24. package/dist/community-task.js +1 -1
  25. package/dist/core.d.ts +40 -3
  26. package/dist/core.js +9 -10
  27. package/dist/dynamic-import-helper.css +596 -289
  28. package/dist/index.d.ts +207 -10
  29. package/dist/index.js +21 -19
  30. package/dist/leaderboard.d.ts +8 -1
  31. package/dist/leaderboard.js +2 -2
  32. package/dist/page-builder.js +1 -1
  33. package/dist/quest.d.ts +8 -2
  34. package/dist/quest.js +1 -1
  35. package/dist/user-center.d.ts +20 -136
  36. package/dist/user-center.js +19 -236
  37. package/package.json +10 -2
  38. package/dist/TipPopover.css +0 -210
  39. package/dist/WidgetShell.css +0 -182
  40. package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
  41. package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
  42. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
  43. package/dist/chunks/useToast-B-wyO5zL.js +0 -93
  44. package/dist/chunks/useWidgetLocale-JDelxtt8.js +0 -74
@@ -3,16 +3,31 @@
3
3
  * 遵循 TaskOn Widget 命名规范
4
4
  */
5
5
 
6
+ /*
7
+ * Responsive base styles
8
+ *
9
+ * Keep mobile breakpoints and fallback patterns centralized here.
10
+ * Components should reuse these mixins instead of duplicating query logic.
11
+ */
12
+
13
+ /*
14
+ * Desktop-up mixin:
15
+ * 1) Enable desktop enhancement in wider containers
16
+ * 2) Keep viewport media query as fallback
17
+ */
18
+
6
19
  /* ==================== Viewport 容器 ==================== */
20
+
7
21
  .taskon-toast-viewport {
8
22
  position: fixed;
9
- top: 20px;
10
- right: 20px;
23
+ top: 10px;
24
+ right: 10px;
25
+ left: 10px;
11
26
  display: flex;
12
27
  flex-direction: column;
13
28
  gap: 10px;
14
- width: 320px;
15
- max-width: calc(100vw - 40px);
29
+ width: auto;
30
+ max-width: none;
16
31
  margin: 0;
17
32
  padding: 0;
18
33
  list-style: none;
@@ -21,20 +36,22 @@
21
36
  }
22
37
 
23
38
  /* ==================== Toast 基础样式 ==================== */
39
+
24
40
  .taskon-toast {
25
41
  display: flex;
26
42
  align-items: center;
27
43
  gap: 12px;
28
44
  padding: 14px 16px;
29
45
  border-radius: 8px;
30
- background: #1a1a1a;
31
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
32
- color: #fff;
46
+ background: var(--taskon-color-bg-floating);
47
+ box-shadow: 0 4px 12px var(--taskon-color-bg-mask);
48
+ color: var(--taskon-color-text);
33
49
  font-size: 14px;
34
50
  line-height: 1.4;
35
51
  }
36
52
 
37
53
  /* 动画 */
54
+
38
55
  .taskon-toast[data-state="open"] {
39
56
  animation: taskon-toast-slide-in 200ms ease-out;
40
57
  }
@@ -86,6 +103,7 @@
86
103
  }
87
104
 
88
105
  /* ==================== Toast 图标 ==================== */
106
+
89
107
  .taskon-toast-icon {
90
108
  flex-shrink: 0;
91
109
  width: 20px;
@@ -99,6 +117,7 @@
99
117
  }
100
118
 
101
119
  /* ==================== Toast 消息 ==================== */
120
+
102
121
  .taskon-toast-message {
103
122
  flex: 1;
104
123
  margin: 0;
@@ -107,57 +126,57 @@
107
126
  /* ==================== Toast 类型变体 ==================== */
108
127
 
109
128
  /* Success */
129
+
110
130
  .taskon-toast--success {
111
- border-left: 3px solid #00ffa3;
131
+ border-left: 3px solid var(--taskon-color-success);
112
132
  }
113
133
 
114
134
  .taskon-toast--success .taskon-toast-icon {
115
- background: rgba(0, 255, 163, 0.2);
116
- color: #00ffa3;
135
+ background: var(--taskon-color-success-bg);
136
+ color: var(--taskon-color-success);
117
137
  }
118
138
 
119
139
  /* Error */
140
+
120
141
  .taskon-toast--error {
121
- border-left: 3px solid #eb5757;
142
+ border-left: 3px solid var(--taskon-color-error);
122
143
  }
123
144
 
124
145
  .taskon-toast--error .taskon-toast-icon {
125
- background: rgba(235, 87, 87, 0.2);
126
- color: #eb5757;
146
+ background: var(--taskon-color-error-bg);
147
+ color: var(--taskon-color-error);
127
148
  }
128
149
 
129
150
  /* Warning */
151
+
130
152
  .taskon-toast--warning {
131
- border-left: 3px solid #f2c94c;
153
+ border-left: 3px solid var(--taskon-color-warning);
132
154
  }
133
155
 
134
156
  .taskon-toast--warning .taskon-toast-icon {
135
- background: rgba(242, 201, 76, 0.2);
136
- color: #f2c94c;
157
+ background: var(--taskon-color-warning-bg);
158
+ color: var(--taskon-color-warning);
137
159
  }
138
160
 
139
161
  /* Info */
162
+
140
163
  .taskon-toast--info {
141
- border-left: 3px solid #2f80ed;
164
+ border-left: 3px solid var(--taskon-color-link);
142
165
  }
143
166
 
144
167
  .taskon-toast--info .taskon-toast-icon {
145
- background: rgba(47, 128, 237, 0.2);
146
- color: #2f80ed;
168
+ background: var(--taskon-color-bg-surface-strong);
169
+ color: var(--taskon-color-link);
147
170
  }
148
171
 
149
- /* ==================== 响应式 ==================== */
150
- @media (max-width: 750px) {
151
- .taskon-toast-viewport {
152
- top: 10px;
153
- right: 10px;
154
- left: 10px;
155
- width: auto;
156
- max-width: none;
157
- }
172
+ /* ==================== Desktop 增强 ==================== */
158
173
 
159
- .taskon-toast {
160
- padding: 12px 14px;
161
- font-size: 13px;
174
+ @media (min-width: 751px) {
175
+ .taskon-toast-viewport {
176
+ top: 20px;
177
+ right: 20px;
178
+ left: auto;
179
+ width: 320px;
180
+ max-width: calc(100vw - 40px);
162
181
  }
163
182
  }
@@ -1,106 +1,116 @@
1
- /**
2
- * Tabs 组件样式
3
- *
4
- * 命名规范: .taskon-tabs-[element]--[modifier]
5
- * 基于 Figma UserCenter 设计规范
6
- */
7
-
8
- /* ========== 容器 ========== */
9
- .taskon-tabs {
10
- position: relative;
11
- display: inline-flex;
12
- flex-direction: column;
13
- gap: 0;
14
- }
15
-
16
- /* ========== Tab 列表 ========== */
17
- .taskon-tabs__list {
18
- display: inline-flex;
19
- align-items: center;
20
- gap: var(--taskon-tabs-gap, 40px);
21
- }
22
-
23
- /* ========== Tab 项 ========== */
24
- .taskon-tabs__tab {
25
- position: relative;
26
- padding: 0;
27
- padding-bottom: 9px;
28
- background: transparent;
29
- border: none;
30
- cursor: pointer;
31
- transition: color 0.2s ease;
32
-
33
- /* Typography: 16px Medium */
34
- font-size: 16px;
35
- font-weight: 500;
36
- line-height: 24px;
37
- white-space: nowrap;
38
-
39
- /* 默认颜色: text-light (60% 白色) */
40
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.6));
41
- }
42
-
43
- .taskon-tabs__tab:hover:not(.taskon-tabs__tab--disabled) {
44
- color: var(--taskon-color-text-light-hover, rgba(255, 255, 255, 0.8));
45
- }
46
-
47
- /* 激活状态: 更粗字体 + 白色 */
48
- .taskon-tabs__tab--active {
49
- font-weight: 600;
50
- color: var(--taskon-color-text, white);
51
- }
52
-
53
- /* 禁用状态 */
54
- .taskon-tabs__tab--disabled {
55
- color: var(--taskon-color-text-disabled, rgba(255, 255, 255, 0.3));
56
- cursor: not-allowed;
57
- }
58
-
59
- /* ========== 下划线指示器 ========== */
60
- .taskon-tabs__indicator {
61
- position: absolute;
62
- bottom: 0;
63
- left: 0;
64
- height: 2px;
65
- /* 渐变色:蓝色 -> 绿色(基于 Figma 设计 Brand/primary -> Brand/secondary) */
66
- background: linear-gradient(90deg, #2771ff 0%, #1fcbaf 100%);
67
- border-radius: 1px;
68
- transition: transform 0.25s ease, width 0.25s ease;
69
- }
70
1
  /**
71
- * AssetImage 组件样式
2
+ * Tabs 组件样式
3
+ *
4
+ * 命名规范: .taskon-tabs-[element]--[modifier]
5
+ * 基于 Figma UserCenter 设计规范
72
6
  */
73
-
74
- .taskon-asset-image {
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
+ * Desktop-up mixin:
15
+ * 1) Enable desktop enhancement in wider containers
16
+ * 2) Keep viewport media query as fallback
17
+ */
18
+ /* ========== 容器 ========== */
19
+ .taskon-tabs {
75
20
  position: relative;
76
- flex-shrink: 0;
77
- }
78
-
79
- .taskon-asset-image__main {
80
- display: block;
21
+ container-type: inline-size;
22
+ display: flex;
23
+ flex-direction: column;
81
24
  width: 100%;
82
- height: 100%;
83
- border-radius: 4px;
84
- object-fit: cover;
25
+ gap: 0;
26
+ overflow-x: auto;
27
+ scrollbar-width: none;
85
28
  }
86
-
87
- .taskon-asset-image__placeholder {
88
- width: 100%;
89
- height: 100%;
90
- border-radius: 4px;
91
- background-color: var(--taskon-bg-secondary, #f0f0f0);
29
+ .taskon-tabs::-webkit-scrollbar {
30
+ display: none;
31
+ }
32
+ /* ========== Tab 列表 ========== */
33
+ .taskon-tabs__list {
34
+ display: inline-flex;
35
+ align-items: center;
36
+ width: max-content;
37
+ min-width: 100%;
38
+ gap: var(--taskon-tabs-gap-mobile, 16px);
92
39
  }
40
+ /* ========== Tab 项 ========== */
41
+ .taskon-tabs__tab {
42
+ position: relative;
43
+ flex-shrink: 0;
44
+ padding: 0;
45
+ padding-bottom: 9px;
46
+ background: transparent;
47
+ border: none;
48
+ cursor: pointer;
49
+ transition: color 0.2s ease;
93
50
 
94
- .taskon-asset-image__chain {
95
- position: absolute;
96
- right: -4px;
97
- bottom: -4px;
98
- width: 18px;
99
- height: 18px;
100
- border-radius: 50%;
101
- background-color: var(--taskon-bg-primary, #fff);
102
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
51
+ /* Typography: 16px Medium */
52
+ font-size: 16px;
53
+ font-weight: 500;
54
+ line-height: 24px;
55
+ white-space: nowrap;
56
+
57
+ color: var(--taskon-color-text-secondary);
58
+ }
59
+ .taskon-tabs__tab:hover:not(.taskon-tabs__tab--disabled) {
60
+ color: var(--taskon-color-text);
61
+ }
62
+ /* 激活状态: 更粗字体 + 主文本色 */
63
+ .taskon-tabs__tab--active {
64
+ font-weight: 600;
65
+ color: var(--taskon-color-text);
66
+ }
67
+ /* 禁用状态 */
68
+ .taskon-tabs__tab--disabled {
69
+ color: var(--taskon-color-text-disabled);
70
+ cursor: not-allowed;
103
71
  }
72
+ /* ========== 下划线指示器 ========== */
73
+ .taskon-tabs__indicator {
74
+ position: absolute;
75
+ bottom: 0;
76
+ left: 0;
77
+ height: 2px;
78
+ background: linear-gradient(
79
+ 90deg,
80
+ var(--taskon-color-link) 0%,
81
+ var(--taskon-color-secondary) 100%
82
+ );
83
+ border-radius: 1px;
84
+ transition: transform 0.25s ease, width 0.25s ease;
85
+ }
86
+ @supports (container-type: inline-size) {
87
+ @container (min-width: 751px) {
88
+ .taskon-tabs {
89
+ width: auto;
90
+ overflow-x: visible;
91
+ }
92
+
93
+ .taskon-tabs__list {
94
+ width: auto;
95
+ min-width: 0;
96
+ gap: var(--taskon-tabs-gap, 40px);
97
+ }
98
+ }
99
+ }
100
+ @supports not (container-type: inline-size) {
101
+ @media (min-width: 751px) {
102
+ .taskon-tabs {
103
+ width: auto;
104
+ overflow-x: visible;
105
+ }
106
+
107
+ .taskon-tabs__list {
108
+ width: auto;
109
+ min-width: 0;
110
+ gap: var(--taskon-tabs-gap, 40px);
111
+ }
112
+ }
113
+ }
104
114
  /**
105
115
  * EmailBindDialog 样式
106
116
  */
@@ -113,7 +123,7 @@
113
123
  font-size: 20px;
114
124
  font-weight: 600;
115
125
  line-height: 28px;
116
- color: var(--taskon-color-text, #fff);
126
+ color: var(--taskon-color-text);
117
127
  margin: 0 0 24px 0;
118
128
  }
119
129
 
@@ -126,7 +136,7 @@
126
136
  font-size: 14px;
127
137
  font-weight: 500;
128
138
  line-height: 20px;
129
- color: var(--taskon-color-text, #fff);
139
+ color: var(--taskon-color-text);
130
140
  margin-bottom: 8px;
131
141
  }
132
142
 
@@ -135,6 +145,7 @@
135
145
  }
136
146
 
137
147
  /* 响应式 - 移动端 */
148
+
138
149
  @media (max-width: 750px) {
139
150
  .taskon-email-bind-dialog__title {
140
151
  font-size: 18px;
@@ -155,143 +166,3 @@
155
166
  margin-top: 20px;
156
167
  }
157
168
  }
158
- /**
159
- * ClaimNftDialog 样式
160
- */
161
-
162
- .taskon-claim-dialog {
163
- max-width: 400px;
164
- }
165
-
166
- .taskon-claim-dialog-content {
167
- display: flex;
168
- flex-direction: column;
169
- align-items: center;
170
- padding: 24px;
171
- text-align: center;
172
- }
173
-
174
- /* NFT 图片 */
175
- .taskon-claim-dialog-nft {
176
- margin-bottom: 20px;
177
- }
178
-
179
- .taskon-claim-dialog-nft__image {
180
- width: 120px;
181
- height: 120px;
182
- border-radius: 12px;
183
- object-fit: cover;
184
- }
185
-
186
- /* 状态图标区域 */
187
- .taskon-claim-dialog-status {
188
- margin-bottom: 16px;
189
- min-height: 48px;
190
- display: flex;
191
- align-items: center;
192
- justify-content: center;
193
- }
194
-
195
- /* 加载动画 */
196
- .taskon-claim-dialog-spinner {
197
- width: 48px;
198
- height: 48px;
199
- position: relative;
200
- }
201
-
202
- .taskon-claim-dialog-spinner__circle {
203
- width: 100%;
204
- height: 100%;
205
- border: 3px solid var(--taskon-border-color, #e5e5e5);
206
- border-top-color: var(--taskon-primary-color, #6366f1);
207
- border-radius: 50%;
208
- animation: taskon-claim-spin 0.8s linear infinite;
209
- }
210
-
211
- @keyframes taskon-claim-spin {
212
- to {
213
- transform: rotate(360deg);
214
- }
215
- }
216
-
217
- /* 状态图标 */
218
- .taskon-claim-dialog-icon {
219
- width: 48px;
220
- height: 48px;
221
- }
222
-
223
- .taskon-claim-dialog-icon--success {
224
- color: var(--taskon-success-color, #22c55e);
225
- }
226
-
227
- .taskon-claim-dialog-icon--error {
228
- color: var(--taskon-error-color, #ef4444);
229
- }
230
-
231
- /* 状态消息 */
232
- .taskon-claim-dialog-message {
233
- font-size: 16px;
234
- font-weight: 500;
235
- color: var(--taskon-text-color, #1a1a1a);
236
- margin: 0 0 16px;
237
- line-height: 1.5;
238
- }
239
-
240
- /* 交易 Hash */
241
- .taskon-claim-dialog-tx {
242
- display: flex;
243
- align-items: center;
244
- gap: 8px;
245
- padding: 8px 16px;
246
- background: var(--taskon-bg-secondary, #f5f5f5);
247
- border-radius: 8px;
248
- margin-bottom: 20px;
249
- font-size: 14px;
250
- }
251
-
252
- .taskon-claim-dialog-tx__label {
253
- color: var(--taskon-text-secondary, #666);
254
- }
255
-
256
- .taskon-claim-dialog-tx__hash {
257
- color: var(--taskon-text-color, #1a1a1a);
258
- font-family: monospace;
259
- }
260
-
261
- /* 操作按钮 */
262
- .taskon-claim-dialog-actions {
263
- display: flex;
264
- gap: 12px;
265
- width: 100%;
266
- justify-content: center;
267
- }
268
-
269
- .taskon-claim-dialog-btn {
270
- padding: 10px 24px;
271
- border-radius: 8px;
272
- font-size: 14px;
273
- font-weight: 500;
274
- cursor: pointer;
275
- transition: all 0.2s ease;
276
- border: none;
277
- }
278
-
279
- .taskon-claim-dialog-btn--primary {
280
- background: var(--taskon-primary-color, #6366f1);
281
- color: white;
282
- }
283
-
284
- .taskon-claim-dialog-btn--primary:hover {
285
- background: var(--taskon-primary-hover, #4f46e5);
286
- }
287
-
288
- .taskon-claim-dialog-btn--secondary {
289
- background: transparent;
290
- color: var(--taskon-primary-color, #6366f1);
291
- border: 1px solid var(--taskon-primary-color, #6366f1);
292
- }
293
-
294
- .taskon-claim-dialog-btn--secondary:hover {
295
- background: var(--taskon-primary-color, #6366f1);
296
- color: white;
297
- }