@zhang_jifan/fanui 2.1.0

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 (127) hide show
  1. package/ACCESSIBILITY.md +61 -0
  2. package/CHANGELOG.md +112 -0
  3. package/COMMERCIAL-LICENSE.md +71 -0
  4. package/DESIGN-SYSTEM.md +294 -0
  5. package/LICENSE +661 -0
  6. package/README.md +348 -0
  7. package/USAGE.md +1926 -0
  8. package/_index.scss +20 -0
  9. package/dist/fanui.cjs +15 -0
  10. package/dist/fanui.css +28209 -0
  11. package/dist/fanui.d.ts +353 -0
  12. package/dist/fanui.esm.js +71 -0
  13. package/dist/fanui.js +4782 -0
  14. package/dist/fanui.min.css +1 -0
  15. package/dist/fanui.mjs +71 -0
  16. package/dist/modules/fanui-advanced.css +830 -0
  17. package/dist/modules/fanui-advanced.min.css +129 -0
  18. package/dist/modules/fanui-alert.css +575 -0
  19. package/dist/modules/fanui-alert.min.css +122 -0
  20. package/dist/modules/fanui-badge.css +426 -0
  21. package/dist/modules/fanui-badge.min.css +77 -0
  22. package/dist/modules/fanui-base.css +1394 -0
  23. package/dist/modules/fanui-base.min.css +236 -0
  24. package/dist/modules/fanui-blog.css +762 -0
  25. package/dist/modules/fanui-blog.min.css +108 -0
  26. package/dist/modules/fanui-button.css +526 -0
  27. package/dist/modules/fanui-button.min.css +56 -0
  28. package/dist/modules/fanui-card.css +291 -0
  29. package/dist/modules/fanui-card.min.css +52 -0
  30. package/dist/modules/fanui-choice.css +539 -0
  31. package/dist/modules/fanui-choice.min.css +83 -0
  32. package/dist/modules/fanui-dashboard.css +1057 -0
  33. package/dist/modules/fanui-dashboard.min.css +160 -0
  34. package/dist/modules/fanui-data.css +687 -0
  35. package/dist/modules/fanui-data.min.css +125 -0
  36. package/dist/modules/fanui-feedback.css +432 -0
  37. package/dist/modules/fanui-feedback.min.css +79 -0
  38. package/dist/modules/fanui-form.css +779 -0
  39. package/dist/modules/fanui-form.min.css +123 -0
  40. package/dist/modules/fanui-glass.css +497 -0
  41. package/dist/modules/fanui-glass.min.css +46 -0
  42. package/dist/modules/fanui-input-plus.css +799 -0
  43. package/dist/modules/fanui-input-plus.min.css +124 -0
  44. package/dist/modules/fanui-interactive.css +960 -0
  45. package/dist/modules/fanui-interactive.min.css +138 -0
  46. package/dist/modules/fanui-layout.css +4399 -0
  47. package/dist/modules/fanui-layout.min.css +1172 -0
  48. package/dist/modules/fanui-marketing.css +1125 -0
  49. package/dist/modules/fanui-marketing.min.css +144 -0
  50. package/dist/modules/fanui-nav.css +458 -0
  51. package/dist/modules/fanui-nav.min.css +76 -0
  52. package/dist/modules/fanui-overlay.css +547 -0
  53. package/dist/modules/fanui-overlay.min.css +91 -0
  54. package/dist/modules/fanui-table.css +290 -0
  55. package/dist/modules/fanui-table.min.css +62 -0
  56. package/dist/modules/fanui-tabs.css +333 -0
  57. package/dist/modules/fanui-tabs.min.css +58 -0
  58. package/dist/modules/fanui-themes.css +2728 -0
  59. package/dist/modules/fanui-themes.min.css +40 -0
  60. package/dist/modules/fanui-tokens.css +587 -0
  61. package/dist/modules/fanui-tokens.min.css +3 -0
  62. package/dist/modules/fanui-utilities.css +6557 -0
  63. package/dist/modules/fanui-utilities.min.css +1762 -0
  64. package/dist/modules/sizes.json +103 -0
  65. package/docs/MIGRATION-v2.md +179 -0
  66. package/examples/01-script-tag.html +149 -0
  67. package/examples/02-react/README.md +39 -0
  68. package/examples/02-react/index.html +12 -0
  69. package/examples/02-react/package.json +20 -0
  70. package/examples/02-react/src/App.jsx +108 -0
  71. package/examples/02-react/src/main.jsx +13 -0
  72. package/examples/02-react/src/useFanUI.js +87 -0
  73. package/examples/02-react/vite.config.js +6 -0
  74. package/examples/03-vue3/README.md +67 -0
  75. package/examples/03-vue3/index.html +12 -0
  76. package/examples/03-vue3/package.json +19 -0
  77. package/examples/03-vue3/src/App.vue +93 -0
  78. package/examples/03-vue3/src/main.js +8 -0
  79. package/examples/03-vue3/src/useFanUI.js +85 -0
  80. package/examples/03-vue3/vite.config.js +6 -0
  81. package/examples/04-vue2-cdn.html +93 -0
  82. package/examples/README.md +34 -0
  83. package/package.json +127 -0
  84. package/src/_functions.scss +319 -0
  85. package/src/_mixins.scss +1202 -0
  86. package/src/_tokens.scss +180 -0
  87. package/src/_variables.scss +491 -0
  88. package/src/base/_animations.scss +210 -0
  89. package/src/base/_reset.scss +359 -0
  90. package/src/base/_rtl.scss +133 -0
  91. package/src/base/_typography.scss +353 -0
  92. package/src/components/_advanced.scss +763 -0
  93. package/src/components/_alert.scss +322 -0
  94. package/src/components/_badge.scss +279 -0
  95. package/src/components/_blog.scss +693 -0
  96. package/src/components/_button.scss +351 -0
  97. package/src/components/_capabilities.scss +463 -0
  98. package/src/components/_card.scss +281 -0
  99. package/src/components/_choice.scss +444 -0
  100. package/src/components/_dashboard.scss +950 -0
  101. package/src/components/_data.scss +618 -0
  102. package/src/components/_feedback.scss +403 -0
  103. package/src/components/_form.scss +408 -0
  104. package/src/components/_glass.scss +374 -0
  105. package/src/components/_input-plus.scss +730 -0
  106. package/src/components/_interactive.scss +885 -0
  107. package/src/components/_marketing.scss +982 -0
  108. package/src/components/_nav.scss +480 -0
  109. package/src/components/_overlay.scss +517 -0
  110. package/src/components/_table.scss +276 -0
  111. package/src/components/_tabs.scss +338 -0
  112. package/src/fanui.d.ts +353 -0
  113. package/src/fanui.js +4782 -0
  114. package/src/fanui.scss +79 -0
  115. package/src/glass/_switches.scss +36 -0
  116. package/src/glass/_tokens.scss +259 -0
  117. package/src/layout/_container.scss +111 -0
  118. package/src/layout/_flex.scss +164 -0
  119. package/src/layout/_grid.scss +180 -0
  120. package/src/themes/_accents.scss +201 -0
  121. package/src/themes/_palettes.scss +180 -0
  122. package/src/utilities/_borders.scss +104 -0
  123. package/src/utilities/_display.scss +145 -0
  124. package/src/utilities/_effects.scss +210 -0
  125. package/src/utilities/_sizing.scss +123 -0
  126. package/src/utilities/_spacing.scss +118 -0
  127. package/src/utilities/_texture.scss +323 -0
@@ -0,0 +1,687 @@
1
+ /* fanUI v2.1.0 · module: data(独立产物,自带令牌) */
2
+ .fanui-avatar {
3
+ --fanui-avatar-size: 40px;
4
+ --fanui-avatar-radius: 50%;
5
+ position: relative;
6
+ display: inline-flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ flex: 0 0 auto;
10
+ width: var(--fanui-avatar-size);
11
+ height: var(--fanui-avatar-size);
12
+ font-size: calc(var(--fanui-avatar-size) * 0.4);
13
+ font-weight: 600;
14
+ line-height: 1;
15
+ color: var(--fanui-color-text-inverse);
16
+ background-color: var(--fanui-primary);
17
+ border-radius: var(--fanui-avatar-radius);
18
+ overflow: hidden;
19
+ user-select: none;
20
+ box-sizing: border-box;
21
+ }
22
+ .fanui-avatar > img,
23
+ .fanui-avatar > video {
24
+ width: 100%;
25
+ height: 100%;
26
+ object-fit: cover;
27
+ display: block;
28
+ }
29
+ .fanui-avatar__icon {
30
+ display: inline-flex;
31
+ font-size: 1.1em;
32
+ }
33
+ .fanui-avatar__text {
34
+ font-size: 0.85em;
35
+ letter-spacing: 0.02em;
36
+ }
37
+ .fanui-avatar--xs {
38
+ --fanui-avatar-size: 24px;
39
+ font-size: 11px;
40
+ }
41
+ .fanui-avatar--sm {
42
+ --fanui-avatar-size: 32px;
43
+ font-size: 13px;
44
+ }
45
+ .fanui-avatar--md {
46
+ --fanui-avatar-size: 40px;
47
+ }
48
+ .fanui-avatar--lg {
49
+ --fanui-avatar-size: 48px;
50
+ }
51
+ .fanui-avatar--xl {
52
+ --fanui-avatar-size: 64px;
53
+ font-size: 22px;
54
+ }
55
+ .fanui-avatar--2xl {
56
+ --fanui-avatar-size: 80px;
57
+ font-size: 28px;
58
+ }
59
+ .fanui-avatar--square {
60
+ --fanui-avatar-radius: var(--fanui-radius-base);
61
+ }
62
+ .fanui-avatar--rounded {
63
+ --fanui-avatar-radius: var(--fanui-radius-lg);
64
+ }
65
+ .fanui-avatar--bordered {
66
+ border: 2px solid var(--fanui-color-surface);
67
+ box-shadow: var(--fanui-shadow-sm);
68
+ }
69
+ .fanui-avatar--primary {
70
+ background-color: var(--fanui-primary, #0e7490);
71
+ color: var(--fanui-primary-fg, #ffffff);
72
+ }
73
+ .fanui-avatar--accent {
74
+ background-color: var(--fanui-accent, #7c3aed);
75
+ color: var(--fanui-accent-fg, #ffffff);
76
+ }
77
+ .fanui-avatar--success {
78
+ background-color: var(--fanui-success, #047857);
79
+ color: var(--fanui-success-fg, #ffffff);
80
+ }
81
+ .fanui-avatar--warning {
82
+ background-color: var(--fanui-warning, #b45309);
83
+ color: var(--fanui-warning-fg, #ffffff);
84
+ }
85
+ .fanui-avatar--danger {
86
+ background-color: var(--fanui-danger, #b91c1c);
87
+ color: var(--fanui-danger-fg, #ffffff);
88
+ }
89
+ .fanui-avatar--info {
90
+ background-color: var(--fanui-info, #0369a1);
91
+ color: var(--fanui-info-fg, #ffffff);
92
+ }
93
+ .fanui-avatar--neutral {
94
+ background-color: var(--fanui-color-surface-sunken);
95
+ color: var(--fanui-color-text-muted);
96
+ }
97
+ .fanui-avatar__status {
98
+ position: absolute;
99
+ right: 0;
100
+ bottom: 0;
101
+ width: 28%;
102
+ height: 28%;
103
+ min-width: 8px;
104
+ min-height: 8px;
105
+ border-radius: 50%;
106
+ border: 2px solid var(--fanui-color-surface);
107
+ background-color: var(--fanui-color-text-subtle);
108
+ box-sizing: content-box;
109
+ }
110
+ .fanui-avatar__status--online {
111
+ background-color: var(--fanui-success);
112
+ }
113
+ .fanui-avatar__status--busy {
114
+ background-color: var(--fanui-danger);
115
+ }
116
+ .fanui-avatar__status--away {
117
+ background-color: var(--fanui-warning);
118
+ }
119
+ .fanui-avatar__status--offline {
120
+ background-color: var(--fanui-color-text-subtle);
121
+ }
122
+
123
+ .fanui-avatar-group {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ }
127
+ .fanui-avatar-group > .fanui-avatar {
128
+ margin-inline-start: -10px;
129
+ border: 2px solid var(--fanui-color-surface);
130
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, z-index 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
131
+ }
132
+ .fanui-avatar-group > .fanui-avatar:first-child {
133
+ margin-inline-start: 0;
134
+ }
135
+ .fanui-avatar-group > .fanui-avatar:hover {
136
+ transform: translateY(-2px);
137
+ z-index: 2;
138
+ }
139
+ .fanui-avatar-group--sm > .fanui-avatar {
140
+ margin-inline-start: -8px;
141
+ }
142
+ .fanui-avatar-group--lg > .fanui-avatar {
143
+ margin-inline-start: -12px;
144
+ }
145
+ .fanui-avatar-group__more {
146
+ background-color: var(--fanui-color-surface-sunken) !important;
147
+ color: var(--fanui-color-text-muted) !important;
148
+ font-size: 12px;
149
+ }
150
+
151
+ .fanui-avatar-media {
152
+ display: flex;
153
+ align-items: center;
154
+ gap: var(--fanui-space-3);
155
+ min-width: 0;
156
+ }
157
+ .fanui-avatar-media__body {
158
+ min-width: 0;
159
+ }
160
+ .fanui-avatar-media__title {
161
+ font-size: var(--fanui-font-size-base);
162
+ font-weight: 500;
163
+ color: var(--fanui-color-text-strong);
164
+ overflow: hidden;
165
+ text-overflow: ellipsis;
166
+ white-space: nowrap;
167
+ }
168
+ .fanui-avatar-media__desc {
169
+ font-size: var(--fanui-font-size-sm);
170
+ color: var(--fanui-color-text-muted);
171
+ overflow: hidden;
172
+ text-overflow: ellipsis;
173
+ white-space: nowrap;
174
+ }
175
+
176
+ .fanui-list-group {
177
+ display: flex;
178
+ flex-direction: column;
179
+ padding: 0;
180
+ margin: 0;
181
+ list-style: none;
182
+ background-color: var(--fanui-color-surface);
183
+ border: 1px solid var(--fanui-color-border);
184
+ border-radius: var(--fanui-radius-lg);
185
+ overflow: hidden;
186
+ }
187
+ .fanui-list-group--flush {
188
+ border: 0;
189
+ border-radius: 0;
190
+ background: transparent;
191
+ }
192
+ .fanui-list-group--separated {
193
+ gap: var(--fanui-space-2);
194
+ border: 0;
195
+ background: transparent;
196
+ overflow: visible;
197
+ }
198
+
199
+ .fanui-list-item {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: var(--fanui-space-3);
203
+ padding: var(--fanui-space-3) var(--fanui-space-4);
204
+ font-size: var(--fanui-font-size-base);
205
+ color: var(--fanui-color-text);
206
+ background-color: transparent;
207
+ border-bottom: 1px solid var(--fanui-color-border);
208
+ text-decoration: none;
209
+ box-sizing: border-box;
210
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
211
+ }
212
+ .fanui-list-item:last-child {
213
+ border-bottom: 0;
214
+ }
215
+ .fanui-list-item--interactive {
216
+ cursor: pointer;
217
+ }
218
+ .fanui-list-item--interactive:hover {
219
+ background-color: var(--fanui-color-hover);
220
+ text-decoration: none;
221
+ }
222
+ .fanui-list-item--interactive:active {
223
+ background-color: var(--fanui-color-active);
224
+ }
225
+ .fanui-list-item--interactive:focus-visible {
226
+ outline: 0;
227
+ box-shadow: 0 0 0 var(--fanui-focus-ring-offset, 1px) var(--fanui-color-surface, #fff), 0 0 0 calc(var(--fanui-focus-ring-offset, 1px) + var(--fanui-focus-ring-width, 3px)) var(--fanui-focus-ring-color, rgba(14, 116, 144, 0.3));
228
+ }
229
+ @media (forced-colors: active) {
230
+ .fanui-list-item--interactive:focus-visible {
231
+ outline: 2px solid transparent;
232
+ outline-offset: 2px;
233
+ }
234
+ }
235
+ .fanui-list-item.is-active, .fanui-list-item--active {
236
+ background-color: var(--fanui-primary-soft);
237
+ color: var(--fanui-primary);
238
+ border-color: var(--fanui-primary-border, var(--fanui-primary));
239
+ --fanui-color-text-subtle: var(--fanui-primary-ink, var(--fanui-color-text-muted));
240
+ }
241
+ .fanui-list-item.is-disabled {
242
+ opacity: 0.55;
243
+ pointer-events: none;
244
+ }
245
+ .fanui-list-group--separated .fanui-list-item {
246
+ border: 1px solid var(--fanui-color-border);
247
+ border-radius: var(--fanui-radius-md);
248
+ background-color: var(--fanui-color-surface);
249
+ }
250
+ .fanui-list-item__icon {
251
+ flex: 0 0 auto;
252
+ display: inline-flex;
253
+ width: 20px;
254
+ justify-content: center;
255
+ color: var(--fanui-color-text-muted);
256
+ }
257
+ .fanui-list-item__body {
258
+ flex: 1 1 auto;
259
+ min-width: 0;
260
+ }
261
+ .fanui-list-item__title {
262
+ font-weight: 500;
263
+ color: var(--fanui-color-text-strong);
264
+ overflow: hidden;
265
+ text-overflow: ellipsis;
266
+ white-space: nowrap;
267
+ }
268
+ .fanui-list-item__desc {
269
+ margin-top: 2px;
270
+ font-size: var(--fanui-font-size-sm);
271
+ color: var(--fanui-color-text-muted);
272
+ display: -webkit-box;
273
+ -webkit-line-clamp: 2;
274
+ -webkit-box-orient: vertical;
275
+ overflow: hidden;
276
+ text-overflow: ellipsis;
277
+ }
278
+ .fanui-list-item__meta {
279
+ flex: 0 0 auto;
280
+ font-size: var(--fanui-font-size-sm);
281
+ color: var(--fanui-color-text-subtle);
282
+ white-space: nowrap;
283
+ }
284
+ .fanui-list-item__action {
285
+ flex: 0 0 auto;
286
+ margin-inline-start: auto;
287
+ }
288
+ .fanui-list-item--sm {
289
+ padding: 6px 12px;
290
+ font-size: var(--fanui-font-size-sm);
291
+ }
292
+ .fanui-list-item--lg {
293
+ padding: var(--fanui-space-4) var(--fanui-space-5);
294
+ }
295
+
296
+ .fanui-list-header {
297
+ padding: var(--fanui-space-3) var(--fanui-space-4);
298
+ font-size: var(--fanui-font-size-xs);
299
+ font-weight: 600;
300
+ letter-spacing: 0.05em;
301
+ text-transform: uppercase;
302
+ color: var(--fanui-color-text-subtle);
303
+ background-color: var(--fanui-color-surface-sunken);
304
+ border-bottom: 1px solid var(--fanui-color-border);
305
+ }
306
+
307
+ .fanui-descriptions {
308
+ display: grid;
309
+ gap: var(--fanui-space-3) var(--fanui-space-6);
310
+ font-size: var(--fanui-font-size-base);
311
+ }
312
+ .fanui-descriptions__item {
313
+ min-width: 0;
314
+ }
315
+ .fanui-descriptions__label {
316
+ margin-bottom: 2px;
317
+ font-size: var(--fanui-font-size-sm);
318
+ color: var(--fanui-color-text-muted);
319
+ }
320
+ .fanui-descriptions__value {
321
+ color: var(--fanui-color-text-strong);
322
+ word-break: break-word;
323
+ }
324
+ .fanui-descriptions--2 {
325
+ grid-template-columns: repeat(2, minmax(0, 1fr));
326
+ }
327
+ .fanui-descriptions--3 {
328
+ grid-template-columns: repeat(3, minmax(0, 1fr));
329
+ }
330
+ .fanui-descriptions--4 {
331
+ grid-template-columns: repeat(4, minmax(0, 1fr));
332
+ }
333
+ @media (max-width: 767.95px) {
334
+ .fanui-descriptions--3, .fanui-descriptions--4 {
335
+ grid-template-columns: repeat(2, minmax(0, 1fr));
336
+ }
337
+ }
338
+ @media (max-width: 575.95px) {
339
+ .fanui-descriptions--2, .fanui-descriptions--3, .fanui-descriptions--4 {
340
+ grid-template-columns: minmax(0, 1fr);
341
+ }
342
+ }
343
+ .fanui-descriptions--inline {
344
+ display: flex;
345
+ flex-wrap: wrap;
346
+ gap: var(--fanui-space-5);
347
+ grid-template-columns: none;
348
+ }
349
+ .fanui-descriptions--inline .fanui-descriptions__item {
350
+ display: flex;
351
+ gap: 8px;
352
+ }
353
+ .fanui-descriptions--inline .fanui-descriptions__label {
354
+ margin-bottom: 0;
355
+ }
356
+
357
+ .fanui-pagination {
358
+ display: flex;
359
+ flex-wrap: wrap;
360
+ align-items: center;
361
+ gap: var(--fanui-space-1);
362
+ padding: 0;
363
+ margin: 0;
364
+ list-style: none;
365
+ }
366
+ .fanui-pagination__item {
367
+ display: inline-flex;
368
+ align-items: center;
369
+ justify-content: center;
370
+ min-width: 32px;
371
+ height: 32px;
372
+ padding: 0 8px;
373
+ font-size: var(--fanui-font-size-base);
374
+ font-weight: 500;
375
+ color: var(--fanui-color-text);
376
+ text-decoration: none;
377
+ background-color: transparent;
378
+ border: 1px solid var(--fanui-color-border);
379
+ border-radius: var(--fanui-radius-base);
380
+ cursor: pointer;
381
+ box-sizing: border-box;
382
+ user-select: none;
383
+ font-variant-numeric: tabular-nums;
384
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
385
+ }
386
+ .fanui-pagination__item:hover:not(.is-disabled):not([aria-disabled=true]):not(.is-active) {
387
+ color: var(--fanui-primary);
388
+ border-color: var(--fanui-primary);
389
+ background-color: var(--fanui-primary-soft);
390
+ text-decoration: none;
391
+ }
392
+ .fanui-pagination__item:focus-visible {
393
+ outline: 0;
394
+ box-shadow: 0 0 0 var(--fanui-focus-ring-offset, 1px) var(--fanui-color-surface, #fff), 0 0 0 calc(var(--fanui-focus-ring-offset, 1px) + var(--fanui-focus-ring-width, 3px)) var(--fanui-focus-ring-color, rgba(14, 116, 144, 0.3));
395
+ }
396
+ @media (forced-colors: active) {
397
+ .fanui-pagination__item:focus-visible {
398
+ outline: 2px solid transparent;
399
+ outline-offset: 2px;
400
+ }
401
+ }
402
+ .fanui-pagination__item.is-active, .fanui-pagination__item[aria-current=page] {
403
+ color: var(--fanui-primary-fg);
404
+ background-color: var(--fanui-primary);
405
+ border-color: var(--fanui-primary);
406
+ }
407
+ .fanui-pagination__item.is-disabled, .fanui-pagination__item[aria-disabled=true] {
408
+ color: var(--fanui-color-disabled-text);
409
+ cursor: not-allowed;
410
+ pointer-events: none;
411
+ }
412
+ .fanui-pagination__item--ellipsis {
413
+ border-color: transparent;
414
+ background: transparent;
415
+ color: var(--fanui-color-text-subtle);
416
+ cursor: default;
417
+ pointer-events: none;
418
+ }
419
+ .fanui-pagination__item--icon {
420
+ padding: 0;
421
+ }
422
+ .fanui-pagination__info {
423
+ margin-inline-start: var(--fanui-space-3);
424
+ font-size: var(--fanui-font-size-sm);
425
+ color: var(--fanui-color-text-muted);
426
+ }
427
+ .fanui-pagination--borderless .fanui-pagination__item {
428
+ border-color: transparent;
429
+ }
430
+ .fanui-pagination--pill .fanui-pagination__item {
431
+ border-radius: 9999px;
432
+ }
433
+ .fanui-pagination--sm .fanui-pagination__item {
434
+ min-width: 26px;
435
+ height: 26px;
436
+ font-size: var(--fanui-font-size-sm);
437
+ }
438
+ .fanui-pagination--lg .fanui-pagination__item {
439
+ min-width: 38px;
440
+ height: 38px;
441
+ font-size: var(--fanui-font-size-md);
442
+ }
443
+ .fanui-pagination--center {
444
+ justify-content: center;
445
+ }
446
+ .fanui-pagination--end {
447
+ justify-content: flex-end;
448
+ }
449
+ .fanui-pagination--simple {
450
+ gap: var(--fanui-space-2);
451
+ }
452
+ .fanui-pagination--simple .fanui-pagination__item {
453
+ border-color: transparent;
454
+ }
455
+
456
+ .fanui-pagination-page-size {
457
+ display: inline-flex;
458
+ align-items: center;
459
+ gap: var(--fanui-space-2);
460
+ font-size: var(--fanui-font-size-sm);
461
+ color: var(--fanui-color-text-muted);
462
+ }
463
+ .fanui-pagination-page-size .fanui-select {
464
+ width: auto;
465
+ min-width: 72px;
466
+ }
467
+
468
+ .fanui-steps {
469
+ --fanui-step-dot: 28px;
470
+ display: flex;
471
+ align-items: flex-start;
472
+ width: 100%;
473
+ list-style: none;
474
+ margin: 0;
475
+ padding: 0;
476
+ }
477
+ .fanui-steps__item {
478
+ position: relative;
479
+ flex: 1 1 0;
480
+ min-width: 0;
481
+ display: flex;
482
+ flex-direction: column;
483
+ align-items: center;
484
+ text-align: center;
485
+ gap: var(--fanui-space-2);
486
+ }
487
+ .fanui-steps__item:not(:last-child)::after {
488
+ content: "";
489
+ position: absolute;
490
+ top: calc(var(--fanui-step-dot) / 2);
491
+ left: calc(50% + var(--fanui-step-dot) / 2 + 6px);
492
+ right: calc(-50% + var(--fanui-step-dot) / 2 + 6px);
493
+ height: 2px;
494
+ background-color: var(--fanui-color-border);
495
+ transition: background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
496
+ }
497
+ .fanui-steps__item.is-done:not(:last-child)::after {
498
+ background-color: var(--fanui-primary);
499
+ }
500
+ .fanui-steps__dot {
501
+ display: inline-flex;
502
+ align-items: center;
503
+ justify-content: center;
504
+ flex: 0 0 auto;
505
+ width: var(--fanui-step-dot);
506
+ height: var(--fanui-step-dot);
507
+ font-size: var(--fanui-font-size-sm);
508
+ font-weight: 600;
509
+ line-height: 1;
510
+ color: var(--fanui-color-text-muted);
511
+ background-color: var(--fanui-color-surface);
512
+ border: 2px solid var(--fanui-color-border-strong);
513
+ border-radius: 50%;
514
+ box-sizing: border-box;
515
+ z-index: 1;
516
+ transition: color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s, border-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
517
+ }
518
+ .fanui-steps__title {
519
+ font-size: var(--fanui-font-size-base);
520
+ font-weight: 500;
521
+ color: var(--fanui-color-text-muted);
522
+ transition: color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
523
+ }
524
+ .fanui-steps__desc {
525
+ font-size: var(--fanui-font-size-sm);
526
+ color: var(--fanui-color-text-subtle);
527
+ line-height: 1.5;
528
+ }
529
+ .fanui-steps__item.is-active .fanui-steps__dot {
530
+ color: var(--fanui-primary-fg);
531
+ background-color: var(--fanui-primary);
532
+ border-color: var(--fanui-primary);
533
+ box-shadow: 0 0 0 4px var(--fanui-primary-soft);
534
+ }
535
+ .fanui-steps__item.is-active .fanui-steps__title {
536
+ color: var(--fanui-color-text-strong);
537
+ font-weight: 600;
538
+ }
539
+ .fanui-steps__item.is-done .fanui-steps__dot {
540
+ color: var(--fanui-primary-fg);
541
+ background-color: var(--fanui-primary);
542
+ border-color: var(--fanui-primary);
543
+ }
544
+ .fanui-steps__item.is-done .fanui-steps__title {
545
+ color: var(--fanui-color-text);
546
+ }
547
+ .fanui-steps__item.is-error .fanui-steps__dot {
548
+ color: var(--fanui-danger-fg);
549
+ background-color: var(--fanui-danger);
550
+ border-color: var(--fanui-danger);
551
+ }
552
+ .fanui-steps__item.is-error .fanui-steps__title {
553
+ color: var(--fanui-danger);
554
+ }
555
+ .fanui-steps--simple .fanui-steps__item:not(:last-child)::after {
556
+ left: calc(var(--fanui-step-dot) / 2 + 8px);
557
+ right: calc(-50% + var(--fanui-step-dot) / 2 + 12px);
558
+ }
559
+ .fanui-steps--navigation {
560
+ gap: var(--fanui-space-3);
561
+ align-items: stretch;
562
+ }
563
+ .fanui-steps--navigation .fanui-steps__item {
564
+ flex-direction: row;
565
+ align-items: flex-start;
566
+ text-align: start;
567
+ gap: var(--fanui-space-3);
568
+ padding: var(--fanui-space-3);
569
+ border: 1px solid var(--fanui-color-border);
570
+ border-radius: var(--fanui-radius-md);
571
+ cursor: pointer;
572
+ }
573
+ .fanui-steps--navigation .fanui-steps__item::after {
574
+ display: none;
575
+ }
576
+ .fanui-steps--navigation .fanui-steps__item:hover {
577
+ border-color: var(--fanui-primary);
578
+ }
579
+ .fanui-steps--navigation .fanui-steps__item.is-active {
580
+ border-color: var(--fanui-primary);
581
+ background-color: var(--fanui-primary-soft);
582
+ }
583
+ .fanui-steps--navigation .fanui-steps__dot {
584
+ margin-top: 1px;
585
+ }
586
+ .fanui-steps--vertical {
587
+ flex-direction: column;
588
+ gap: 0;
589
+ }
590
+ .fanui-steps--vertical .fanui-steps__item {
591
+ flex-direction: row;
592
+ align-items: flex-start;
593
+ text-align: start;
594
+ gap: var(--fanui-space-3);
595
+ padding-bottom: var(--fanui-space-5);
596
+ flex: 0 0 auto;
597
+ }
598
+ .fanui-steps--vertical .fanui-steps__item:not(:last-child)::after {
599
+ top: calc(var(--fanui-step-dot) + 4px);
600
+ left: calc(var(--fanui-step-dot) / 2 - 1px);
601
+ right: auto;
602
+ bottom: 4px;
603
+ width: 2px;
604
+ height: auto;
605
+ }
606
+ .fanui-steps--vertical .fanui-steps__item:last-child {
607
+ padding-bottom: 0;
608
+ }
609
+ .fanui-steps--vertical .fanui-steps__body {
610
+ text-align: start;
611
+ }
612
+ .fanui-steps__body {
613
+ min-width: 0;
614
+ }
615
+
616
+ .fanui-timeline {
617
+ position: relative;
618
+ list-style: none;
619
+ margin: 0;
620
+ padding: 0;
621
+ }
622
+ .fanui-timeline__item {
623
+ position: relative;
624
+ display: flex;
625
+ gap: var(--fanui-space-4);
626
+ padding-bottom: var(--fanui-space-5);
627
+ }
628
+ .fanui-timeline__item:last-child {
629
+ padding-bottom: 0;
630
+ }
631
+ .fanui-timeline__item:not(:last-child)::before {
632
+ content: "";
633
+ position: absolute;
634
+ top: 18px;
635
+ bottom: 0;
636
+ left: 6px;
637
+ width: 2px;
638
+ background-color: var(--fanui-color-border);
639
+ }
640
+ .fanui-timeline__dot {
641
+ position: relative;
642
+ flex: 0 0 auto;
643
+ width: 14px;
644
+ height: 14px;
645
+ margin-top: 4px;
646
+ background-color: var(--fanui-color-surface);
647
+ border: 2px solid var(--fanui-color-border-strong);
648
+ border-radius: 50%;
649
+ box-sizing: border-box;
650
+ z-index: 1;
651
+ }
652
+ .fanui-timeline__dot--primary {
653
+ background-color: var(--fanui-primary);
654
+ border-color: var(--fanui-primary);
655
+ }
656
+ .fanui-timeline__dot--success {
657
+ background-color: var(--fanui-success);
658
+ border-color: var(--fanui-success);
659
+ }
660
+ .fanui-timeline__dot--warning {
661
+ background-color: var(--fanui-warning);
662
+ border-color: var(--fanui-warning);
663
+ }
664
+ .fanui-timeline__dot--danger {
665
+ background-color: var(--fanui-danger);
666
+ border-color: var(--fanui-danger);
667
+ }
668
+ .fanui-timeline__body {
669
+ flex: 1 1 auto;
670
+ min-width: 0;
671
+ }
672
+ .fanui-timeline__time {
673
+ font-size: var(--fanui-font-size-sm);
674
+ color: var(--fanui-color-text-subtle);
675
+ font-variant-numeric: tabular-nums;
676
+ }
677
+ .fanui-timeline__title {
678
+ font-size: var(--fanui-font-size-base);
679
+ font-weight: 600;
680
+ color: var(--fanui-color-text-strong);
681
+ }
682
+ .fanui-timeline__desc {
683
+ margin-top: 4px;
684
+ font-size: var(--fanui-font-size-base);
685
+ line-height: 1.6;
686
+ color: var(--fanui-color-text-muted);
687
+ }