weifuwu 0.68.0 → 0.69.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);
@@ -1664,7 +1682,7 @@ body.wf-dragging {
1664
1682
  border: var(--wf-border-width, 1px) solid var(--wf-color-border);
1665
1683
  border-radius: var(--wf-surface-radius, 8px);
1666
1684
  background: var(--wf-color-bg-secondary, #fff);
1667
- color: var(--wf-color-primary-600, #1668dc);
1685
+ color: var(--wf-color-primary, #1668dc);
1668
1686
  cursor: pointer;
1669
1687
  font-family: var(--wf-font-sans);
1670
1688
  transition: background var(--wf-dur-fast, 0.15s) var(--wf-ease-standard, ease);
@@ -1686,15 +1704,15 @@ body.wf-dragging {
1686
1704
 
1687
1705
  .wf-alertgroup-item--success { border-left-color: var(--wf-color-success); }
1688
1706
  .wf-alertgroup-item--warning { border-left-color: var(--wf-color-warning); }
1689
- .wf-alertgroup-item--error { border-left-color: var(--wf-color-danger); }
1707
+ .wf-alertgroup-item--error { border-left-color: var(--wf-color-error); }
1690
1708
 
1691
1709
  .wf-alertgroup-message {
1692
1710
  flex: 1;
1693
- color: var(--wf-color-text-primary);
1711
+ color: var(--wf-color-text);
1694
1712
  }
1695
1713
 
1696
1714
  .wf-alertgroup-time {
1697
- color: var(--wf-color-text-muted, #999);
1715
+ color: var(--wf-color-text-tertiary, #999);
1698
1716
  font-size: 12px;
1699
1717
  }
1700
1718
 
@@ -1709,14 +1727,14 @@ body.wf-dragging {
1709
1727
  padding: 0;
1710
1728
  border: none;
1711
1729
  background: transparent;
1712
- color: var(--wf-color-text-muted, #999);
1730
+ color: var(--wf-color-text-tertiary, #999);
1713
1731
  cursor: pointer;
1714
1732
  border-radius: 4px;
1715
1733
  }
1716
1734
 
1717
1735
  .wf-alertgroup-close:hover {
1718
1736
  background: var(--wf-color-bg-hover, rgba(0, 0, 0, 0.04));
1719
- color: var(--wf-color-text-primary);
1737
+ color: var(--wf-color-text);
1720
1738
  }
1721
1739
 
1722
1740
  /* weifuwu/components — Anchor(锚点导航) */
@@ -1880,7 +1898,7 @@ body.wf-dragging {
1880
1898
  .wf-autocomplete-option {
1881
1899
  padding: 8px 12px;
1882
1900
  cursor: pointer;
1883
- color: var(--wf-color-text-primary);
1901
+ color: var(--wf-color-text);
1884
1902
  white-space: nowrap;
1885
1903
  overflow: hidden;
1886
1904
  text-overflow: ellipsis;
@@ -1893,7 +1911,7 @@ body.wf-dragging {
1893
1911
  }
1894
1912
 
1895
1913
  .wf-autocomplete-option--active {
1896
- color: var(--wf-color-primary-600, #1668dc);
1914
+ color: var(--wf-color-primary, #1668dc);
1897
1915
  }
1898
1916
 
1899
1917
  /* weifuwu/components — Avatar */
@@ -2239,7 +2257,7 @@ body.wf-dragging {
2239
2257
  margin-top: 2px;
2240
2258
  font-size: var(--wf-font-size-xs);
2241
2259
  color: var(--wf-color-text);
2242
- background: var(--wf-event-color, var(--wf-color-primary-bg));
2260
+ background: var(--wf-color-primary-bg, var(--wf-color-primary-bg));
2243
2261
  color: var(--wf-color-primary-text);
2244
2262
  border-radius: var(--wf-radius-sm);
2245
2263
  padding: 1px 4px;
@@ -3579,7 +3597,7 @@ body.wf-dragging {
3579
3597
  flex-shrink: 0;
3580
3598
  }
3581
3599
  .wf-diffview-title--old {
3582
- color: var(--wf-color-danger-text);
3600
+ color: var(--wf-color-error-text);
3583
3601
  }
3584
3602
  .wf-diffview-title--new {
3585
3603
  color: var(--wf-color-success-text);
@@ -3619,10 +3637,10 @@ body.wf-dragging {
3619
3637
  color: var(--wf-color-success-text);
3620
3638
  }
3621
3639
  .wf-diffview-row--remove {
3622
- background: var(--wf-color-danger-bg, rgba(255, 0, 0, 0.06));
3640
+ background: var(--wf-color-error-bg, rgba(255, 0, 0, 0.06));
3623
3641
  }
3624
3642
  .wf-diffview-row--remove .wf-diffview-sign {
3625
- color: var(--wf-color-danger-text);
3643
+ color: var(--wf-color-error-text);
3626
3644
  }
3627
3645
 
3628
3646
  /* ── 折叠块 ── */
@@ -3858,6 +3876,8 @@ body.wf-dragging {
3858
3876
  box-shadow: var(--wf-shadow-md);
3859
3877
  z-index: var(--wf-z-dropdown);
3860
3878
  padding: var(--wf-space-xs) 0;
3879
+
3880
+ transform: translateX(-50%);
3861
3881
  }
3862
3882
 
3863
3883
  .wf-dropdown--open {
@@ -3891,11 +3911,16 @@ body.wf-dragging {
3891
3911
  color: var(--wf-color-error-text);
3892
3912
  }
3893
3913
 
3894
- /* ── 入场动画:面板族统一 wf-panel-in(scale+fade,Token 驱动) ── */
3914
+ /* ── 入场动画:fade-only(wf-panel-in 含 transform——覆盖定位 translateX(-50%)
3915
+ 动画期间右偏,结束归位 = 跳一下——真实 bug,对齐 Popconfirm 修复) ── */
3895
3916
  .wf-dropdown-menu {
3896
- animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
3917
+ animation: wf-dropdown-in var(--wf-dur-fast) var(--wf-ease-out);
3897
3918
  transform-origin: top center;
3898
3919
  }
3920
+ @keyframes wf-dropdown-in {
3921
+ from { opacity: 0; }
3922
+ to { opacity: 1; }
3923
+ }
3899
3924
 
3900
3925
  /* weifuwu/components — Editor */
3901
3926
 
@@ -3960,7 +3985,7 @@ body.wf-dragging {
3960
3985
  }
3961
3986
 
3962
3987
  .wf-editor-tb-btn--active:hover {
3963
- background: var(--wf-color-primary-lighter, #bae6fd);
3988
+ background: var(--wf-color-primary-bg, #bae6fd);
3964
3989
  }
3965
3990
 
3966
3991
  .wf-editor-tb-btn--link {
@@ -4196,7 +4221,7 @@ body.wf-dragging {
4196
4221
 
4197
4222
  .wf-editor-table-grid-cell:hover,
4198
4223
  .wf-editor-table-grid-cell--active {
4199
- background: var(--wf-color-primary-light, #e0f2fe);
4224
+ background: var(--wf-color-primary-bg, #e0f2fe);
4200
4225
  border-color: var(--wf-color-primary);
4201
4226
  }
4202
4227
 
@@ -4262,23 +4287,35 @@ body.wf-dragging {
4262
4287
  gap: var(--wf-gap-xs);
4263
4288
  }
4264
4289
 
4265
- .wf-field-label {
4290
+ .wf-field-label,
4291
+ .wf-input-label,
4292
+ .wf-select-label,
4293
+ .wf-textarea-label,
4294
+ .wf-slider-label {
4266
4295
  font-size: var(--wf-font-size-sm);
4267
4296
  font-weight: var(--wf-font-weight-medium);
4268
4297
  color: var(--wf-color-text);
4269
4298
  }
4270
4299
 
4271
- .wf-field-req {
4300
+ .wf-field-req,
4301
+ .wf-input-req,
4302
+ .wf-select-req,
4303
+ .wf-textarea-req {
4272
4304
  color: var(--wf-color-error-text);
4273
4305
  margin-left: 2px;
4274
4306
  }
4275
4307
 
4276
- .wf-field-err {
4308
+ .wf-field-err,
4309
+ .wf-input-err,
4310
+ .wf-select-err,
4311
+ .wf-textarea-err {
4277
4312
  font-size: var(--wf-font-size-xs);
4278
4313
  color: var(--wf-color-error-text);
4279
4314
  }
4280
4315
 
4281
- .wf-field-hint {
4316
+ .wf-field-hint,
4317
+ .wf-input-hint,
4318
+ .wf-textarea-hint {
4282
4319
  font-size: var(--wf-font-size-xs);
4283
4320
  color: var(--wf-color-text-tertiary);
4284
4321
  }
@@ -4481,7 +4518,7 @@ body.wf-dragging {
4481
4518
 
4482
4519
  .wf-float-btn:hover {
4483
4520
  transform: scale(1.05);
4484
- background: var(--wf-color-primary-600, #1668dc);
4521
+ background: var(--wf-color-primary, #1668dc);
4485
4522
  }
4486
4523
 
4487
4524
  .wf-float-btn--disabled {
@@ -4503,7 +4540,7 @@ body.wf-dragging {
4503
4540
  height: 18px;
4504
4541
  padding: 0 5px;
4505
4542
  border-radius: 50%;
4506
- background: var(--wf-color-danger);
4543
+ background: var(--wf-color-error);
4507
4544
  color: var(--wf-color-on-brand, #fff);
4508
4545
  font-size: 11px;
4509
4546
  line-height: 18px;
@@ -4756,17 +4793,6 @@ body.wf-dragging {
4756
4793
  gap: var(--wf-gap-xs);
4757
4794
  }
4758
4795
 
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
4796
  .wf-input {
4771
4797
  font-family: var(--wf-font-sans);
4772
4798
  font-size: var(--wf-font-size-sm);
@@ -4814,16 +4840,6 @@ body.wf-dragging {
4814
4840
  color: var(--wf-color-text-tertiary);
4815
4841
  }
4816
4842
 
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
4843
  .wf-input--err .wf-input {
4828
4844
  border-color: var(--wf-color-error);
4829
4845
  }
@@ -5232,8 +5248,8 @@ body.wf-dragging {
5232
5248
  display: flex;
5233
5249
  width: 100%;
5234
5250
  min-height: 100%;
5235
- background: var(--wf-color-bg-base, #f5f5f5);
5236
- color: var(--wf-color-text-primary);
5251
+ background: var(--wf-color-bg, #f5f5f5);
5252
+ color: var(--wf-color-text);
5237
5253
  font-family: var(--wf-font-sans);
5238
5254
  }
5239
5255
 
@@ -5336,7 +5352,7 @@ body.wf-dragging {
5336
5352
  gap: 4px;
5337
5353
  text-decoration: underline;
5338
5354
  text-underline-offset: 3px;
5339
- color: var(--wf-color-primary-600, #1668dc);
5355
+ color: var(--wf-color-primary, #1668dc);
5340
5356
  cursor: pointer;
5341
5357
  font-family: var(--wf-font-sans);
5342
5358
  font-size: var(--wf-font-size-sm, 13px);
@@ -5344,25 +5360,25 @@ body.wf-dragging {
5344
5360
  }
5345
5361
 
5346
5362
  .wf-link:hover {
5347
- color: var(--wf-color-primary-600, #1668dc);
5363
+ color: var(--wf-color-primary, #1668dc);
5348
5364
  }
5349
5365
 
5350
5366
  .wf-link--default {
5351
5367
  color: var(--wf-color-text-secondary);
5352
5368
  }
5353
5369
  .wf-link--default:hover {
5354
- color: var(--wf-color-text-primary);
5370
+ color: var(--wf-color-text);
5355
5371
  }
5356
5372
 
5357
5373
  .wf-link--danger {
5358
- color: var(--wf-color-danger-text, #cf1322);
5374
+ color: var(--wf-color-error-text, #cf1322);
5359
5375
  }
5360
5376
  .wf-link--danger:hover {
5361
- color: var(--wf-color-danger-600, #a8071a);
5377
+ color: var(--wf-color-error-text, #a8071a);
5362
5378
  }
5363
5379
 
5364
5380
  .wf-link--muted {
5365
- color: var(--wf-color-text-muted, #999);
5381
+ color: var(--wf-color-text-tertiary, #999);
5366
5382
  text-decoration: none;
5367
5383
  }
5368
5384
  .wf-link--muted:hover {
@@ -6105,11 +6121,11 @@ body.wf-dragging {
6105
6121
 
6106
6122
  .wf-navmenu-item:hover {
6107
6123
  background: var(--wf-color-bg-hover, rgba(0, 0, 0, 0.04));
6108
- color: var(--wf-color-text-primary);
6124
+ color: var(--wf-color-text);
6109
6125
  }
6110
6126
 
6111
6127
  .wf-navmenu-item--active {
6112
- color: var(--wf-color-primary-600, #1668dc);
6128
+ color: var(--wf-color-primary, #1668dc);
6113
6129
  font-weight: 600;
6114
6130
  }
6115
6131
 
@@ -6151,7 +6167,7 @@ body.wf-dragging {
6151
6167
  gap: 12px;
6152
6168
  padding: 8px 12px;
6153
6169
  border-radius: var(--wf-radius, 6px);
6154
- color: var(--wf-color-text-primary);
6170
+ color: var(--wf-color-text);
6155
6171
  cursor: pointer;
6156
6172
  white-space: nowrap;
6157
6173
  transition: background var(--wf-dur-fast, 0.15s) var(--wf-ease-standard, ease);
@@ -6167,7 +6183,7 @@ body.wf-dragging {
6167
6183
  }
6168
6184
 
6169
6185
  .wf-navmenu-sub-arrow {
6170
- color: var(--wf-color-text-muted, #999);
6186
+ color: var(--wf-color-text-tertiary, #999);
6171
6187
  }
6172
6188
 
6173
6189
  .wf-navmenu-sub-nested {
@@ -6511,9 +6527,9 @@ body.wf-dragging {
6511
6527
  background: var(--wf-color-primary-bg, rgba(79, 110, 247, 0.08));
6512
6528
  }
6513
6529
  .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));
6530
+ border-color: var(--wf-color-error-text);
6531
+ color: var(--wf-color-error-text);
6532
+ background: var(--wf-color-error-bg, rgba(255, 0, 0, 0.06));
6517
6533
  }
6518
6534
  .wf-pipeline-node--pending {
6519
6535
  border-color: var(--wf-color-border);
@@ -6550,6 +6566,11 @@ body.wf-dragging {
6550
6566
  font-size: var(--wf-font-size-sm, 13px);
6551
6567
  }
6552
6568
 
6569
+ .wf-popconfirm--bottom { transform: translateX(-50%); }
6570
+ .wf-popconfirm--top { transform: translateX(-50%) translateY(-100%); }
6571
+ .wf-popconfirm--left { transform: translateY(-50%) translateX(-100%); }
6572
+ .wf-popconfirm--right { transform: translateY(-50%); }
6573
+
6553
6574
  .wf-popconfirm--enter {
6554
6575
  animation: wf-popconfirm-in var(--wf-dur-md, 0.2s) var(--wf-ease-standard, ease);
6555
6576
  }
@@ -6558,14 +6579,17 @@ body.wf-dragging {
6558
6579
  animation: wf-popconfirm-out var(--wf-dur-md, 0.2s) var(--wf-ease-standard, ease) forwards;
6559
6580
  }
6560
6581
 
6582
+ /* 入场/退场只 fade(opacity)——transform 由定位类独占:
6583
+ 动画含 transform 会覆盖 .wf-popconfirm--top 的 translateX(-50%)
6584
+ translateY(-100%)——动画期间弹层右偏/跳位,结束才归位(真实 bug) */
6561
6585
  @keyframes wf-popconfirm-in {
6562
- from { opacity: 0; transform: translateY(-4px) scale(0.98); }
6563
- to { opacity: 1; transform: translateY(0) scale(1); }
6586
+ from { opacity: 0; }
6587
+ to { opacity: 1; }
6564
6588
  }
6565
6589
 
6566
6590
  @keyframes wf-popconfirm-out {
6567
6591
  from { opacity: 1; }
6568
- to { opacity: 0; transform: scale(0.98); }
6592
+ to { opacity: 0; }
6569
6593
  }
6570
6594
 
6571
6595
  .wf-popconfirm-title {
@@ -6573,7 +6597,7 @@ body.wf-dragging {
6573
6597
  align-items: flex-start;
6574
6598
  gap: var(--wf-gap-xs, 8px);
6575
6599
  margin-bottom: var(--wf-space-xs, 8px);
6576
- color: var(--wf-color-text-primary);
6600
+ color: var(--wf-color-text);
6577
6601
  line-height: 1.5;
6578
6602
  }
6579
6603
 
@@ -6943,7 +6967,7 @@ body.wf-dragging {
6943
6967
  }
6944
6968
 
6945
6969
  .wf-scrollbar::-webkit-scrollbar-thumb:hover {
6946
- background: var(--wf-color-text-muted, #999);
6970
+ background: var(--wf-color-text-tertiary, #999);
6947
6971
  }
6948
6972
 
6949
6973
  /* weifuwu/components — SearchInput */
@@ -7086,17 +7110,6 @@ body.wf-dragging {
7086
7110
  position: relative;
7087
7111
  }
7088
7112
 
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
7113
  /* ── 原生 select ── */
7101
7114
 
7102
7115
  .wf-select {
@@ -7125,11 +7138,6 @@ body.wf-dragging {
7125
7138
  cursor: not-allowed;
7126
7139
  }
7127
7140
 
7128
- .wf-select-err {
7129
- font-size: var(--wf-font-size-xs);
7130
- color: var(--wf-color-error-text);
7131
- }
7132
-
7133
7141
  .wf-select--err .wf-select {
7134
7142
  border-color: var(--wf-color-error);
7135
7143
  }
@@ -7359,12 +7367,6 @@ body.wf-dragging {
7359
7367
  gap: var(--wf-gap-xs);
7360
7368
  }
7361
7369
 
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
7370
  .wf-slider {
7369
7371
  display: flex;
7370
7372
  align-items: center;
@@ -7434,7 +7436,7 @@ body.wf-dragging {
7434
7436
  }
7435
7437
 
7436
7438
  .wf-space-split {
7437
- color: var(--wf-color-text-muted, #999);
7439
+ color: var(--wf-color-text-tertiary, #999);
7438
7440
  }
7439
7441
 
7440
7442
  .wf-sparkline {
@@ -7883,17 +7885,6 @@ body.wf-dragging {
7883
7885
  gap: var(--wf-gap-xs);
7884
7886
  }
7885
7887
 
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
7888
  .wf-textarea {
7898
7889
  font-family: var(--wf-font-sans);
7899
7890
  font-size: var(--wf-font-size-sm);
@@ -7924,16 +7915,6 @@ body.wf-dragging {
7924
7915
  color: var(--wf-color-text-tertiary);
7925
7916
  }
7926
7917
 
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
7918
  /* 字数统计 */
7938
7919
  .wf-textarea-count {
7939
7920
  font-size: var(--wf-font-size-xs);
@@ -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);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "weifuwu",
3
3
  "type": "module",
4
- "version": "0.68.0",
4
+ "version": "0.69.0",
5
5
  "description": "AI SaaS framework — (req, ctx) => Response",
6
6
  "exports": {
7
7
  ".": {