@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,182 +1,469 @@
1
1
  /**
2
- * Dialog 组件样式
3
- * 基于 Radix UI Dialog 封装
4
- * 使用 taskon-dialog-* 命名空间
2
+ * Pagination 通用分页组件样式
3
+ * @description 使用 taskon-pagination 命名空间
4
+ *
5
+ * 设计参考 Figma: node-id=4000-1995
6
+ * - 按钮: 30x30px 圆形
7
+ * - 页码: 16px Regular
8
+ * - 当前页: 高强调文字
9
+ * - 分隔符+总页数: 次级文字
5
10
  */
6
11
 
7
- /* ==================== 遮罩层 ==================== */
8
- .taskon-dialog-overlay {
9
- position: fixed;
10
- inset: 0;
11
- z-index: 9998;
12
- /* 复刻 Vue --bg-page-mask-20: rgb(66 66 66 / 50%) */
13
- background-color: var(--taskon-color-overlay, rgba(66, 66, 66, 0.5));
14
- backdrop-filter: blur(24px);
12
+ /*
13
+ * Responsive base styles
14
+ *
15
+ * Keep mobile breakpoints and fallback patterns centralized here.
16
+ * Components should reuse these mixins instead of duplicating query logic.
17
+ */
18
+
19
+ /*
20
+ * Desktop-up mixin:
21
+ * 1) Enable desktop enhancement in wider containers
22
+ * 2) Keep viewport media query as fallback
23
+ */
15
24
 
16
- /* 动画 */
17
- animation: taskon-dialog-overlay-fade-in 150ms ease-out;
25
+ /* ==================== 容器 ==================== */
26
+
27
+ .taskon-pagination {
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ width: 100%;
32
+ gap: var(--taskon-spacing-sm);
33
+ padding: 12px 0;
18
34
  }
19
35
 
20
- .taskon-dialog-overlay[data-state="closed"] {
21
- animation: taskon-dialog-overlay-fade-out 150ms ease-in;
36
+ /* ==================== 范围信息 ==================== */
37
+
38
+ .taskon-pagination-range {
39
+ font-size: 14px;
40
+ color: var(--taskon-color-text-secondary);
22
41
  }
23
42
 
24
- @keyframes taskon-dialog-overlay-fade-in {
25
- from {
26
- opacity: 0;
27
- }
28
- to {
29
- opacity: 1;
30
- }
43
+ /* ==================== 控制区 ==================== */
44
+
45
+ .taskon-pagination-controls {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 16px;
31
49
  }
32
50
 
33
- @keyframes taskon-dialog-overlay-fade-out {
34
- from {
35
- opacity: 1;
36
- }
37
- to {
38
- opacity: 0;
39
- }
51
+ /* ==================== 页码信息 - 基于 Figma 设计 ==================== */
52
+
53
+ .taskon-pagination-info {
54
+ display: flex;
55
+ align-items: center;
56
+ font-size: 16px;
57
+ font-weight: 400;
58
+ white-space: nowrap;
40
59
  }
41
60
 
42
- /* ==================== 弹窗内容 ==================== */
43
- .taskon-dialog-content {
44
- position: fixed;
45
- top: 50%;
46
- left: 50%;
47
- transform: translate(-50%, -50%);
48
- z-index: 9999;
61
+ /* 当前页码 */
49
62
 
50
- /* 尺寸 */
51
- width: 90vw;
52
- max-width: 500px;
53
- max-height: 85vh;
63
+ .taskon-pagination-info-current {
64
+ color: var(--taskon-color-text);
65
+ }
54
66
 
55
- /* 样式 - 复刻 Vue --bg-popup-basic-100: #0d0d0d */
56
- background-color: var(--taskon-color-bg-popup, #0d0d0d);
57
- color: var(--taskon-color-text, #ffffff);
58
- border-radius: var(--taskon-border-radius-lg, 16px);
59
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
67
+ /* 分隔符 */
60
68
 
61
- /* 布局 */
62
- display: flex;
63
- flex-direction: column;
64
- overflow: hidden;
69
+ .taskon-pagination-info-separator {
70
+ color: var(--taskon-color-text-disabled);
71
+ }
72
+
73
+ /* 总页数 */
74
+
75
+ .taskon-pagination-info-total {
76
+ color: var(--taskon-color-text-disabled);
77
+ }
78
+
79
+ /* ==================== 图标 ==================== */
80
+
81
+ .taskon-pagination-icon {
82
+ width: 16px;
83
+ height: 16px;
84
+ }
85
+
86
+ /* ==================== 按钮样式 - 圆形按钮 ==================== */
65
87
 
66
- /* 移除默认的 focus outline */
67
- outline: none;
88
+ .taskon-pagination-btn {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ width: 30px;
93
+ height: 30px;
94
+ min-width: 30px !important;
95
+ padding: 0 !important;
96
+ border-radius: 50% !important;
97
+ background-color: transparent !important;
98
+ border: 1px solid var(--taskon-color-border-secondary) !important;
99
+ color: var(--taskon-color-text) !important;
100
+ transition: all 0.2s ease;
101
+ }
68
102
 
69
- /* 动画 */
70
- animation: taskon-dialog-content-fade-in 200ms ease-out;
103
+ .taskon-pagination-btn:hover:not(:disabled) {
104
+ background-color: var(--taskon-color-bg-surface-subtle) !important;
105
+ border-color: var(--taskon-color-border) !important;
71
106
  }
72
107
 
73
- .taskon-dialog-content[data-state="closed"] {
74
- animation: taskon-dialog-content-fade-out 150ms ease-in;
108
+ .taskon-pagination-btn:disabled {
109
+ opacity: 0.4;
110
+ cursor: not-allowed;
75
111
  }
76
112
 
77
- @keyframes taskon-dialog-content-fade-in {
78
- from {
79
- opacity: 0;
80
- transform: translate(-50%, -48%) scale(0.96);
113
+ /* ==================== 尺寸变体 ==================== */
114
+
115
+ .taskon-pagination--small .taskon-pagination-range {
116
+ font-size: 12px;
117
+ }
118
+
119
+ .taskon-pagination--small .taskon-pagination-info {
120
+ font-size: 14px;
121
+ }
122
+
123
+ .taskon-pagination--small .taskon-pagination-icon {
124
+ width: 14px;
125
+ height: 14px;
126
+ }
127
+
128
+ .taskon-pagination--small .taskon-pagination-btn {
129
+ width: 24px;
130
+ height: 24px;
131
+ min-width: 24px !important;
132
+ }
133
+
134
+ /* ==================== Desktop 增强 ==================== */
135
+
136
+ @supports (container-type: inline-size) {
137
+ @container (min-width: 751px) {
138
+ .taskon-pagination {
139
+ gap: var(--taskon-spacing-md);
81
140
  }
82
- to {
83
- opacity: 1;
84
- transform: translate(-50%, -50%) scale(1);
141
+ }
85
142
  }
86
- }
87
143
 
88
- @keyframes taskon-dialog-content-fade-out {
89
- from {
90
- opacity: 1;
91
- transform: translate(-50%, -50%) scale(1);
144
+ @supports not (container-type: inline-size) {
145
+ @media (min-width: 751px) {
146
+ .taskon-pagination {
147
+ gap: var(--taskon-spacing-md);
92
148
  }
93
- to {
94
- opacity: 0;
95
- transform: translate(-50%, -48%) scale(0.96);
149
+ }
96
150
  }
151
+ /**
152
+ * Table 通用表格组件样式
153
+ *
154
+ * 采用 BEM 命名规范
155
+ * 前缀: taskon-table
156
+ *
157
+ * 设计参考 Figma: node-id=4000-1908
158
+ * - 表头: 半透明背景、圆角、暗色文字
159
+ * - 行: 边框分隔、悬停效果、交替背景
160
+ * - 单元格: 可配置宽度和对齐方式
161
+ */
162
+
163
+ /*
164
+ * Responsive base styles
165
+ *
166
+ * Keep mobile breakpoints and fallback patterns centralized here.
167
+ * Components should reuse these mixins instead of duplicating query logic.
168
+ */
169
+
170
+ /*
171
+ * Desktop-up mixin:
172
+ * 1) Enable desktop enhancement in wider containers
173
+ * 2) Keep viewport media query as fallback
174
+ */
175
+
176
+ /* ============================================================================
177
+ 容器
178
+ ============================================================================ */
179
+
180
+ .taskon-table-container {
181
+ width: 100%;
182
+ overflow-x: auto;
183
+ position: relative;
184
+ }
185
+
186
+ .taskon-table {
187
+ width: 100%;
188
+ border-collapse: separate;
189
+ border-spacing: 0;
97
190
  }
98
191
 
99
- /* ==================== 无障碍标题/描述(屏幕阅读器可见) ==================== */
100
- .taskon-dialog-title--sr-only,
101
- .taskon-dialog-description--sr-only {
102
- position: absolute;
103
- width: 1px;
104
- height: 1px;
105
- padding: 0;
106
- margin: -1px;
107
- overflow: hidden;
108
- clip: rect(0, 0, 0, 0);
192
+ /* ============================================================================
193
+ 表头 - 参考 Figma 设计:45px 高度,深色半透明背景,无圆角
194
+ ============================================================================ */
195
+
196
+ .taskon-table__head {
197
+ /* 不在 thead 上设置背景,由 th 元素控制 */
198
+ }
199
+
200
+ .taskon-table__head tr {
201
+ height: 45px;
202
+ }
203
+
204
+ /* 表头单元格 - 16px Regular,深色半透明背景 */
205
+
206
+ .taskon-table__header {
207
+ padding: var(--taskon-spacing-sm) 12px;
208
+ font-size: 16px;
209
+ font-weight: 400;
210
+ text-align: left;
211
+ line-height: 24px;
212
+ color: var(--taskon-color-text-disabled);
109
213
  white-space: nowrap;
110
- border: 0;
214
+ vertical-align: middle;
215
+ background-color: var(--taskon-color-bg-surface-subtle);
111
216
  }
112
217
 
113
- /* ==================== 头部操作区 ==================== */
114
- .taskon-dialog-header {
115
- position: absolute;
116
- top: 16px;
117
- right: 16px;
118
- z-index: 1;
218
+ /* 表头对齐方式 */
119
219
 
120
- display: flex;
121
- align-items: center;
122
- gap: 8px;
220
+ .taskon-table__header--left {
221
+ text-align: left;
123
222
  }
124
223
 
125
- .taskon-dialog-header-slot {
126
- display: flex;
127
- align-items: center;
224
+ .taskon-table__header--center {
225
+ text-align: center;
128
226
  }
129
227
 
130
- /* ==================== 关闭按钮 ==================== */
131
- .taskon-dialog-close {
132
- display: flex;
133
- align-items: center;
134
- justify-content: center;
228
+ .taskon-table__header--right {
229
+ text-align: right;
230
+ }
135
231
 
136
- width: 32px;
137
- height: 32px;
138
- padding: 0;
232
+ /* ============================================================================
233
+ 表体
234
+ ============================================================================ */
139
235
 
140
- background: rgba(255, 255, 255, 0.1);
141
- border: none;
142
- border-radius: var(--taskon-border-radius, 8px);
143
- cursor: pointer;
236
+ .taskon-table__body {
237
+ /* 默认样式 */
238
+ }
144
239
 
145
- color: var(--taskon-color-text-secondary, #888);
146
- transition: all 0.2s ease;
240
+ /* ============================================================================
241
+ 数据行 - 参考 Figma 设计:更大行高(76px),无边框
242
+ ============================================================================ */
243
+
244
+ .taskon-table__row {
245
+ transition: background-color 0.2s ease;
246
+ height: 76px;
147
247
  }
148
248
 
149
- .taskon-dialog-close:hover {
150
- background-color: rgba(255, 255, 255, 0.2);
151
- color: var(--taskon-color-text, #fff);
249
+ /* 行边框 - 默认不显示,使用 borderless 类控制 */
250
+
251
+ .taskon-table__row td {
252
+ border-top: none;
253
+ border-bottom: none;
152
254
  }
153
255
 
154
- .taskon-dialog-close:focus-visible {
155
- outline: 2px solid var(--taskon-color-primary, #3b82f6);
156
- outline-offset: 2px;
256
+ /* 需要边框时的样式 */
257
+
258
+ .taskon-table--bordered .taskon-table__row td {
259
+ border-top: 1px solid var(--taskon-color-border-secondary);
260
+ border-bottom: 1px solid var(--taskon-color-border-secondary);
261
+ }
262
+
263
+ /* 悬停效果 */
264
+
265
+ .taskon-table__row:hover {
266
+ background-color: var(--taskon-color-bg-surface-strong);
267
+ }
268
+
269
+ /* 交替行背景 (striped) */
270
+
271
+ .taskon-table--striped .taskon-table__row:nth-child(even) {
272
+ background-color: var(--taskon-color-bg-surface-subtle);
273
+ }
274
+
275
+ /* 高亮行 */
276
+
277
+ .taskon-table__row--highlighted {
278
+ background-color: var(--taskon-color-primary-bg);
279
+ }
280
+
281
+ .taskon-table__row--highlighted:hover {
282
+ background-color: var(--taskon-color-primary-bg);
283
+ }
284
+
285
+ /* 禁用行 */
286
+
287
+ .taskon-table__row--disabled {
288
+ opacity: 0.4;
289
+ }
290
+
291
+ /* 可点击行 */
292
+
293
+ .taskon-table__row--clickable {
294
+ cursor: pointer;
295
+ }
296
+
297
+ /* ============================================================================
298
+ 单元格 - 参考 Figma 设计:16px SemiBold,白色文字
299
+ ============================================================================ */
300
+
301
+ .taskon-table__cell {
302
+ padding: var(--taskon-spacing-sm) 12px;
303
+ font-size: 16px;
304
+ font-weight: 600;
305
+ line-height: 24px;
306
+ color: var(--taskon-color-text);
307
+ vertical-align: middle;
308
+ }
309
+
310
+ /* 单元格对齐方式 */
311
+
312
+ .taskon-table__cell--left {
313
+ text-align: left;
314
+ }
315
+
316
+ .taskon-table__cell--center {
317
+ text-align: center;
318
+ }
319
+
320
+ .taskon-table__cell--right {
321
+ text-align: right;
322
+ }
323
+
324
+ /* 单元格文本溢出 */
325
+
326
+ .taskon-table__cell--ellipsis {
327
+ text-overflow: ellipsis;
328
+ overflow: hidden;
329
+ white-space: nowrap;
330
+ }
331
+
332
+ /* ============================================================================
333
+ 空状态和加载状态
334
+ ============================================================================ */
335
+
336
+ .taskon-table__loading,
337
+ .taskon-table__empty {
338
+ padding: 40px 16px;
339
+ text-align: center;
340
+ color: var(--taskon-color-text-disabled);
341
+ }
342
+
343
+ .taskon-table__empty-content {
344
+ display: flex;
345
+ flex-direction: column;
346
+ align-items: center;
347
+ gap: 8px;
348
+ }
349
+
350
+ .taskon-table__empty-icon {
351
+ font-size: 48px;
352
+ opacity: 0.5;
353
+ }
354
+
355
+ .taskon-table__empty-title {
356
+ font-size: 16px;
357
+ font-weight: 600;
358
+ color: var(--taskon-color-text);
359
+ margin: 0;
360
+ }
361
+
362
+ .taskon-table__empty-desc {
363
+ font-size: 14px;
364
+ color: var(--taskon-color-text-disabled);
365
+ margin: 0;
366
+ }
367
+
368
+ /* 加载指示器 */
369
+
370
+ .taskon-table__loading-spinner {
371
+ display: inline-block;
372
+ width: 24px;
373
+ height: 24px;
374
+ border: 2px solid var(--taskon-color-text-disabled);
375
+ border-top-color: var(--taskon-color-primary);
376
+ border-radius: 50%;
377
+ animation: taskon-table-spin 0.8s linear infinite;
378
+ }
379
+
380
+ @keyframes taskon-table-spin {
381
+ from {
382
+ transform: rotate(0deg);
383
+ }
384
+ to {
385
+ transform: rotate(360deg);
386
+ }
387
+ }
388
+
389
+ /* Overlay loading - 覆盖在表格数据上方 */
390
+
391
+ .taskon-table__loading-overlay {
392
+ position: absolute;
393
+ top: 0;
394
+ left: 0;
395
+ right: 0;
396
+ bottom: 0;
397
+ display: flex;
398
+ align-items: center;
399
+ justify-content: center;
400
+ background-color: var(--taskon-color-bg-mask);
401
+ backdrop-filter: blur(2px);
402
+ z-index: 10;
403
+ border-radius: var(--taskon-border-radius-sm);
404
+ }
405
+
406
+ /* ============================================================================
407
+ 紧凑模式
408
+ ============================================================================ */
409
+
410
+ .taskon-table--compact .taskon-table__header {
411
+ padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
157
412
  }
158
413
 
159
- /* ==================== 主体内容 ==================== */
160
- .taskon-dialog-body {
161
- flex: 1;
162
- overflow-y: auto;
163
- padding: 24px;
414
+ .taskon-table--compact .taskon-table__cell {
415
+ padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
164
416
  }
165
417
 
166
- /* ==================== 响应式 ==================== */
167
- @media (max-width: 750px) {
168
- .taskon-dialog-content {
169
- width: 95vw;
170
- max-height: 90vh;
171
- border-radius: var(--taskon-border-radius, 12px);
418
+ /* ============================================================================
419
+ 无边框模式
420
+ ============================================================================ */
421
+
422
+ .taskon-table--borderless .taskon-table__row td {
423
+ border-top: none;
424
+ border-bottom: none;
425
+ }
426
+
427
+ /* ============================================================================
428
+ Desktop 增强
429
+ ============================================================================ */
430
+
431
+ @supports (container-type: inline-size) {
432
+ @container (min-width: 751px) {
433
+ .taskon-table__header {
434
+ padding: 10px 20px;
172
435
  }
173
436
 
174
- .taskon-dialog-body {
175
- padding: 20px;
437
+ .taskon-table__cell {
438
+ padding: var(--taskon-spacing-md) 20px;
176
439
  }
177
440
 
178
- .taskon-dialog-header {
179
- top: 12px;
180
- right: 12px;
441
+ .taskon-table--compact .taskon-table__header {
442
+ padding: var(--taskon-spacing-xs) 12px;
443
+ }
444
+
445
+ .taskon-table--compact .taskon-table__cell {
446
+ padding: 12px;
447
+ }
448
+ }
449
+ }
450
+
451
+ @supports not (container-type: inline-size) {
452
+ @media (min-width: 751px) {
453
+ .taskon-table__header {
454
+ padding: 10px 20px;
455
+ }
456
+
457
+ .taskon-table__cell {
458
+ padding: var(--taskon-spacing-md) 20px;
459
+ }
460
+
461
+ .taskon-table--compact .taskon-table__header {
462
+ padding: var(--taskon-spacing-xs) 12px;
463
+ }
464
+
465
+ .taskon-table--compact .taskon-table__cell {
466
+ padding: 12px;
467
+ }
468
+ }
181
469
  }
182
- }