@greypan/web-ui 8.0.0 → 8.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 (83) hide show
  1. package/README.CN.md +36 -18
  2. package/README.md +82 -63
  3. package/dist/assets/menu-portal.js +1 -1
  4. package/dist/assets/menu-portal.js.map +1 -1
  5. package/dist/assets/selection-control.js +1 -1
  6. package/dist/assets/selection-control.js.map +1 -1
  7. package/dist/components/autocomplete/index.js +6 -6
  8. package/dist/components/autocomplete/style.js +1 -1
  9. package/dist/components/autocomplete/style.js.map +1 -1
  10. package/dist/components/badge/style.js.map +1 -1
  11. package/dist/components/button/index.d.ts +368 -1
  12. package/dist/components/button/index.js +56 -36
  13. package/dist/components/button/index.js.map +1 -1
  14. package/dist/components/button/style.js +1 -1
  15. package/dist/components/button/style.js.map +1 -1
  16. package/dist/components/checkbox/index.d.ts +3 -0
  17. package/dist/components/checkbox/index.js +33 -35
  18. package/dist/components/checkbox/index.js.map +1 -1
  19. package/dist/components/checkbox/style.js +1 -1
  20. package/dist/components/checkbox/style.js.map +1 -1
  21. package/dist/components/checkbox-group/index.js +8 -8
  22. package/dist/components/dropdown-item/style.js +1 -1
  23. package/dist/components/dropdown-item/style.js.map +1 -1
  24. package/dist/components/editable-text/index.d.ts +2 -0
  25. package/dist/components/editable-text/index.js +50 -30
  26. package/dist/components/editable-text/index.js.map +1 -1
  27. package/dist/components/icon/index.js +7 -7
  28. package/dist/components/icon/index.js.map +1 -1
  29. package/dist/components/input/index.d.ts +7 -0
  30. package/dist/components/input/index.js +34 -29
  31. package/dist/components/input/index.js.map +1 -1
  32. package/dist/components/input-number/index.d.ts +1 -0
  33. package/dist/components/input-number/index.js +28 -26
  34. package/dist/components/input-number/index.js.map +1 -1
  35. package/dist/components/layout/index.js +1 -1
  36. package/dist/components/layout/index.js.map +1 -1
  37. package/dist/components/layout/style.js +1 -1
  38. package/dist/components/layout/style.js.map +1 -1
  39. package/dist/components/option/style.js +1 -1
  40. package/dist/components/option/style.js.map +1 -1
  41. package/dist/components/popover/style.js +1 -1
  42. package/dist/components/popover/style.js.map +1 -1
  43. package/dist/components/radio/index.d.ts +3 -0
  44. package/dist/components/radio/index.js +23 -19
  45. package/dist/components/radio/index.js.map +1 -1
  46. package/dist/components/radio-group/index.js +8 -8
  47. package/dist/components/segmented/index.js +8 -8
  48. package/dist/components/select/style.js +1 -1
  49. package/dist/components/select/style.js.map +1 -1
  50. package/dist/components/slider/index.js +9 -9
  51. package/dist/components/switch/index.d.ts +1 -0
  52. package/dist/components/switch/index.js +26 -24
  53. package/dist/components/switch/index.js.map +1 -1
  54. package/dist/components/textarea/index.d.ts +7 -1
  55. package/dist/components/textarea/index.js +44 -42
  56. package/dist/components/textarea/index.js.map +1 -1
  57. package/dist/components/textarea/style.js.map +1 -1
  58. package/dist/components/theme/index.d.ts +9 -0
  59. package/dist/components/theme/index.js +128 -85
  60. package/dist/components/theme/index.js.map +1 -1
  61. package/dist/components/theme/style.js +1 -1
  62. package/dist/components/theme/style.js.map +1 -1
  63. package/dist/components/toast/toast.js +8 -8
  64. package/dist/components/toast/toast.js.map +1 -1
  65. package/dist/components/tooltip/style.js +1 -1
  66. package/dist/components/tooltip/style.js.map +1 -1
  67. package/dist/icons/generated/akar-icons-check.d.ts +6 -0
  68. package/dist/icons/generated/akar-icons-check.js +10 -0
  69. package/dist/icons/generated/akar-icons-check.js.map +1 -0
  70. package/dist/icons/generated/bi-check.d.ts +6 -0
  71. package/dist/icons/generated/bi-check.js +10 -0
  72. package/dist/icons/generated/bi-check.js.map +1 -0
  73. package/dist/icons/index.d.ts +2 -0
  74. package/dist/icons/index.js +3 -1
  75. package/dist/shared/form-association/field-id.js +9 -0
  76. package/dist/shared/form-association/field-id.js.map +1 -0
  77. package/dist/shared/form-association/index.js +9 -1
  78. package/dist/shared/form-association/index.js.map +1 -1
  79. package/dist/shared/label-emptiness/index.js +45 -0
  80. package/dist/shared/label-emptiness/index.js.map +1 -0
  81. package/dist/shared/theme/root-sync.js +24 -18
  82. package/dist/shared/theme/root-sync.js.map +1 -1
  83. package/package.json +3 -1
package/README.CN.md CHANGED
@@ -239,6 +239,8 @@ dropdown、tooltip)不需要它。
239
239
 
240
240
  所有表单控件均参与原生 `FormData`、约束校验、`form.reset()` 和浏览器表单状态恢复。控件会在**首次连接且声明式属性完成初始化后**捕获一次重置默认值;之后的运行时 property 更新不会改写该默认值。祖先 `fieldset` 的禁用状态会禁用交互和校验,但不会改写控件公开的 `disabled` 属性。对于 checkbox/radio group,父 group 是提交、重置和状态恢复的唯一所有者;被管理的子项不会独立提交或恢复状态。
241
241
 
242
+ `web-ui-button` 同样声明为 form-associated,使宿主可以持有外层 form 的 form owner 并转发 `submit`/`reset` 激活;它不向 `FormData` 贡献值。
243
+
242
244
  ## 所有组件
243
245
 
244
246
  | 分类 | 组件 |
@@ -308,7 +310,7 @@ dropdown、tooltip)不需要它。
308
310
 
309
311
  **事件:** `input`, `change`, `focus`, `blur`
310
312
 
311
- **方法:** `focus()`, `blur()` —— 委托到内部原生 input(宿主自身不可聚焦)
313
+ **方法:** `focus()`, `blur()`, `select()`,委托到 shadow 内的原生 input;宿主自身不可聚焦。`disabled` 时 `focus()` 与 `select()` 不产生效果,`readonly` 仍允许聚焦和选中。
312
314
 
313
315
  **插槽:** `prefix`, `default`, `suffix`
314
316
 
@@ -343,7 +345,7 @@ dropdown、tooltip)不需要它。
343
345
 
344
346
  **事件:** `input`, `change`, `focus`, `blur`
345
347
 
346
- **方法:** `focus()`, `blur()`, `select()`
348
+ **方法:** `focus()`, `blur()`, `select()`,委托到 shadow 内的原生 textarea。`disabled` 时 `focus()` 与 `select()` 不产生效果,`readonly` 仍允许聚焦和选中。
347
349
 
348
350
  **插槽:** `prefix`, `suffix`
349
351
 
@@ -364,6 +366,7 @@ dropdown、tooltip)不需要它。
364
366
  | `placeholder` | `string` | `''` | 值为空时显示的占位文本 |
365
367
  | `name` | `string` | `''` | 表单字段名 |
366
368
  | `disabled` | `boolean` | `false` | 禁用状态;只影响行为,不做视觉置灰 |
369
+ | `readonly` | `boolean` | `false` | 只读状态;仍可聚焦、全选和复制,但不能编辑或提交 `change` |
367
370
  | `aria-label` | `string` | — | 无障碍标签 |
368
371
 
369
372
  **事件:** `input`(每次输入)、`change`(提交)、`cancel`(取消;与原生 `<dialog>` 的 `cancel` 同名,不冒泡、不组合,只在组件本身派发)。React 没有覆盖 `cancel` 的合成事件,须用 `addEventListener('cancel', ...)` 监听
@@ -372,7 +375,7 @@ dropdown、tooltip)不需要它。
372
375
 
373
376
  点击时光标落在点击处;键盘聚焦时落在文本末尾。`Enter` 与 `blur` 均提交草稿并恰好派发一次 `change`:`Enter` 不插入换行,并把焦点交还宿主;`blur` 不干预焦点,焦点留在用户移往的位置。只有 `Escape` 取消:值回到进入编辑时的状态,派发 `cancel` 而不派发 `change`,焦点交还宿主,且按键由编辑层消费,外层浮层(抽屉、菜单)不会因同一次按键关闭。`cancel` 不冒泡也不组合,只在组件本身派发:组件被投映在浮层 shadow 内时(如 drawer 标题),它不会触达浮层的原生 `cancel` 关闭管线,监听一律挂在组件本身。值里已有的换行仍按多行渲染,只是不能再靠输入 `Enter` 增加换行。空值继续显示 placeholder;编辑层始终按自身内容撑高,因此空草稿或纯空格草稿在宿主自身塌缩的场合(flex 项 `min-width: 0`、表格单元格)也仍有承接光标的位置。
374
377
 
375
- `select()` 进入编辑态并全选内容;已在编辑态时只重新全选。`disabled` 时与 `focus()` 一样不产生效果。
378
+ `select()` 进入编辑态并全选内容;已在编辑态时只重新全选。`disabled` 时与 `focus()` 一样不产生效果。`readonly` 时仍可聚焦和全选,但输入被拒绝,退出编辑态也不派发 `change`。
376
379
 
377
380
  宿主是行内级盒子:未设宽度时随内容伸缩,折行后高度按行数增长。字体、颜色、文本对齐与空白处理全部继承外部上下文,因此编辑前它就是一段普通文字。
378
381
 
@@ -469,7 +472,7 @@ Portal 面板创建时会镜像 host 上解析后的这些变量;更新 host
469
472
 
470
473
  **方法:** `focus()`, `blur()`
471
474
 
472
- **插槽:** `default`(投影 `<web-ui-option>` 元素)、`trigger`(自定义触发器内容——替换默认输入框)、`empty`(替换无匹配空态;默认回退为“无匹配选项”)
475
+ **插槽:** `default`(投影 `<web-ui-option>` 元素)、`trigger`(自定义触发器内容——替换默认输入框)、`empty`(替换无匹配空态;默认回退为「无匹配选项」)
473
476
 
474
477
  键入时按 label 过滤候选(`contains` 或 `prefix`,`none` 关闭过滤)。选择 option 时文本回填为该项 label,`selected-value` 暴露该项的 value;`change` 在选择提交时触发。支持 ArrowDown/ArrowUp/Enter/Escape 键盘导航。
475
478
 
@@ -553,9 +556,9 @@ Portal 面板创建时会镜像 host 上解析后的这些变量;更新 host
553
556
 
554
557
  使用 `role="checkbox"` 和 `aria-checked`。Enter/Space 键盘切换。
555
558
 
556
- **布局:** 宿主是 inline-flex 盒,高度由内容撑开、不继承页面行高,因此不会在指示器上下留出多余缝隙;`--wui-selection-control-size`(`18px`)决定指示器宽高,宿主与相邻文字的对齐固定为 `vertical-align: middle`。`<web-ui-radio>` 共用同一套契约。
559
+ **布局:** 宿主是 inline-flex 盒,高度由内容撑开、不继承页面行高,因此不会在指示器上下留出多余缝隙;`--wui-selection-control-size`(`18px`)决定指示器宽高,宿主与相邻文字的对齐固定为 `vertical-align: middle`。`<web-ui-radio>` 共用同一套契约。指示器与标签之间的 10px 归标签所有:default slot 没画出东西时(空着,或里面只放了一个视觉隐藏的无障碍名,例如 `.sr-only` 的 span)这段间距一并收起,宿主宽度就等于指示器。空不空按标签盒子的渲染宽度判定,而不是按 slot 被指派了节点判定——无障碍名正是「有指派、不画盒」的那一种;也不能用 `display: none` 收掉标签,那会把这个名字从无障碍树里拿掉。
557
560
 
558
- **选中动画:** 对勾是控件自持的描边路径(不再走 `<web-ui-icon>` 图标资产),外层包 `<web-ui-svg-draw-lines>` 并带 `no-autoplay`,所以挂载时就已勾选的控件显示静态勾。勾选时线条自左向右按恒定笔速画出,时长取 `--wui-duration-trigger`(默认 160ms),在切换当下从已生效的主题解析,和指示器底色那条 transition 落在同一拍;取消时沿同一条路径收回到空白,而不是只淡出;主题范围为 `motion="reduced"` 时两者都跳过,两个状态直接切换。
561
+ **选中动画:** 对勾是 `@/icons` 里的描边资产,由嵌套的 `<web-ui-icon>` 渲染在 `<web-ui-svg-draw-lines>` 内,并带 `no-autoplay`,所以挂载时就已勾选的控件显示静态勾。勾选时线条从左侧尖端起按恒定笔速画出,时长取 `--wui-duration-trigger`(默认 160ms),在切换当下从已生效的主题解析,和指示器底色那条 transition 落在同一拍;取消时沿同一条路径收回到空白,而不是只淡出;主题范围为 `motion="reduced"` 时两者都跳过,两个状态直接切换。描边颜色是 `--wui-color-on-control`,经 `<web-ui-icon>` 的 `--wui-icon-color` 传下去,因为勾选后它背后就是 `--wui-color-accent`。这个结构带来两条约束:资产必须保持描边(`fill: none` + `stroke: currentColor`),换成实心图标 dash 动画照跑却什么都不画,勾会直接出现;并且它按 `<web-ui-icon>` 自己的默认 18px 渲染,宿主够不到图标 shadow root 里的 `<svg>`,因此不随 `--wui-selection-control-size` 放大。
559
562
 
560
563
  **未激活态:** 未选中指示器的底色取 `--wui-color-surface-control`(与中性按钮同一档控件底),深色模式下也能和 `--wui-color-page` 分辨开。触发区内任意位置(指示器、间距或右侧 slot 标签)被 hover 时,该底色再叠 6% 状态层。hover 只在 `(hover: hover) and (pointer: fine)` 设备上生效;没有按下态,已选中和禁用态保持各自底色。`<web-ui-radio>` 共用同一套状态。
561
564
 
@@ -575,7 +578,7 @@ Portal 面板创建时会镜像 host 上解析后的这些变量;更新 host
575
578
 
576
579
  **插槽:** `default`(标签文本)
577
580
 
578
- **布局:** 与 `<web-ui-checkbox>` 共用同一套选择控件盒契约——宿主高度由内容撑开、不继承页面行高,指示器宽高走 `--wui-selection-control-size`,与相邻文字按 `vertical-align: middle` 对齐。
581
+ **布局:** 与 `<web-ui-checkbox>` 共用同一套选择控件盒契约,包括「标签没有画出东西时收起间距」这一条——宿主高度由内容撑开、不继承页面行高,指示器宽高走 `--wui-selection-control-size`,与相邻文字按 `vertical-align: middle` 对齐。
579
582
 
580
583
  #### `<web-ui-switch>`
581
584
 
@@ -713,9 +716,9 @@ web-ui-radio-group {
713
716
 
714
717
  **插槽:** `prefix`, `default`, `suffix`
715
718
 
716
- `submit` 和 `reset` 不会提交或重置组件 Shadow DOM 外祖先 `<form>`。如需外部表单行为,请使用 form-associated 控件。
719
+ `submit` 和 `reset` 在 composed `click` 事件完成派发后,通过宿主的 form owner 转发到其原生 `<form>`;对这次 click 调用 `preventDefault()` 会取消该动作。内部按钮自身仍没有 form owner,因此 `SubmitEvent.submitter` 为 `null`。按钮不向 `FormData` 贡献值。
717
720
 
718
- 禁用和加载状态阻止 `click` 事件。
721
+ 禁用、加载和 `formDisabled` 状态(包括祖先 `fieldset` 导致的禁用)都会阻止 `click` 事件。
719
722
 
720
723
  `icon` 与 `loading` 同时开启时,按钮只渲染 spinner,默认插槽图标不投影。默认 icon 几何保持正方形,`full` 或显式 width 除外。
721
724
 
@@ -743,6 +746,14 @@ web-ui-radio-group {
743
746
 
744
747
  以内部派生的视觉上下文控制按钮组方向,不改写子按钮属性。
745
748
 
749
+ **CSS 自定义属性:**
750
+
751
+ | 属性 | 默认值 | 说明 |
752
+ | ----------------------------------- | ------ | ---------------------------------------------------- |
753
+ | `--wui-button-group-divider-length` | `20px` | 相邻按钮之间分割线的长度;短边恒为 1px,不随该值变化 |
754
+
755
+ 在按钮组宿主上设置。该 token 控制两个方向上的长边:横排改的是分割线高度,竖排改的是宽度。
756
+
746
757
  ---
747
758
 
748
759
  ### 浮层 / 模态
@@ -776,7 +787,7 @@ web-ui-radio-group {
776
787
  | `--wui-dialog-width` | `360px` | 对话框宽度 |
777
788
  | `--wui-dialog-max-height` | `90vh` | 对话框最大高度 |
778
789
  | `--wui-dialog-overlay-bg` | `var(--wui-color-backdrop)` | 遮罩背景色 |
779
- | `--wui-dialog-bg` | `var(--wui-color-surface-overlay)` | 玻璃卡片背景色,回退到 `rgb(246 246 246 / 0.88)` |
790
+ | `--wui-dialog-bg` | `var(--wui-color-surface-overlay)` | 玻璃卡片背景色,回退到 `rgb(246 246 246 / 0.82)` |
780
791
  | `--wui-dialog-padding` | `20px 24px 24px` | 对话框表面内边距 |
781
792
  | `--wui-dialog-title-gap` | `16px` | 标题下方间距 |
782
793
  | `--wui-dialog-desc-gap` | `24px` | 正文内容下方间距 |
@@ -1189,6 +1200,8 @@ Hover 模式使用 `pointerenter`/`pointerleave` 加延迟控制。Click 模式
1189
1200
 
1190
1201
  内置 `aria-hidden="true"`。
1191
1202
 
1203
+ **画布:** SVG 的 `viewBox` 取自 `icon.left`/`icon.top`/`icon.width`/`icon.height`,偏移缺省为 `0`,尺寸缺省为 Iconify 规范默认的 `16`。生成的资产都自带画布,因此尺寸兜底只在直接传入原始 `IconifyIcon` 对象时才会生效。
1204
+
1192
1205
  ```js
1193
1206
  import { lucideLoaderCircle } from '@greypan/web-ui/icons'
1194
1207
  html`<web-ui-icon .icon=${lucideLoaderCircle} spin />`
@@ -1302,7 +1315,7 @@ WebUiSpinner.hide() // 隐藏
1302
1315
 
1303
1316
  `header-glow` 会在 header 插槽内容和移动端 Toggle 的背后添加 `pointer-events: none` 的装饰性晕染。它属于 Header 背景而非前景层,因此插槽内容始终位于其上方;可通过 `--wui-layout-header-glow-color` 覆盖颜色,默认值为 `--wui-color-page`。晕染浓度和范围由内部变量 `--wui-layout-header-glow-height`(默认 `150%`)控制;增大可加强覆盖,减小则更柔和。布局层级顺序为 Header(`10`)< Auxiliary(`20`)< Banner(`30`)< Tabbar(`40`)< Sidebar(`50`)。
1304
1317
 
1305
- 侧边栏卡片表面使用 `--wui-color-surface-sidebar`:浅色与共享的 `--wui-color-surface-overlay` 同值,深色比 `--wui-color-page` 浅一档、与 `--wui-color-surface` 同级。它独立成 token,是因为 dialog、drawer 和 toast 共用 `--wui-color-surface-overlay`,不随侧边栏一起抬升。
1318
+ 侧边栏卡片表面使用 `--wui-color-surface-sidebar`:浅色保持半透明中性分层,深色比 `--wui-color-page` 浅一档、与 `--wui-color-surface` 同级。它独立成 token,是因为 dialog、drawer 和 toast 共用 `--wui-color-surface-overlay`,可以采用不同表面。
1306
1319
 
1307
1320
  **CSS 自定义属性:**
1308
1321
 
@@ -1367,10 +1380,11 @@ SVG 线条绘制动画,基于 `stroke-dashoffset`。直接在原元素上动
1367
1380
 
1368
1381
  主题提供者,定义 CSS 自定义属性 token。
1369
1382
 
1370
- | 属性 | 类型 | 默认值 | 说明 |
1371
- | ------------ | --------------------------------- | ---------- | -------------------------- |
1372
- | `appearance` | `'light' \| 'dark' \| 'system'` | `'light'` | 配色方案 |
1373
- | `motion` | `'full' \| 'reduced' \| 'system'` | `'system'` | 当前嵌套主题范围的动效偏好 |
1383
+ | 属性 | 类型 | 默认值 | 说明 |
1384
+ | --------------------- | --------------------------------- | ---------- | ------------------------------ |
1385
+ | `appearance` | `'light' \| 'dark' \| 'system'` | `'light'` | 配色方案 |
1386
+ | `resolved-appearance` | `'light' \| 'dark'` | `'light'` | 解析后的配色方案;只读反射输出 |
1387
+ | `motion` | `'full' \| 'reduced' \| 'system'` | `'system'` | 当前嵌套主题范围的动效偏好 |
1374
1388
 
1375
1389
  **方法:** `getOverlayRoot()` — 返回该主题拥有的 theme-owned overlay root
1376
1390
 
@@ -1378,7 +1392,11 @@ SVG 线条绘制动画,基于 `stroke-dashoffset`。直接在原元素上动
1378
1392
 
1379
1393
  在其子树中定义基础、颜色、层级、阴影和动效 token。`motion="system"` 跟随 `prefers-reduced-motion`;使用 `motion="reduced"` 降低当前作用域动效,或在嵌套主题中使用 `motion="full"` 恢复默认 token。System 配色模式跟随 `prefers-color-scheme`。
1380
1394
 
1381
- 配色变化是否使用 View Transitions API 播放动画,由当前主题范围的 `motion` 档位决定:`full` 始终播放揭示,`reduced` 直接落地新 appearance、不播放揭示,`system` 跟随 `prefers-reduced-motion`。根主题揭示整页;嵌套主题只揭示自己的 capture box。圆心优先取最近一次 pointerdown 坐标,否则回退主题盒或视口中心;深浅两个方向反向播放。不支持的浏览器、reduced-motion 作用域、时长为 0 以及同一 flight 内已有未完成请求都会立即落地新 appearance;当前版本对 `appearance="system"` 的 OS 深浅翻转不做动画。
1395
+ `resolved-appearance` 是只读的派生宿主属性(同时以 `resolvedAppearance` property 暴露):值恒为 `light` 或 `dark`;显式 `appearance` 直接透传,`appearance="system"` 从 `prefers-color-scheme` 解析,OS 深浅翻转时实时更新。未设置 `appearance` 的主题仍保持 inactive,但解析输出使用默认值 `light`。该 attribute 由组件独占写入并会恢复外部改动,因此消费端可以直接把选择器或 Tailwind custom variant 绑定到 `resolved-appearance`,无需再维护第二份主题状态。
1396
+
1397
+ 配色变化是否使用 View Transitions API 播放动画,由当前主题范围的 `motion` 档位决定:`full` 始终播放揭示,`reduced` 直接落地新 appearance、不播放揭示,`system` 跟随 `prefers-reduced-motion`。根主题揭示整页;嵌套主题只揭示自己的 capture box。圆心优先取最近一次 pointerdown 坐标,否则回退主题盒或视口中心;揭示方向跟随解析后的外观,包括 `appearance="system"` 从 `prefers-color-scheme` 解析出的结果,深浅两个方向反向播放。不支持的浏览器、reduced-motion 作用域、时长为 0 以及同一 flight 内已有未完成请求都会立即落地新 appearance;当前版本对 `appearance="system"` 的 OS 深浅翻转不做动画。
1398
+
1399
+ 揭示进行中,View Transitions 的 rendering-suppression 规则会强制所有 pointer hit-test 指向 document element,因此 CSS `pointer-events` 覆盖无法让底层页面继续交互。主题只在 `pointerdown` 或 wheel 时调用 `skipTransition()`;`pointermove` 与 `pointerup` 永远不会结束揭示,因此发起控件的收尾移动或过渡期间的普通移动都不会打断动画。触发 skip 的事件本身仍按规范以 document element 为目标,但失效窗口到此为止,不会持续满整个揭示时长。
1382
1400
 
1383
1401
  **从已移除的 `transition` 属性迁移:** 删掉该属性,改用 `motion` 表达意图。原先带 `transition` 的主题在默认 `motion="system"` 下揭示行为不变;需要在系统偏好 reduce 时仍播放揭示,则加 `motion="full"`。原先不带 `transition` 的主题现在默认就会揭示,若要保持无动画直接切换,请显式设置 `motion="reduced"`。
1384
1402
 
@@ -1439,12 +1457,12 @@ SVG 线条绘制动画,基于 `stroke-dashoffset`。直接在原元素上动
1439
1457
  | `--wui-color-surface-raised` | `#f2f2f7` | `#2c2c2e` | 抬升表面 |
1440
1458
  | `--wui-color-surface-control` | `#dfdfdf` | `#3a3a3c` | 中性可交互控件表面 |
1441
1459
  | `--wui-color-surface-track` | `#e5e5ea` | `#444446` | Slider/Switch 轨道表面 |
1442
- | `--wui-color-surface-menu` | `rgb(246 246 246 / 0.82)` | `rgb(44 44 46 / 0.78)` | Menu 和浮动面板表面 |
1460
+ | `--wui-color-surface-menu` | `rgb(254 254 254 / 0.76)` | `rgb(49 48 50 / 0.74)` | Menu 和浮动面板表面 |
1443
1461
  | `--wui-color-surface-glass` | `rgb(250 250 250 / 0.34)` | `rgb(44 44 46 / 0.42)` | 液态玻璃表面 |
1444
1462
  | `--wui-color-surface-glass-hover` | `color-mix(... text 6%, surface-glass)` | `color-mix(... text 6%, surface-glass)` | Glass 完整悬停背景 |
1445
1463
  | `--wui-color-surface-glass-active` | `color-mix(... text 15%, surface-glass)` | `color-mix(... text 15%, surface-glass)` | Glass 完整按下背景 |
1446
1464
  | `--wui-color-surface-overlay` | `rgb(246 246 246 / 0.82)` | `rgb(32 34 34 / 0.9)` | 半透明浮层表面 |
1447
- | `--wui-color-surface-sidebar` | `rgb(246 246 246 / 0.82)` | `rgb(44 44 46 / 0.8)` | 侧边栏面板表面 |
1465
+ | `--wui-color-surface-sidebar` | `rgb(233 233 233 / 0.82)` | `rgb(44 44 46 / 0.8)` | 侧边栏面板表面 |
1448
1466
  | `--wui-color-surface-segmented` | `#e5e5ea` | `#3a3a3c` | Segmented 指示器表面 |
1449
1467
  | `--wui-color-surface-selected` | `#fff` | `#5c5c5e` | 选中表面 |
1450
1468
  | `--wui-color-text` | `#1b1b1b` | `#e9eaea` | 主要文本 |