From 45e1e6500e640941351c2e6e39a0ad5ab06a32e1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 9 Aug 2026 17:14:21 +0000 Subject: [PATCH] =?UTF-8?q?fix(fields):=20BooleanField=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20host=20=E4=B8=8B=E5=8F=91=E7=9A=84=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=20id,=E5=8F=AF=E8=A7=81=20label=20=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E6=82=AC=E7=A9=BA=20(#3952)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 表单里渲染 boolean/checkbox 字段时会发出**两个**同文本 label,而可见的那个指 向一个不存在的 id:`FormControl`(Radix `Slot`)把 `FormLabel htmlFor` 已经指 向的 id 交给控件,widget 却用字段名把它覆写掉 —— `label for="_r_3_-form-item"` 在 DOM 里无目标,switch 挂的是 `id="notifications"`。后果是点击可见 label 不会 翻转开关(switch/checkbox 行最常用的操作方式),而可访问名只是靠 widget 自己那 个 sr-only label 侥幸成立。 修法落在 widget 侧:`id` 本来就是 widget 契约(`FieldWidgetDomProps`)声明的键、 `toDomProps` 也一直在转发,丢弃已送达值的是消费者,所以按 AGENTS.md #0.1 在 消费者处改,不动 form 侧的 FormControl 机制。 - id 链改为 `hostId || config.name || useId()`。`config.name` 这一项不是冗余: app-shell `ActionParamDialog` 的 boolean 分支渲染 `