@dsh-plugin/dsh-ui-components 0.0.1 → 0.1.0-dev.43616582648

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/LICENSE +21 -21
  2. package/NOTICE +21 -21
  3. package/README.md +136 -136
  4. package/README.zh_CN.md +136 -136
  5. package/docs/tokens.md +67 -67
  6. package/lib/basic/form.js +49 -49
  7. package/lib/basic/styles.js +391 -391
  8. package/lib/composites/styles.js +427 -427
  9. package/lib/data/styles.js +257 -257
  10. package/lib/display/styles.js +310 -310
  11. package/lib/feedback/styles.js +228 -228
  12. package/lib/foundation/bridge.js +203 -203
  13. package/lib/navigation/styles.js +417 -417
  14. package/package.json +104 -104
  15. package/scripts/check-size.mjs +69 -69
  16. package/scripts/dump-npm-latest.mjs +59 -59
  17. package/scripts/gen-host-tokens.mjs +61 -61
  18. package/scripts/gen-icons.mjs +188 -178
  19. package/scripts/verify-no-literal-colors.mjs +63 -63
  20. package/scripts/verify-tokens.mjs +135 -135
  21. package/src/basic/button.tsx +76 -76
  22. package/src/basic/form.tsx +187 -187
  23. package/src/basic/icon-button.tsx +66 -66
  24. package/src/basic/index.ts +38 -38
  25. package/src/basic/input.tsx +140 -140
  26. package/src/basic/select.tsx +120 -120
  27. package/src/basic/styles.ts +412 -412
  28. package/src/basic/toggle.tsx +116 -116
  29. package/src/composites/data-view.tsx +189 -189
  30. package/src/composites/index.ts +11 -11
  31. package/src/composites/indicator.tsx +90 -90
  32. package/src/composites/menu-select.tsx +230 -230
  33. package/src/composites/panel.tsx +72 -72
  34. package/src/composites/settings.tsx +80 -80
  35. package/src/composites/styles.ts +450 -450
  36. package/src/data/collection.tsx +71 -71
  37. package/src/data/index.ts +39 -39
  38. package/src/data/info.tsx +89 -89
  39. package/src/data/picker.tsx +113 -113
  40. package/src/data/styles.ts +278 -278
  41. package/src/display/container.tsx +67 -67
  42. package/src/display/feedback.tsx +92 -92
  43. package/src/display/index.ts +44 -44
  44. package/src/display/label.tsx +165 -165
  45. package/src/display/overlay.tsx +103 -103
  46. package/src/display/styles.ts +332 -332
  47. package/src/feedback/global.tsx +110 -110
  48. package/src/feedback/index.ts +19 -19
  49. package/src/feedback/inline.tsx +50 -50
  50. package/src/feedback/panel.tsx +93 -93
  51. package/src/feedback/styles.ts +250 -250
  52. package/src/foundation/bridge.ts +318 -318
  53. package/src/foundation/icons.tsx +315 -315
  54. package/src/foundation/index.ts +33 -33
  55. package/src/foundation/palette.ts +153 -153
  56. package/src/foundation/provider.tsx +62 -62
  57. package/src/foundation/style.ts +63 -63
  58. package/src/foundation/tokens.ts +62 -62
  59. package/src/index.ts +18 -18
  60. package/src/navigation/hierarchy.tsx +82 -82
  61. package/src/navigation/index.ts +21 -21
  62. package/src/navigation/indicator.tsx +125 -125
  63. package/src/navigation/menu.tsx +94 -94
  64. package/src/navigation/segmented.tsx +136 -136
  65. package/src/navigation/styles.ts +438 -438
@@ -8,423 +8,423 @@
8
8
  */
9
9
  import { injectUiStyle } from '../foundation/style.js';
10
10
  /** 导航组件样式表。 */
11
- export const NAVIGATION_CSS = `
12
- /* ── 菜单与下拉 ─────────────────────────────────────────────────── */
13
- .dsh-ui .arco-menu {
14
- background-color: transparent;
15
- border: 0;
16
- font-size: 14px;
17
- line-height: 22px;
18
- }
19
-
20
- .dsh-ui .arco-menu-item,
21
- .dsh-ui .arco-menu-pop-header {
22
- border-radius: var(--dsw-radius-sm, 8px);
23
- color: var(--dsw-alias-label-secondary);
24
- line-height: 32px;
25
- height: 32px;
26
- padding: 0 10px;
27
- margin: 2px 0;
28
- }
29
-
30
- @media (hover: hover) {
31
- .dsh-ui .arco-menu-item:hover,
32
- .dsh-ui .arco-menu-pop-header:hover {
33
- background-color: var(--dsw-alias-interactive-bg-hover);
34
- color: var(--dsw-alias-label-primary);
35
- }
36
- }
37
-
38
- .dsh-ui .arco-menu-selected,
39
- .dsh-ui .arco-menu-item.arco-menu-selected {
40
- background-color: var(--dsw-alias-button-ghost-active-fill);
41
- color: var(--dsw-alias-label-primary);
42
- font-weight: 500;
43
- }
44
-
45
- .dsh-ui .arco-menu-inline-header {
46
- color: var(--dsw-alias-label-tertiary);
47
- font-size: 12px;
48
- line-height: 18px;
49
- padding: 8px 10px 4px;
50
- height: auto;
51
- }
52
-
53
- .dsh-ui-overlay .arco-dropdown-menu,
54
- .dsh-ui .arco-dropdown-menu {
55
- border-radius: var(--dsw-radius-lg, 16px);
56
- border: 0;
57
- background: var(--dsw-specific-menu, var(--dsw-alias-bg-layer-2));
58
- backdrop-filter: var(--dsw-menu-backdrop-filter, none);
59
- box-shadow: var(--dsw-elevation-panel);
60
- padding: 4px;
61
- min-width: 160px;
62
- }
63
-
64
- .dsh-ui-overlay .arco-dropdown-menu-item,
65
- .dsh-ui .arco-dropdown-menu-item {
66
- border-radius: var(--dsw-radius-sm, 8px);
67
- font-size: 14px;
68
- line-height: 22px;
69
- height: 32px;
70
- color: var(--dsw-alias-label-primary);
71
- }
72
-
73
- @media (hover: hover) {
74
- .dsh-ui-overlay .arco-dropdown-menu-item:hover,
75
- .dsh-ui .arco-dropdown-menu-item:hover {
76
- background-color: var(--dsw-alias-interactive-bg-hover);
77
- }
78
- }
79
-
80
- .dsh-ui-overlay .arco-dropdown-menu-item-disabled,
81
- .dsh-ui .arco-dropdown-menu-item-disabled {
82
- color: var(--dsw-alias-label-caption);
83
- }
84
-
85
- /* ── 标签页 ─────────────────────────────────────────────────────── */
86
- .dsh-ui .arco-tabs-header-nav::before {
87
- background-color: var(--dsw-alias-border-l1);
88
- }
89
-
90
- .dsh-ui .arco-tabs-header-title {
91
- font-size: 14px;
92
- line-height: 22px;
93
- color: var(--dsw-alias-label-tertiary);
94
- font-weight: 400;
95
- }
96
-
97
- .dsh-ui .arco-tabs-header-title:hover {
98
- color: var(--dsw-alias-label-secondary);
99
- }
100
-
101
- .dsh-ui .arco-tabs-header-title-active,
102
- .dsh-ui .arco-tabs-header-title-active:hover {
103
- color: var(--dsw-alias-label-primary);
104
- font-weight: 500;
105
- }
106
-
107
- .dsh-ui .arco-tabs-header-ink {
108
- background-color: var(--dsw-alias-brand-primary);
109
- height: 2px;
110
- }
111
-
112
- .dsh-ui .arco-tabs-content {
113
- padding-top: 16px;
114
- }
115
-
116
- /* 卡片式标签改为胶囊分段 */
117
- .dsh-ui .dsh-tabs--segment .arco-tabs-header-nav {
118
- background-color: var(--dsw-alias-interactive-bg-hover-solid);
119
- border-radius: var(--dsw-radius-md, 12px);
120
- padding: 4px;
121
- display: inline-flex;
122
- }
123
-
124
- .dsh-ui .dsh-tabs--segment .arco-tabs-header-nav::before {
125
- display: none;
126
- }
127
-
128
- /* Arco 的行式标签给首个标题额外加了 16px 左外边距,分段外观下会变成大面积留白。 */
129
- .dsh-ui .dsh-tabs--segment .arco-tabs-header > .arco-tabs-header-title:first-of-type,
130
- .dsh-ui .dsh-tabs--segment .arco-tabs-header-scroll > .arco-tabs-header-title:first-of-type {
131
- margin-left: 0;
132
- }
133
-
134
- .dsh-ui .dsh-tabs--segment .arco-tabs-header-title {
135
- border-radius: var(--dsw-radius-sm, 8px);
136
- height: 28px;
137
- line-height: 20px;
138
- padding: 4px 16px;
139
- margin: 0;
140
- font-size: 13px;
141
- font-weight: 500;
142
- }
143
-
144
- .dsh-ui .dsh-tabs--segment .arco-tabs-header-title-active {
145
- background-color: var(--dsw-alias-bg-layer-1);
146
- box-shadow: var(--dsw-elevation-soft);
147
- }
148
-
149
- .dsh-ui .dsh-tabs--segment .arco-tabs-header-ink {
150
- display: none;
151
- }
152
-
153
- /* ── 面包屑 ─────────────────────────────────────────────────────── */
154
- .dsh-ui .arco-breadcrumb {
155
- font-size: 13px;
156
- line-height: 20px;
157
- color: var(--dsw-alias-label-tertiary);
158
- }
159
-
160
- .dsh-ui .arco-breadcrumb-item a,
161
- .dsh-ui .arco-breadcrumb-item-link {
162
- color: var(--dsw-alias-label-tertiary);
163
- font-weight: 400;
164
- }
165
-
166
- .dsh-ui .arco-breadcrumb-item a:hover,
167
- .dsh-ui .arco-breadcrumb-item-link:hover {
168
- color: var(--dsw-alias-label-primary);
169
- }
170
-
171
- .dsh-ui .arco-breadcrumb-item:last-child {
172
- color: var(--dsw-alias-label-primary);
173
- font-weight: 500;
174
- }
175
-
176
- /* ── 分页 ───────────────────────────────────────────────────────── */
177
- .dsh-ui .arco-pagination-item {
178
- border-radius: var(--dsw-radius-sm, 8px);
179
- border: 0;
180
- background-color: transparent;
181
- color: var(--dsw-alias-label-secondary);
182
- font-size: 13px;
183
- min-width: 28px;
184
- height: 28px;
185
- line-height: 28px;
186
- }
187
-
188
- @media (hover: hover) {
189
- .dsh-ui .arco-pagination-item:hover {
190
- background-color: var(--dsw-alias-interactive-bg-hover);
191
- color: var(--dsw-alias-label-primary);
192
- }
193
- }
194
-
195
- .dsh-ui .arco-pagination-item-active {
196
- background-color: var(--dsw-alias-button-ghost-active-fill);
197
- color: var(--dsw-alias-label-primary);
198
- font-weight: 500;
199
- }
200
-
201
- .dsh-ui .arco-pagination-item-disabled {
202
- color: var(--dsw-alias-label-caption);
203
- }
204
-
205
- /* ── 步骤条 ─────────────────────────────────────────────────────── */
206
- .dsh-ui .arco-steps-item-title {
207
- font-size: 14px;
208
- line-height: 22px;
209
- color: var(--dsw-alias-label-primary);
210
- }
211
-
212
- .dsh-ui .arco-steps-item-description {
213
- font-size: 12px;
214
- line-height: 18px;
215
- color: var(--dsw-alias-label-tertiary);
216
- }
217
-
218
- .dsh-ui .arco-steps-item-wait .arco-steps-item-title {
219
- color: var(--dsw-alias-label-tertiary);
220
- }
221
-
222
- .dsh-ui .arco-steps-item-process .arco-steps-icon,
223
- .dsh-ui .arco-steps-item-finish .arco-steps-icon {
224
- background-color: var(--dsw-alias-brand-primary);
225
- color: var(--dsw-alias-label-primary-foreground);
226
- }
227
-
228
- .dsh-ui .arco-steps-item-wait .arco-steps-icon {
229
- background-color: var(--dsw-alias-bg-module-platform);
230
- color: var(--dsw-alias-label-tertiary);
231
- }
232
-
233
- /* ── 分段控件 ───────────────────────────────────────────────────── */
234
- .dsh-segmented {
235
- position: relative;
236
- display: inline-grid;
237
- /* 放在 grid 容器里时,inline-grid 仍会被拉伸到整行;按内容收缩才符合宿主的
238
- 表单控件观感。需要撑满时用 block 形态。 */
239
- justify-self: start;
240
- width: fit-content;
241
- grid-auto-flow: column;
242
- grid-auto-columns: 1fr;
243
- gap: 2px;
244
- padding: 4px;
245
- border-radius: var(--dsw-radius-md, 12px);
246
- background-color: var(--dsw-alias-interactive-bg-hover-solid);
247
- }
248
-
249
- .dsh-segmented--block {
250
- display: grid;
251
- width: 100%;
252
- justify-self: stretch;
253
- }
254
-
255
- .dsh-segmented__indicator {
256
- position: absolute;
257
- top: 4px;
258
- left: 4px;
259
- width: calc((100% - 8px - 2px * (var(--dsh-segment-count) - 1)) / var(--dsh-segment-count));
260
- height: calc(100% - 8px);
261
- border: 0;
262
- border-radius: var(--dsw-radius-sm, 8px);
263
- background-color: var(--dsw-alias-bg-layer-1);
264
- box-shadow: var(--dsw-elevation-soft);
265
- transform: translateX(calc(var(--dsh-segment-index) * (100% + 2px)));
266
- transition: transform 160ms ease;
267
- pointer-events: none;
268
- }
269
-
270
- .dsh-segmented__tab {
271
- position: relative;
272
- z-index: 1;
273
- height: 28px;
274
- padding: 0 16px;
275
- border: 0;
276
- border-radius: var(--dsw-radius-sm, 8px);
277
- background-color: transparent;
278
- color: var(--dsw-alias-label-secondary);
279
- font-family: inherit;
280
- font-size: 13px;
281
- line-height: 20px;
282
- font-weight: 500;
283
- white-space: nowrap;
284
- cursor: pointer;
285
- transition: color 120ms ease;
286
- }
287
-
288
- .dsh-segmented__tab[aria-selected='true'] {
289
- color: var(--dsw-alias-label-primary);
290
- }
291
-
292
- @media (hover: hover) {
293
- .dsh-segmented__tab:hover:not(:disabled) {
294
- color: var(--dsw-alias-label-primary);
295
- }
296
- }
297
-
298
- .dsh-segmented__tab:disabled {
299
- cursor: default;
300
- opacity: 0.4;
301
- }
302
-
303
- /* ── 折叠标题行 ─────────────────────────────────────────────────── */
304
- .dsh-disclosure {
305
- display: flex;
306
- flex-direction: column;
307
- width: 100%;
308
- min-width: 0;
309
- }
310
-
311
- .dsh-disclosure__header {
312
- display: flex;
313
- align-items: center;
314
- min-width: 0;
315
- gap: 6px;
316
- height: 24px;
317
- color: var(--dsw-alias-label-tertiary);
318
- transition: color 100ms ease;
319
- }
320
-
321
- .dsh-disclosure__header--expandable {
322
- cursor: pointer;
323
- border: 0;
324
- background: none;
325
- padding: 0;
326
- /* 按钮不继承父级文字颜色,不写这一行在深色主题下会是浏览器默认的黑色。 */
327
- color: inherit;
328
- font-family: inherit;
329
- font-size: 13px;
330
- line-height: 24px;
331
- text-align: left;
332
- width: 100%;
333
- }
334
-
335
- @media (hover: hover) {
336
- .dsh-disclosure__header--expandable:hover {
337
- color: var(--dsw-alias-label-secondary);
338
- }
339
- }
340
-
341
- .dsh-disclosure__leading {
342
- display: inline-flex;
343
- flex: none;
344
- width: 16px;
345
- height: 16px;
346
- align-items: center;
347
- justify-content: center;
348
- color: inherit;
349
- }
350
-
351
- .dsh-disclosure__title {
352
- flex: none;
353
- font-size: 13px;
354
- line-height: 24px;
355
- color: inherit;
356
- }
357
-
358
- .dsh-disclosure__content {
359
- min-width: 0;
360
- color: var(--dsw-alias-label-primary);
361
- }
362
-
363
- /* ── 状态点 ─────────────────────────────────────────────────────── */
364
- .dsh-state-dot {
365
- position: relative;
366
- display: inline-block;
367
- flex: none;
368
- width: 10px;
369
- height: 10px;
370
- }
371
-
372
- .dsh-state-dot::after {
373
- content: '';
374
- position: absolute;
375
- inset: 20%;
376
- border-radius: 50%;
377
- corner-shape: round;
378
- background-color: currentColor;
379
- }
380
-
381
- .dsh-state-dot[data-state='done'] {
382
- color: var(--dsw-alias-state-success-primary);
383
- }
384
-
385
- .dsh-state-dot[data-state='warning'] {
386
- color: var(--dsw-alias-state-warn-primary);
387
- }
388
-
389
- .dsh-state-dot[data-state='error'] {
390
- color: var(--dsw-alias-state-error-primary);
391
- }
392
-
393
- .dsh-state-dot[data-state='idle'] {
394
- color: var(--dsw-alias-state-idle-primary);
395
- }
396
-
397
- .dsh-state-dot[data-state='ongoing'] {
398
- color: var(--dsw-alias-label-tertiary);
399
- }
400
-
401
- .dsh-state-dot[data-state='ongoing']::after {
402
- inset: 0;
403
- border-radius: 50%;
404
- corner-shape: round;
405
- background: none;
406
- border: 2px solid currentColor;
407
- border-right-color: transparent;
408
- animation: dsh-state-dot-spin 1.5s linear infinite;
409
- }
410
-
411
- @keyframes dsh-state-dot-spin {
412
- to {
413
- transform: rotate(360deg);
414
- }
415
- }
416
-
417
- @media (prefers-reduced-motion: reduce) {
418
- .dsh-state-dot[data-state='ongoing']::after {
419
- animation: none;
420
- }
421
-
422
- .dsh-segmented__indicator,
423
- .dsh-segmented__tab,
424
- .dsh-disclosure__header {
425
- transition: none;
426
- }
427
- }
11
+ export const NAVIGATION_CSS = `
12
+ /* ── 菜单与下拉 ─────────────────────────────────────────────────── */
13
+ .dsh-ui .arco-menu {
14
+ background-color: transparent;
15
+ border: 0;
16
+ font-size: 14px;
17
+ line-height: 22px;
18
+ }
19
+
20
+ .dsh-ui .arco-menu-item,
21
+ .dsh-ui .arco-menu-pop-header {
22
+ border-radius: var(--dsw-radius-sm, 8px);
23
+ color: var(--dsw-alias-label-secondary);
24
+ line-height: 32px;
25
+ height: 32px;
26
+ padding: 0 10px;
27
+ margin: 2px 0;
28
+ }
29
+
30
+ @media (hover: hover) {
31
+ .dsh-ui .arco-menu-item:hover,
32
+ .dsh-ui .arco-menu-pop-header:hover {
33
+ background-color: var(--dsw-alias-interactive-bg-hover);
34
+ color: var(--dsw-alias-label-primary);
35
+ }
36
+ }
37
+
38
+ .dsh-ui .arco-menu-selected,
39
+ .dsh-ui .arco-menu-item.arco-menu-selected {
40
+ background-color: var(--dsw-alias-button-ghost-active-fill);
41
+ color: var(--dsw-alias-label-primary);
42
+ font-weight: 500;
43
+ }
44
+
45
+ .dsh-ui .arco-menu-inline-header {
46
+ color: var(--dsw-alias-label-tertiary);
47
+ font-size: 12px;
48
+ line-height: 18px;
49
+ padding: 8px 10px 4px;
50
+ height: auto;
51
+ }
52
+
53
+ .dsh-ui-overlay .arco-dropdown-menu,
54
+ .dsh-ui .arco-dropdown-menu {
55
+ border-radius: var(--dsw-radius-lg, 16px);
56
+ border: 0;
57
+ background: var(--dsw-specific-menu, var(--dsw-alias-bg-layer-2));
58
+ backdrop-filter: var(--dsw-menu-backdrop-filter, none);
59
+ box-shadow: var(--dsw-elevation-panel);
60
+ padding: 4px;
61
+ min-width: 160px;
62
+ }
63
+
64
+ .dsh-ui-overlay .arco-dropdown-menu-item,
65
+ .dsh-ui .arco-dropdown-menu-item {
66
+ border-radius: var(--dsw-radius-sm, 8px);
67
+ font-size: 14px;
68
+ line-height: 22px;
69
+ height: 32px;
70
+ color: var(--dsw-alias-label-primary);
71
+ }
72
+
73
+ @media (hover: hover) {
74
+ .dsh-ui-overlay .arco-dropdown-menu-item:hover,
75
+ .dsh-ui .arco-dropdown-menu-item:hover {
76
+ background-color: var(--dsw-alias-interactive-bg-hover);
77
+ }
78
+ }
79
+
80
+ .dsh-ui-overlay .arco-dropdown-menu-item-disabled,
81
+ .dsh-ui .arco-dropdown-menu-item-disabled {
82
+ color: var(--dsw-alias-label-caption);
83
+ }
84
+
85
+ /* ── 标签页 ─────────────────────────────────────────────────────── */
86
+ .dsh-ui .arco-tabs-header-nav::before {
87
+ background-color: var(--dsw-alias-border-l1);
88
+ }
89
+
90
+ .dsh-ui .arco-tabs-header-title {
91
+ font-size: 14px;
92
+ line-height: 22px;
93
+ color: var(--dsw-alias-label-tertiary);
94
+ font-weight: 400;
95
+ }
96
+
97
+ .dsh-ui .arco-tabs-header-title:hover {
98
+ color: var(--dsw-alias-label-secondary);
99
+ }
100
+
101
+ .dsh-ui .arco-tabs-header-title-active,
102
+ .dsh-ui .arco-tabs-header-title-active:hover {
103
+ color: var(--dsw-alias-label-primary);
104
+ font-weight: 500;
105
+ }
106
+
107
+ .dsh-ui .arco-tabs-header-ink {
108
+ background-color: var(--dsw-alias-brand-primary);
109
+ height: 2px;
110
+ }
111
+
112
+ .dsh-ui .arco-tabs-content {
113
+ padding-top: 16px;
114
+ }
115
+
116
+ /* 卡片式标签改为胶囊分段 */
117
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header-nav {
118
+ background-color: var(--dsw-alias-interactive-bg-hover-solid);
119
+ border-radius: var(--dsw-radius-md, 12px);
120
+ padding: 4px;
121
+ display: inline-flex;
122
+ }
123
+
124
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header-nav::before {
125
+ display: none;
126
+ }
127
+
128
+ /* Arco 的行式标签给首个标题额外加了 16px 左外边距,分段外观下会变成大面积留白。 */
129
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header > .arco-tabs-header-title:first-of-type,
130
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header-scroll > .arco-tabs-header-title:first-of-type {
131
+ margin-left: 0;
132
+ }
133
+
134
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header-title {
135
+ border-radius: var(--dsw-radius-sm, 8px);
136
+ height: 28px;
137
+ line-height: 20px;
138
+ padding: 4px 16px;
139
+ margin: 0;
140
+ font-size: 13px;
141
+ font-weight: 500;
142
+ }
143
+
144
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header-title-active {
145
+ background-color: var(--dsw-alias-bg-layer-1);
146
+ box-shadow: var(--dsw-elevation-soft);
147
+ }
148
+
149
+ .dsh-ui .dsh-tabs--segment .arco-tabs-header-ink {
150
+ display: none;
151
+ }
152
+
153
+ /* ── 面包屑 ─────────────────────────────────────────────────────── */
154
+ .dsh-ui .arco-breadcrumb {
155
+ font-size: 13px;
156
+ line-height: 20px;
157
+ color: var(--dsw-alias-label-tertiary);
158
+ }
159
+
160
+ .dsh-ui .arco-breadcrumb-item a,
161
+ .dsh-ui .arco-breadcrumb-item-link {
162
+ color: var(--dsw-alias-label-tertiary);
163
+ font-weight: 400;
164
+ }
165
+
166
+ .dsh-ui .arco-breadcrumb-item a:hover,
167
+ .dsh-ui .arco-breadcrumb-item-link:hover {
168
+ color: var(--dsw-alias-label-primary);
169
+ }
170
+
171
+ .dsh-ui .arco-breadcrumb-item:last-child {
172
+ color: var(--dsw-alias-label-primary);
173
+ font-weight: 500;
174
+ }
175
+
176
+ /* ── 分页 ───────────────────────────────────────────────────────── */
177
+ .dsh-ui .arco-pagination-item {
178
+ border-radius: var(--dsw-radius-sm, 8px);
179
+ border: 0;
180
+ background-color: transparent;
181
+ color: var(--dsw-alias-label-secondary);
182
+ font-size: 13px;
183
+ min-width: 28px;
184
+ height: 28px;
185
+ line-height: 28px;
186
+ }
187
+
188
+ @media (hover: hover) {
189
+ .dsh-ui .arco-pagination-item:hover {
190
+ background-color: var(--dsw-alias-interactive-bg-hover);
191
+ color: var(--dsw-alias-label-primary);
192
+ }
193
+ }
194
+
195
+ .dsh-ui .arco-pagination-item-active {
196
+ background-color: var(--dsw-alias-button-ghost-active-fill);
197
+ color: var(--dsw-alias-label-primary);
198
+ font-weight: 500;
199
+ }
200
+
201
+ .dsh-ui .arco-pagination-item-disabled {
202
+ color: var(--dsw-alias-label-caption);
203
+ }
204
+
205
+ /* ── 步骤条 ─────────────────────────────────────────────────────── */
206
+ .dsh-ui .arco-steps-item-title {
207
+ font-size: 14px;
208
+ line-height: 22px;
209
+ color: var(--dsw-alias-label-primary);
210
+ }
211
+
212
+ .dsh-ui .arco-steps-item-description {
213
+ font-size: 12px;
214
+ line-height: 18px;
215
+ color: var(--dsw-alias-label-tertiary);
216
+ }
217
+
218
+ .dsh-ui .arco-steps-item-wait .arco-steps-item-title {
219
+ color: var(--dsw-alias-label-tertiary);
220
+ }
221
+
222
+ .dsh-ui .arco-steps-item-process .arco-steps-icon,
223
+ .dsh-ui .arco-steps-item-finish .arco-steps-icon {
224
+ background-color: var(--dsw-alias-brand-primary);
225
+ color: var(--dsw-alias-label-primary-foreground);
226
+ }
227
+
228
+ .dsh-ui .arco-steps-item-wait .arco-steps-icon {
229
+ background-color: var(--dsw-alias-bg-module-platform);
230
+ color: var(--dsw-alias-label-tertiary);
231
+ }
232
+
233
+ /* ── 分段控件 ───────────────────────────────────────────────────── */
234
+ .dsh-segmented {
235
+ position: relative;
236
+ display: inline-grid;
237
+ /* 放在 grid 容器里时,inline-grid 仍会被拉伸到整行;按内容收缩才符合宿主的
238
+ 表单控件观感。需要撑满时用 block 形态。 */
239
+ justify-self: start;
240
+ width: fit-content;
241
+ grid-auto-flow: column;
242
+ grid-auto-columns: 1fr;
243
+ gap: 2px;
244
+ padding: 4px;
245
+ border-radius: var(--dsw-radius-md, 12px);
246
+ background-color: var(--dsw-alias-interactive-bg-hover-solid);
247
+ }
248
+
249
+ .dsh-segmented--block {
250
+ display: grid;
251
+ width: 100%;
252
+ justify-self: stretch;
253
+ }
254
+
255
+ .dsh-segmented__indicator {
256
+ position: absolute;
257
+ top: 4px;
258
+ left: 4px;
259
+ width: calc((100% - 8px - 2px * (var(--dsh-segment-count) - 1)) / var(--dsh-segment-count));
260
+ height: calc(100% - 8px);
261
+ border: 0;
262
+ border-radius: var(--dsw-radius-sm, 8px);
263
+ background-color: var(--dsw-alias-bg-layer-1);
264
+ box-shadow: var(--dsw-elevation-soft);
265
+ transform: translateX(calc(var(--dsh-segment-index) * (100% + 2px)));
266
+ transition: transform 160ms ease;
267
+ pointer-events: none;
268
+ }
269
+
270
+ .dsh-segmented__tab {
271
+ position: relative;
272
+ z-index: 1;
273
+ height: 28px;
274
+ padding: 0 16px;
275
+ border: 0;
276
+ border-radius: var(--dsw-radius-sm, 8px);
277
+ background-color: transparent;
278
+ color: var(--dsw-alias-label-secondary);
279
+ font-family: inherit;
280
+ font-size: 13px;
281
+ line-height: 20px;
282
+ font-weight: 500;
283
+ white-space: nowrap;
284
+ cursor: pointer;
285
+ transition: color 120ms ease;
286
+ }
287
+
288
+ .dsh-segmented__tab[aria-selected='true'] {
289
+ color: var(--dsw-alias-label-primary);
290
+ }
291
+
292
+ @media (hover: hover) {
293
+ .dsh-segmented__tab:hover:not(:disabled) {
294
+ color: var(--dsw-alias-label-primary);
295
+ }
296
+ }
297
+
298
+ .dsh-segmented__tab:disabled {
299
+ cursor: default;
300
+ opacity: 0.4;
301
+ }
302
+
303
+ /* ── 折叠标题行 ─────────────────────────────────────────────────── */
304
+ .dsh-disclosure {
305
+ display: flex;
306
+ flex-direction: column;
307
+ width: 100%;
308
+ min-width: 0;
309
+ }
310
+
311
+ .dsh-disclosure__header {
312
+ display: flex;
313
+ align-items: center;
314
+ min-width: 0;
315
+ gap: 6px;
316
+ height: 24px;
317
+ color: var(--dsw-alias-label-tertiary);
318
+ transition: color 100ms ease;
319
+ }
320
+
321
+ .dsh-disclosure__header--expandable {
322
+ cursor: pointer;
323
+ border: 0;
324
+ background: none;
325
+ padding: 0;
326
+ /* 按钮不继承父级文字颜色,不写这一行在深色主题下会是浏览器默认的黑色。 */
327
+ color: inherit;
328
+ font-family: inherit;
329
+ font-size: 13px;
330
+ line-height: 24px;
331
+ text-align: left;
332
+ width: 100%;
333
+ }
334
+
335
+ @media (hover: hover) {
336
+ .dsh-disclosure__header--expandable:hover {
337
+ color: var(--dsw-alias-label-secondary);
338
+ }
339
+ }
340
+
341
+ .dsh-disclosure__leading {
342
+ display: inline-flex;
343
+ flex: none;
344
+ width: 16px;
345
+ height: 16px;
346
+ align-items: center;
347
+ justify-content: center;
348
+ color: inherit;
349
+ }
350
+
351
+ .dsh-disclosure__title {
352
+ flex: none;
353
+ font-size: 13px;
354
+ line-height: 24px;
355
+ color: inherit;
356
+ }
357
+
358
+ .dsh-disclosure__content {
359
+ min-width: 0;
360
+ color: var(--dsw-alias-label-primary);
361
+ }
362
+
363
+ /* ── 状态点 ─────────────────────────────────────────────────────── */
364
+ .dsh-state-dot {
365
+ position: relative;
366
+ display: inline-block;
367
+ flex: none;
368
+ width: 10px;
369
+ height: 10px;
370
+ }
371
+
372
+ .dsh-state-dot::after {
373
+ content: '';
374
+ position: absolute;
375
+ inset: 20%;
376
+ border-radius: 50%;
377
+ corner-shape: round;
378
+ background-color: currentColor;
379
+ }
380
+
381
+ .dsh-state-dot[data-state='done'] {
382
+ color: var(--dsw-alias-state-success-primary);
383
+ }
384
+
385
+ .dsh-state-dot[data-state='warning'] {
386
+ color: var(--dsw-alias-state-warn-primary);
387
+ }
388
+
389
+ .dsh-state-dot[data-state='error'] {
390
+ color: var(--dsw-alias-state-error-primary);
391
+ }
392
+
393
+ .dsh-state-dot[data-state='idle'] {
394
+ color: var(--dsw-alias-state-idle-primary);
395
+ }
396
+
397
+ .dsh-state-dot[data-state='ongoing'] {
398
+ color: var(--dsw-alias-label-tertiary);
399
+ }
400
+
401
+ .dsh-state-dot[data-state='ongoing']::after {
402
+ inset: 0;
403
+ border-radius: 50%;
404
+ corner-shape: round;
405
+ background: none;
406
+ border: 2px solid currentColor;
407
+ border-right-color: transparent;
408
+ animation: dsh-state-dot-spin 1.5s linear infinite;
409
+ }
410
+
411
+ @keyframes dsh-state-dot-spin {
412
+ to {
413
+ transform: rotate(360deg);
414
+ }
415
+ }
416
+
417
+ @media (prefers-reduced-motion: reduce) {
418
+ .dsh-state-dot[data-state='ongoing']::after {
419
+ animation: none;
420
+ }
421
+
422
+ .dsh-segmented__indicator,
423
+ .dsh-segmented__tab,
424
+ .dsh-disclosure__header {
425
+ transition: none;
426
+ }
427
+ }
428
428
  `;
429
429
  /**
430
430
  * 注入导航组件样式。幂等。