niuma-ui 2.0.2 → 2.0.3
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/CHANGELOG.md +23 -0
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/badge/src/RsBadge.css +61 -8
- package/dist/components/badge/src/RsBadge.d.ts +19 -3
- package/dist/components/badge/src/RsBadge.impl.js +46 -3
- package/dist/components/badge/src/RsBadge.js +1 -1
- package/dist/components/badge/src/badge-utils.d.ts +11 -0
- package/dist/components/badge/src/badge-utils.js +32 -0
- package/dist/components/button/src/RsButton.css +87 -71
- package/dist/components/button/src/RsButton.d.ts +7 -3
- package/dist/components/button/src/RsButton.impl.js +43 -31
- package/dist/components/button/src/RsButton.js +1 -1
- package/dist/components/button/src/button-utils.d.ts +17 -0
- package/dist/components/button/src/button-utils.js +14 -1
- package/dist/components/cascader/src/RsCascader.d.ts +1 -1
- package/dist/components/divider/index.d.ts +1 -0
- package/dist/components/divider/src/RsDivider.css +37 -22
- package/dist/components/divider/src/RsDivider.d.ts +4 -2
- package/dist/components/divider/src/RsDivider.impl.js +26 -12
- package/dist/components/divider/src/RsDivider.js +1 -1
- package/dist/components/divider/src/divider-utils.d.ts +4 -0
- package/dist/components/dynamic-tags/src/RsDynamicTags.css +23 -23
- package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +1 -1
- package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
- package/dist/components/icon/src/RsIcon.css +9 -4
- package/dist/components/icon/src/RsIcon.d.ts +4 -3
- package/dist/components/icon/src/RsIcon.impl.js +9 -32
- package/dist/components/icon/src/RsIcon.js +1 -1
- package/dist/components/icon/src/icon-utils.d.ts +17 -0
- package/dist/components/icon/src/icon-utils.js +39 -0
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/link/src/RsLink.css +58 -17
- package/dist/components/link/src/RsLink.d.ts +12 -4
- package/dist/components/link/src/RsLink.impl.js +26 -25
- package/dist/components/link/src/RsLink.js +2 -1
- package/dist/components/link/src/link-utils.d.ts +9 -0
- package/dist/components/link/src/link-utils.js +15 -0
- package/dist/components/loading/src/RsLoading.d.ts +2 -2
- package/dist/components/tag/index.d.ts +1 -1
- package/dist/components/tag/src/RsTag.css +42 -38
- package/dist/components/tag/src/RsTag.d.ts +3 -2
- package/dist/components/tag/src/RsTag.impl.js +18 -9
- package/dist/components/tag/src/RsTag.js +1 -1
- package/dist/components/tag/src/tag-utils.d.ts +8 -0
- package/dist/components/terminal/src/RsTerminal.d.ts +1 -1
- package/dist/index.d.ts +3 -0
- package/package.json +9 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-btn[data-v-
|
|
2
|
+
.rs-btn[data-v-423f0a90] {
|
|
3
3
|
position: relative;
|
|
4
4
|
display: inline-flex;
|
|
5
5
|
align-items: center;
|
|
@@ -23,124 +23,127 @@
|
|
|
23
23
|
padding var(--rs-transition-normal),
|
|
24
24
|
gap var(--rs-transition-normal);
|
|
25
25
|
}
|
|
26
|
-
.rs-btn--ssm[data-v-
|
|
26
|
+
.rs-btn--ssm[data-v-423f0a90] {
|
|
27
27
|
min-height: var(--rs-control-height-ssm);
|
|
28
28
|
padding: 0 var(--rs-space-xs);
|
|
29
29
|
font-size: var(--rs-font-size-xs);
|
|
30
30
|
gap: var(--rs-space-xs);
|
|
31
31
|
}
|
|
32
|
-
.rs-btn--sm[data-v-
|
|
32
|
+
.rs-btn--sm[data-v-423f0a90] {
|
|
33
33
|
min-height: var(--rs-control-height-sm);
|
|
34
34
|
padding: 0 var(--rs-space-sm);
|
|
35
35
|
font-size: var(--rs-font-size-xs);
|
|
36
36
|
gap: var(--rs-space-xs);
|
|
37
37
|
}
|
|
38
|
-
.rs-btn--lg[data-v-
|
|
38
|
+
.rs-btn--lg[data-v-423f0a90] {
|
|
39
39
|
min-height: var(--rs-control-height-lg);
|
|
40
40
|
padding: 0 var(--rs-space-xl);
|
|
41
41
|
font-size: var(--rs-font-size-base);
|
|
42
42
|
}
|
|
43
|
-
.rs-btn[data-v-
|
|
43
|
+
.rs-btn[data-v-423f0a90]:disabled {
|
|
44
44
|
opacity: 0.38;
|
|
45
45
|
cursor: not-allowed;
|
|
46
46
|
}
|
|
47
|
-
.rs-btn--loading[data-v-
|
|
47
|
+
.rs-btn--loading[data-v-423f0a90] {
|
|
48
48
|
pointer-events: none;
|
|
49
49
|
cursor: wait;
|
|
50
50
|
transition: none;
|
|
51
51
|
}
|
|
52
52
|
/* loading 时不使用 disabled,避免部分浏览器暂停子元素 CSS 动画 */
|
|
53
|
-
.rs-btn--loading[data-v-
|
|
53
|
+
.rs-btn--loading[data-v-423f0a90]:disabled {
|
|
54
54
|
opacity: 1;
|
|
55
55
|
cursor: wait;
|
|
56
56
|
}
|
|
57
|
-
.rs-btn--loading.rs-btn--default[data-v-
|
|
57
|
+
.rs-btn--loading.rs-btn--default[data-v-423f0a90] {
|
|
58
58
|
color: var(--rs-text);
|
|
59
59
|
border-color: var(--rs-border);
|
|
60
60
|
background: var(--rs-surface);
|
|
61
61
|
}
|
|
62
|
-
.rs-btn--loading.rs-btn--default[data-v-
|
|
62
|
+
.rs-btn--loading.rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral) {
|
|
63
63
|
color: var(--rs-btn-tone-on-container);
|
|
64
64
|
border-color: color-mix(in srgb, var(--rs-btn-tone) 42%, var(--rs-border));
|
|
65
65
|
background: var(--rs-btn-tone-container);
|
|
66
66
|
}
|
|
67
|
-
.rs-btn--loading.rs-btn--ghost[data-v-
|
|
68
|
-
.rs-btn--loading.rs-btn--text[data-v-
|
|
67
|
+
.rs-btn--loading.rs-btn--ghost[data-v-423f0a90],
|
|
68
|
+
.rs-btn--loading.rs-btn--text[data-v-423f0a90] {
|
|
69
69
|
color: var(--rs-btn-tone, var(--rs-text));
|
|
70
70
|
background: var(--rs-surface-hover);
|
|
71
71
|
}
|
|
72
|
-
.rs-btn[data-v-
|
|
72
|
+
.rs-btn[data-v-423f0a90]:focus-visible {
|
|
73
73
|
outline: none;
|
|
74
74
|
box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
|
|
75
75
|
}
|
|
76
|
-
.rs-btn--icon-only[data-v-
|
|
76
|
+
.rs-btn--icon-only[data-v-423f0a90] {
|
|
77
77
|
padding: 0;
|
|
78
78
|
min-width: var(--rs-control-height-md);
|
|
79
79
|
}
|
|
80
|
-
.rs-btn--icon-only.rs-btn--ssm[data-v-
|
|
80
|
+
.rs-btn--icon-only.rs-btn--ssm[data-v-423f0a90] {
|
|
81
81
|
min-width: var(--rs-control-height-ssm);
|
|
82
82
|
}
|
|
83
|
-
.rs-btn--icon-only.rs-btn--sm[data-v-
|
|
83
|
+
.rs-btn--icon-only.rs-btn--sm[data-v-423f0a90] {
|
|
84
84
|
min-width: var(--rs-control-height-sm);
|
|
85
85
|
}
|
|
86
|
-
.rs-btn--icon-only.rs-btn--lg[data-v-
|
|
86
|
+
.rs-btn--icon-only.rs-btn--lg[data-v-423f0a90] {
|
|
87
87
|
min-width: var(--rs-control-height-lg);
|
|
88
88
|
}
|
|
89
|
-
.rs-btn--primary[data-v-
|
|
89
|
+
.rs-btn--primary[data-v-423f0a90] {
|
|
90
90
|
background: var(--rs-primary);
|
|
91
91
|
color: var(--rs-primary-foreground);
|
|
92
92
|
box-shadow: var(--rs-shadow-sm);
|
|
93
93
|
}
|
|
94
|
-
.rs-btn--primary[data-v-
|
|
94
|
+
.rs-btn--primary[data-v-423f0a90]:hover:not(:disabled) {
|
|
95
95
|
background: var(--rs-primary-hover);
|
|
96
96
|
box-shadow: var(--rs-shadow);
|
|
97
97
|
}
|
|
98
|
-
.rs-btn--primary[data-v-
|
|
98
|
+
.rs-btn--primary[data-v-423f0a90]:active:not(:disabled) {
|
|
99
99
|
box-shadow: none;
|
|
100
100
|
}
|
|
101
|
-
.rs-btn--default[data-v-
|
|
101
|
+
.rs-btn--default[data-v-423f0a90] {
|
|
102
102
|
border: 1px solid var(--rs-btn-outline-border, var(--rs-border));
|
|
103
103
|
background: var(--rs-btn-secondary-bg, var(--rs-surface-hover));
|
|
104
104
|
color: var(--rs-text);
|
|
105
105
|
box-shadow: none;
|
|
106
106
|
}
|
|
107
|
-
.rs-btn--default[data-v-
|
|
107
|
+
.rs-btn--default[data-v-423f0a90]:hover:not(:disabled) {
|
|
108
108
|
color: var(--rs-primary);
|
|
109
109
|
border-color: var(--rs-primary);
|
|
110
110
|
background: var(--rs-btn-secondary-bg-hover, var(--rs-primary-container));
|
|
111
111
|
}
|
|
112
|
-
.rs-btn--default[data-v-
|
|
112
|
+
.rs-btn--default[data-v-423f0a90]:active:not(:disabled) {
|
|
113
113
|
color: var(--rs-primary-hover);
|
|
114
114
|
border-color: var(--rs-primary-hover);
|
|
115
115
|
background: var(--rs-btn-secondary-bg-active, var(--rs-primary-container));
|
|
116
116
|
}
|
|
117
|
-
.rs-btn--ghost[data-v-
|
|
117
|
+
.rs-btn--ghost[data-v-423f0a90] {
|
|
118
118
|
background: transparent;
|
|
119
119
|
border: 1px solid var(--rs-btn-outline-border, var(--rs-border));
|
|
120
120
|
color: var(--rs-btn-tone, var(--rs-text));
|
|
121
121
|
}
|
|
122
|
-
.rs-btn--ghost[data-v-
|
|
123
|
-
background:
|
|
122
|
+
.rs-btn--ghost[data-v-423f0a90]:hover:not(:disabled) {
|
|
123
|
+
background: var(--rs-surface-hover);
|
|
124
124
|
border-color: var(--rs-btn-outline-border, var(--rs-border));
|
|
125
125
|
color: var(--rs-btn-tone-hover, var(--rs-btn-tone, var(--rs-text)));
|
|
126
126
|
}
|
|
127
|
-
.rs-btn--
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
.rs-btn--ghost[data-v-423f0a90]:active:not(:disabled) {
|
|
128
|
+
background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 12%, var(--rs-surface-hover));
|
|
129
|
+
}
|
|
130
|
+
.rs-btn--borderless[data-v-423f0a90],
|
|
131
|
+
.rs-btn--borderless[data-v-423f0a90]:hover:not(:disabled),
|
|
132
|
+
.rs-btn--borderless[data-v-423f0a90]:active:not(:disabled) {
|
|
130
133
|
border-color: transparent;
|
|
131
134
|
}
|
|
132
|
-
.rs-btn--danger[data-v-
|
|
135
|
+
.rs-btn--danger[data-v-423f0a90] {
|
|
133
136
|
background: var(--rs-danger-container);
|
|
134
137
|
border-color: color-mix(in srgb, var(--rs-danger) 30%, transparent);
|
|
135
138
|
color: var(--rs-on-danger-container);
|
|
136
139
|
}
|
|
137
|
-
.rs-btn--danger[data-v-
|
|
140
|
+
.rs-btn--danger[data-v-423f0a90]:hover:not(:disabled) {
|
|
138
141
|
border-color: var(--rs-danger);
|
|
139
142
|
background: color-mix(in srgb, var(--rs-danger) 20%, var(--rs-danger-container));
|
|
140
143
|
}
|
|
141
144
|
|
|
142
145
|
/* 行内链接:可下划线;色调由 tone 控制(默认 primary) */
|
|
143
|
-
.rs-btn--link[data-v-
|
|
146
|
+
.rs-btn--link[data-v-423f0a90] {
|
|
144
147
|
min-height: auto;
|
|
145
148
|
padding: 0;
|
|
146
149
|
border-color: transparent;
|
|
@@ -150,7 +153,7 @@
|
|
|
150
153
|
box-shadow: none;
|
|
151
154
|
font-weight: var(--rs-font-weight-medium);
|
|
152
155
|
}
|
|
153
|
-
.rs-btn--link[data-v-
|
|
156
|
+
.rs-btn--link[data-v-423f0a90]:hover:not(:disabled) {
|
|
154
157
|
color: var(--rs-btn-tone-hover, var(--rs-primary-hover));
|
|
155
158
|
text-decoration: underline;
|
|
156
159
|
}
|
|
@@ -159,7 +162,7 @@
|
|
|
159
162
|
* text:工具栏 / 表格操作 quaternary
|
|
160
163
|
* 无底无边,靠 tone 着色;hover 使用同色浅底
|
|
161
164
|
*/
|
|
162
|
-
.rs-btn--text[data-v-
|
|
165
|
+
.rs-btn--text[data-v-423f0a90] {
|
|
163
166
|
min-height: var(--rs-control-height-sm);
|
|
164
167
|
padding: 0 var(--rs-space-sm);
|
|
165
168
|
border-color: transparent;
|
|
@@ -168,103 +171,105 @@
|
|
|
168
171
|
font-weight: var(--rs-font-weight-regular);
|
|
169
172
|
color: var(--rs-btn-tone, var(--rs-text));
|
|
170
173
|
}
|
|
171
|
-
.rs-btn--text.rs-btn--ssm[data-v-
|
|
174
|
+
.rs-btn--text.rs-btn--ssm[data-v-423f0a90] {
|
|
172
175
|
min-height: var(--rs-control-height-ssm);
|
|
173
176
|
}
|
|
174
|
-
.rs-btn--text.rs-btn--md[data-v-
|
|
177
|
+
.rs-btn--text.rs-btn--md[data-v-423f0a90] {
|
|
175
178
|
min-height: var(--rs-control-height-md);
|
|
176
179
|
}
|
|
177
|
-
.rs-btn--text.rs-btn--lg[data-v-
|
|
180
|
+
.rs-btn--text.rs-btn--lg[data-v-423f0a90] {
|
|
178
181
|
min-height: var(--rs-control-height-lg);
|
|
179
182
|
}
|
|
180
|
-
.rs-btn--text[data-v-
|
|
183
|
+
.rs-btn--text[data-v-423f0a90]:hover:not(:disabled) {
|
|
181
184
|
background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 8%, transparent);
|
|
182
185
|
border-color: transparent;
|
|
183
186
|
color: var(--rs-btn-tone-hover, var(--rs-btn-tone, var(--rs-text)));
|
|
184
187
|
}
|
|
185
|
-
.rs-btn--text[data-v-
|
|
188
|
+
.rs-btn--text[data-v-423f0a90]:active:not(:disabled) {
|
|
186
189
|
background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 12%, transparent);
|
|
187
190
|
}
|
|
188
191
|
|
|
189
192
|
/* tone:色相 token,供所有变体消费(形态 × 色相) */
|
|
190
|
-
.rs-btn--tone-neutral[data-v-
|
|
193
|
+
.rs-btn--tone-neutral[data-v-423f0a90] {
|
|
191
194
|
--rs-btn-tone: var(--rs-text);
|
|
192
195
|
--rs-btn-tone-hover: var(--rs-text);
|
|
193
196
|
--rs-btn-tone-fg: var(--rs-text);
|
|
194
197
|
--rs-btn-tone-container: var(--rs-btn-secondary-bg, var(--rs-surface-hover));
|
|
195
198
|
--rs-btn-tone-on-container: var(--rs-text);
|
|
196
199
|
}
|
|
197
|
-
.rs-btn--tone-primary[data-v-
|
|
200
|
+
.rs-btn--tone-primary[data-v-423f0a90] {
|
|
198
201
|
--rs-btn-tone: var(--rs-primary);
|
|
199
202
|
--rs-btn-tone-hover: var(--rs-primary-hover);
|
|
200
203
|
--rs-btn-tone-fg: var(--rs-primary-foreground);
|
|
201
204
|
--rs-btn-tone-container: var(--rs-primary-container);
|
|
202
205
|
--rs-btn-tone-on-container: var(--rs-on-primary-container);
|
|
203
206
|
}
|
|
204
|
-
.rs-btn--tone-danger[data-v-
|
|
207
|
+
.rs-btn--tone-danger[data-v-423f0a90] {
|
|
205
208
|
--rs-btn-tone: var(--rs-danger);
|
|
206
209
|
--rs-btn-tone-hover: var(--rs-danger);
|
|
207
|
-
--rs-btn-tone-fg:
|
|
210
|
+
--rs-btn-tone-fg: var(--rs-text-inverse);
|
|
208
211
|
--rs-btn-tone-container: var(--rs-danger-container);
|
|
209
212
|
--rs-btn-tone-on-container: var(--rs-on-danger-container);
|
|
210
213
|
}
|
|
211
|
-
.rs-btn--tone-success[data-v-
|
|
214
|
+
.rs-btn--tone-success[data-v-423f0a90] {
|
|
212
215
|
--rs-btn-tone: var(--rs-success, #18a058);
|
|
213
216
|
--rs-btn-tone-hover: var(--rs-success, #18a058);
|
|
214
|
-
--rs-btn-tone-fg:
|
|
217
|
+
--rs-btn-tone-fg: var(--rs-text-inverse);
|
|
215
218
|
--rs-btn-tone-container: var(--rs-success-container, color-mix(in srgb, var(--rs-success, #18a058) 14%, var(--rs-surface)));
|
|
216
219
|
--rs-btn-tone-on-container: var(--rs-on-success-container, var(--rs-success, #18a058));
|
|
217
220
|
}
|
|
218
|
-
.rs-btn--tone-warning[data-v-
|
|
221
|
+
.rs-btn--tone-warning[data-v-423f0a90] {
|
|
219
222
|
--rs-btn-tone: var(--rs-warning, #f0a020);
|
|
220
223
|
--rs-btn-tone-hover: var(--rs-warning, #f0a020);
|
|
221
|
-
--rs-btn-tone-fg:
|
|
224
|
+
--rs-btn-tone-fg: var(--rs-text-inverse);
|
|
222
225
|
--rs-btn-tone-container: var(--rs-warning-container, color-mix(in srgb, var(--rs-warning, #f0a020) 14%, var(--rs-surface)));
|
|
223
226
|
--rs-btn-tone-on-container: var(--rs-on-warning-container, var(--rs-warning, #f0a020));
|
|
224
227
|
}
|
|
225
|
-
.rs-btn--tone-info[data-v-
|
|
228
|
+
.rs-btn--tone-info[data-v-423f0a90] {
|
|
226
229
|
--rs-btn-tone: var(--rs-info, #2080f0);
|
|
227
230
|
--rs-btn-tone-hover: var(--rs-info, #2080f0);
|
|
228
|
-
--rs-btn-tone-fg:
|
|
231
|
+
--rs-btn-tone-fg: var(--rs-text-inverse);
|
|
229
232
|
--rs-btn-tone-container: var(--rs-info-container, color-mix(in srgb, var(--rs-info, #2080f0) 14%, var(--rs-surface)));
|
|
230
233
|
--rs-btn-tone-on-container: var(--rs-on-info-container, var(--rs-info, #2080f0));
|
|
231
234
|
}
|
|
232
235
|
|
|
233
236
|
/* default + 语义色:轮廓 + 浅底(Ant outlined / Element plain) */
|
|
234
|
-
.rs-btn--default[data-v-
|
|
237
|
+
.rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral) {
|
|
235
238
|
color: var(--rs-btn-tone-on-container);
|
|
236
239
|
border-color: color-mix(in srgb, var(--rs-btn-tone) 42%, var(--rs-border));
|
|
237
240
|
background: var(--rs-btn-tone-container);
|
|
238
241
|
}
|
|
239
|
-
.rs-btn--default[data-v-
|
|
242
|
+
.rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral):hover:not(:disabled) {
|
|
240
243
|
color: var(--rs-btn-tone);
|
|
241
244
|
border-color: var(--rs-btn-tone);
|
|
242
245
|
background: color-mix(in srgb, var(--rs-btn-tone) 14%, var(--rs-btn-tone-container));
|
|
243
246
|
}
|
|
244
|
-
.rs-btn--default[data-v-
|
|
247
|
+
.rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral):active:not(:disabled) {
|
|
245
248
|
color: var(--rs-btn-tone-hover);
|
|
246
249
|
border-color: var(--rs-btn-tone-hover);
|
|
247
250
|
background: color-mix(in srgb, var(--rs-btn-tone) 20%, var(--rs-btn-tone-container));
|
|
248
251
|
}
|
|
249
252
|
|
|
250
253
|
/* primary + 非主色:实心语义色 */
|
|
251
|
-
.rs-btn--primary[data-v-
|
|
254
|
+
.rs-btn--primary[data-v-423f0a90]:not(.rs-btn--tone-primary) {
|
|
252
255
|
background: var(--rs-btn-tone);
|
|
253
256
|
color: var(--rs-btn-tone-fg);
|
|
254
257
|
border-color: transparent;
|
|
255
258
|
}
|
|
256
|
-
.rs-btn--primary[data-v-
|
|
259
|
+
.rs-btn--primary[data-v-423f0a90]:not(.rs-btn--tone-primary):hover:not(:disabled) {
|
|
257
260
|
background: var(--rs-btn-tone-hover);
|
|
258
261
|
}
|
|
259
262
|
|
|
260
263
|
/* ghost + 语义色:描边跟色相 */
|
|
261
|
-
.rs-btn--ghost[data-v-
|
|
264
|
+
.rs-btn--ghost[data-v-423f0a90]:not(.rs-btn--tone-neutral) {
|
|
262
265
|
border-color: color-mix(in srgb, var(--rs-btn-tone) 45%, var(--rs-border));
|
|
263
266
|
}
|
|
264
|
-
.rs-btn--ghost[data-v-
|
|
267
|
+
.rs-btn--ghost[data-v-423f0a90]:not(.rs-btn--tone-neutral):hover:not(:disabled) {
|
|
265
268
|
border-color: var(--rs-btn-tone);
|
|
269
|
+
background: color-mix(in srgb, var(--rs-btn-tone) 14%, var(--rs-surface));
|
|
270
|
+
color: var(--rs-btn-tone);
|
|
266
271
|
}
|
|
267
|
-
.rs-btn__spinner[data-v-
|
|
272
|
+
.rs-btn__spinner[data-v-423f0a90] {
|
|
268
273
|
display: inline-flex;
|
|
269
274
|
align-items: center;
|
|
270
275
|
justify-content: center;
|
|
@@ -273,7 +278,7 @@
|
|
|
273
278
|
flex-shrink: 0;
|
|
274
279
|
pointer-events: none;
|
|
275
280
|
}
|
|
276
|
-
.rs-btn__spinner-ring[data-v-
|
|
281
|
+
.rs-btn__spinner-ring[data-v-423f0a90] {
|
|
277
282
|
display: block;
|
|
278
283
|
width: 100%;
|
|
279
284
|
height: 100%;
|
|
@@ -281,27 +286,27 @@
|
|
|
281
286
|
border-top-color: var(--rs-primary);
|
|
282
287
|
border-radius: var(--rs-radius-full);
|
|
283
288
|
transform-origin: center center;
|
|
284
|
-
animation: rs-spin-
|
|
289
|
+
animation: rs-spin-423f0a90 0.75s linear infinite;
|
|
285
290
|
}
|
|
286
|
-
.rs-btn--default .rs-btn__spinner-ring[data-v-
|
|
287
|
-
.rs-btn--ghost .rs-btn__spinner-ring[data-v-
|
|
291
|
+
.rs-btn--default .rs-btn__spinner-ring[data-v-423f0a90],
|
|
292
|
+
.rs-btn--ghost .rs-btn__spinner-ring[data-v-423f0a90] {
|
|
288
293
|
border-color: color-mix(in srgb, var(--rs-btn-tone, var(--rs-primary)) 28%, transparent);
|
|
289
294
|
border-top-color: var(--rs-btn-tone, var(--rs-primary));
|
|
290
295
|
}
|
|
291
|
-
.rs-btn--text .rs-btn__spinner-ring[data-v-
|
|
292
|
-
.rs-btn--link .rs-btn__spinner-ring[data-v-
|
|
296
|
+
.rs-btn--text .rs-btn__spinner-ring[data-v-423f0a90],
|
|
297
|
+
.rs-btn--link .rs-btn__spinner-ring[data-v-423f0a90] {
|
|
293
298
|
border-color: color-mix(in srgb, var(--rs-btn-tone, var(--rs-primary)) 28%, transparent);
|
|
294
299
|
border-top-color: var(--rs-btn-tone, var(--rs-primary));
|
|
295
300
|
}
|
|
296
|
-
.rs-btn--primary .rs-btn__spinner-ring[data-v-
|
|
301
|
+
.rs-btn--primary .rs-btn__spinner-ring[data-v-423f0a90] {
|
|
297
302
|
border-color: color-mix(in srgb, currentcolor 35%, transparent);
|
|
298
303
|
border-top-color: currentcolor;
|
|
299
304
|
}
|
|
300
|
-
.rs-btn--danger .rs-btn__spinner-ring[data-v-
|
|
305
|
+
.rs-btn--danger .rs-btn__spinner-ring[data-v-423f0a90] {
|
|
301
306
|
border-color: color-mix(in srgb, var(--rs-danger) 28%, transparent);
|
|
302
307
|
border-top-color: var(--rs-danger);
|
|
303
308
|
}
|
|
304
|
-
.rs-btn__icon[data-v-
|
|
309
|
+
.rs-btn__icon[data-v-423f0a90] {
|
|
305
310
|
display: inline-flex;
|
|
306
311
|
flex-shrink: 0;
|
|
307
312
|
align-items: center;
|
|
@@ -310,7 +315,7 @@
|
|
|
310
315
|
color: inherit;
|
|
311
316
|
}
|
|
312
317
|
/* 插槽内自定义图标+文案时也能水平对齐 */
|
|
313
|
-
.rs-btn__label[data-v-
|
|
318
|
+
.rs-btn__label[data-v-423f0a90] {
|
|
314
319
|
display: inline-flex;
|
|
315
320
|
align-items: center;
|
|
316
321
|
gap: inherit;
|
|
@@ -318,7 +323,7 @@
|
|
|
318
323
|
line-height: 1;
|
|
319
324
|
white-space: nowrap;
|
|
320
325
|
}
|
|
321
|
-
.rs-btn__label--reveal[data-v-
|
|
326
|
+
.rs-btn__label--reveal[data-v-423f0a90] {
|
|
322
327
|
display: inline-block;
|
|
323
328
|
max-width: 0;
|
|
324
329
|
opacity: 0;
|
|
@@ -329,13 +334,14 @@
|
|
|
329
334
|
max-width 0.2s ease,
|
|
330
335
|
opacity 0.15s ease;
|
|
331
336
|
}
|
|
332
|
-
.rs-btn--reveal-label:hover:not(:disabled) .rs-btn__label--reveal[data-v-
|
|
333
|
-
.rs-btn--reveal-label:focus-visible .rs-btn__label--reveal[data-v-
|
|
337
|
+
.rs-btn--reveal-label:hover:not(:disabled) .rs-btn__label--reveal[data-v-423f0a90],
|
|
338
|
+
.rs-btn--reveal-label:focus-visible .rs-btn__label--reveal[data-v-423f0a90] {
|
|
334
339
|
max-width: 12rem;
|
|
335
340
|
opacity: 1;
|
|
336
341
|
}
|
|
337
|
-
.rs-btn__tooltip[data-v-
|
|
342
|
+
.rs-btn__tooltip[data-v-423f0a90] {
|
|
338
343
|
position: fixed;
|
|
344
|
+
/* Portal 挂 body,必须高于 Dialog/Drawer(100/101),与 RsTooltip 同一档 */
|
|
339
345
|
z-index: calc(var(--rs-z-modal) + 2);
|
|
340
346
|
padding: 0.25rem 0.5rem;
|
|
341
347
|
border-radius: var(--rs-radius-sm);
|
|
@@ -349,8 +355,18 @@
|
|
|
349
355
|
box-shadow: var(--rs-shadow-sm);
|
|
350
356
|
pointer-events: none;
|
|
351
357
|
}
|
|
352
|
-
@keyframes rs-spin-
|
|
358
|
+
@keyframes rs-spin-423f0a90 {
|
|
353
359
|
to {
|
|
354
360
|
transform: rotate(360deg);
|
|
355
361
|
}
|
|
356
362
|
}
|
|
363
|
+
@media (prefers-reduced-motion: reduce) {
|
|
364
|
+
.rs-btn[data-v-423f0a90],
|
|
365
|
+
.rs-btn__label--reveal[data-v-423f0a90] {
|
|
366
|
+
transition: none;
|
|
367
|
+
}
|
|
368
|
+
.rs-btn__spinner-ring[data-v-423f0a90] {
|
|
369
|
+
animation: none;
|
|
370
|
+
border-top-color: transparent;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
@@ -15,7 +15,10 @@ type __VLS_Props = {
|
|
|
15
15
|
type?: 'button' | 'submit' | 'reset';
|
|
16
16
|
disabled?: boolean;
|
|
17
17
|
loading?: boolean;
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* 是否显示外边框。未传时 text / link 无边,其余有边。
|
|
20
|
+
* 默认必须是 undefined:Vue 会把未传的 Boolean 收成 false。
|
|
21
|
+
*/
|
|
19
22
|
bordered?: boolean;
|
|
20
23
|
/** 前缀图标(Lucide kebab-case 名称) */
|
|
21
24
|
icon?: string;
|
|
@@ -23,8 +26,8 @@ type __VLS_Props = {
|
|
|
23
26
|
/** 仅显示图标,文字通过 tooltip / slot 悬浮展示 */
|
|
24
27
|
iconOnly?: boolean;
|
|
25
28
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
29
|
+
* 悬浮提示。Teleport 到 `document.body`,避免被 overflow 裁切。
|
|
30
|
+
* 仅图标时作可视提示;可访问名称走 `aria-label`,避免读两遍。
|
|
28
31
|
*/
|
|
29
32
|
tooltip?: string;
|
|
30
33
|
/** icon-only 时无障碍标签(与 tooltip 二选一,避免与外部 RsTooltip 重复) */
|
|
@@ -43,6 +46,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
43
46
|
variant: RsButtonVariant;
|
|
44
47
|
disabled: boolean;
|
|
45
48
|
loading: boolean;
|
|
49
|
+
bordered: boolean;
|
|
46
50
|
iconOnly: boolean;
|
|
47
51
|
revealLabel: boolean;
|
|
48
52
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
|
|
2
2
|
import RsIcon_default from "../../icon/src/RsIcon.js";
|
|
3
|
-
import { resolveRsButtonTone, resolveRsButtonVariant } from "./button-utils.js";
|
|
3
|
+
import { placeRsButtonTip, resolveRsButtonTone, resolveRsButtonVariant } from "./button-utils.js";
|
|
4
4
|
import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
|
|
5
5
|
import { rsRadiusCss, useResolvedRsRadius } from "../../_shared/src/resolve-radius.js";
|
|
6
6
|
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onUnmounted, openBlock, ref, renderSlot, toDisplayString, unref, useId, useSlots, watch } from "vue";
|
|
@@ -21,6 +21,7 @@ var _hoisted_2 = {
|
|
|
21
21
|
var _hoisted_3 = ["id"];
|
|
22
22
|
var TOOLTIP_DELAY_MS = 300;
|
|
23
23
|
var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
24
|
+
name: "RsButton",
|
|
24
25
|
__name: "RsButton",
|
|
25
26
|
props: {
|
|
26
27
|
variant: { default: "primary" },
|
|
@@ -36,7 +37,10 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
36
37
|
type: Boolean,
|
|
37
38
|
default: false
|
|
38
39
|
},
|
|
39
|
-
bordered: {
|
|
40
|
+
bordered: {
|
|
41
|
+
type: Boolean,
|
|
42
|
+
default: void 0
|
|
43
|
+
},
|
|
40
44
|
icon: {},
|
|
41
45
|
iconSize: {},
|
|
42
46
|
iconOnly: {
|
|
@@ -82,8 +86,9 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
82
86
|
if (!props.iconOnly) return void 0;
|
|
83
87
|
return props.ariaLabel || props.tooltip || void 0;
|
|
84
88
|
});
|
|
85
|
-
/**
|
|
89
|
+
/** 避免路过按钮时闪一下 */
|
|
86
90
|
const tipId = useId();
|
|
91
|
+
const tipRef = ref(null);
|
|
87
92
|
const tipOpen = ref(false);
|
|
88
93
|
const tipStyle = ref({});
|
|
89
94
|
let openTimer = null;
|
|
@@ -97,24 +102,24 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
97
102
|
}
|
|
98
103
|
function updateTipPosition() {
|
|
99
104
|
const el = btnRef.value;
|
|
100
|
-
if (!el) return;
|
|
105
|
+
if (!el || typeof window === "undefined") return;
|
|
101
106
|
const rect = el.getBoundingClientRect();
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
const tip = tipRef.value?.getBoundingClientRect();
|
|
108
|
+
const box = placeRsButtonTip({
|
|
109
|
+
top: rect.top,
|
|
110
|
+
left: rect.left,
|
|
111
|
+
width: rect.width,
|
|
112
|
+
height: rect.height
|
|
113
|
+
}, {
|
|
114
|
+
width: tip?.width ?? 96,
|
|
115
|
+
height: tip?.height ?? 28
|
|
116
|
+
}, {
|
|
117
|
+
width: window.innerWidth,
|
|
118
|
+
height: window.innerHeight
|
|
119
|
+
});
|
|
114
120
|
tipStyle.value = {
|
|
115
|
-
top: `${
|
|
116
|
-
left: `${
|
|
117
|
-
transform
|
|
121
|
+
top: `${box.top}px`,
|
|
122
|
+
left: `${box.left}px`
|
|
118
123
|
};
|
|
119
124
|
}
|
|
120
125
|
function scheduleTipPosition() {
|
|
@@ -148,11 +153,16 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
148
153
|
}
|
|
149
154
|
function openTipNow() {
|
|
150
155
|
if (!showFloatingText.value || props.disabled || props.loading) return;
|
|
151
|
-
updateTipPosition();
|
|
152
156
|
if (!tipOpen.value) {
|
|
153
157
|
tipOpen.value = true;
|
|
154
158
|
bindTipFollow(true);
|
|
155
159
|
}
|
|
160
|
+
nextTick(() => updateTipPosition());
|
|
161
|
+
}
|
|
162
|
+
function onActivate(event) {
|
|
163
|
+
if (!props.loading) return;
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
event.stopImmediatePropagation();
|
|
156
166
|
}
|
|
157
167
|
function scheduleOpenTip() {
|
|
158
168
|
if (!showFloatingText.value || props.disabled || props.loading) return;
|
|
@@ -181,8 +191,9 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
181
191
|
if (!el) return;
|
|
182
192
|
if (loading) {
|
|
183
193
|
await nextTick();
|
|
184
|
-
|
|
185
|
-
|
|
194
|
+
if (!btnRef.value) return;
|
|
195
|
+
const w = btnRef.value.offsetWidth;
|
|
196
|
+
if (w > 0) btnRef.value.style.minWidth = `${w}px`;
|
|
186
197
|
} else el.style.minWidth = "";
|
|
187
198
|
});
|
|
188
199
|
onUnmounted(() => {
|
|
@@ -200,6 +211,7 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
200
211
|
"aria-disabled": __props.disabled || __props.loading || void 0,
|
|
201
212
|
"aria-label": ariaLabel.value,
|
|
202
213
|
"aria-describedby": tipDescribedBy.value,
|
|
214
|
+
onClickCapture: onActivate,
|
|
203
215
|
onMouseenter: scheduleOpenTip,
|
|
204
216
|
onMouseleave: closeTip,
|
|
205
217
|
onFocus,
|
|
@@ -210,24 +222,24 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
210
222
|
key: 1,
|
|
211
223
|
class: "rs-btn__icon",
|
|
212
224
|
name: __props.icon,
|
|
213
|
-
size: resolvedIconSize.value
|
|
214
|
-
|
|
215
|
-
}, null, 8, [
|
|
216
|
-
"name",
|
|
217
|
-
"size",
|
|
218
|
-
"label"
|
|
219
|
-
])) : createCommentVNode("", true),
|
|
225
|
+
size: resolvedIconSize.value
|
|
226
|
+
}, null, 8, ["name", "size"])) : createCommentVNode("", true),
|
|
220
227
|
hasLabel.value && !__props.iconOnly ? (openBlock(), createElementBlock("span", {
|
|
221
228
|
key: 2,
|
|
222
229
|
class: normalizeClass(["rs-btn__label", { "rs-btn__label--reveal": __props.revealLabel && __props.icon }])
|
|
223
230
|
}, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 2)) : createCommentVNode("", true),
|
|
224
|
-
|
|
231
|
+
showFloatingText.value ? (openBlock(), createBlock(Teleport, {
|
|
232
|
+
key: 3,
|
|
233
|
+
to: "body"
|
|
234
|
+
}, [tipOpen.value ? (openBlock(), createElementBlock("span", {
|
|
225
235
|
key: 0,
|
|
236
|
+
ref_key: "tipRef",
|
|
237
|
+
ref: tipRef,
|
|
226
238
|
id: unref(tipId),
|
|
227
239
|
class: "rs-btn__tooltip",
|
|
228
240
|
style: normalizeStyle(tipStyle.value),
|
|
229
241
|
role: "tooltip"
|
|
230
|
-
}, [__props.tooltip ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(__props.tooltip), 1)], 64)) : __props.iconOnly ? renderSlot(_ctx.$slots, "default", {}, void 0, true, 1) : createCommentVNode("", true)], 12, _hoisted_3)) : createCommentVNode("", true)]))
|
|
242
|
+
}, [__props.tooltip ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(__props.tooltip), 1)], 64)) : __props.iconOnly ? renderSlot(_ctx.$slots, "default", {}, void 0, true, 1) : createCommentVNode("", true)], 12, _hoisted_3)) : createCommentVNode("", true)])) : createCommentVNode("", true)
|
|
231
243
|
], 46, _hoisted_1);
|
|
232
244
|
};
|
|
233
245
|
}
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsButton_vue_vue_type_script_setup_true_lang_default from "./RsButton.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/button/src/RsButton.vue
|
|
6
|
-
var RsButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsButton_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsButton_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-423f0a90"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsButton_default as default };
|
|
@@ -24,3 +24,20 @@ export declare function resolveRsButtonTone(variant?: RsButtonVariant, tone?: Rs
|
|
|
24
24
|
export declare function isRsButtonFilledVariant(variant: RsButtonVariant): boolean;
|
|
25
25
|
/** 所有变体都可叠加 tone(形态 × 色相)。 */
|
|
26
26
|
export declare function supportsRsButtonTone(_variant?: RsButtonVariant): boolean;
|
|
27
|
+
export interface RsButtonTipBox {
|
|
28
|
+
top: number;
|
|
29
|
+
left: number;
|
|
30
|
+
}
|
|
31
|
+
/** 把内置 tip 贴到按钮:优先下方,贴边时夹进视口。供测试与 SSR 无 window 调用。 */
|
|
32
|
+
export declare function placeRsButtonTip(anchor: {
|
|
33
|
+
top: number;
|
|
34
|
+
left: number;
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
}, popup: {
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
}, viewport: {
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
}, gap?: number): RsButtonTipBox;
|
|
@@ -24,5 +24,18 @@ function isRsButtonFilledVariant(variant) {
|
|
|
24
24
|
function supportsRsButtonTone(_variant) {
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
|
+
/** 把内置 tip 贴到按钮:优先下方,贴边时夹进视口。供测试与 SSR 无 window 调用。 */
|
|
28
|
+
function placeRsButtonTip(anchor, popup, viewport, gap = 6) {
|
|
29
|
+
const below = anchor.top + anchor.height + gap;
|
|
30
|
+
const above = anchor.top - popup.height - gap;
|
|
31
|
+
const top = below + popup.height <= viewport.height || above < gap ? below : Math.max(gap, above);
|
|
32
|
+
const width = Math.min(popup.width, Math.max(0, viewport.width - gap * 2));
|
|
33
|
+
const preferred = anchor.left + anchor.width / 2 - width / 2;
|
|
34
|
+
const maxLeft = Math.max(gap, viewport.width - width - gap);
|
|
35
|
+
return {
|
|
36
|
+
top: Math.round(top),
|
|
37
|
+
left: Math.round(Math.min(Math.max(gap, preferred), maxLeft))
|
|
38
|
+
};
|
|
39
|
+
}
|
|
27
40
|
//#endregion
|
|
28
|
-
export { isRsButtonFilledVariant, resolveRsButtonTone, resolveRsButtonVariant, supportsRsButtonTone };
|
|
41
|
+
export { isRsButtonFilledVariant, placeRsButtonTip, resolveRsButtonTone, resolveRsButtonVariant, supportsRsButtonTone };
|
|
@@ -25,10 +25,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
25
25
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
26
26
|
}>, {
|
|
27
27
|
disabled: boolean;
|
|
28
|
-
separator: string;
|
|
29
28
|
allowClear: boolean;
|
|
30
29
|
changeOnSelect: boolean;
|
|
31
30
|
expandTrigger: RsCascaderExpandTrigger;
|
|
31
|
+
separator: string;
|
|
32
32
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
33
33
|
declare const _default: typeof __VLS_export;
|
|
34
34
|
export default _default;
|