@taskon/widget-react 0.0.1-beta.1
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.
- package/README.md +1065 -0
- package/dist/CommunityTaskList.css +4893 -0
- package/dist/EligibilityInfo.css +2337 -0
- package/dist/LeaderboardWidget.css +815 -0
- package/dist/PageBuilder.css +54 -0
- package/dist/Quest.css +4214 -0
- package/dist/TaskOnProvider.css +163 -0
- package/dist/TipPopover.css +210 -0
- package/dist/UserCenterWidget.css +297 -0
- package/dist/UserCenterWidget2.css +3519 -0
- package/dist/WidgetShell.css +182 -0
- package/dist/chunks/CommunityTaskList-DoPGZsw1.js +6813 -0
- package/dist/chunks/EligibilityInfo-C7GZ2G5u.js +22228 -0
- package/dist/chunks/LeaderboardWidget-CmYfDeHV.js +1068 -0
- package/dist/chunks/PageBuilder-Tmhf2GTS.js +150 -0
- package/dist/chunks/Quest-DKFZ-pPU.js +8839 -0
- package/dist/chunks/TaskOnProvider-BD6Vp2x8.js +1435 -0
- package/dist/chunks/ThemeProvider-wnSXrNQb.js +1118 -0
- package/dist/chunks/TipPopover-BrW8jo71.js +2926 -0
- package/dist/chunks/UserCenterWidget-BE329iS7.js +3546 -0
- package/dist/chunks/UserCenterWidget-BVw_IEEd.js +3989 -0
- package/dist/chunks/WidgetShell-D_5OjvNZ.js +1517 -0
- package/dist/chunks/common-ja-DWhTaFHb.js +23 -0
- package/dist/chunks/common-ko-80ezXsMG.js +23 -0
- package/dist/chunks/dynamic-import-helper-DxEFwm31.js +537 -0
- package/dist/chunks/index-CwMvO_wZ.js +777 -0
- package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +119 -0
- package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +119 -0
- package/dist/chunks/useToast-B-wyO5zL.js +93 -0
- package/dist/chunks/useWidgetLocale-JDelxtt8.js +74 -0
- package/dist/chunks/usercenter-ja-uu-XfVF9.js +332 -0
- package/dist/chunks/usercenter-ko-DYgUOVzd.js +332 -0
- package/dist/community-task.d.ts +451 -0
- package/dist/community-task.js +9 -0
- package/dist/core.d.ts +803 -0
- package/dist/core.js +22 -0
- package/dist/dynamic-import-helper.css +389 -0
- package/dist/index.d.ts +1660 -0
- package/dist/index.js +41 -0
- package/dist/leaderboard.d.ts +547 -0
- package/dist/leaderboard.js +18 -0
- package/dist/page-builder.d.ts +20 -0
- package/dist/page-builder.js +4 -0
- package/dist/quest.d.ts +400 -0
- package/dist/quest.js +8 -0
- package/dist/user-center.d.ts +1780 -0
- package/dist/user-center.js +713 -0
- package/package.json +105 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toast 组件样式
|
|
3
|
+
* 遵循 TaskOn Widget 命名规范
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* ==================== Viewport 容器 ==================== */
|
|
7
|
+
.taskon-toast-viewport {
|
|
8
|
+
position: fixed;
|
|
9
|
+
top: 20px;
|
|
10
|
+
right: 20px;
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: 10px;
|
|
14
|
+
width: 320px;
|
|
15
|
+
max-width: calc(100vw - 40px);
|
|
16
|
+
margin: 0;
|
|
17
|
+
padding: 0;
|
|
18
|
+
list-style: none;
|
|
19
|
+
z-index: 999999;
|
|
20
|
+
outline: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* ==================== Toast 基础样式 ==================== */
|
|
24
|
+
.taskon-toast {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
gap: 12px;
|
|
28
|
+
padding: 14px 16px;
|
|
29
|
+
border-radius: 8px;
|
|
30
|
+
background: #1a1a1a;
|
|
31
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
32
|
+
color: #fff;
|
|
33
|
+
font-size: 14px;
|
|
34
|
+
line-height: 1.4;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* 动画 */
|
|
38
|
+
.taskon-toast[data-state="open"] {
|
|
39
|
+
animation: taskon-toast-slide-in 200ms ease-out;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.taskon-toast[data-state="closed"] {
|
|
43
|
+
animation: taskon-toast-hide 100ms ease-in;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.taskon-toast[data-swipe="move"] {
|
|
47
|
+
transform: translateX(var(--radix-toast-swipe-move-x));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.taskon-toast[data-swipe="cancel"] {
|
|
51
|
+
transform: translateX(0);
|
|
52
|
+
transition: transform 200ms ease-out;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.taskon-toast[data-swipe="end"] {
|
|
56
|
+
animation: taskon-toast-swipe-out 100ms ease-out;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@keyframes taskon-toast-slide-in {
|
|
60
|
+
from {
|
|
61
|
+
transform: translateX(calc(100% + 20px));
|
|
62
|
+
opacity: 0;
|
|
63
|
+
}
|
|
64
|
+
to {
|
|
65
|
+
transform: translateX(0);
|
|
66
|
+
opacity: 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@keyframes taskon-toast-hide {
|
|
71
|
+
from {
|
|
72
|
+
opacity: 1;
|
|
73
|
+
}
|
|
74
|
+
to {
|
|
75
|
+
opacity: 0;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@keyframes taskon-toast-swipe-out {
|
|
80
|
+
from {
|
|
81
|
+
transform: translateX(var(--radix-toast-swipe-end-x));
|
|
82
|
+
}
|
|
83
|
+
to {
|
|
84
|
+
transform: translateX(calc(100% + 20px));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* ==================== Toast 图标 ==================== */
|
|
89
|
+
.taskon-toast-icon {
|
|
90
|
+
flex-shrink: 0;
|
|
91
|
+
width: 20px;
|
|
92
|
+
height: 20px;
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
justify-content: center;
|
|
96
|
+
border-radius: 50%;
|
|
97
|
+
font-size: 12px;
|
|
98
|
+
font-weight: bold;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* ==================== Toast 消息 ==================== */
|
|
102
|
+
.taskon-toast-message {
|
|
103
|
+
flex: 1;
|
|
104
|
+
margin: 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* ==================== Toast 类型变体 ==================== */
|
|
108
|
+
|
|
109
|
+
/* Success */
|
|
110
|
+
.taskon-toast--success {
|
|
111
|
+
border-left: 3px solid #00ffa3;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.taskon-toast--success .taskon-toast-icon {
|
|
115
|
+
background: rgba(0, 255, 163, 0.2);
|
|
116
|
+
color: #00ffa3;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Error */
|
|
120
|
+
.taskon-toast--error {
|
|
121
|
+
border-left: 3px solid #eb5757;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.taskon-toast--error .taskon-toast-icon {
|
|
125
|
+
background: rgba(235, 87, 87, 0.2);
|
|
126
|
+
color: #eb5757;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Warning */
|
|
130
|
+
.taskon-toast--warning {
|
|
131
|
+
border-left: 3px solid #f2c94c;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.taskon-toast--warning .taskon-toast-icon {
|
|
135
|
+
background: rgba(242, 201, 76, 0.2);
|
|
136
|
+
color: #f2c94c;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Info */
|
|
140
|
+
.taskon-toast--info {
|
|
141
|
+
border-left: 3px solid #2f80ed;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.taskon-toast--info .taskon-toast-icon {
|
|
145
|
+
background: rgba(47, 128, 237, 0.2);
|
|
146
|
+
color: #2f80ed;
|
|
147
|
+
}
|
|
148
|
+
|
|
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
|
+
}
|
|
158
|
+
|
|
159
|
+
.taskon-toast {
|
|
160
|
+
padding: 12px 14px;
|
|
161
|
+
font-size: 13px;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input 通用组件样式
|
|
3
|
+
* @description 复刻 Vue 版本 BaseInputPro.vue 样式
|
|
4
|
+
* 使用 taskon-input 命名空间
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* ==================== 输入框 ==================== */
|
|
8
|
+
.taskon-input {
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: 40px;
|
|
11
|
+
padding: 0 12px;
|
|
12
|
+
border-radius: 6px;
|
|
13
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
14
|
+
background: rgba(255, 255, 255, 0.04);
|
|
15
|
+
color: var(--taskon-color-text, #fff);
|
|
16
|
+
font-size: 14px;
|
|
17
|
+
line-height: 40px;
|
|
18
|
+
letter-spacing: 0.04em;
|
|
19
|
+
outline: none;
|
|
20
|
+
transition: border-color 0.2s;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.taskon-input:focus {
|
|
24
|
+
border-color: var(--taskon-color-primary, #cbff01);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.taskon-input:disabled {
|
|
28
|
+
opacity: 0.6;
|
|
29
|
+
cursor: not-allowed;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.taskon-input--error {
|
|
33
|
+
border-color: #eb5757;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.taskon-input::placeholder {
|
|
37
|
+
color: var(--taskon-color-text-tertiary, #666);
|
|
38
|
+
font-weight: 400;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* ==================== 包装器(用于 rightSlot 和 error) ==================== */
|
|
42
|
+
.taskon-input-wrapper {
|
|
43
|
+
width: 100%;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* ==================== 容器(包含输入框和右侧插槽) ==================== */
|
|
47
|
+
.taskon-input-container {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: 8px;
|
|
51
|
+
padding-right: 12px;
|
|
52
|
+
border-radius: 6px;
|
|
53
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
54
|
+
background: rgba(255, 255, 255, 0.04);
|
|
55
|
+
transition: border-color 0.2s;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.taskon-input-container:focus-within {
|
|
59
|
+
border-color: var(--taskon-color-primary, #cbff01);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.taskon-input-container--error {
|
|
63
|
+
border-color: #eb5757;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* 容器内的输入框样式重置 */
|
|
67
|
+
.taskon-input--in-container {
|
|
68
|
+
flex: 1;
|
|
69
|
+
border: none;
|
|
70
|
+
background: transparent;
|
|
71
|
+
border-radius: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.taskon-input--in-container:focus {
|
|
75
|
+
border-color: transparent;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* ==================== 右侧插槽 ==================== */
|
|
79
|
+
.taskon-input-slot {
|
|
80
|
+
flex-shrink: 0;
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* MAX 按钮样式(通用样式) */
|
|
86
|
+
.taskon-input-slot button {
|
|
87
|
+
padding: 4px 8px;
|
|
88
|
+
font-size: 12px;
|
|
89
|
+
font-weight: 600;
|
|
90
|
+
color: var(--taskon-color-primary, #cbff01);
|
|
91
|
+
background: transparent;
|
|
92
|
+
border: 1px solid var(--taskon-color-primary, #cbff01);
|
|
93
|
+
border-radius: 4px;
|
|
94
|
+
cursor: pointer;
|
|
95
|
+
transition: all 0.2s;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.taskon-input-slot button:hover:not(:disabled) {
|
|
99
|
+
background: rgba(203, 255, 1, 0.1);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.taskon-input-slot button:disabled {
|
|
103
|
+
opacity: 0.5;
|
|
104
|
+
cursor: not-allowed;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* ==================== 错误信息 ==================== */
|
|
108
|
+
.taskon-input-error {
|
|
109
|
+
margin: 4px 0 0 0;
|
|
110
|
+
font-size: 12px;
|
|
111
|
+
color: #eb5757;
|
|
112
|
+
line-height: 1.4;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* ==================== 响应式 ==================== */
|
|
116
|
+
@media (max-width: 750px) {
|
|
117
|
+
.taskon-input {
|
|
118
|
+
height: 10.667vw;
|
|
119
|
+
padding: 0 3.2vw;
|
|
120
|
+
font-size: 3.733vw;
|
|
121
|
+
line-height: 10.667vw;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.taskon-input-container {
|
|
125
|
+
padding-right: 3.2vw;
|
|
126
|
+
gap: 2.133vw;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.taskon-input-slot button {
|
|
130
|
+
padding: 1.067vw 2.133vw;
|
|
131
|
+
font-size: 3.2vw;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.taskon-input-error {
|
|
135
|
+
margin-top: 1.067vw;
|
|
136
|
+
font-size: 3.2vw;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* TipPopover 组件样式
|
|
141
|
+
* 设计原则:组件内部不包含 margin,需要间距由外部控制
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
.taskon-tip-popover-trigger {
|
|
145
|
+
display: inline-flex;
|
|
146
|
+
align-items: center;
|
|
147
|
+
justify-content: center;
|
|
148
|
+
padding: 0;
|
|
149
|
+
border: none;
|
|
150
|
+
background: transparent;
|
|
151
|
+
cursor: pointer;
|
|
152
|
+
color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.4));
|
|
153
|
+
outline: none;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.taskon-tip-popover-trigger:hover,
|
|
157
|
+
.taskon-tip-popover-trigger:focus {
|
|
158
|
+
color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.4));
|
|
159
|
+
background: transparent;
|
|
160
|
+
outline: none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* Custom children trigger - reset button styles */
|
|
164
|
+
.taskon-tip-popover-trigger--custom {
|
|
165
|
+
cursor: pointer;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.taskon-tip-popover-content {
|
|
169
|
+
max-width: 266px;
|
|
170
|
+
padding: 12px 16px;
|
|
171
|
+
border-radius: 8px;
|
|
172
|
+
border: none;
|
|
173
|
+
outline: none;
|
|
174
|
+
background: var(--taskon-bg-elevated, #2a2a2a);
|
|
175
|
+
color: var(--taskon-text-primary, #fff);
|
|
176
|
+
font-size: 13px;
|
|
177
|
+
line-height: 1.5;
|
|
178
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
|
|
179
|
+
/* z-index 需要大于 Dialog (9999) 才能在弹窗中正常显示 */
|
|
180
|
+
z-index: 10000;
|
|
181
|
+
animation: taskon-tip-popover-fade-in 0.15s ease;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.taskon-tip-popover-content:focus {
|
|
185
|
+
outline: none;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.taskon-tip-popover-arrow {
|
|
189
|
+
fill: var(--taskon-bg-elevated, #2a2a2a);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@keyframes taskon-tip-popover-fade-in {
|
|
193
|
+
from {
|
|
194
|
+
opacity: 0;
|
|
195
|
+
transform: scale(0.96);
|
|
196
|
+
}
|
|
197
|
+
to {
|
|
198
|
+
opacity: 1;
|
|
199
|
+
transform: scale(1);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* Mobile styles */
|
|
204
|
+
@media (max-width: 750px) {
|
|
205
|
+
.taskon-tip-popover-content {
|
|
206
|
+
max-width: 60vw;
|
|
207
|
+
padding: 2.5vw 3.5vw;
|
|
208
|
+
font-size: 3vw;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,297 @@
|
|
|
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
|
+
/**
|
|
71
|
+
* AssetImage 组件样式
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
.taskon-asset-image {
|
|
75
|
+
position: relative;
|
|
76
|
+
flex-shrink: 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.taskon-asset-image__main {
|
|
80
|
+
display: block;
|
|
81
|
+
width: 100%;
|
|
82
|
+
height: 100%;
|
|
83
|
+
border-radius: 4px;
|
|
84
|
+
object-fit: cover;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.taskon-asset-image__placeholder {
|
|
88
|
+
width: 100%;
|
|
89
|
+
height: 100%;
|
|
90
|
+
border-radius: 4px;
|
|
91
|
+
background-color: var(--taskon-bg-secondary, #f0f0f0);
|
|
92
|
+
}
|
|
93
|
+
|
|
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);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* EmailBindDialog 样式
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
.taskon-email-bind-dialog {
|
|
109
|
+
padding: 8px 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.taskon-email-bind-dialog__title {
|
|
113
|
+
font-size: 20px;
|
|
114
|
+
font-weight: 600;
|
|
115
|
+
line-height: 28px;
|
|
116
|
+
color: var(--taskon-color-text, #fff);
|
|
117
|
+
margin: 0 0 24px 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.taskon-email-bind-dialog__field {
|
|
121
|
+
margin-bottom: 20px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.taskon-email-bind-dialog__label {
|
|
125
|
+
display: block;
|
|
126
|
+
font-size: 14px;
|
|
127
|
+
font-weight: 500;
|
|
128
|
+
line-height: 20px;
|
|
129
|
+
color: var(--taskon-color-text, #fff);
|
|
130
|
+
margin-bottom: 8px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.taskon-email-bind-dialog__actions {
|
|
134
|
+
margin-top: 24px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* 响应式 - 移动端 */
|
|
138
|
+
@media (max-width: 750px) {
|
|
139
|
+
.taskon-email-bind-dialog__title {
|
|
140
|
+
font-size: 18px;
|
|
141
|
+
line-height: 24px;
|
|
142
|
+
margin-bottom: 16px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.taskon-email-bind-dialog__field {
|
|
146
|
+
margin-bottom: 16px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.taskon-email-bind-dialog__label {
|
|
150
|
+
font-size: 13px;
|
|
151
|
+
margin-bottom: 6px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.taskon-email-bind-dialog__actions {
|
|
155
|
+
margin-top: 20px;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
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
|
+
}
|