weifuwu 0.68.0 → 0.70.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.
@@ -42,6 +42,8 @@
42
42
  --wf-dark-slate-300: #475569; --wf-dark-slate-200: #334155; --wf-dark-slate-100: #1e293b;
43
43
  --wf-dark-slate-50: #0f172a; --wf-dark-bg: #0f172a;
44
44
  --wf-dark-overlay: rgba(0, 0, 0, 0.6); /* 暗色遮罩(比亮色更深,压住暗底内容) */
45
+ --wf-dark-fill: var(--wf-dark-slate-200); /* 暗色填充(比底色亮一级) */
46
+ --wf-dark-bg-hover: rgba(255, 255, 255, 0.06); /* 暗色 hover 反白 */
45
47
  --wf-dark-surface-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
46
48
  --wf-dark-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
47
49
  --wf-dark-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
@@ -192,6 +194,8 @@
192
194
  --wf-ease-in: cubic-bezier(0.4, 0, 1, 1); /* 退场:渐入加速 */
193
195
  --wf-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); /* 往返/闪烁动画 */
194
196
  --wf-ease-snap: cubic-bezier(0.34, 1.56, 0.64, 1); /* 选中/弹跳 */
197
+ --wf-ease-standard: ease; /* 通用缓动(组件假 token 收敛) */
198
+ --wf-dur-md: var(--wf-dur-base); /* 中档时长(= base 别名) */
195
199
 
196
200
  --wf-motion-sm: 4px;
197
201
  --wf-motion-md: 8px;
@@ -208,6 +212,11 @@
208
212
  --wf-color-error-text: var(--wf-red-700);
209
213
  --wf-color-info-text: var(--wf-sky-700);
210
214
 
215
+ /* ── 色彩 — 通用填充/悬停底色(暗色经 _dark.css 映射) ── */
216
+ --wf-color-fill: var(--wf-slate-100); /* 通用填充色(禁裸灰——组件假 token 收敛) */
217
+ --wf-color-bg-subtle: var(--wf-color-fill); /* 极淡底(别名) */
218
+ --wf-color-bg-hover: rgba(0, 0, 0, 0.04); /* hover 底色(暗色反白) */
219
+
211
220
  /* ── 色彩 — 实心填充上的文字/图标(primary/success 等实心底色) ── */
212
221
  --wf-color-on-brand: #fff;
213
222
 
@@ -221,6 +230,9 @@
221
230
  /* 控件尺寸:垂直内边距 + 目标高度(移动端在 _base.css 提升到 44px) */
222
231
  --wf-control-pad-y: 10px;
223
232
  --wf-control-height: 36px;
233
+ /* 字段统一尺寸(组件假 token 收敛——Input/Select/Textarea 引用) */
234
+ --wf-field-height: var(--wf-control-height);
235
+ --wf-field-radius: var(--wf-radius);
224
236
 
225
237
  /* ── 断点 ── */
226
238
  --wf-bp-sm: 640px;
@@ -281,6 +293,9 @@
281
293
  --wf-color-bg: var(--wf-dark-bg);
282
294
  --wf-color-bg-secondary: var(--wf-dark-slate-100);
283
295
  --wf-color-bg-tertiary: var(--wf-dark-slate-200);
296
+ --wf-color-fill: var(--wf-dark-fill);
297
+ --wf-color-bg-subtle: var(--wf-dark-fill);
298
+ --wf-color-bg-hover: var(--wf-dark-bg-hover);
284
299
 
285
300
  --wf-color-border: var(--wf-dark-slate-200);
286
301
  --wf-color-border-light: var(--wf-dark-slate-100);
@@ -328,6 +343,9 @@
328
343
  --wf-color-bg: var(--wf-dark-bg);
329
344
  --wf-color-bg-secondary: var(--wf-dark-slate-100);
330
345
  --wf-color-bg-tertiary: var(--wf-dark-slate-200);
346
+ --wf-color-fill: var(--wf-dark-fill);
347
+ --wf-color-bg-subtle: var(--wf-dark-fill);
348
+ --wf-color-bg-hover: var(--wf-dark-bg-hover);
331
349
 
332
350
  --wf-color-border: var(--wf-dark-slate-200);
333
351
  --wf-color-border-light: var(--wf-dark-slate-100);
@@ -622,6 +640,19 @@ body.wf-dragging {
622
640
  }
623
641
  }
624
642
 
643
+ @layer layout {
644
+ /* between — 两端对齐(行内垂直居中) */
645
+ .wf-between {
646
+ display: flex;
647
+ justify-content: space-between;
648
+ align-items: var(--wf-align, center);
649
+ gap: var(--wf-gap, var(--wf-gap-md));
650
+ }
651
+ @media (min-width: 640px) { .wf-between\@sm { display: flex; justify-content: space-between; align-items: var(--wf-align, center); gap: var(--wf-gap, var(--wf-gap-md)); } }
652
+ @media (min-width: 768px) { .wf-between\@md { display: flex; justify-content: space-between; align-items: var(--wf-align, center); gap: var(--wf-gap, var(--wf-gap-md)); } }
653
+ @media (min-width: 1024px) { .wf-between\@lg { display: flex; justify-content: space-between; align-items: var(--wf-align, center); gap: var(--wf-gap, var(--wf-gap-md)); } }
654
+ }
655
+
625
656
  @layer layout {
626
657
  /* right — 靠右对齐 */
627
658
  .wf-right {
@@ -693,6 +724,12 @@ body.wf-dragging {
693
724
  .wf-fixed {
694
725
  flex: none;
695
726
  }
727
+
728
+ /* pin — 固定定位(角标/浮层锚点——position: fixed,坐标由 inline 参数控制) */
729
+ .wf-pin {
730
+ position: fixed;
731
+ z-index: var(--wf-z, var(--wf-cover-z));
732
+ }
696
733
  }
697
734
 
698
735
  @layer layout {
@@ -902,7 +939,7 @@ body.wf-dragging {
902
939
  }
903
940
  }
904
941
 
905
- @layer layout {
942
+ @layer utilities {
906
943
  /* block — 块级显示 */
907
944
  .wf-block {
908
945
  display: block;
@@ -928,7 +965,10 @@ body.wf-dragging {
928
965
 
929
966
  @layer layout {
930
967
  /* container — 内容宽度约束居中 */
968
+ /* width: 100% 必须:margin: 0 auto 在 flex 父中阻止 stretch(宽度=内容)
969
+ ——landing 特性区 404px 而非撑满 1100 容器的根因 */
931
970
  .wf-container {
971
+ width: 100%;
932
972
  max-width: var(--wf-max, 1200px);
933
973
  margin: 0 auto;
934
974
  padding: 0 var(--wf-gap, var(--wf-gap-lg));
@@ -951,12 +991,12 @@ body.wf-dragging {
951
991
  }
952
992
 
953
993
  @layer layout {
954
- /* nowrap — 不换行 */
994
+ /* nowrap — 不换行(只管 flex-wrap——不定义 align-items,避免与
995
+ wf-stretch 等对齐工具叠加冲突:双份 CSS 下 nowrap 后置曾覆盖 stretch) */
955
996
  .wf-nowrap {
956
997
  display: flex;
957
998
  flex-wrap: nowrap;
958
999
  gap: var(--wf-gap, var(--wf-gap-md));
959
- align-items: var(--wf-align, center);
960
1000
  }
961
1001
  }
962
1002
 
@@ -1028,19 +1068,30 @@ body.wf-dragging {
1028
1068
  .wf-mx-auto { margin-left: auto; margin-right: auto; }
1029
1069
  .wf-my-auto { margin-top: auto; margin-bottom: auto; }
1030
1070
 
1031
- /* ── gap:为 flex/grid 原语设置间距变量 ── */
1032
- .wf-gap-none { --wf-gap: 0; }
1033
- .wf-gap-xs { --wf-gap: var(--wf-gap-xs); }
1034
- .wf-gap-sm { --wf-gap: var(--wf-gap-sm); }
1035
- .wf-gap-md { --wf-gap: var(--wf-gap-md); }
1036
- .wf-gap-lg { --wf-gap: var(--wf-gap-lg); }
1037
- .wf-gap-xl { --wf-gap: var(--wf-gap-xl); }
1038
- .wf-gap-2xl { --wf-gap: var(--wf-gap-2xl); }
1071
+ /* ── gap:直接设置 gap 属性(不设 --wf-gap 变量——变量会继承污染子孙:
1072
+ 壳 root wf-gap-none 曾让 KPI grid 的 gap: var(--wf-gap) = 0 卡无间距) ── */
1073
+ .wf-gap-none { gap: 0; }
1074
+ .wf-gap-xs { gap: var(--wf-gap-xs); }
1075
+ .wf-gap-sm { gap: var(--wf-gap-sm); }
1076
+ .wf-gap-md { gap: var(--wf-gap-md); }
1077
+ .wf-gap-lg { gap: var(--wf-gap-lg); }
1078
+ .wf-gap-xl { gap: var(--wf-gap-xl); }
1079
+ .wf-gap-2xl { gap: var(--wf-gap-2xl); }
1039
1080
 
1040
1081
  /* ── 尺寸 ── */
1041
1082
  .wf-w-full { width: 100%; }
1042
1083
  .wf-h-full { height: 100%; }
1043
1084
  .wf-w-auto { width: auto; }
1085
+
1086
+ /* ── 固定宽度阶梯(对齐 token 阶梯——卡片/面板/容器宽不再内联) ── */
1087
+ .wf-w-xs { width: var(--wf-w-xs, 320px); }
1088
+ .wf-w-sm { width: var(--wf-w-sm, 480px); }
1089
+ .wf-w-md { width: var(--wf-w-md, 640px); }
1090
+ .wf-w-lg { width: var(--wf-w-lg, 768px); }
1091
+ .wf-w-xl { width: var(--wf-w-xl, 1024px); }
1092
+ .wf-w-max { max-width: 100%; }
1093
+ .wf-w-md-auto { width: 100%; }
1094
+ @media (min-width: 768px) { .wf-w-md-auto { width: var(--wf-w-md, 640px); } }
1044
1095
  }
1045
1096
 
1046
1097
  @layer layout {
@@ -1159,6 +1210,23 @@ body.wf-dragging {
1159
1210
  display: inline-flex;
1160
1211
  }
1161
1212
 
1213
+ /* ── 折叠态:图标-only 导航(配合 --wf-sidebar-width 收窄侧栏) ── */
1214
+ .wf-nav--collapsed .wf-nav-item {
1215
+ justify-content: center;
1216
+ gap: 0;
1217
+ padding: var(--wf-space-sm);
1218
+ }
1219
+ .wf-nav--collapsed .wf-nav-label {
1220
+ display: none;
1221
+ }
1222
+ .wf-nav--collapsed .wf-nav-group {
1223
+ text-align: center;
1224
+ padding-left: 0;
1225
+ padding-right: 0;
1226
+ overflow: hidden;
1227
+ white-space: nowrap;
1228
+ }
1229
+
1162
1230
  /* ── 主内容区 ── */
1163
1231
  .wf-main {
1164
1232
  padding: var(--wf-space-lg);
@@ -1664,7 +1732,7 @@ body.wf-dragging {
1664
1732
  border: var(--wf-border-width, 1px) solid var(--wf-color-border);
1665
1733
  border-radius: var(--wf-surface-radius, 8px);
1666
1734
  background: var(--wf-color-bg-secondary, #fff);
1667
- color: var(--wf-color-primary-600, #1668dc);
1735
+ color: var(--wf-color-primary, #1668dc);
1668
1736
  cursor: pointer;
1669
1737
  font-family: var(--wf-font-sans);
1670
1738
  transition: background var(--wf-dur-fast, 0.15s) var(--wf-ease-standard, ease);
@@ -1686,15 +1754,15 @@ body.wf-dragging {
1686
1754
 
1687
1755
  .wf-alertgroup-item--success { border-left-color: var(--wf-color-success); }
1688
1756
  .wf-alertgroup-item--warning { border-left-color: var(--wf-color-warning); }
1689
- .wf-alertgroup-item--error { border-left-color: var(--wf-color-danger); }
1757
+ .wf-alertgroup-item--error { border-left-color: var(--wf-color-error); }
1690
1758
 
1691
1759
  .wf-alertgroup-message {
1692
1760
  flex: 1;
1693
- color: var(--wf-color-text-primary);
1761
+ color: var(--wf-color-text);
1694
1762
  }
1695
1763
 
1696
1764
  .wf-alertgroup-time {
1697
- color: var(--wf-color-text-muted, #999);
1765
+ color: var(--wf-color-text-tertiary, #999);
1698
1766
  font-size: 12px;
1699
1767
  }
1700
1768
 
@@ -1709,14 +1777,14 @@ body.wf-dragging {
1709
1777
  padding: 0;
1710
1778
  border: none;
1711
1779
  background: transparent;
1712
- color: var(--wf-color-text-muted, #999);
1780
+ color: var(--wf-color-text-tertiary, #999);
1713
1781
  cursor: pointer;
1714
1782
  border-radius: 4px;
1715
1783
  }
1716
1784
 
1717
1785
  .wf-alertgroup-close:hover {
1718
1786
  background: var(--wf-color-bg-hover, rgba(0, 0, 0, 0.04));
1719
- color: var(--wf-color-text-primary);
1787
+ color: var(--wf-color-text);
1720
1788
  }
1721
1789
 
1722
1790
  /* weifuwu/components — Anchor(锚点导航) */
@@ -1880,7 +1948,7 @@ body.wf-dragging {
1880
1948
  .wf-autocomplete-option {
1881
1949
  padding: 8px 12px;
1882
1950
  cursor: pointer;
1883
- color: var(--wf-color-text-primary);
1951
+ color: var(--wf-color-text);
1884
1952
  white-space: nowrap;
1885
1953
  overflow: hidden;
1886
1954
  text-overflow: ellipsis;
@@ -1893,7 +1961,7 @@ body.wf-dragging {
1893
1961
  }
1894
1962
 
1895
1963
  .wf-autocomplete-option--active {
1896
- color: var(--wf-color-primary-600, #1668dc);
1964
+ color: var(--wf-color-primary, #1668dc);
1897
1965
  }
1898
1966
 
1899
1967
  /* weifuwu/components — Avatar */
@@ -2239,7 +2307,7 @@ body.wf-dragging {
2239
2307
  margin-top: 2px;
2240
2308
  font-size: var(--wf-font-size-xs);
2241
2309
  color: var(--wf-color-text);
2242
- background: var(--wf-event-color, var(--wf-color-primary-bg));
2310
+ background: var(--wf-color-primary-bg, var(--wf-color-primary-bg));
2243
2311
  color: var(--wf-color-primary-text);
2244
2312
  border-radius: var(--wf-radius-sm);
2245
2313
  padding: 1px 4px;
@@ -2799,6 +2867,15 @@ body.wf-dragging {
2799
2867
  white-space: pre;
2800
2868
  }
2801
2869
 
2870
+ /* ── 语法高亮(自研 tokenizer——语义色 token 亮暗双适配,P2 纪律 -text 变体) ── */
2871
+ .wf-hl-comment { color: var(--wf-color-success-text); font-style: italic; }
2872
+ .wf-hl-string { color: var(--wf-color-warning-text); }
2873
+ .wf-hl-keyword { color: var(--wf-color-primary-text); font-weight: 500; }
2874
+ .wf-hl-number { color: var(--wf-color-info-text); }
2875
+ .wf-hl-function { color: var(--wf-color-primary-text); }
2876
+ .wf-hl-jsx-tag { color: var(--wf-color-error-text); }
2877
+ .wf-hl-operator { color: var(--wf-color-text-tertiary); }
2878
+
2802
2879
  /* weifuwu/components — Collapse */
2803
2880
 
2804
2881
  .wf-collapse {
@@ -3579,7 +3656,7 @@ body.wf-dragging {
3579
3656
  flex-shrink: 0;
3580
3657
  }
3581
3658
  .wf-diffview-title--old {
3582
- color: var(--wf-color-danger-text);
3659
+ color: var(--wf-color-error-text);
3583
3660
  }
3584
3661
  .wf-diffview-title--new {
3585
3662
  color: var(--wf-color-success-text);
@@ -3619,10 +3696,10 @@ body.wf-dragging {
3619
3696
  color: var(--wf-color-success-text);
3620
3697
  }
3621
3698
  .wf-diffview-row--remove {
3622
- background: var(--wf-color-danger-bg, rgba(255, 0, 0, 0.06));
3699
+ background: var(--wf-color-error-bg, rgba(255, 0, 0, 0.06));
3623
3700
  }
3624
3701
  .wf-diffview-row--remove .wf-diffview-sign {
3625
- color: var(--wf-color-danger-text);
3702
+ color: var(--wf-color-error-text);
3626
3703
  }
3627
3704
 
3628
3705
  /* ── 折叠块 ── */
@@ -3858,6 +3935,8 @@ body.wf-dragging {
3858
3935
  box-shadow: var(--wf-shadow-md);
3859
3936
  z-index: var(--wf-z-dropdown);
3860
3937
  padding: var(--wf-space-xs) 0;
3938
+
3939
+ transform: translateX(-50%);
3861
3940
  }
3862
3941
 
3863
3942
  .wf-dropdown--open {
@@ -3891,11 +3970,16 @@ body.wf-dragging {
3891
3970
  color: var(--wf-color-error-text);
3892
3971
  }
3893
3972
 
3894
- /* ── 入场动画:面板族统一 wf-panel-in(scale+fade,Token 驱动) ── */
3973
+ /* ── 入场动画:fade-only(wf-panel-in 含 transform——覆盖定位 translateX(-50%)
3974
+ 动画期间右偏,结束归位 = 跳一下——真实 bug,对齐 Popconfirm 修复) ── */
3895
3975
  .wf-dropdown-menu {
3896
- animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
3976
+ animation: wf-dropdown-in var(--wf-dur-fast) var(--wf-ease-out);
3897
3977
  transform-origin: top center;
3898
3978
  }
3979
+ @keyframes wf-dropdown-in {
3980
+ from { opacity: 0; }
3981
+ to { opacity: 1; }
3982
+ }
3899
3983
 
3900
3984
  /* weifuwu/components — Editor */
3901
3985
 
@@ -3960,7 +4044,7 @@ body.wf-dragging {
3960
4044
  }
3961
4045
 
3962
4046
  .wf-editor-tb-btn--active:hover {
3963
- background: var(--wf-color-primary-lighter, #bae6fd);
4047
+ background: var(--wf-color-primary-bg, #bae6fd);
3964
4048
  }
3965
4049
 
3966
4050
  .wf-editor-tb-btn--link {
@@ -4196,7 +4280,7 @@ body.wf-dragging {
4196
4280
 
4197
4281
  .wf-editor-table-grid-cell:hover,
4198
4282
  .wf-editor-table-grid-cell--active {
4199
- background: var(--wf-color-primary-light, #e0f2fe);
4283
+ background: var(--wf-color-primary-bg, #e0f2fe);
4200
4284
  border-color: var(--wf-color-primary);
4201
4285
  }
4202
4286
 
@@ -4262,23 +4346,35 @@ body.wf-dragging {
4262
4346
  gap: var(--wf-gap-xs);
4263
4347
  }
4264
4348
 
4265
- .wf-field-label {
4349
+ .wf-field-label,
4350
+ .wf-input-label,
4351
+ .wf-select-label,
4352
+ .wf-textarea-label,
4353
+ .wf-slider-label {
4266
4354
  font-size: var(--wf-font-size-sm);
4267
4355
  font-weight: var(--wf-font-weight-medium);
4268
4356
  color: var(--wf-color-text);
4269
4357
  }
4270
4358
 
4271
- .wf-field-req {
4359
+ .wf-field-req,
4360
+ .wf-input-req,
4361
+ .wf-select-req,
4362
+ .wf-textarea-req {
4272
4363
  color: var(--wf-color-error-text);
4273
4364
  margin-left: 2px;
4274
4365
  }
4275
4366
 
4276
- .wf-field-err {
4367
+ .wf-field-err,
4368
+ .wf-input-err,
4369
+ .wf-select-err,
4370
+ .wf-textarea-err {
4277
4371
  font-size: var(--wf-font-size-xs);
4278
4372
  color: var(--wf-color-error-text);
4279
4373
  }
4280
4374
 
4281
- .wf-field-hint {
4375
+ .wf-field-hint,
4376
+ .wf-input-hint,
4377
+ .wf-textarea-hint {
4282
4378
  font-size: var(--wf-font-size-xs);
4283
4379
  color: var(--wf-color-text-tertiary);
4284
4380
  }
@@ -4481,7 +4577,7 @@ body.wf-dragging {
4481
4577
 
4482
4578
  .wf-float-btn:hover {
4483
4579
  transform: scale(1.05);
4484
- background: var(--wf-color-primary-600, #1668dc);
4580
+ background: var(--wf-color-primary, #1668dc);
4485
4581
  }
4486
4582
 
4487
4583
  .wf-float-btn--disabled {
@@ -4503,7 +4599,7 @@ body.wf-dragging {
4503
4599
  height: 18px;
4504
4600
  padding: 0 5px;
4505
4601
  border-radius: 50%;
4506
- background: var(--wf-color-danger);
4602
+ background: var(--wf-color-error);
4507
4603
  color: var(--wf-color-on-brand, #fff);
4508
4604
  font-size: 11px;
4509
4605
  line-height: 18px;
@@ -4756,17 +4852,6 @@ body.wf-dragging {
4756
4852
  gap: var(--wf-gap-xs);
4757
4853
  }
4758
4854
 
4759
- .wf-input-label {
4760
- font-size: var(--wf-font-size-sm);
4761
- font-weight: var(--wf-font-weight-medium);
4762
- color: var(--wf-color-text);
4763
- }
4764
-
4765
- .wf-input-req {
4766
- color: var(--wf-color-error-text);
4767
- margin-left: 2px;
4768
- }
4769
-
4770
4855
  .wf-input {
4771
4856
  font-family: var(--wf-font-sans);
4772
4857
  font-size: var(--wf-font-size-sm);
@@ -4814,16 +4899,6 @@ body.wf-dragging {
4814
4899
  color: var(--wf-color-text-tertiary);
4815
4900
  }
4816
4901
 
4817
- .wf-input-err {
4818
- font-size: var(--wf-font-size-xs);
4819
- color: var(--wf-color-error-text);
4820
- }
4821
-
4822
- .wf-input-hint {
4823
- font-size: var(--wf-font-size-xs);
4824
- color: var(--wf-color-text-tertiary);
4825
- }
4826
-
4827
4902
  .wf-input--err .wf-input {
4828
4903
  border-color: var(--wf-color-error);
4829
4904
  }
@@ -5232,8 +5307,8 @@ body.wf-dragging {
5232
5307
  display: flex;
5233
5308
  width: 100%;
5234
5309
  min-height: 100%;
5235
- background: var(--wf-color-bg-base, #f5f5f5);
5236
- color: var(--wf-color-text-primary);
5310
+ background: var(--wf-color-bg, #f5f5f5);
5311
+ color: var(--wf-color-text);
5237
5312
  font-family: var(--wf-font-sans);
5238
5313
  }
5239
5314
 
@@ -5336,7 +5411,7 @@ body.wf-dragging {
5336
5411
  gap: 4px;
5337
5412
  text-decoration: underline;
5338
5413
  text-underline-offset: 3px;
5339
- color: var(--wf-color-primary-600, #1668dc);
5414
+ color: var(--wf-color-primary, #1668dc);
5340
5415
  cursor: pointer;
5341
5416
  font-family: var(--wf-font-sans);
5342
5417
  font-size: var(--wf-font-size-sm, 13px);
@@ -5344,25 +5419,25 @@ body.wf-dragging {
5344
5419
  }
5345
5420
 
5346
5421
  .wf-link:hover {
5347
- color: var(--wf-color-primary-600, #1668dc);
5422
+ color: var(--wf-color-primary, #1668dc);
5348
5423
  }
5349
5424
 
5350
5425
  .wf-link--default {
5351
5426
  color: var(--wf-color-text-secondary);
5352
5427
  }
5353
5428
  .wf-link--default:hover {
5354
- color: var(--wf-color-text-primary);
5429
+ color: var(--wf-color-text);
5355
5430
  }
5356
5431
 
5357
5432
  .wf-link--danger {
5358
- color: var(--wf-color-danger-text, #cf1322);
5433
+ color: var(--wf-color-error-text, #cf1322);
5359
5434
  }
5360
5435
  .wf-link--danger:hover {
5361
- color: var(--wf-color-danger-600, #a8071a);
5436
+ color: var(--wf-color-error-text, #a8071a);
5362
5437
  }
5363
5438
 
5364
5439
  .wf-link--muted {
5365
- color: var(--wf-color-text-muted, #999);
5440
+ color: var(--wf-color-text-tertiary, #999);
5366
5441
  text-decoration: none;
5367
5442
  }
5368
5443
  .wf-link--muted:hover {
@@ -6105,11 +6180,11 @@ body.wf-dragging {
6105
6180
 
6106
6181
  .wf-navmenu-item:hover {
6107
6182
  background: var(--wf-color-bg-hover, rgba(0, 0, 0, 0.04));
6108
- color: var(--wf-color-text-primary);
6183
+ color: var(--wf-color-text);
6109
6184
  }
6110
6185
 
6111
6186
  .wf-navmenu-item--active {
6112
- color: var(--wf-color-primary-600, #1668dc);
6187
+ color: var(--wf-color-primary, #1668dc);
6113
6188
  font-weight: 600;
6114
6189
  }
6115
6190
 
@@ -6151,7 +6226,7 @@ body.wf-dragging {
6151
6226
  gap: 12px;
6152
6227
  padding: 8px 12px;
6153
6228
  border-radius: var(--wf-radius, 6px);
6154
- color: var(--wf-color-text-primary);
6229
+ color: var(--wf-color-text);
6155
6230
  cursor: pointer;
6156
6231
  white-space: nowrap;
6157
6232
  transition: background var(--wf-dur-fast, 0.15s) var(--wf-ease-standard, ease);
@@ -6167,7 +6242,7 @@ body.wf-dragging {
6167
6242
  }
6168
6243
 
6169
6244
  .wf-navmenu-sub-arrow {
6170
- color: var(--wf-color-text-muted, #999);
6245
+ color: var(--wf-color-text-tertiary, #999);
6171
6246
  }
6172
6247
 
6173
6248
  .wf-navmenu-sub-nested {
@@ -6511,9 +6586,9 @@ body.wf-dragging {
6511
6586
  background: var(--wf-color-primary-bg, rgba(79, 110, 247, 0.08));
6512
6587
  }
6513
6588
  .wf-pipeline-node--error {
6514
- border-color: var(--wf-color-danger-text);
6515
- color: var(--wf-color-danger-text);
6516
- background: var(--wf-color-danger-bg, rgba(255, 0, 0, 0.06));
6589
+ border-color: var(--wf-color-error-text);
6590
+ color: var(--wf-color-error-text);
6591
+ background: var(--wf-color-error-bg, rgba(255, 0, 0, 0.06));
6517
6592
  }
6518
6593
  .wf-pipeline-node--pending {
6519
6594
  border-color: var(--wf-color-border);
@@ -6550,6 +6625,11 @@ body.wf-dragging {
6550
6625
  font-size: var(--wf-font-size-sm, 13px);
6551
6626
  }
6552
6627
 
6628
+ .wf-popconfirm--bottom { transform: translateX(-50%); }
6629
+ .wf-popconfirm--top { transform: translateX(-50%) translateY(-100%); }
6630
+ .wf-popconfirm--left { transform: translateY(-50%) translateX(-100%); }
6631
+ .wf-popconfirm--right { transform: translateY(-50%); }
6632
+
6553
6633
  .wf-popconfirm--enter {
6554
6634
  animation: wf-popconfirm-in var(--wf-dur-md, 0.2s) var(--wf-ease-standard, ease);
6555
6635
  }
@@ -6558,14 +6638,17 @@ body.wf-dragging {
6558
6638
  animation: wf-popconfirm-out var(--wf-dur-md, 0.2s) var(--wf-ease-standard, ease) forwards;
6559
6639
  }
6560
6640
 
6641
+ /* 入场/退场只 fade(opacity)——transform 由定位类独占:
6642
+ 动画含 transform 会覆盖 .wf-popconfirm--top 的 translateX(-50%)
6643
+ translateY(-100%)——动画期间弹层右偏/跳位,结束才归位(真实 bug) */
6561
6644
  @keyframes wf-popconfirm-in {
6562
- from { opacity: 0; transform: translateY(-4px) scale(0.98); }
6563
- to { opacity: 1; transform: translateY(0) scale(1); }
6645
+ from { opacity: 0; }
6646
+ to { opacity: 1; }
6564
6647
  }
6565
6648
 
6566
6649
  @keyframes wf-popconfirm-out {
6567
6650
  from { opacity: 1; }
6568
- to { opacity: 0; transform: scale(0.98); }
6651
+ to { opacity: 0; }
6569
6652
  }
6570
6653
 
6571
6654
  .wf-popconfirm-title {
@@ -6573,7 +6656,7 @@ body.wf-dragging {
6573
6656
  align-items: flex-start;
6574
6657
  gap: var(--wf-gap-xs, 8px);
6575
6658
  margin-bottom: var(--wf-space-xs, 8px);
6576
- color: var(--wf-color-text-primary);
6659
+ color: var(--wf-color-text);
6577
6660
  line-height: 1.5;
6578
6661
  }
6579
6662
 
@@ -6943,7 +7026,7 @@ body.wf-dragging {
6943
7026
  }
6944
7027
 
6945
7028
  .wf-scrollbar::-webkit-scrollbar-thumb:hover {
6946
- background: var(--wf-color-text-muted, #999);
7029
+ background: var(--wf-color-text-tertiary, #999);
6947
7030
  }
6948
7031
 
6949
7032
  /* weifuwu/components — SearchInput */
@@ -7086,17 +7169,6 @@ body.wf-dragging {
7086
7169
  position: relative;
7087
7170
  }
7088
7171
 
7089
- .wf-select-label {
7090
- font-size: var(--wf-font-size-sm);
7091
- font-weight: var(--wf-font-weight-medium);
7092
- color: var(--wf-color-text);
7093
- }
7094
-
7095
- .wf-select-req {
7096
- color: var(--wf-color-error-text);
7097
- margin-left: 2px;
7098
- }
7099
-
7100
7172
  /* ── 原生 select ── */
7101
7173
 
7102
7174
  .wf-select {
@@ -7125,11 +7197,6 @@ body.wf-dragging {
7125
7197
  cursor: not-allowed;
7126
7198
  }
7127
7199
 
7128
- .wf-select-err {
7129
- font-size: var(--wf-font-size-xs);
7130
- color: var(--wf-color-error-text);
7131
- }
7132
-
7133
7200
  .wf-select--err .wf-select {
7134
7201
  border-color: var(--wf-color-error);
7135
7202
  }
@@ -7359,12 +7426,6 @@ body.wf-dragging {
7359
7426
  gap: var(--wf-gap-xs);
7360
7427
  }
7361
7428
 
7362
- .wf-slider-label {
7363
- font-size: var(--wf-font-size-sm);
7364
- font-weight: var(--wf-font-weight-medium);
7365
- color: var(--wf-color-text);
7366
- }
7367
-
7368
7429
  .wf-slider {
7369
7430
  display: flex;
7370
7431
  align-items: center;
@@ -7434,7 +7495,7 @@ body.wf-dragging {
7434
7495
  }
7435
7496
 
7436
7497
  .wf-space-split {
7437
- color: var(--wf-color-text-muted, #999);
7498
+ color: var(--wf-color-text-tertiary, #999);
7438
7499
  }
7439
7500
 
7440
7501
  .wf-sparkline {
@@ -7883,17 +7944,6 @@ body.wf-dragging {
7883
7944
  gap: var(--wf-gap-xs);
7884
7945
  }
7885
7946
 
7886
- .wf-textarea-label {
7887
- font-size: var(--wf-font-size-sm);
7888
- font-weight: var(--wf-font-weight-medium);
7889
- color: var(--wf-color-text);
7890
- }
7891
-
7892
- .wf-textarea-req {
7893
- color: var(--wf-color-error-text);
7894
- margin-left: 2px;
7895
- }
7896
-
7897
7947
  .wf-textarea {
7898
7948
  font-family: var(--wf-font-sans);
7899
7949
  font-size: var(--wf-font-size-sm);
@@ -7924,16 +7974,6 @@ body.wf-dragging {
7924
7974
  color: var(--wf-color-text-tertiary);
7925
7975
  }
7926
7976
 
7927
- .wf-textarea-err {
7928
- font-size: var(--wf-font-size-xs);
7929
- color: var(--wf-color-error-text);
7930
- }
7931
-
7932
- .wf-textarea-hint {
7933
- font-size: var(--wf-font-size-xs);
7934
- color: var(--wf-color-text-tertiary);
7935
- }
7936
-
7937
7977
  /* 字数统计 */
7938
7978
  .wf-textarea-count {
7939
7979
  font-size: var(--wf-font-size-xs);
@@ -8531,7 +8571,8 @@ body.wf-dragging {
8531
8571
  .wf-transfer {
8532
8572
  display: flex;
8533
8573
  align-items: stretch;
8534
- gap: var(--wf-gap);
8574
+ /* wf-gap-* 改直接 gap 后 --wf-gap 无继承来源——加 fallback */
8575
+ gap: var(--wf-gap, var(--wf-gap-md));
8535
8576
  font-family: var(--wf-font-sans);
8536
8577
  }
8537
8578