跳到正文
定位、使用者与职责边界
定位、使用者与职责边界
搜索 YUDS 文档

YUDS 文档

输入组件:文本、结构化编辑与专用输入

单行与多行文本、结构化编辑、查询、数值、颜色、日期时间、掩码、上传、扫码、翻译和手写输入的行为契约与夹具。

状态:D01—D08 是代理依用户授权采用的初始设计输入;B3-EDIT 及复用它的 B3-EXPR、B3-RICH 的受限编辑配置和 B3-SCAN 首期范围也由代理依授权决定,B3-COLOR、C1-TRANSLATE 是独立反审后的候选,SUP-HANDWRITING 是代理依授权采用的有界文档候选,其余行为细则仍可修订。设计采用不等于组件 API、设计资产、平台支持或真实运行已经完成,也不代表解析器、编辑器、服务安全或四端支持已经实现。全部夹具与平台运行均未执行。 更新:2026-10-20 所属章节:基础组件与交互契约

本页是输入组件族行为与参数引用的唯一主档;使用选型、解剖与正反例见组件使用手册:从任务选型到页面组合。

产品提供字段规则、精度、存储含义和允许输入范围;YUDS 规定表达与交互。

按任务进入下列唯一主节;完整行为、例外和夹具在各主节内连续保留。D01—D08 的已采用设计输入见决策与讨论记录「代理初始设计基线 D01—D08」;其余行为细则仍可修订。设计采用不等于组件 API、设计资产、平台支持或真实运行已经完成;共同边界见基础组件与交互契约,具体来源限制就近保留。

  • 字段共同契约与校验边界
  • CMP-06 / TXT-SINGLE 单行输入
  • CMP-07 / TXT-MULTI 多行文本
  • B3-EDIT:结构化编辑共同契约
  • B3-EXPR:公式与规则构建
  • B3-RICH:富文本与 HTML 边界
  • CMP-08 / QRY-SEARCH 查询输入
  • CMP-09 数值输入与 PRM-SPIN
  • B3-COLOR:用户内容颜色选择
  • CMP-10 / CMP-11 / INP-DATE 日期、区间与日历
  • INP-T01–INP-T07 时间与日期时间
  • INP-M01–INP-M04 掩码输入
  • CMP-12 / INP-UPLOAD 文件上传
  • B3-SCAN 条码扫描与手工输入
  • C1-TRANSLATE:用户输入翻译建议
  • 验证与主档索引

任务导引:本页第 17 节「SUP-HANDWRITING:手写采集与本地稿确认」是通用 UI 的有界主合同;设备、身份、法律或执行服务仍按该节的能力前提判断。

1. 字段共同契约与校验边界

字段包含持续可见的标签、输入主体、必要的必填或可选说明、格式/单位提示、帮助与错误位置。占位文字不能替代标签,也不预填用户尚未选择的业务值。必填信息由文字或可理解的符号说明,并向辅助技术提供。

分开记录原始输入、解析结果、已提交值及服务端确认值。用户输入「1.」「-」或中文输入法组字时,可能处于有效的中间编辑状态,不应每次按键就强制改写、删字符或提交。默认值必须可解释来源,不把空值默认为零。

状态包含空、编辑中、校验中、有效、无效、只读、禁用、保存中、保存失败和结果未知。标签与单位在这些状态下保持可见;只读值在读取权限内可查阅,复制另按输出权限;禁用只表达当前不可操作。

首次进入空字段一般先给格式说明,避免立即报错。失焦时可做字段校验;提交时做完整校验并给出错误摘要。用户修正后移除过期错误;跨字段错误关联到相关字段和组。后端仍是业务校验的权威,不能把前端校验通过标成业务批准。

所有错误说明应包含问题、适用范围和可行修正;禁止只写「输入有误」。批量报错时焦点按任务合理定位,不为每个异步结果连续跳转。共同反馈见反馈组件:让状态和结果可理解。

测试均未执行。交付须记录每种字段的空值、只读、无效、异步失败、长内容、键盘、读屏与本地化案例;目前没有固定的精度、日期格式、文件限额或选定框架。

2. CMP-06 / TXT-SINGLE 单行输入

2.1 用途、结构与状态

单行输入承载短文本或标识符;标识符即使只含数字也不自动变成数值。结构为持续标签、输入主体、必要的限制/帮助、可选的前后缀及清除入口、验证与保存反馈。多段描述使用多行文本;只用于显示的信息不伪装成禁用输入。只读在读取权限内可查阅,复制另按输出权限;禁用原因由稳定的说明提供,不能只靠不可聚焦控件的 tooltip。

区分原始字符、候选解析值、当前验证值、已提交快照和远端确认值。空、不完整、合法、非法、检查未知与提交未知是不同的事实;输入为空不意味着用户选择了默认值。清除、粘贴、撤销、自动填充和输入法都进入同一个候选更新通道,不能只监听键盘而遗漏辅助输入。

2.2 编辑、验证与事件

预先说明是否允许前后空格、换行、大小写、Unicode 规范化及长度算法。格式化和标准化不可改变身份语义;如会改变用户内容,显示将提交的值并提供修正机会。输入法组合中不截断、不提交、不强制格式化,也不把临时串报为最终非法。字数、码点、UTF-16 单位与字节限制不得混称;客户端与服务端计量不同时,明确说明转换和超限原因,夹具必须覆盖中文和组合表情。

清除是用户动作,可撤销到获准的草稿,焦点保持在字段上;未声明即时写入时,清除不保存空值。异步检查绑定字段 ID、候选版本、规则版本和授权范围,任何一项变化都使旧结论失效;检查失败显示「尚未验证/检查失败」,而不是「无效」或「可用」。用户持续输入时,不因晚到的错误移动光标或焦点。提交验证重新对应提交快照,不能依赖另一个版本的绿色图标。

2.3 平台、键盘与增长

保留平台的选择、复制粘贴、撤销重做和光标键。Enter 遵循外层显式表单的提交规则;在组合状态下确认候选时不同时提交。可访问名称来自标签;前后缀须明确是内容还是装饰,不重复拼接同一单位。软键盘布局只提供便利,不替代格式校验。自动填充、密码管理器、语音输入与移动端清除路径须实测;长标签换行、长值横向编辑时不裁掉焦点,关键错误不能只挂在 hover 上。

2.4 精确夹具(未执行)

  • TXT-SINGLE-N:初值「R-001」,输入「R-002」后撤销;预期候选恢复为 R-001,因未显式提交,写入 0 次,选区与光标可继续编辑。
  • TXT-SINGLE-F:版本 v1 检查中,输入 v2;v2 检查超时后 v1 成功;预期 v2 仍未验证,不标成功,不改字符,焦点不移。
  • TXT-SINGLE-I:中文组字中按 Enter 选候选;预期仅完成组字,表单提交 0 次、错误通告 0 次;组合结束后按既定时机检查。
  • TXT-SINGLE-R:编辑中撤权,随后自动填充与旧检查回包;预期受限草稿和建议不重新出现,不发新的检查/写请求,原远端任务仅保留获准的状态核查。
  • TXT-SINGLE-L:限制按可见字符计数,输入组合表情和长的无空格标识,200% 文字;预期计数按已声明的算法,粘贴不过早破坏组合字符,标签/错误可读,清除按钮的名称可辨。

来源与边界见本组来源。

行为:输入不立即改变已提交的事实。清除是明确动作,激活清除按钮后焦点回到字段;若清除会立刻发送查询,应按查询契约说明。敏感字段不要通过浏览器提示或通用历史自动泄露,具体策略由产品安全要求决定。

键盘:保留平台的编辑、选择、复制、粘贴与撤销行为。Enter 是否提交取决于所属表单;在输入法确认候选时不得误提交。点击标签应聚焦关联控件。

例:粘贴的合同编号含前后空格,失焦后展示规范化的值并继续检查;编号已存在时提供可披露的原因,不展示无权限合同的详情。

验收:覆盖长编号、不间断字符串、中文组字、撤销清除、过期的校验响应。

CMP-06 基线正常夹具

编号 A → 编辑为 B 后失焦 → 显示 B 的校验结果。

CMP-06 基线失败夹具

B 的校验先返回、A 的后返回 → 仍保持 B 的状态;提交被拒绝时保留 B。

PLAT-INPUT:输入动作与附件

每种字段记录软键盘类型、预期的 Return/IME 动作、真实业务含义,以及没有该动作键时的显式入口。Apple 的键盘类型和 Return 标签、Android 的 keyboardType/imeAction 等是各自平台的配置,不构成输入合法性的保证,Android 输入法还可能不遵从配置。Next 用于移动到后续字段,Done 用于结束编辑还是提交,须逐字段明确;这些动作仍先服从既有的 IME 组合、校验与提交仲裁,不因键帽文字直接发送业务写入。自定义输入附件只补充当前任务所需的操作,不重复覆盖系统能力。[P03/A07]

来源 ID 与读取边界见平台补充来源。这些条件不升级历史候选环境、不指定框架、不新增最低支持版本;文档用例仍未执行。

3. CMP-07 / TXT-MULTI 多行文本

3.1 用途、结构、变体

多行文本用于纯文本段落,不承诺富文本格式、代码编辑或附件支持。需要受限的结构化富文本时转本页 B3-RICH,需要声明式公式/条件树时转 B3-EXPR;这两族不改变本控件的纯文本边界。结构为标签、文本区、长度与换行策略、可选的展开/缩回入口、帮助与错误。自动增长、固定高度滚动、全屏展开是呈现变体,必须保留同一份草稿、选区、滚动锚点与撤销历史;展开不创造另一份未同步的内容。

3.2 数据与编辑契约

规定换行在显示、复制和存储时的语义;不能为了一行高度悄悄删除换行。限制与计数沿用 TXT-SINGLE;超限粘贴时保留可编辑文本,并阻止不合法的提交;若确需受控截断,必须事前明确并可恢复原文,而不是贴入时静默丢掉末尾。自动保存能力、频率及版本冲突由实现声明,没有证据时不显示「已保存」。

Enter 换行;提交由显式入口发起。可选的提交快捷键须可发现,且不覆盖平台/辅助技术的保留键;IME 组合中不能触发。Tab 按普通表单顺序离开,不默认输入制表符,也不困住焦点。展开后当前焦点进入同一编辑位置;关闭只还原呈现,不提交、不取消、不重置文本。若移动端全屏成为模态,遵循 CMP-LAYER-RESP 与当前模态栈,不沿用桌面的非模态假设。

后台更新同一记录时,不能覆盖正在编辑的草稿;保留基准版本并提供可理解的冲突。保存请求返回旧快照成功,只能说明该快照已保存,之后新增的文字仍未保存;不能整体变为「已保存」。用户已离开编辑区时,晚到的保存结果不抢焦点。撤权优先于草稿恢复,缓存、撤销栈和展开副本同样遵守披露策略。

3.3 平台与增长

大字与长文本下编辑区可滚动且当前光标可见,页面和字段的滚动都可离开,不依赖拖动角点作为唯一的调高方法。触控键盘出现时保留编辑位置和明确的提交入口,不让粘性栏盖住末行;原生文本视图与 Web textarea 在选区/撤销上的差异须登记。屏幕阅读器能读取标签、限制和错误,计数不逐键以高优先级播报。

3.4 精确夹具(未执行)

  • TXT-MULTI-N:两段文本,第二段中部有选区;展开后输入并缩回;预期文本/选区/撤销历史连续,保存 0 次,当前光标仍可见。
  • TXT-MULTI-F:提交快照 v3 后继续编辑出 v4;v3 成功回包;预期显示 v3 已保存但 v4 未保存,不丢新增字符。
  • TXT-MULTI-I:超限粘贴含组合表情和换行的文本;预期保留原文供修改,错误说明计量方式与超出量,未受控截断,提交 0 次。
  • TXT-MULTI-R:全屏编辑时撤权,随后按撤销/缩回;预期受限内容不从撤销栈或隐藏副本复活,焦点到安全入口。
  • TXT-MULTI-L:长中文段、RTL 中插入数字、200% 文字与软键盘;预期光标可见,文本和页面滚动均可退出,提交入口不遮末行;实际结果待测。

来源与边界见本组来源。

解剖:标签、文本区、可选的长度说明、可调高度或展开入口。保持阅读行宽,不以无限增长把主操作推到难以发现的位置。最小可见区与上限由内容任务验证。

例:审核意见超过允许长度时,用户可修改而不必重新粘贴。

验收:覆盖中文与表情符号的计数规则、长段落、字体放大、光标滚动、只读复制和恢复后全文一致。

CMP-07 基线正常夹具

输入两段审核意见 → 换行并保存 → 换行保留。

CMP-07 基线失败夹具

粘贴超限的意见 → 显示超出量,仍可编辑全文;保存失败时保留全文。

4. B3-EDIT:结构化编辑共同契约

下列受限编辑配置由代理依据用户授权作为普通可逆的设计决定;完整行为仍是可修订的契约,不代表解析器、编辑器、服务安全或四端支持已经实现。共同规则只在此定义一次,公式(B3-EXPR)与富文本(B3-RICH)分别复用。全部 42 项真实运行未执行;七个 role × 固定 step 及三个文字角色各九档沿用 D01/D02,单主操作沿用 D04。

4.1 B3-EDIT-ID 身份与独立状态轴

编辑会话绑定任务、对象、字段、范围、会话实例、授权代次、服务端基准版本、当前本地修订 D,以及模式/文法/格式策略版本 P。显示名、行号、DOM 节点和列表序号都不是身份。

分开保存:

  • 原始输入 R;
  • 可解析结构 A;
  • 当前的解析/类型检查结论;
  • 获准的预览快照;
  • 最后确认版本 C;
  • 在途写操作 W。

R 无效时仍可有上一次有效的 A,但不能把旧 A 说成当前内容。

未编辑、正在组合、已改未检查、检查中、无效、当前检查通过、只读、受限、草稿保存中、保存失败、保存结果未知、已确认但有新修改,这些状态可以独立组合。客户端通过、预览成功、保存成功、正式执行成功是四件事。有效性并不授予读取、保存或执行权限。每个独立任务仍最多一个突出的主操作;工具栏的格式、插入、预览和帮助通常是次操作,不能因有多个编辑区而增加主操作配额。

4.2 B3-EDIT-RAW 原始稿、父子取消与恢复

允许保留的原始稿包含未闭合括号、未完成词元、失效引用、暂不支持的节点和待修正的格式。持久保存是否支持这种稿件由真实存储契约决定;不具备时只称当前会话未保存,不承诺刷新/退出后恢复。撤权后的保留/披露优先服从权限变化、并发修改与保存冲突,不能为防丢失而显示受限数据或建议外传。

完整编辑器从父表单作为子任务打开时遵循 LP-G03:

  • 父表单的当前草稿不因子编辑而改变。
  • 「应用到字段」捕获子实例/修订/策略、父字段/修订和授权,核验为同一快照后才合并。
  • 取消只丢弃本子会话拥有的变化;父原稿即使无效也仍保留,不无条件写回打开时的父旧快照而覆盖外部更新。
  • 应用不触发外层提交;表单已发出的写入不能通过取消本地编辑撤回。
  • 内嵌编辑器没有独立的取消时,明确由整个表单的离开规则管理,不能画出会回滚服务器的「取消」。

4.3 B3-EDIT-INPUT 输入、选区与撤销

原始稿、选区/光标的逻辑锚点、滚动位置、组合输入、编辑事务和撤销历史都属于会话。响应式切换、展开全屏、显示/隐藏工具栏不得另建未同步的副本。

IME 确认键只提交组合文本;同一事件不再选建议、应用到字段或提交表单。组合期间不做破坏性的解析回写、截断、移位或自动格式化;检查可以延后,不能把中间组词判成用户的最终错误。显式的结构/格式命令也不能应用于半成的组合稿:先由平台按实际能力完成或取消组合,再重新核验当前原稿、选区与权限;无法安全结束组合时,该命令暂不可用并说明原因,不能强制丢弃组合,也不能凭旧修订继续应用。字符/范围映射要跨越组合字符、表情与双向文本,不按 UTF-16 下标直接告诉用户「第几个字」。

撤销/重做针对本地已提交的编辑事务,不撤销远程发布、另一用户的修改或撤权策略。一次结构移动、一次显式格式转换或接受粘贴,是一个可解释的事务;IME 事务的分组遵循适配后的输入系统,不强制每个组合更新单独撤销。异步回调、策略更新、载入服务器新版本不得偷偷加入用户的撤销栈。出现外部新版本时暂停套用旧历史,保留仍可披露的本地稿并进入冲突流程;若没有版本化变换能力,禁止把旧撤销命令作用到新文档。被禁止的内容不能通过撤销恢复为可执行或已授权的状态。

4.4 B3-EDIT-SNAPSHOT 检查、预览与提交快照

每次检查/预览至少绑定会话、对象/字段、D、P、授权代次,以及所有读取依赖的版本/范围;新编辑、模式变更、依赖更新或撤权都使旧结论不再代表当前稿。后台响应仅更新其对应记录,不覆盖当前原稿、选区或工具栏状态,不自动展开、不抢焦点。检查失败是「无法检查」,不是内容错误;校验错误须归属到具体快照,只有当前快照匹配且用户仍在本任务中,或用户明确激活定位入口时,才把焦点移到可修正的目标。

显式预览是只读、受控的解释或渲染,不能提交、发布、发送消息、请求外部资源或触发正式的规则/业务执行;用户明确请求的受控只读求值按本页 B3-EXPR-PREVIEW 进行。预览的版本与来源可辨;已过期但仍获准保留时标为旧态,不能以旧的通过结果启用当前的正式动作。当前稿相同但依赖/策略变化时,也必须重新检查。

正式写入沿用 FORM-SNAPSHOT 和异步执行、结果核查与恢复:发送前核验当前权限与基准,防止重复;结果未知时,只有在真实查询能力存在时才查询原操作,没有该能力就保留未知状态和实际可用的处置路径,不盲目重发,也不另造任务中心。

4.5 B3-EDIT-FOCUS 模式、层与退出

文本编辑区保留原生的文本方向键、选择和换行语义;Tab 离开文本区,不默认插入制表符,也不被整个编辑器困住。候选列表、命令菜单、链接对话框与全屏编辑均复用操作组件:按钮与动作入口与浮层组件:对话框、抽屉与提示的对应契约。Escape/返回先交给输入法,再交给当前活动的子控件;一次事件只消费一次。所有关闭/导航共用 NAV 与 LP 的离开仲裁,恢复焦点依 LP-G05 的关闭原因决定,后台预览完成不能把焦点拉回。

至少三项格式/结构动作采用有名工具栏时,Web 依 APG Toolbar 建立单一进入点,方向键在工具栏内部导航,与文本区的方向键不冲突。此候选方案不从一端循环到另一端,Home/End 到达首个/最后一个可用项;触控与读屏均有等价的有名入口。只含一两项时用普通按钮组,不为减少 Tab 次数而滥用 toolbar。具体平台的键位与读屏表现仍需测试。

4.6 B3-EDIT-VIS 四端与内容增长

沿用 D01 七个 role × 固定 step、D02 label/prose/heading 各九档、D05 几何/命中/RTL 设计目标,不增加语法专属的公共颜色别名或任意字号。语法/格式差异同时有结构和名称表达,红色不能单独表示错误。长表达式提供软折行或明确的横向浏览,错误位置可到达;长正文按真实内容增长,工具栏和软键盘不遮挡当前插入点。逻辑 start/end 与双向孤立遵循平台适配、国际化与输入能力;文本自身的字符次序、数字与代码不整体镜像。

Web 是受限文本/结构编辑的设计目标;iOS/Android 使用平台的文本、选区、软键盘和编辑菜单能力,外接键盘另测;HarmonyOS 须先证明相应的编辑承载能力,不用 Web 截图推断原生已支持。缺少富结构编辑能力时,可提供明确的只读结构呈现或纯文本编辑分支,但必须先说明信息/格式损失并获得用户本次的选择;不能把降级结果当作无损兼容。四端的 IME、撤销、剪贴板、RTL、放大与读屏真实运行全部未执行。

依据与来源

依据仅限已读的 W3C 输入事件草案、剪贴板规范、APG 工具栏与 OWASP XSS 防护的相关正文;它们不证明实现支持。P1 语言/格式、快照与取消是 YUDS 推导的选择。SAP 保持既有的目录证据,未读取其内部正文,也未提升对等等级。详见冻结来源账本、独立源稿反审与冻结源稿。

5. B3-EXPR:公式与规则构建

5.1 B3-EXPR-SCOPE 用途、结构和不适用

用于编辑一个有明确类型/文法版本的声明式表达式,或形成布尔条件的结构化规则树。

结构为:字段标签/用途、限定语言帮助、文本/可视模式入口、编辑区、可插入的获准字段与算子、错误摘要/范围、只读预览及保存/应用状态。规则树的组、条件和顺序有稳定节点 ID,视觉缩进不能代替可访问分组与运算符名称。

本族作为候选,不定义通用程序语言、脚本控制台、远程查询语言、业务规则执行引擎、自动审批或安全沙箱。输入只是数据;不得交给任意脚本求值、动态代码生成,或拼接数据库/命令语句。字段目录只暴露当前获准且实际支持的引用,字段标签不充当可执行标识。正式执行、影响对象范围、审计、取消和幂等属于另外声明的业务能力,本族只有编辑契约。

5.2 B3-EXPR-LANG 有界参考文法与类型

代理选定参考配置 EXPR-P1,供通用夹具与设计使用;不宣称已实现解析器或公共 DSL。

  • 规范词元为 ASCII 数字、点小数、双引号字符串、true/false、获准字段引用 @{稳定ID}、括号以及下列算子;空白可分隔词元。
  • 字符串只允许 JSON 字符串转义,保留其原始表示,不把其中的算子当语法。
  • 数字语法是 0 或不以 0 开头的十进制整数,可带至少一位小数;负号是一元算子。
  • P1 不支持千分位、指数、隐式乘法、函数调用、成员访问、赋值、循环、网络或文件操作。
  • 非法输入保留原样并定位,不自动「修正」成不同的业务意义。

参考文法如下,仅定义 P1 验收语义,不是已批准的对外交换格式。

  • 整个输入必须恰好构成一个 expr;空稿、尾随词元和注释不构成有效表达式。
  • 保留字区分大小写。
  • 字段 ID 采用 ASCII 字母起始,随后为字母/数字/下划线/连字符;身份大小写敏感,且必须同时存在于获准字段目录。
  • 只认空格、Tab、CR/LF 为词元间空白,不隐式把其他字符改成空格;字符串内容不受这项空白限制。
expr       = orExpr
orExpr     = andExpr { "OR" andExpr }
andExpr    = notExpr { "AND" notExpr }
notExpr    = "NOT" notExpr | comparison
comparison = sum [ ("==" | "!=" | "<" | "<=" | ">" | ">=") sum ]
sum        = product { ("+" | "-") product }
product    = unary { ("*" | "/") unary }
unary      = "-" unary | atom
atom       = number | jsonString | "true" | "false" | field | "(" expr ")"
number     = ("0" | nonzeroDigit {digit}) [ "." digit {digit} ]
field      = "@{" stableID "}"

jsonString 按 JSON 字符串规则解码,结果须为合法 Unicode 序列,不接受未配对的代理码元;字符串中的 \u 表示只影响其解码值,不回写改造用户原文。算术符号采用最长匹配(如 <= 作为单个算子);每次解析成功后还必须通过下述类型检查。

从高到低的优先级:

  1. 括号/字面量/字段
  2. 一元 -
  3. * /
  4. + -
  5. 单次比较 == != < <= > >=
  6. NOT
  7. AND
  8. OR

算术同级左结合;比较不能串联,须显式写成两个条件并用 AND 连接。NOT 作用于完整的下一个比较结果,NOT @{enabled} == true 即 NOT (@{enabled} == true);建议格式化时显式补括号,避免误读。原始文本和结构树必须能表示这一含义,不能让可视模式另有默认优先级。

P1 类型为无单位数值(十进制字面量、精确有理算术)、布尔和 Unicode 字符串。

  • 算术和顺序比较仅接收无单位数值;同类型支持相等/不等。
  • 字符串比较是码点序列精确相等,不自动大小写折叠、修剪或 Unicode 归一化。
  • 逻辑算子只接收布尔;规则根必须是布尔,公式根必须是已声明的期望类型。
  • 无隐式数值/字符串转换;空字符串、0、false、字段缺失和读取未知互不替代。
  • 所有引用均需当前类型与披露授权,不能用短路分支掩盖无权字段。

P1 预览先验证全部引用、类型与依赖可用,再按树求值。

  • AND/OR 均按从左到右对两侧求值,不以短路抑制另一侧的除零、类型或预算错误;因此 false AND (1 / 0 == 0) 也报告除零,不返回 false。
  • 缺失/未知依赖使整次预览「无法计算」,不是 false/0。
  • 除零为当前表达式错误,不产生 Infinity/NaN。
  • P1 数值以十进制字面量输入并采用精确有理算术,加减乘和中间结果不静默舍入。最终小数无法有限表示时,显示精确分数,以及可选的、按已声明精度/舍入得出的近似值;近似值须明确标识,不能以展示值替代提交表达式。
  • 资源限制见下一节;不要求真实实现无限精度。

币种、计量单位、百分比尺度、日期/时区均不在 P1 默认类型集,不剥掉单位转成普通数。若产品扩展类型,须先登记类型身份、字面量格式、每个算子的合法组合、精度/舍入、换算来源、缺值和版本;缺一项则该操作不可用并说明原因,不能从同名单位或外观自动推断。P1 夹具中的「10 CNY + 5 USD」是应被阻止的未声明语法,不是汇率换算示例。

5.3 B3-EXPR-LIMIT 限制和错误位置

必须声明输入长度、节点数、嵌套深度、数字位数、依赖数和预览工作预算;未配置真实上限时,不声称可处理任意规模。

  • 超限时阻止本次解析/预览,或拒绝整个明确的插入事务,并解释是哪个上限触发。
  • 拒绝插入时保留插入前的稿件和选区;待插入的来源仅在容量与安全策略允许时安全暂存,并明确尚未插入。已接受但无效的原始稿仍按实际保留能力处理。
  • 不能保留半个字符、截成刚好可通过的表达式,或在 IME 组合中强行切断。
  • 参考夹具使用 32 层/256 节点/4096 码点,只是测试条件,不作为所有产品的上限。
  • 精确算术超出预算时给出「本次无法计算」,不得退化成不加标识的浮点近似,或冻结整个界面。

错误包含稳定类别、可理解的原因、发生时的快照,以及用户可定位的文本范围或节点 ID;位置需与该原稿版本绑定。验收记录中,文本范围采用明确的零基、半开 Unicode 码点偏移;界面将其转成可理解的行/列,并关联原文选区。适配层负责与本地编码/图形字符边界之间的映射,不能把代理对/组合字切成非法文本。当前稿变化后,旧范围不能直接移动新光标。

5.4 B3-EXPR-STRUCT 文本、可视规则与编辑事务

同一有效树的文本模式与可视模式之间必须有可核对的等价关系,保留稳定的字段/节点身份、括号与组操作。

  • 可视条件以全部满足 AND/任一满足 OR 明示;空组和缺操作数无效;删除最后一个条件不能悄悄变成「全部对象符合」。
  • 重排/移组通过明确的按钮或有说明的键盘操作提供拖放替代;一次移动只改变该节点,不重新绑定同名字段。
  • 嵌套深度、条件计数与组错误可读。

切到文本视图时显示同一稿件及其检查状态。文本无效,或存在可视构建不支持的节点时,不清空/修剪后进入看似等价的可视模式:保留原始文本并说明不能无损切换,允许留在文本编辑;若只能提供只读结构,明确哪些部分无法编辑。

显式格式化只有在整稿可解析且映射无损时,才产生单一可撤销事务。从结构生成的规范文本可改变空白/括号的表示,但不能改变树的含义,应用前后可核对。原稿转换不等于服务器保存。

5.5 B3-EXPR-PREVIEW 依赖预览与执行分离

预览标出表达式修订、依赖范围/版本、文法版本、求值结果的类型及值,或具体的失败。字段值只能来自获准的受控快照;设计夹具只用合成数据,不连接真实产品、不发送真实数据、不触发外部能力。键入不自动执行远程任务;若产品允许自动只读预览,也须声明成本/传输及并发策略,不能从本规范推定其存在。

  • 迟到结果不覆盖当前稿。旧预览在仍获准时可以保留为「D1 旧结果」,但不能成为 D2 正式提交的依据。相同表达式在依赖值更新后也会过期。
  • 预览失败时保留原稿和实际限制;超时不把旧值装成当前结果。
  • 保存表达式只确认该表达式版本已保存。要「启用规则/正式执行」,必须进入有明确对象范围、影响说明、授权及最终确认的真实任务,不借预览按钮执行。
  • 关闭预览仅关闭呈现。

5.6 B3-EXPR-ACCESS 字段目录、键盘与受限模式

插入字段/算子使用命名的按钮或建议列表,不靠记忆专有快捷键;接受候选时只在当前有效选区插入一次。候选请求绑定原稿修订/光标锚点/授权;用户已移动或编辑时,不能在旧位置插入,可以关闭候选并要求重新打开。文本中的 Enter 按编辑配置插入换行或确认当前候选,绝不同时应用/提交。可视组提供有名的条件列表和独立编辑入口;若实现选用 tree/treegrid 等复杂模式,须引用对应的完整键盘契约,不能只加角色名。

字段读权撤回后,清理其值、预览、建议、错误详情与可访问描述;引用能否保留为不可解析的占位由披露策略决定,至少不得泄漏旧标签或值。仅撤销编辑权且仍可读时,只读显示获准的稿件。服务端新基准到达时不覆盖本地 D;冲突处理沿用 版本、比较与并发差异 与 权限变化、并发修改与保存冲突。重新采用服务端版本须显式取舍,旧的应用资格、旧预览和旧撤销历史不能继续影响新版本。

5.7 B3-EXPR 精确夹具(全部未执行)

B3-EXPR-F01 优先级与十进制准确值

  • 前提:EXPR-P1;期望类型为无单位数值;无外部依赖。
  • 事件:分别预览 2 + 3 * 4、(2 + 3) * 4、0.1 + 0.2。
  • 预期:结果依次为 14、20、精确的 0.3;三次结果各自绑定对应的 D;预览不保存、不执行。
  • 禁止:结果 14 误呈为 20;把 0.30000000000000004 作为精确值。

B3-EXPR-F02 非有限小数与除零

  • 前提:P1;无近似显示配置。
  • 事件:预览 1 / 3 → 改为 1 / 0 再预览。
  • 预期:1/3 显示精确分数,不能伪称 0.33 是精确值;除零归为当前 D 的错误,原稿 1 / 0 保留。
  • 禁止:默认四舍五入并保存数值;把除零输出为 Infinity/0。

B3-EXPR-F03 显式类型及不支持的单位

  • 前提:P1;字段 Q 是无单位数值,字段 S 是字符串;期望类型为无单位数值。
  • 事件:依次检查 @{Q} + "2"、10 CNY + 5 USD、1,000 + 2。
  • 预期:分别拒绝隐式转换、未声明的单位语法、千分位语法;逐稿保留原文;错误说明对应当前 D,不尝试汇率换算或 locale 猜测。
  • 禁止:自动转数;剥掉币种后求和;把逗号当小数点并悄悄改值。

B3-EXPR-F04 规则树等价且比较不串联

  • 前提:字段 A=3、B=true,均获准可读;P1 布尔根。
  • 事件:预览 NOT @{A} > 2 OR @{B} == true → 检查 1 < @{A} < 5。
  • 预期:第一稿的树为 OR(NOT(GT(A,2)),EQ(B,true)),结果为 true;第二稿拒绝串联比较,并说明需用 AND 组合,不自动重写原稿。
  • 禁止:可视模式把 NOT 只附到数值 A 上;把串联比较当作有效的布尔链。

B3-EXPR-F05 缺失与 false/空串分开

  • 前提:字段 B=false;字段 S=“”;字段 M 读取未知;均为合成字段。
  • 事件:检查 @{B} == false → 预览 false AND @{M} == 1 → 改为 false AND (1 / 0 == 0) 再预览。
  • 预期:第一项结果为 true;第二项因依赖未知而无法计算,不以短路给出 false,不揭示未获准的值;第三项对两侧求值而报告除零,结果不可用,不返回 false。
  • 禁止:未知等于 0;空字符串等于 false;隐藏不允许的字段却仍参与计算;用短路隐去另一侧的除零或预算错误。

B3-EXPR-F06 精确错误范围与旧位置隔离

  • 前提:D1 原文为 1 + );P1;码点零基半开范围。
  • 事件:检查 D1 → 用户插入前缀得到 D2 后,D1 的错误才返回。
  • 预期:D1 记录错误右括号的范围 [4,5);D2 不套用 D1 的范围,不移动 D2 的光标,不宣称 D2 已通过。
  • 禁止:使用 UTF-16 或旧偏移高亮 D2 的其他字符;晚到的错误抢焦。

B3-EXPR-F07 无效文本切模式不丢内容

  • 前提:文本 D3 为 1 + (;上次有效树 A2 为 1+2。
  • 事件:请求切到可视模式 → 取消切换。
  • 预期:明确 D3 不可无损地可视编辑,保留 D3 与当前选区;A2 若显示,只能标为旧树,不覆盖 D3;取消不清稿。
  • 禁止:拿 A2 重新序列化成当前的 D3;自动补括号并应用。

B3-EXPR-F08 结构移动与空组

  • 前提:AND 组 G1 包含 C1、C2;C1 的字段身份为 Q;另有一个同名字段 Q2。
  • 事件:用有名的移出按钮把 C1 移到 OR 组 G2 → 撤销一次 → 删除 G1 的全部条件。
  • 预期:移动和一次撤销都保留 C1/Q 的身份;空的 G1 标为无效,不自动匹配全部对象。
  • 禁止:字段按标签重新绑定到 Q2;空 AND 组默认通过并执行。

B3-EXPR-F09 IME 确认不执行

  • 前提:D1 处于输入法组合中;焦点在文本区;父表单有提交按钮。
  • 事件:按 Enter 确认组合文本 → 再明确点击「应用到字段」。
  • 预期:第一次只提交 IME 文本,不执行预览/应用/父表单提交;第二次依据当前完整的 D 核验后,只应用到字段。
  • 禁止:一次 Enter 同时应用父字段或提交表单。

B3-EXPR-F10 建议位置过期

  • 前提:在 D1 的光标锚点 P1 查询字段建议;请求 S1 尚未返回。
  • 事件:用户移动到 P2 并修改为 D2 → S1 返回并尝试接受。
  • 预期:S1 不能插在 P1,也不能覆盖 P2;关闭当前候选或重新查询;无重复插入,父表单不提交。
  • 禁止:只因同名字段仍在目录中就接受旧建议。

B3-EXPR-F11 取消保留父非法原稿及外部更新

  • 前提:父字段 D1 为 1 + (;子会话 C1 打开后尚未应用。
  • 事件:父字段经另一合法入口形成 D2 = 2 + ( → 子会话改为 C2 = 3+4 后取消。
  • 预期:父 D2 逐字保留,包括非法括号;不回写 D1 或远端确认值;取消只丢弃子会话的 C2;焦点按 LP-G05 去往当前有效目标。
  • 禁止:取消时只恢复合法值;用旧会话快照覆盖父 D2。

B3-EXPR-F12 异步应用旧资格

  • 前提:子会话 C1 = 1+2 已发出校验;父字段为 D4/P1/授权 A1。
  • 事件:子会话改为 C2 = 1+3 → C1 的校验通过结果返回。
  • 预期:不把 C2 按 C1 的通过结果写入父 D4;不把界面回滚到 C1;当前子层继续打开、可修改,重新核验 C2。
  • 禁止:旧的通过结果关闭子层;应用未经核验的 C2。

B3-EXPR-F13 旧预览与依赖变化

  • 前提:D1 引用 Q;依赖 V1 中 Q=2;已发出预览 P1。
  • 事件:编辑得到引用 Q+1 的 D2 → P1 返回 2 → 依赖更新为 V2,其中 Q=9。
  • 预期:2 只能归为 D1/V1 的旧结果,不启用 D2 的正式动作;即使 D2 文本未再改动,V2 变化也使旧预览过期。
  • 禁止:把最新收到的结果冒充当前结果;依赖版本不进入快照。

B3-EXPR-F14 预览失败不改为内容错误

  • 前提:D1 语法有效;预览服务能力已声明;模拟超时。
  • 事件:发出只读预览 → 超时返回。
  • 预期:显示无法预览及实际的重试能力,保留原文/选区;不显示语法错误,不自动执行业务或重发写入。
  • 禁止:超时清空字段;以旧缓存结果显示当前成功。

B3-EXPR-F15 引用撤权全路径清理

  • 前提:Q 的读权撤回前,可见其标签和值、建议以及 D1 的预览;有旧请求在途。
  • 事件:读权撤为 A2 → 旧请求带着 Q 的标签和值返回。
  • 预期:正文引用/建议/预览/错误/可访问描述按 A2 的披露策略清理;若允许保留不披露内容的占位,则该占位不可解析;旧响应不得恢复标签或值;只有当前焦点失效时才转到安全目标。
  • 禁止:只遮住可见数值;旧授权下的预览继续显示。

B3-EXPR-F16 服务端新基准与旧撤销

  • 前提:本地 D2 基于 V1,有撤销栈 H1;服务端更新为 V2。
  • 事件:接收 V2 → 用户明确采用 V2 → 尝试用旧的 H1 撤销。
  • 预期:收到 V2 时不静默覆盖 D2;用户选择后基准更新;没有版本化变换能力时,H1 不作用于 V2,并说明历史边界。
  • 禁止:旧撤销把 V2 改回另一对象的值;自动声称合并成功。

B3-EXPR-F17 资源预算失败的两个独立轮次

  • 前提:测试配置为最大 32 层/256 节点/4096 码点;合法算术的工作预算为最多 2 个算术节点,每计算一个 +/-/*// 节点消耗 1;所有稿件获准在本会话暂存。
  • 事件:
    • 轮 A:输入 33 个左括号、1、33 个右括号,并请求预览。
    • 轮 B:明确替换为合法稿 (1 + 2) * (3 + 4),重新解析并请求预览。
  • 预期:轮 A 因 33 > 32 拒绝解析,不进入求值,原文保留;轮 B 有 3 个算术节点,预算 2 不足,结果不可用,显示无法计算,不提供部分值作为最终结果;两轮都可退出或继续编辑,不静默截断、不自动增加预算、不降为浮点。
  • 禁止:对轮 A 的非法稿继续求值;预算不足仍输出 21 并称预览完成。

B3-EXPR-F18 保存、正式执行、未知分离

  • 前提:保存表达式的写操作 W1 在途;产品未声明规则执行能力和原操作查询能力。
  • 事件:发送保存 D1 → 回执丢失 → 关闭预览后再点保存。
  • 预期:W1 仍为未知,因无查询能力而明确说明限制;不自动重发;关闭预览不取消 W1;保存不得产生业务执行。
  • 禁止:保存按钮暗中启用规则;把超时当作未执行而盲目重试。

B3-EXPR-F19 分开的窄屏、文字放大及原生适配轮次

  • 前提:
    • 稿件由 1 后接 249 份字符串 " + 1"(空格、+、空格、1),再接 3 个空格与右括号组成,共 1001 码点;错误右括号的范围为 [1000,1001)。
    • 测试节点预算为 1024。
    • 标签为「条件」重复 30 次后接空格「العربية」重复 10 次。
    • 全部为合成文本。
  • 事件:
    • Web 轮 A:320×800 CSS px、文字 100%、浏览器缩放 100%,定位末尾错误,打开/关闭字段目录。
    • Web 轮 B:1280×800 CSS px、浏览器缩放 100%,只将实际文字尺寸相对基线放大至 200%,并测量确认;无法做到则记为未执行,不用整页缩放或所有 rem 同比放大代替。
    • 原生:分别在 iOS 390×844 pt/Android 412×915 dp/Harmony 360×800 vp 画布上设计键盘、IME 和最大可用系统字体档;执行时记录真实的设备/系统/实际缩放,不推定等于 200%。
    • 每一轮都分别用返回先关闭 IME,再关闭活动子层。
  • 预期:每轮的完整原文不变,末尾错误可到达,标签/结构/状态可读,命中遵循 D05;文本放大轮与窄屏轮分别留证,不混算尺寸;IME/子层各消费一次返回;不抢有效的外部焦点;原生缺少的能力如实记为未执行/不支持。
  • 禁止:颜色是唯一的错误标识;截断改变 1001 码点的原文;以整页 zoom 200 冒充文字 200;一次返回连带关闭任务。

B3-EXPR-F20 脚本与字段名不可执行

  • 前提:P1 中仅字段 Q 获准;全部内容为合成测试字符串。
  • 事件:依次输入 exec(1)、@{Q}.x、@{Q} = 1 → 字段显示名含尖括号与算子。
  • 预期:未知语法只显示不可解析及安全文本,不请求任何外部能力;标签作为文字处理,引用仍用 Q 的稳定身份。
  • 禁止:将原文交给任意脚本求值;将标签拼接为查询或代码。

6. B3-RICH:富文本与 HTML 边界

6.1 B3-RICH-SCOPE 三种职责与有界结构

区分三种职责:结构化富文本编辑器、只读格式化内容呈现、原始 HTML 源文查看。三者不能靠「可编辑」开关推断为互相等价。

本候选选择结构化文档模型 RICH-P1:

  • 块级:文档包含段落、语义标题、无序/有序列表及列表项、引用块。
  • 行内:允许文字、显式换行、strong/emphasis、行内 code 及链接。
  • 标题由宿主提供有效的语义层级,不借字号创建 heading-10x。
  • 列表是否允许嵌套、最大深度、文本/节点上限均须配置并说明;无声明时不承诺任意复杂结构。

P1 的模型不变量:

  • 结构树无环:文档/引用块包含块节点;列表只包含列表项;列表项包含段落和已配置允许的子列表;段落/标题只含行内节点。
  • 空文档用一个空段落承载光标,它是否满足必填由字段规则决定。
  • 行内标记不能创建嵌套链接,链接只能作用于允许的文字/行内内容。
  • 除稳定身份、文字、允许的标记、链接目的地、宿主批准的标题层级、列表种类/顺序起点以及 auto/ltr/rtl 逻辑方向外,不接受任意属性。方向仅决定文字组织,不注入 CSS,也不改变字符顺序。
  • 顺序起点为正整数,P1 不支持倒序列表。
  • P1 之外的结构/属性按不支持内容的流程处理,不能忽略后伪称无损。

上述是模型不变量,不批准具体的 JSON 键名或存储 API。

不开放任意字体家族/字号/文字颜色/背景色、内联 CSS、表格、表单、可执行脚本、事件处理器、iframe、远程媒体或任意 HTML 编辑。已知格式通过 D02 角色与宿主层级呈现,具体显示映射沿用基础主档,不把粘贴来的外观值当作新 token。P1 不支持图片、附件和嵌入;需要这些能力的产品另开扩展,包含权限、上传、资源身份、替代文本、下载/删除与安全契约,不能因为拖入一个文件就默默上传。

6.2 B3-RICH-MODEL 稳定节点、选区和格式命令

文档根和结构节点有稳定身份,纯文本偏移须绑定文档修订。选区包括逻辑锚点/焦点、方向和折叠状态,不能只保存屏幕坐标。进入工具栏时可保留逻辑选区,但后续命令必须验证文档版本及目标仍然有效。若外部更新、撤权、删除节点或用户主动另选区域使目标失效,命令不作用于旧范围,更不默认套用到整篇。

格式状态区分全选一致、混合、不适用、禁用和未知;混合的粗体不画成全部开启。

  • 折叠选区的格式切换只决定后续输入的允许格式。
  • 非折叠选区按支持的节点范围施加;跨越不支持/受限节点时,解释并阻止无法完成的命令,不能悄悄改一部分却显示整段成功。
  • 清除格式只移除允许的表现标记,不删除文字、链接目的地,也不改变列表结构;若提供更广泛的「转纯文本」,须另作显式转换说明。

6.3 B3-RICH-PASTE 粘贴、拖入与转换预检

剪贴板输入只由用户明确的粘贴/授权流程触发,不后台轮询,也不读取无关内容。不假定已得到系统读权限;被拒绝或缺少能力时,保留当前文档与选区,提供平台原生粘贴或实际支持的手动输入路径,不显示为已经粘贴。粘贴源可能包含隐藏数据、不同 MIME 内容、外部引用和不可信结构;不能因为来自本应用或曾经过客户端转换,就跳过接收端校验。

接受前,先形成绑定文档 D、选区和策略 P 的转换提案:

  • 只有确认无损、全为支持的节点/格式且检查已完成的输入,才可直接作为单一事务插入。
  • 存在降级、删除、截断、隐含/不可见内容或不支持的节点时,明确列出受影响的种类/数量及安全文本预览,提供取消和显式接受转换。不能先改当前文档,再用 toast 告知格式丢失。
  • 检查依赖不可用时,暂停转换,而不是假称安全。
  • 用户在等待期间编辑或更换选区后,旧提案失效并重新预检,不把旧剪贴板内容覆盖到新区域。

纯文本粘贴把字符当作文本,HTML 尖括号不能变成可执行 DOM。HTML/MIME 转换只保留 P1 可表达且通过当前策略的结构;原始输入在获准保留时,仅作为不执行的来源数据暂存,不把被拒绝的内容插入可渲染的编辑 DOM。取消转换不改原文,也不消费原撤销历史;接受转换是一个本地可撤销事务。超限输入不得静默截断;不能接受时说清限制,允许用户在安全文本表示中自行缩减,但不自动上传到外部转换服务。

P1 采用仅允许绝对 HTTPS 链接的保守设计配置;格式解析、规范化、协议/主机及目标限制,必须由真实的接收/渲染边界检查。不存在可证明的检查时,目的地作为不可点击的文字呈现,不宣称是安全链接。相对路径、协议相对地址以及 javascript/data/file 等方案不在 P1 内;输入保留为可修改的草稿,不擅自补域名,也不把无协议的文本变为地址。HTTPS 并不证明网站可信:显示可理解的实际目标;标签与目的地分开,不能用标签伪装另一个目标。

编辑模式内点击链接先选择/编辑,不直接导航;明确选择「打开链接」才执行导航,并走未保存离开仲裁。只读呈现可以有语义链接,仍按目的地/权限策略处理,不能自动预取外部页面。是否新开、可见提示及宿主隔离策略由真实的平台实现登记,不能声称一个 rel 属性或 UI 检查就解决了所有风险。链接对话框遵循 LP-G03(见浮层组件:对话框、抽屉与提示),取消时保留父层当前选区与允许保留的原文;应用时核验父文档/选区修订。

6.5 B3-RICH-UNSUPPORTED 不支持内容与 HTML 源文

载入的既有文档包含未知的节点/格式/策略版本时,保留获准的原始表示及稳定的占位身份,用安全说明呈现「不支持,尚未转换」,不能静默删掉后仍保存成功。未声明可无损透传未知节点时,P1 将文档置为不可提交的兼容只读模式,保留安全可读的部分,不让邻近编辑在序列化时丢掉未知内容。具备真实无损透传能力的扩展,也须另测所有编辑/保存/撤销路径,不能只测首次显示。

显式「转换为 P1/纯文本」必须先列出损失及转换后的结果;用户接受后形成新的本地修订,来源仍按权限策略保留;不能覆盖原版本而不留可恢复的证据。若未知内容不可安全解析,显示整体不可呈现及安全的元信息,不以截图/HTML 插入绕过。HTML 源文查看把内容按文本编码显示,与渲染预览分开;本候选不提供任意 HTML 源码编辑执行器。复制来源也受当前复制/披露权限约束,不自动导出受限内容。

6.6 B3-RICH-SECURITY 输出与服务端安全边界

文档模型、粘贴内容、链接、历史版本及服务响应都是不可信输入。安全职责包括:

  • 服务端按当前策略验证可保存的结构;
  • 读取时按当前权限过滤;
  • 各渲染目的地按上下文编码/净化;
  • 链接和资源策略;
  • 格式/净化策略版本;
  • 库维护。

前端禁用按钮、编辑器白名单、预览成功或「已清洗」提示,都不能替代这些安全控制。

采用结构化模型不自动证明不会 XSS,格式转换后还可能发生后续拼接/插件变换。要渲染允许的 HTML,必须验证真实的净化、渲染与后续修改链路;本文不选定、也不宣称任何净化器已经正确部署,不提供「任意 HTML 安全」的承诺。不使用正则替换或单独的 CSP 作为通用净化保证。无法证明渲染路径时,退回按文本安全呈现或明确不可呈现,不为了视觉保真而启用脚本/资源加载。预览、只读页面、通知/导出等消费端各自受其输出上下文约束;存储成功不等于认证了所有输出都安全。

6.7 B3-RICH-PREVIEW 渲染快照、并发与保存

只读预览绑定文档 D、格式/渲染策略 P、授权代次和所用的资源身份;即使没有外部资源,也要登记无资源模式。当前配置不发起外部资源请求。D 或 P 变化后,旧预览只可作为获准保留的旧版本提示,不覆盖编辑器,也不用作当前确认。预览失败不破坏原稿;安全过滤改变了呈现时,说明受影响的部分,不把空白当作「空文档」。

本地输入和真实的服务端基准分别保存。服务确认 D1 后,若用户已形成 D2,则只有 D1 被确认,D2 仍未保存。并发冲突不自动覆盖、拼接或宣称已合并;缺少可证明的结构协作/变换能力时,使用显式的版本取舍,保存用户当前仍获准的稿,并说明撤销栈的适用范围。撤权时同步清理受限正文、选区文本、工具栏上下文、剪贴板提案、预览与错误详情;已发出的写操作仍按其真实结果处理,不把清屏说成撤销了远程成功,也不承诺收回用户此前已复制的内容。

6.8 B3-RICH 精确夹具(全部未执行)

B3-RICH-F01 允许结构与一次格式事务

  • 前提:RICH-P1 文档 D1,段落 p1 文字为甲乙丙,选区为乙。
  • 事件:切换 strong → 撤销一次 → 重做一次。
  • 预期:仅乙加粗;一次撤销恢复 D1,重做恢复同一目标;文档和节点身份不由 DOM 位置重建。
  • 禁止:整篇加粗;撤销远程已提交的操作。

B3-RICH-F02 混合状态与折叠输入格式

  • 前提:p1 中甲为 strong、乙为 plain;先选中甲乙;随后折叠至乙末尾,且测试的初始输入标记明确为 plain。
  • 事件:查看跨甲乙的粗体状态 → 折叠到指定的 plain 输入位置,点击粗体切换一次后输入丙。
  • 预期:跨甲乙显示 mixed,而非全部 on;第二步由 plain 切到 strong,仅新增的丙为 strong;甲仍为 strong、乙仍为 plain。
  • 禁止:混合状态显示为全选开启;折叠时整段批量格式化;未定义初始输入标记却断言丙的格式。

B3-RICH-F03 无损支持内容粘贴

  • 前提:D1 的选区在 p1 末尾;剪贴板只含支持的段落文字与 strong;转换检查已完成。
  • 事件:明确粘贴 → 撤销一次。
  • 预期:绑定 D1/选区/P1 的无损提案作为单一事务插入;一次撤销完整回到粘贴前,文字和原选区可恢复。
  • 禁止:后台读取剪贴板;一次粘贴产生无法解释的多次撤销。

B3-RICH-F04 有损 HTML 转换先决策

  • 前提:D1 原文为原稿,选区在末尾;粘贴 <p><span style="font-family:x">甲</span><span style="font-size:99px">乙</span><img src="https://example.invalid/p" alt="图A"></p>;测试的转换提案为甲乙,并明确移除 2 个样式和 1 个图片。
  • 事件:发起粘贴预检 → 选择取消 → 再次预检并显式接受纯文本转换。
  • 预期:第一次先说明种类/数量和安全文本预览,取消后 D1 逐字不变;第二次接受后才形成 D2(纯文本原稿甲乙);图片/样式的损失不隐瞒,原稿此前未被改变。
  • 禁止:先插入再用 toast 告知格式丢失;自动上传图片。

B3-RICH-F05 粘贴提案过期不覆盖新选区

  • 前提:提案 T1 绑定 D1 的选区甲;预检尚未结束。
  • 事件:用户改稿成 D2 并选中乙 → T1 返回并尝试接受。
  • 预期:T1 资格失效,对当前的 D/选区重新预检;D2 及乙不被旧提案覆盖。
  • 禁止:只校验 D 而不校验选区;用旧坐标插入。

B3-RICH-F06 拒绝剪贴板权限

  • 前提:D1 当前选区有效;平台拒绝剪贴板读取。
  • 事件:点击实际提供的粘贴入口。
  • 预期:显示未读取/未插入,并提供真实可用的原生粘贴或手动路径;D1、选区、撤销栈不变;不反复请求,也不暗中读取。
  • 禁止:显示粘贴成功但内容为空;绕过拒绝改为后台轮询。

B3-RICH-F07 纯文本尖括号与不可信 HTML

  • 前提:D1 为空段落;合成文本为 <script>noop</script><img src="https://example.invalid/a">。
  • 事件:选择作为纯文本插入 → 预览。
  • 预期:文本值逐字为 <script>noop</script><img src="https://example.invalid/a">;尖括号及 URL 作为文本显示,不执行,不请求远程资源;不因来源是应用剪贴板而跳过接收端检查。
  • 禁止:插入原始 innerHTML;只靠 UI 的净化提示认定安全。

B3-RICH-F08 链接地址与标签分离

  • 前提:标签为「资料」;目的地草稿为 javascript:… 或 //example.invalid/a;P1 仅允许绝对 HTTPS。
  • 事件:应用链接 → 改成 https://example.invalid/a 后重新检查。
  • 预期:前两类不可应用,草稿可修改,不自动补协议;HTTPS 仍需真实的解析/策略检查;缺少能力时显示为不可点击的文字,不称网站可信。
  • 禁止:按标签导航而隐藏其他目标;把 HTTPS 当作安全可信的保证。

B3-RICH-F09 编辑链接与导航分离

  • 前提:D1 有未保存的文字和允许的链接;焦点在编辑区。
  • 事件:点击链接文本 → 明确选择打开链接 → 取消未保存离开请求。
  • 预期:第一次仅选择/编辑;第二次走 NAV 离开仲裁;取消后未导航,D1 仍保留,焦点依关闭原因处理。
  • 禁止:单击编辑中的链接立即离开;未保存保护晚于实际导航。

B3-RICH-F10 链接子层取消保父当前稿

  • 前提:父层 D1 含不支持的待修原稿;链接子层打开时保存了旧选区。
  • 事件:父层的合法外部入口形成 D2 → 子层取消。
  • 预期:不回写 D1,父层 D2 和仍获准的无效内容保留;旧选区不能覆盖 D2,焦点只去当前有效的目标。
  • 禁止:取消时恢复最后一份合法的服务器稿;把链接子层关闭视为整篇保存。

B3-RICH-F11 工具栏选区已失效

  • 前提:D1 的选区为 p1 文字甲;工具栏保留逻辑选区。
  • 事件:外部更新删除 p1 并形成新基准 V2 → 激活工具栏 emphasis。
  • 预期:拒绝作用于失效目标的命令,并说明需重新选择;不默认套用到整篇,也不套用到当前同位置的另一个节点。
  • 禁止:按 DOM 序号格式化 p2;假称命令已应用。

B3-RICH-F12 未知节点的兼容只读

  • 前提:服务文档 V2 含未知节点 u1 及可读的 p1;无透传能力。
  • 事件:载入 → 尝试编辑 p1 并保存。
  • 预期:显示安全可读的部分与 u1 的不支持说明,整篇不可提交;未知内容不被删掉;可以显式进入有损转换预检。
  • 禁止:只保存 p1 导致 u1 丢失;忽略 u1 并称无损打开。

B3-RICH-F13 显式转换及超限

  • 前提:V2 有未知的 u1;提案可安全转为纯文本;限制为 100 码点,转换后为 120。
  • 事件:预检转纯文本 → 尝试接受。
  • 预期:列出 u1 的损失及 120 > 100 的限制,阻止超限接受;源 V2 仍获准保留且未被覆盖,不能静默截断为 100 字后保存。
  • 禁止:自动删除 20 字;显示已无损转换。

B3-RICH-F14 IME 命令仲裁及全屏重排

  • 前提:D1 已提交的文字为「甲🙂é」,末尾正在组合「合同」;工具栏可展开;全部内容获准在本会话保留。轮 A:测试适配器没有安全结束组合的能力。轮 B:独立重置 D1 和组合状态,适配器可完成组合,但完成时编辑权限变为只读。
  • 事件:轮 A 切到全屏并请求 strong 命令;随后用户按 Enter 确认「合同」、切回内嵌、撤销刚完成的 IME 输入事务 → 轮 B 请求 strong,由平台完成组合,再重新核验修订/选区/权限。
  • 预期:轮 A 的命令暂不可用并说明,原组合不被丢弃;用户确认只提交文本、不提交表单;一次撤销后恢复为「甲🙂é」且字符完整。轮 B 完成组合后可形成当前稿,但新的只读权限阻止格式命令;不能依据组合前的 A1/选区应用。全屏与内嵌共享原稿、选区、滚动与撤销会话,不建副本。
  • 禁止:显式格式命令直接修改半成的组合稿;强制丢弃组合;结束组合后不再核验权限;按编码单元切断表情/组合字符。

B3-RICH-F15 旧预览及策略变化

  • 前提:以 D1/P1 发起渲染预览 R1;无外部资源模式。
  • 事件:编辑为 D2 → 策略更新为 P2,禁用一种格式 → R1 返回。
  • 预期:R1 只能归属 D1/P1,并按 P2 的披露规则决定能否保留旧态;不能覆盖 D2、启用当前确认或加载外部资源。
  • 禁止:认为 D 相同就忽略 P 的变化;把旧 HTML 回插到当前编辑 DOM。

B3-RICH-F16 安全服务不可用

  • 前提:D1 可解析;真实的安全检查/渲染路径当前不可证明。
  • 事件:请求只读预览。
  • 预期:原稿保留,明确说明无法按富结构呈现,或退回安全文本;不把空白说成空文档,不以预览成功的外观保证安全。
  • 禁止:为保真而跳过净化;声称 UI 已清洗所以服务安全。

B3-RICH-F17 并发外部更新及撤销边界

  • 前提:本地 D2 基于 V1,服务器 V2 修改了同一段;无结构合并/版本化撤销能力。
  • 事件:接收 V2 → 用户明确采用 V2 → 触发 D2 的旧撤销。
  • 预期:先呈现冲突,不覆盖 D2;显式取舍后新基准为 V2;旧撤销栈不可作用于 V2,并说明历史边界;不宣称自动合并。
  • 禁止:直接拼接两个 HTML 片段;旧撤销覆盖远端新内容。

B3-RICH-F18 撤权清理隐藏通道

  • 前提:D1 含受限段落;所选文字被工具栏和粘贴提案引用;预览在途。
  • 事件:撤销读权限(A2)→ 旧预览返回。
  • 预期:正文、选区文本、工具栏上下文、提案、预览、错误详情按 A2 清理;旧响应不恢复;焦点失效时才转到安全目标;不承诺收回以前已复制的内容。
  • 禁止:只隐藏编辑区;父层取消后重新恢复受限原文。

B3-RICH-F19 保存 D1 后 D2 与未知

  • 前提:保存 W1/D1 发出后继续编辑为 D2;模拟成功与回执丢失两个分支。
  • 事件:成功分支收到 D1 的确认 → 未知分支在没有原操作查询能力时点击再次保存。
  • 预期:成功分支仅确认 D1,D2 仍为脏,选区不重置;未知分支明确说明限制,不盲目重发,不把关闭界面当作取消远端。
  • 禁止:D1 成功后清空 D2;没有查询能力却承诺后台可查。

B3-RICH-F20 HTML 源文与无安全解析

  • 前提:获准的源文包含未知的复杂 HTML;当前无法安全解析;无源文编辑执行能力。
  • 事件:选择源文查看 → 请求结构预览。
  • 预期:源文按文本编码显示,复制仍受权限约束;结构预览明确不可呈现,不启用脚本,也不以嵌入浏览器绕开。
  • 禁止:查看源码的同时执行 HTML;把「不支持」理解为允许任意脚本。

B3-RICH-F21 独立窄屏和 200% 文字轮的工具栏增长

  • 前提:工具栏有粗体/强调/链接 3 项;文档共 100 段,第 n 段的文字严格为 第 + n 的三位十进制补零 + 行 العربية A + n 的三位补零 + 🙂;首段语义为宿主允许的 h2,其余为段落;编辑焦点置于第 100 段末尾;模型选区绑定该节点,而非屏幕坐标。
  • 事件:
    1. Web 轮 A:320×800 CSS px,文字 100%,浏览器缩放 100%。
    2. Web 轮 B:1280×800 CSS px,浏览器缩放 100%,单独把实际文字尺寸放大到基线的 200% 并测量,不用整页缩放代替;无此能力即为未执行。
    3. 两个 Web 轮分别用 Tab 进出工具栏、各自做方向键操作、开关链接子层并回到第 100 段。
    4. 原生端各自使用 D05 参考画布和最大可用的系统文字档设计同一路径;执行时另记真实设置/软键盘与测量,不由 Web 结果推定。
  • 预期:工具栏与文本的方向键各自归属;100 段及语义层级不因重排丢失,末尾焦点可见,命中/字档沿用 D02/D05;两个 Web 条件分别记录;原生能力/读屏未测时不得写通过。
  • 禁止:Tab 困在编辑器内;工具栏全局吞掉文本方向键;用整页 zoom 冒充文字放大;复制新的 HEX/字号作为第二套值。

B3-RICH-F22 单任务工具与主操作分工

  • 前提:一个表单 T1 有公式字段和富文本字段,两个编辑工具栏及各自的预览入口。
  • 事件:打开两个字段的帮助并关闭 → 分别格式化/预览 → 查看最终提交入口。
  • 预期:各工具/预览均为次操作,不给每个字段授予 primary;父子任务成立时边界明示,子应用不触发父提交;T1 至多一个突出的主操作,危险确认另按 D04。
  • 禁止:按工具栏数量复制 primary;字段预览顺带发布整篇。

7. CMP-08 / QRY-SEARCH 查询输入

7.1 范围、结构与状态

查询框有明确的范围标签、查询文本、查询模式、提交/清除入口、可选的建议和结果摘要。显式查询与「输入稳定后查询」须在实例层声明,不能因屏幕宽度而改变。建议用于补全/选择候选;结果列表是当前查询的输出,两者不能共用一个「选中」状态。无建议的搜索不需要 combobox 角色;有可选建议时,登记 listbox/grid/tree/dialog 中的真实模式与相应的 APG 键盘模型。

输入文本、规范化查询、筛选条件、排序、分页游标、授权范围和数据版本,共同定义结果身份。须明确区分:未查询、查询中、成功空、成功非空、失败、部分结果、旧结果更新中。输入空值时是恢复默认集合还是不查询,须声明;清除不自动等于清空其他筛选。查询过程中,旧结果要显示其实际条件,不能配上新查询的标题冒充新结果。

7.2 事件、键盘与异步

输入法组合结束前,不把临时串提交为最终查询;防抖只是减少请求,不解决竞态。旧请求取消失败或已完成时,仍按完整身份丢弃不适用的结果;新的同文查询也不能接受旧授权/旧数据版本的回包。失败不改成无结果;重试保持原查询上下文,用户已修改查询时,则须对当前意图重新发起。

键盘与焦点:

  • 普通 Enter:在建议未占有确认动作时,提交完整查询。
  • 确认建议的活动项:按实例声明先接受候选,可保持草稿或触发查询,但必须显示此选择的效果,且至多查询一次。
  • 采用单选 listbox 型 combobox 时,DOM 焦点留在输入框,通过活动后代呈现候选;dialog 型弹出则按其对应的焦点模型,两者不混用。
  • Esc 先关闭建议,不无声清除查询。
  • Tab 正常离开,不自动接受尚未明确确认的建议。
  • 建议自动高亮/弹出列表中的 aria-selected,只表示当前候选的选择,不等于已接受为输入字段值或已执行查询;方向键浏览不产生业务保存。

结果返回只更新状态与合适的摘要,不把焦点跳到首个结果。结果项动作沿用稳定 ID;加载后同一索引换了对象,不能接管旧焦点。当前建议被撤权时,去除受限文本并更新活动项,不保留指向不存在节点的活动后代;输入仍有权编辑则保持焦点,失去整体搜索权限则转到安全入口。查询记录和历史建议的保存、共享与敏感信息策略由产品明确;未声明时,不得暗示永久或跨设备留存。

7.3 平台、内容增长与夹具(未执行)

移动原生搜索可采用平台原生的键盘/建议控件,但需验证查询提交、组合状态、清除及取消是否等价;Android 返回先退出当前建议/键盘层,而不是误清业务查询,实际顺序按平台实现登记。长建议要显示可区分的关键差异和上下文,不能全部截成相同的前缀;RTL 混排与放大时,不让候选覆盖触发字段且无法关闭。

  • QRY-SEARCH-N:显式模式下输入「R」,下移高亮 R-002 后按 Esc。预期:仅关闭建议,查询仍为 R,结果请求 0、业务保存 0。
  • QRY-SEARCH-F:q1 先发、q2 后发,q2 成功后 q1 返回。预期:仅显示 q2 的结果与摘要;q1 失败也不覆盖 q2 的状态。
  • QRY-SEARCH-A:建议确认策略声明为「接受并查询」,在活动项 R-002 上按 Enter。预期:输入接受 R-002,且查询恰好 1 次,不再触发表单的第二次提交。
  • QRY-SEARCH-R:同文查询换到新的授权范围 B,旧范围 A 的结果晚到。预期:A 的内容不呈现、不缓存、不播报,不因文字相同而认为有效。
  • QRY-SEARCH-L:两个候选仅在长名称末尾不同,文字 200%。预期:完整差异可通过触控/键盘获取,清除与关闭建议均可达。

来源与边界见本组来源。

键盘:Enter 提交当前完整查询,Escape 只关闭建议,是否清除需要另行明确约定;不覆盖浏览器原有的查找快捷键。

例:检索「上海 合同」的请求发出后,用户把查询改为「上海 租约」;后者先返回时,较早请求的结果不得覆盖当前结果。

验收:包括乱序响应、空查询定义、清除回到默认集、读屏获知结果摘要而不抢焦点。

CMP-08 基线正常夹具

搜索合同 A → 发出请求 → 结果摘要对应 A。

CMP-08 基线失败夹具

A 之后发出 B,且 B 先返回 → 忽略 A 的回包;B 失败时不能显示为无匹配。

8. CMP-09 数值输入与 PRM-SPIN

解剖:名称、可编辑值、固定或可选的单位、必要的精度说明;增减器仅在离散步进有意义时提供。金额、比例、面积的单位不得只放在会消失的占位符中。

行为:显示格式与业务精度分开。在百分数字段输入「12」表示 12% 还是 0.12,必须由产品定义,并在界面上清楚呈现;不能在格式切换时悄悄改变数量级。千分分隔符、本地小数符与负号须受控解析,不接受模糊值后再去猜测。

键盘:普通文本式数值输入保留编辑键;只有具备真实步进语义时,才采用增减控件及其键盘行为。滚轮经过字段时不应意外改变金额;拖动滑块不是精确输入的唯一方式。

校验:区分格式错误、超界、精度超限、跨字段规则和服务端拒绝。超界时不自动改成边界值、再把它当作用户输入;舍入规则由产品提供,提交前实际值可见。

例:预算字段显示「人民币万元」,输入 1.2345 是否保留由预算精度决定;展示两位小数不代表存储只有两位。

验收:包含 0、空、负值、中间小数、极大数、粘贴的货币符号、单位变更及服务端精度差异。

8.1 用途、结构与值域

步进输入用于在明示的离散值域内增减数量;标识符、银行卡号、邮编、具有前导零身份的编号,不应采用数值步进。高精度任意小数可以用普通数值输入,不因为有加减图标就强加步进。结构为:持续标签、当前文本/可解析值、单位、增减入口、边界与步长说明、错误和保存状态;增减按钮不是两个独立的任务主操作。

输入明确给出:最小/最大值(可以缺省边界,但不得假造)、步长、基准、精度、是否允许空、合法离散集合、单位及格式策略。

  • 合法值由基准加步长的整数倍、且满足边界决定。
  • 合法集合为空或配置本身矛盾时,呈现不可用说明,不把 0、1 等默认值偷放进来。
  • 空文本、尚未知、暂时不完整的负号/小数、格式非法、合法候选与已确认值,分别保留。
  • 小数计算使用能保持业务精度的策略,不因二进制浮点尾差改变用户所选的步进。

8.2 输入与事件

手输值和加减入口采用同一合法值域:

  • 已在合法点时,加/减一个声明的步长。
  • 手输了非步进值后,只有明确显示将到达的下一个合法点、且由用户发起增减时,才可取相邻点;不能在失焦时偷偷修正。
  • 空值首次加/减须有可见的初值策略,或先要求输入,不能默认把未知变为零。
  • 达到边界不循环;对应方向不产生值变化,也不产生重复的写请求,原因仍可获取。

每次增减只修改本地候选,业务保存遵循外层声明。

支持长按连发时:

  • 记录开始值;释放、取消、失焦、切页、撤权及到达边界,都停止连发。
  • 取消时恢复本次操作前仍允许保留的原始草稿,包括未解析或因新规则而无效的内容,并明确标为待复核;已发送的写请求独立核查,不假装撤销。
  • 默认不对每个重复步发送远端写入;若产品要求即时写入,须明示幂等/排队和取消后的真实状态。
  • 本次取消/结束后迟到的重复定时器、合成 click 或旧指针回调,不得再增减;以操作身份去重,但不吞掉用户之后明确开始的新操作。

普通页面滚轮经过字段时不触发数值变化。单位转换和边界热更新只更新解释/约束,不能静默重写用户的数量;保留不再合法但可披露的草稿,并提示复核。

8.3 键盘、触控与增长

Web 可选完整的 spinbutton 模型:

  • 焦点在可编辑值上,Up/Down 增减。
  • Home/End 到当前合法离散集合的最小/最大值(不是不落在步进上的原始约束边界)。
  • 可选的大步键要明示。
  • 保留文本选择、光标和撤销。

该模型中的增减图形,可由输入框的键盘操作等效替代;如果以独立按钮增强触控/辅助技术,应记录额外的焦点顺序,且不能制造重复的无名入口。原生数值控件须测试其默认的滚轮和格式行为,不因 type/role 存在就算合格。移动端没有可靠的增减手势时,提供显式按钮或直接输入路径。只读时可读、可复制,禁用原因可达;越界错误和焦点同时存在。

读出当前可解析值、单位、实际可达到的最小/最大合法点及必要状态;原始约束与有效离散范围不同时,另作说明。未解析的文本不谎报为上次数值已被接受。长单位和精度说明可换行,RTL 不反转数字字符,窄屏下增减命中区不重叠。辅助技术触控增减、长按中断、精度与大字,需逐平台实测。

来源:APG Spinbutton(2026-10-19 读取正文)支持字段、增减键与数值语义;操作快照、单位变化、长按请求策略是 YUDS 的推导,不宣称与 SAP 当前实现等价。

8.4 精确夹具(全部未执行)

  • PRM-SPIN-F01:空值,范围 0..10,步长 2,首次操作策略要求先输入;点加。预期:无值变更,提示输入初值,不把空当作 0 或 2。
  • PRM-SPIN-F02:值 0.2,步长 0.1,基准 0;Up 三次。预期:候选为 0.5,且显示/提交精度一致,不出现 0.5000000001;保存请求 0。
  • PRM-SPIN-F03:值 10,上界 10;连续加及长按。预期:值不变,变更事件 0,写入 0,边界原因可达;随后减可用。
  • PRM-SPIN-F04:草稿 4,长按预览到 8;发生 pointercancel。预期:连发停止,草稿恢复为 4,写入 0;之后旧操作迟到的 click 也不再增加,新操作仍可正常开始;若期间撤权,先按当前披露政策处理,不回填受限值。
  • PRM-SPIN-F05:当前值 5,单位「项」,边界 10;远端把边界更新为 3。预期:保留允许披露的 5 并显示超界,不能无声变为 3;用户明确修正后才产生接受。
  • PRM-SPIN-F07:min=1、max=10、base=0、step=3,合法集为 3/6/9;Home 后 End。预期:先 3 后 9,不能是 1/10;若配置改为 min=1、max=2,合法集为空,报配置错误且无值变更。
  • PRM-SPIN-F06:长单位、RTL、200% 文字,只用键盘及触控读屏。预期:名称/值/单位/边界可读,增减可达且不重叠,页面滚轮不改值;真实结果未执行。

来源和证据限制见本组来源。

CMP-09 基线正常夹具

比例字段注明输入 12 表示 12% → 输入 12 → 显示同一含义。

CMP-09 基线失败夹具

粘贴含混合小数分隔符的值 → 保留文本并要求修正,不改变数量级。

9. B3-COLOR:用户内容颜色选择

本颜色选择器用于产品已声明的内容颜色字段。B3-RICH 的 RICH-P1 默认不开放任意文字/背景色;将本控件嵌入富文本须另行声明格式策略与安全约束,不因收录在同一篇而自动获得该能力。

本节是通用深契约的候选,设计输入沿用 D01–D08。真实服务、平台能力与运行结果仍须证据,全部运行未执行。以下基础约束保持不变:七个 role × 固定 step、三个文字角色各九档、每个独立任务最多一个主操作。

9.1 B3-COLOR-SCOPE 用途、非用途与首期输入模型

用于获准编辑的用户内容颜色值,提供可读的精确输入和可选的任务色板。它不修改 YUDS 的七 role × step、主题、状态色或品牌基础;用户选的颜色不能直接控制组件标签、焦点/错误色及主操作。任务需要的是语义状态时选状态,不让用户用任意选色代替业务状态。

首期输入模型:

  • 颜色:sRGB 的 #RRGGBB 六位 HEX,十六进制字母不区分大小写。
  • alpha:单独输入,明确标为「不透明度,0–1」;0 是全透明,1 是不透明。
  • alpha 采用有限十进制原文的精确数值含义;不支持指数、百分号或隐藏的第八位 alpha 输入;不设自动取整/量化。
  • 精度/可接受长度如受真实实现限制,必须在编辑前明确,并在超限时保留原文报错;不能仅靠滑杆步长决定值域。
  • 接受后须能无损重建已接受的 RGB 与 alpha;做不到则拒绝接受并解释,不悄悄改成近似值。

这是首期 UI 范围,不是 CSS 语法全集。#RGB、#RGBA、#RRGGBBAA、颜色名、rgb/hsl/lab/oklch、Display-P3、ICC/CMYK、CSS 变量与表达式均不在首期输入范围;即使某浏览器能解析,也不能静默接受或转换。保留原文并说明「此控件仅接受六位 sRGB HEX 与独立 alpha」。不声称这些写法在 CSS 中无效,也不声称它们一定超出色域。

CSS Color 4 已读的局部正文提供:HEX 属于 sRGB、alpha 的数值含义,以及 CSS 自身的解析规则。本契约候选采用更严格的编辑器规则:CSS 可能钳制某些超界值,不等于 YUDS 可以在用户草稿中静默钳制。读取时该文为 2026-10-09 Candidate Recommendation Draft;未读整部转换/色域映射算法,该文也不提供颜色准确性认证。

首期不提供屏幕吸管、相机取色、二维自由色域面、格式转换或跨设备颜色校准。这些若后续加入,须另定能力、授权、量化、取消与非拖动的等价路径;不让原生选择器的默认黑色替代未知值。不预设个人色板、最近使用或跨端同步存储。

9.2 B3-COLOR-STRUCT 结构、变体与独立状态

结构:持续字段名、sRGB 范围说明、HEX 精确输入、不透明度精确输入、预览及其背景说明、原始/当前错误、可选的有名色板、空值/清除入口(仅在允许无颜色时)。可作为内联表单字段,或由父字段打开的暂存选择层。

  • 内联字段遵循所属表单的接受/提交边界,不加一个偷偷远程写入的「应用」。
  • 暂存选择层有独立的临时稿和唯一的「应用」主操作;外层保存仍是另一项任务。

色板选择和微调只改变当前会话拥有的稿,不等于保存。只读时仍可理解/复制获准的值;禁用须给出原因;撤权按读、写权限分别处理。

需分开的数据:原始 HEX 字符串与原始 alpha 字符串;可解析的颜色候选;当前本地接受值;父字段稿/修订;远端确认值/版本;预览身份;验证/授权/读取与写请求的身份。空、不完整、非法、不支持的格式、支持范围内有效、尚未核验、保存未知,彼此都不同。

「无颜色」是可选字段的空值,不等于全透明。alpha 为 0 时仍保留 RGB,恢复不透明度时不能变成黑色或旧默认色。alpha 留空是未完成,不默默补 1;初始不透明度 1 如来自已声明的创建默认值,须可见,不能在编辑过程中用默认值填掉用户的清空行为。

预览必须指明它是当前有效候选,还是「上次可解析预览」。当前原文不完整/非法/不支持时,保留原文、错误与旧预览标记,不装作颜色已合法变化。无可解析值时给出无预览说明,不回填黑色。预览只从已解析的受控 RGB 与 alpha 生成,不把原始输入拼进 style/HTML,也不从原文触发外部资源读取。棋盘等背景只作透明度示意,不改变值,也不宣称与实际合成背景、显示器或打印结果相同。

9.3 B3-COLOR-VALUE 编辑、接受、取消与版本

粘贴、输入法、辅助输入、自动填充、色板、撤销都走同一个候选通道。组字时不强制格式化、不提前应用,Enter 只完成组字;文本字段保留光标、选择、复制/粘贴与撤销。前后空格、短 HEX、八位 HEX 和不支持的颜色空间,不自动修剪、展开或拆分;提供可理解的修正说明,由用户明确改写。合法 HEX 的大小写差异可用于判断值是否等价,但用户编辑时不改大小写、不动光标,也不借等价表示重复提交。

alpha 为负数、大于 1、非有限、带指数/百分号或原文不可解析时,均阻止接受并保留草稿;不能把 1.2 写成 1,也不能把 -0.1 写成 0。精确输入允许在声明精度内输入非预设步进的值;如提供步进增强,先声明步长并沿用 PRM-SPIN,不能借步进路径偷偷量化手输值。首期不提供拖动面板,因此不存在以松指作为业务保存的隐含行为。

暂存层打开时,捕获父字段允许保留的原始稿及其修订,包括非法/未解析的稿。子层取消只丢弃本次子稿;父字段在此期间被另一个合法入口更新时,保留最新的父状态,不盲目把打开时的快照写回。父字段无变化时,取消后仍是打开前的原稿,而不是远端的旧确认值。IME、子层、父层逐级消费 Escape;一次 Escape 不能同时丢弃子稿并关闭外层表单。

应用时捕获:子实例、子稿修订与原始/解析值、输入约束/色板修订、父字段修订、对象/范围和授权代次;核验成功只能接受这个完全匹配的候选。C1 核验期间改成 C2 时,C1 的结果不能应用 C2、不能覆盖回 C1、也不能关闭层;保留 C2 并重新核验。父字段、约束或权限变化同样使旧资格失效,须清楚提示冲突。禁止把另一个色板索引或相同的显示名当作相同的颜色身份。

合法且语义值确实变化的应用,最多产生一次父字段草稿接受,随后按层合同关闭并回焦;语义值未变的应用可以结束临时任务,但不发出重复的值变更/写请求。若父字段未改,成功接受不是远端保存。取消/关闭、失焦、换主题和重新布局都不保存。宿主若有显式保存,只沿用既有的远端请求/回执合同:失败时保留可披露的稿;结果未知时不自动重试;有查询能力时才核查原任务;不能承诺后台恢复。

9.4 B3-COLOR-PALETTE 色板、权限与平台

色板是由可选的已命名候选组成的单选组:稳定的色板项 ID、色值及 alpha 与版本相互独立;继承 CHO-RADIO 已声明的键盘模型。每项有可见名称或精确颜色描述、持久的选中标记、焦点线索与必要的禁用原因,不能只用色块区分。没有匹配项时显示「自定义」,不强选最近色。

不同 ID 可能同值。有明确选择时,只有该候选显示选中;仅凭颜色值相同,不能把多个 radio 同时标为选中,也不能猜用户选了哪个名称。同值但身份不明时,显示等值不唯一/自定义。色板项身份只是本次交互的状态,不因保存了颜色值就承诺持久保存它。焦点、候选、临时接受、已保存互不等价。

异步色板读取失败时,保留当前合法的自定义值并提供局部重试;不能因此清空颜色。同一 ID 的色值或约束更新时,要重新核验当前选择,不能借保持同一索引把用户稿替换成新颜色。撤读权时,清除受限原文、预览、色板标签、错误详情、缓存、撤销及子层副本,并阻止新的输出;只撤写权而仍可读时,保留获准值但阻断应用。先前合法复制到系统的副本不承诺追回。旧回执不得恢复受限内容或能力。

Web 优先使用普通文本/数值入口、单选色板与既定的层语义,不把色板冒充 menu 或二维 grid。原生 color 输入或平台颜色面板,只有在实际支持本任务的值域、alpha、可访问性、取消与无损往返时,才能作为增强;否则保持精确输入的等价路径,不因能力未知而禁掉全部颜色编辑。

iOS/Android/HarmonyOS 分别验证:软键盘能否输入所需字符、小数原文、辅助技术读出、系统返回与取消。各端共享 sRGB/alpha 的内容含义,不共享 Web 属性或像素尺寸。屏幕外观差异不能被说成数据变色,也不能悄悄转换色域。RTL 下隔离 HEX 和小数原文,不反转数字或字符;长标签/格式说明、文字增长和窄屏下,输入与错误自然重排。色块以外的 YUDS 文字/焦点继续遵守自身的 Token 与对比约束;用户色不可见时,仍能靠精确值完成同一任务。

9.5 精确夹具(全部运行未执行)

执行前按实际平台冻结版本、视口、方向、输入方式、能力前置,以及每个独立子测试的唯一预期;测试参数不等同于产品的全局默认值。

B3-COLOR-F01 精确输入与表单草稿

  • 前置:父字段已接受 #123456、alpha 0.25,远端仍是同值;内联表单无即时保存。
  • 动作:编辑为 #ABCDEF、alpha 0.375;按所属字段的接受时机核验;尚未提交外表单。
  • 预期:原文保持可编辑,解析候选准确;本地草稿接受所输 RGB 与 0.375;预览标明其身份;远端写入 0。
  • 禁止事件:拖动/失焦隐式保存;alpha 被量化到预设步进;换色时顺带改动品牌 Token。
  • 规则:B3-COLOR-SCOPE、B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F02 非法不完整与旧预览

  • 前置:已解析 #123456、alpha 0.5;当前预览对应此值。
  • 动作:HEX 改为 #12G,再改为 #12;清空 alpha;尝试应用。
  • 预期:原文全部保留;分别显示非法、不完整及 alpha 未完成;旧预览明确标为上次可解析;接受 0,写入 0。
  • 禁止事件:补黑色;清空的 alpha 默认为 1;把旧预览称作当前有效;删掉坏字符。
  • 规则:B3-COLOR-STRUCT、B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F03 CSS 合法写法但首期不支持

  • 前置:父稿合法,选择层已打开。
  • 动作:分别独立粘贴 #abc、#12345678、red、rgb(1 2 3)、color(display-p3 1 0 0);尝试应用。
  • 预期:每个原文完整保留,并说明首期只支持六位 HEX 与独立 alpha;父字段不变;不声称这些写法都是 CSS 非法或超色域。
  • 禁止事件:短 HEX 被展开;八位 HEX 被拆出 alpha;因浏览器支持就接受;静默转 sRGB/clamp。
  • 规则:B3-COLOR-SCOPE、B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F04 alpha 越界与精度

  • 前置:HEX #123456;alpha 已接受 0.375;真实实现支持该精度。
  • 动作:分别输入 1.2、-0.1、NaN、1e-1、25% 并尝试应用;再输入 0.375 并接受。
  • 预期:不支持的原文和范围错误都保留;前五次接受 0,不钳制;合法的 0.375 无损往返;若真实限制更小,须预先说明并拒绝,而不是舍入。
  • 禁止事件:1.2 变 1;-0.1 变 0;25% 自动改为 0.25;精度已丢失仍称精确。
  • 规则:B3-COLOR-SCOPE、B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F05 全透明与无颜色不同

  • 前置:可选颜色字段为 #123456、alpha 1;有明确的清除入口。
  • 动作:alpha 改为 0 并接受;再改为 1;再点「无颜色」。
  • 预期:透明时仍保留 #123456;恢复不透明后仍是 #123456;清除后才为空值;三者的名称和状态都可理解。
  • 禁止事件:透明等于空;恢复后变黑;清除后默认补回原值;用「alpha 未知」替代空值。
  • 规则:B3-COLOR-STRUCT
  • 实际运行:未执行。

B3-COLOR-F06 取消保留进入前的非法原稿

  • 前置:远端确认 #123456、alpha 1;父字段当前是未解析稿 #12、alpha 为空;此父稿允许保留。
  • 动作:打开子层;子稿改为 #ABCDEF、alpha 0.5;取消。
  • 预期:只丢弃子层改动;父字段仍是 #12 与空 alpha,并保持需修正状态;不回到远端确认值;写入 0。
  • 禁止事件:只保存合法基线,导致原稿消失;取消时把 #123456 写回父字段;接受子稿。
  • 规则:B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F07 父字段并发更新不被取消回滚

  • 前置:父字段 v1 为 #123456/1;子层已打开,子稿改为 #ABCDEF/0.5。
  • 动作:另一个合法入口把父字段更新为 v2 = #654321/0.75;取消子层。
  • 预期:父字段 v2 完整保留;只丢弃子稿;不把 v1 快照写回;受限信息仍按权限清理。
  • 禁止事件:父字段回到 v1;应用子稿覆盖 v2;取消触发远端补偿写。
  • 规则:B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F08 C1 核验不能应用 C2

  • 前置:子层 C1 = #123456/0.5,父字段 v1,约束 r1,授权 a1;应用资格核验 q1 已发出。
  • 动作:子稿改为 C2 = #ABCDEF/0.75;q1 返回通过;再明确以 C2 发出 q2 并通过。
  • 预期:q1 不应用 C2、不覆盖回 C1、不关闭层;当前 C2 保留,待重新核验;q2 完全匹配时,最多一次父字段草稿接受;写入仍由外表单决定。
  • 禁止事件:旧的通过结果套用到新稿;晚到的回包覆盖当前稿;旧结果关闭层;重复接受。
  • 规则:B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F09 约束与父版本冲突

  • 前置:子稿 C1 的核验 q1 进行中,记录了色板 p1/约束 r1/父字段 v1/授权 a1。
  • 动作:分别独立把约束改为 r2、父字段改为 v2 或授权代次改为 a2;q1 返回通过。
  • 预期:任何绑定变化都使 q1 失效;保留当前获准的稿,并说明需重新核验/存在冲突;不得关闭层或覆盖新的父稿。
  • 禁止事件:只核对颜色字符串相同即接受;忽略约束或权限版本;复活已失权的值。
  • 规则:B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F10 IME 与逐级 Escape

  • 前置:外表单 F 打开了子颜色层 C;HEX 输入正处于中文 IME 组字中;父表单 F 有其他未保存的稿。
  • 动作:按 Enter 确认组字;IME 再次活动时按 Escape;随后在无 IME 时再按 Escape 关闭 C。
  • 预期:Enter 只完成组字,应用 0;第一次 Escape 只由 IME 处理,C 和 F 都不关闭;后一次由 C 处理,父表单 F 保持,父原稿不丢。
  • 禁止事件:确认组字即提交;同一次 Escape 同时取消 C 和 F;父稿回到远端值。
  • 规则:B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F11 有名色板与自定义值

  • 前置:色板 P1 含稳定项 A = #123456/1、B = #ABCDEF/0.5,以及同值异名的 D = #ABCDEF/0.5;当前自定义值 #654321/0.75 无匹配项。
  • 动作:用继承 CHO-RADIO 的普通单选键盘/触控路径,明确选择 B 一次;随后精确输入 #654321/0.75。
  • 预期:初始明确显示自定义,不强选近似的 A;B 有名称/精确值,选中与焦点分开;明确选 B 只标 B,不同时标 D;明确选择 B 只改变当前子稿,父字段保持 #654321/0.75,应用 0;随后输入 #654321/0.75 会取消色板匹配,但不丢值。
  • 禁止事件:只靠色块辨认;用 menu 语义选择;选最近色或同值双选;方向键改变远端事实。
  • 规则:B3-COLOR-PALETTE
  • 实际运行:未执行。

B3-COLOR-F12 色板异步与值改版

  • 前置:父字段与子稿均为自定义色 #654321/0.75;旧读取 q1 在途;显式刷新 q2 是当前请求。
  • 动作:q2 明确失败;重试 q3 成功,返回色板 p3,其中 B = #ABCDEF/0.5;明确选 B 一次,但不应用到父字段;刷新 q4 返回色板 p4,同一 B ID 改为 #010203/0.75;最后旧 q1 成功。
  • 预期:q2 失败不清除自定义值;选 B 后子稿为 #ABCDEF/0.5,父字段仍是 #654321/0.75;p4 到达时保留子稿 #ABCDEF/0.5 并标为需重新核验,不自动替换成 #010203/0.75;旧 q1 不顶替 p4,候选目录仍是 p4;焦点不被抢走。
  • 禁止事件:加载失败时重置为黑色;同 ID 的新值覆盖子稿;旧 q1 恢复旧候选;父字段接受或写入。
  • 规则:B3-COLOR-PALETTE、B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F13 撤写与撤读的边界

  • 前置:颜色及标签允许查看;子层有草稿、预览、撤销栈与待返回的响应。
  • 动作:先只撤写权;另一次独立测试撤读权,并交付旧响应/撤销。
  • 预期:只撤写权时保留可披露值并阻断应用;撤读权时清除受限原文/预览/标签/缓存/撤销与子层副本;旧响应不恢复;焦点去往安全入口。
  • 禁止事件:只加禁用、仍可通过快捷键应用;撤销复活秘密;承诺追回已复制到系统的副本。
  • 规则:B3-COLOR-PALETTE
  • 实际运行:未执行。

B3-COLOR-F14 同值表示与真实保存未知

  • 前置:父字段已接受 #abcdef/0.5;一次子层只改 HEX 大小写;另一次真正改值,并由宿主明确发出保存 w1。
  • 动作:应用同值表示;另一次保存 w1 超时后关闭颜色层,然后 w1 迟到成功。
  • 预期:同值可结束子任务,但值变更/写入为 0;w1 超时后保持未知、不重发;回执归属 w1 的原对象,当前稿如另有变化仍是未保存;没有查询能力时不虚构后台恢复。
  • 禁止事件:大小写制造重复的业务写;把关闭视图当作取消 w1;迟到的成功把所有新稿标为已保存;自动重试。
  • 规则:B3-COLOR-VALUE
  • 实际运行:未执行。

B3-COLOR-F15 原生能力缺口与无损往返

  • 前置:某端原生色面板只支持不透明色或量化的 alpha;当前值 #123456/0.375。
  • 动作:尝试启用增强面板;取消;使用独立的精确入口接受原值。
  • 预期:不用有损面板替代完整入口,并显示能力限制;取消不丢原始值;精确入口仍能完成任务;不发出自动取色权限请求。
  • 禁止事件:原生默认黑色覆盖原值;alpha 变为 1 或近似值;因无面板能力而禁用全部编辑;虚构吸管授权。
  • 规则:B3-COLOR-PALETTE、B3-COLOR-SCOPE
  • 实际运行:未执行。

B3-COLOR-F16 增长、RTL 与预览边界

  • 前置:长字段名、格式说明和 RTL 混排;HEX #ABCDEF、alpha 0.5;浅色/深色主题均有预览。
  • 动作:放大文字并窄化;改变示意背景;切换主题;复制获准的精确值。
  • 预期:输入、说明、错误完整可达;HEX 与小数不反转;背景/主题不改变 RGB 或 alpha;用户色不控制组件的焦点/错误/文字;预览明确不是显示校准承诺。
  • 禁止事件:裁掉 alpha 或错误;改变背景就改变保存值;把用户色写入 YUDS Token;颜色看不见时任务就无法完成。
  • 规则:B3-COLOR-STRUCT、B3-COLOR-PALETTE
  • 实际运行:未执行。

来源仅限已读的 W3C APG 轮播及 CSS Color 4 所列局部,不扩展为 SAP 等价或平台实现证明。详见来源与边界、完整夹具、独立源稿反审。冻结原稿保留当时的发布状态,仅作历史证据。

10. CMP-10 / CMP-11 / INP-DATE 日期、区间与日历

10.1 用途、结构和不适用

日期输入适合用户已知、粘贴或精确键入的日期;日历便于按周/月上下文选日;区间用于两个端点含义明确的日期。只选年月时,不得强迫用户选择虚构的 1 日。日历不承担排程冲突、资源预约、重复事件或日程编辑;历时不是钟表时间,全天日期也不是午夜时间戳。

结构:持续的字段/组标签、原始输入、格式与历法说明、打开日历按钮、月年标题、周标题、日期网格、前后月年入口、候选/已选状态、不可选原因、错误、明确的应用/取消(若选用草稿确认模式)。区间另加开始/结束标签、端点包含性、是否允许开放端点的说明、实际范围摘要及可选的快捷范围。快捷范围默认使用普通命令按钮,不套用无行为的菜单项;若另选菜单承载,须声明并实现完整的菜单语义/键盘模型。日历翻月与浏览快捷范围不等于业务提交。

变体:单日/年月/日期区间;内联/非模态弹出/模态日历;手输增强/原生选择器。值类型、显示密度和弹层类型分开,不从外观推断模态。即时接受的单日与明确应用的区间是两种预先声明的接受策略,同一实例不能随意切换。接受候选仍不等于外层表单已保存。

10.2 值与独立状态轴

  • 纯日历日期保存年/月/日与所声明的历法,无时间、无偏移,不先构造 UTC 午夜再格式化。
  • instant 表示时间线上的唯一位置;展示时区改变时应保持该瞬间。
  • 地点时区下的未来墙上时间保留时区标识、原始字段与消歧策略,不能只存固定偏移。
  • 无时区的本地日期时间不是 UTC。

INP-T 继续负责具体时间与 DST 消歧,本族不重复构造另一套解析规则。参见 W3C 时区草案:浮动日期与时间。

状态轴相互独立:原始文本(空/部分/可解析/非法);日历浏览月;聚焦日;候选日或范围;已接受值;服务端确认值;规则的加载/版本/有效性;授权;弹层开闭;业务请求。今天、选中、范围起止、范围内部、焦点、不可选同时存在时,各自保持可读的不同含义,不靠一种背景色覆盖全部状态。

方向 内容
数据输入 至少包括:值种类、历法、locale、格式、周起始日、可选范围/日期规则及其版本、是否允许空/开放端点、跨度计算口径、端点包含性、当前日期的计算时区(如适用)、快捷范围定义、已接受值与草稿、授权代次
输出 编辑文本、请求规则、移动浏览/焦点、提出候选、接受/取消候选、清除、外层提交意图

移动焦点、翻月、关闭本身不得隐式产生业务写入。

10.3 locale、历法、范围及热更新

显示格式和交换格式分别定义。locale 影响月名、数字系统、分隔符及周起始日,但不授予把 03/04 猜成三月四日的权限;格式说明持续可获取,含糊输入保留并要求用户明确。切换 locale 不能重新解释已解析的日期;编辑中尚未解析的原文先保持原编辑语境,并提示重新确认,不悄悄交换月日。非公历若未支持,须明确说明,不能只翻译月份就声称支持该历法。星期缩写须有完整的可访问名称;跨年时不能省掉关键年份。

上下界、禁选集合、节假日/工作日等由产品提供版本化规则。合法集合为空或 min>max 是规则配置问题,不显示「没有记录」,也不默认今天。约束在弹层打开时热更新:保留仍允许披露的草稿及浏览位置,重新验证候选并解释变化;不把失效日期自动夹到边界,也不交换起止。聚焦日变为不可选时,可保留为可感知但不可激活的日期,或按预先声明的规则移到合法近邻;迁移只改焦点、不改候选,并须通告原因。没有合法日时,焦点落到规则说明/取消入口,不循环寻找无限日期。

规则读取失败、尚未取到、真实不可选三者分别表达;不先把全部日期判定为可选。手输作为备用路径,不绕过尚未完成的同一规则校验。接受候选和外层提交时都核查当前规则/授权版本;旧规则的回包不能恢复已过期的可选日。服务端拒绝时,保留当前可披露的候选并说明需复核,不自动重发。

日期范围的天数按日历运算;不能把「下一天」实现为固定加 86400 秒,再宣称在所有时区相同。纯日期包含两端,与用于查询 instant 的半开区间不是同一类型;需要转换时,由产品明确时区、起点/终点边界和不存在时间的处理,不自行拼出 23:59:59。相对的「本月」保存的是滚动定义还是固定快照,必须明示;展示每次实际解析出的起止以及所采用的当前时间基准。

10.4 日期输入、日历焦点与可访问操作

原生输入优先按其实际平台行为验收;自定义 Web 日历采用完整模式。模态方案参照 APG Date Picker Dialog:日历网格只有一个 Tab 入口,网格内按键如下。

按键 行为
左/右方向键 移到相邻日
上/下方向键 移到相邻周
Home/End 移到周边界
Page Up/Page Down 按月移动
Shift+Page Up/Shift+Page Down 按年移动

日期网格边界与禁选策略须额外验证。月末翻月时,可以把浏览焦点放在目标月的月末,但不改变已选日期。RTL 下方向键与视觉顺序需实测,不直接倒置日期数据。

打开时优先聚焦已有的合法候选/已接受日;没有有效值时,可定位到今天或规则边界作为浏览位置,但不得自动选中。手输的非法原文不会因打开日历而被清空。网格方向键不触发外层保存;输入法组合、输入光标和子选择控件优先消费其所属的按键。月年变化合并为温和的通告;完整日期名包含必要的年份、星期与禁选状态;不得逐次把整个范围和全部日期读一遍。

模态方案隔离背景并循环 Tab,非模态不设焦点陷阱。取消丢弃本次未接受的日历候选,恢复打开前的原始文本/草稿快照(包括非法的手输原文),已接受值不变;不能用最近已接受的值覆盖打开前尚未修正的原文。已经接受的候选不因后续 Escape 被反向撤销。即时单日模式在接受日期后立即关闭,所以不存在「已接受新日但旧层仍打开」的状态;显式 Apply 一旦接受,也以接受后的新基线为准,不再恢复接受前的快照。

焦点去向:Escape/明确取消后回到仍有效的触发器;外部点击只适用于已声明的非模态关闭策略,保留有效的被点目标,不能先强制返回按钮;Tab 离开非模态时遵守正常的后续目标。选日接受后通常回到触发器/输入框;外层路由或新任务已接管时不抢回焦点;触发器因撤权消失时,焦点落到安全的组说明。取消只撤销本次未接受的候选,不宣称撤销已提交的写请求。

Geist Calendar 只作为范围摘要、预设和窄布局方面的参考;不采用其笼统锁定 popover 焦点、Tab 逐日循环及 Shift+方向键按周跳跃的建议。YUDS 按实际模态性与 APG 单入口网格模型保持一致,不拼贴两套键盘规则。手输、显式的前后月按钮与可点击的日期提供触控替代,不能只靠滑动换月。长月份名/错误可换行;窄屏单月仍保留完整的范围摘要及取消/应用;不把字缩小到不可读。

10.5 原生平台与真正的时间边界

iOS/iPadOS、Android、HarmonyOS、桌面原生采用对应的日期控件和可访问操作;登记 OS、历法、locale、键盘与辅助技术的行为,不把 DOM role/Escape 当作共同 API。原生控件若不能表达开放范围、禁选原因、指定历法或 DST 消歧,须增加明确的等效输入/说明,不能悄悄削减值域;系统返回、取消、旋转和后台恢复需分别测试。

历史 DST 夹具使用固定的地区/年份与规则数据库版本,不能假定未来规则永远不变。不存在的时间保留原输入并要求改正;重复的时间显示两个带偏移、可分辨的候选,明确选定一个后才形成 instant。业务日期跨显示时区仍保持原日。时区规则获取失败时不得猜测偏移。下列夹具中的历史跳变例来自 W3C 时区草案,规则库未经运行核验;其余是注入式候选测试,不声称原生支持。

10.6 精确中性夹具(全部运行未执行)

夹具 初态 事件 预期
INP-DATE-N R-001 字段类型为纯公历日期,已接受 2028-02-29 显示时区由 UTC 改为 America/Los_Angeles 显示仍为 2028-02-29,值变更/写入次数 0,不能出现 2 月 28 日
INP-DATE-F 空字段,格式 YYYY-MM-DD 手输 2027-02-29 并请求接受 保留原文并报日期不存在,不滚动成 3 月 1 日、不提交;打开日历可以浏览但不抹去原文,取消后仍恢复该原文
INP-DATE-R R-001 范围已读取且日历已打开,授权 a1 a2 撤权后,a1 的规则回包到达 移除受限的日期值/提示/可访问名称,关闭日历并移到安全的组说明,旧回包不恢复;不保存已不可披露的草稿
INP-DATE-L locale 含长月份名、阿拉伯文标签及混排的 R-001,区间跨年 320 CSS 像素+200% 文字 起止身份、年份、端点含义与错误完整可读,触控按钮不重叠,范围信息不只靠颜色
INP-DATE-H 候选 2028-03-20,规则 v1 允许 3 月 1—31 日 v2 将上限改为 3 月 15 日 候选仍为 3 月 20 日并明确失效,接受被阻止,值写入 0;焦点规则即使把焦点迁到 3 月 15 日,也不得改变候选;迟到的 v1 不重开权限
INP-DATE-K 已选 2028-01-31,日历聚焦同日 Page Down 后按 Escape 浏览焦点到 2028-02-29,已选仍为 1 月 31 日;取消后输入仍为 1 月 31 日,焦点回到触发器,保存次数 0
INP-DATE-A 规则限定下没有合法日期,日历已打开 方向键与选择尝试 有规则不可用的说明和可达的取消入口;不无限跳日、不选今天、不宣称用户输入错误
INP-DATE-Z 扩展字段明确是 America/Los_Angeles 墙上日期时间,输入 2024-03-10 02:34 解析 标为不存在的时间并保留输入,不自动改为 03:34、不生成 instant。此例来自 W3C 草案;目标运行须登记实际 tzdb 版本
INP-DATE-O 注入规则:某当地日 01:00—01:59 重复,候选 01:30 对应偏移 -07:00 与 -08:00 先请求接受,再选择后一个偏移 第一次不产生唯一 instant,显示两个候选;明确选择后才接受后者,后者比前者晚 3600 秒。这是注入式规则夹具,不冒称某个未来地区的法律事实
INP-DATE-J 即时单日模式,已接受 2028-03-01 选 2028-03-02 并接受 日历立即关闭,字段候选为 3 月 2 日,外层业务提交 0;此后在输入处按 Escape,不得重新打开旧日历或恢复 3 月 1 日;不存在同一旧层继续取消已接受值的状态
INP-DATE-Q 范围 2028-03-20 至 2028-03-10 请求应用 两端保留,报组级逆序错误,提交 0,不静默交换;随后规则更新失败时保持需核查状态,不能把手输入口当作绕过校验的路径

来源与边界见本组来源。

例:合同生效日是业务日期,跨时区查看仍为同一天;会议时间则展示明确的时区并使用时刻模型。

验收:覆盖闰日、月末、夏令时相关时刻、格式歧义、只读、日历失败时手工输入。

例:「上月收入」在不同月份重新打开时,应明确它是滚动定义还是已锁定的快照。

验收:包含跨年、边界包含性、起止同日、只选一端、时区切换和回填已失效范围。

CMP-10 基线正常夹具

业务日期 2028-02-29 → 选定 → 仍为该日期,无时区移日。

CMP-10 基线失败夹具

输入 2027-02-29 → 报无效、原文保留,不转为 3 月 1 日。

CMP-11 基线正常夹具

选上月 → 显示实际起止与滚动定义 → 应用同一范围。

CMP-11 基线失败夹具

开始晚于结束 → 两端保留且组级报错,修正后才应用。

11. INP-T01–INP-T07 时间与日期时间

INP-T01 适用性与解剖

时间选择器用于一个日内时间;日期时间选择器用于需要共同编辑的日期与时间。解剖由以下部分构成:持续标签、日期/时间编辑区、格式与精度说明、打开入口、候选界面、必要的时区选择与偏移说明、错误区、明确的确认/取消。纯业务日期不强行增加午夜;历时不是钟表时刻,25 小时的持续时间不可包装为 01:00。几个固定时长宜用离散选项。

SAP 时间页确认了手输、钟面、12/24 小时以及按需的秒字段;这不授权照搬其默认当前时间的行为。来源:SAP Time Picker,v1-151 官方检索正文节选。

INP-T02 值类型

产品必须先声明值类型:

编号 值类型 约束
① 纯日期 —
② 日内时间 不能仅靠时区解析成唯一时刻,需要日期
③ 无时区的本地日期时间 没有时区,不能伪装成 UTC
④ 绝对时刻 换显示时区须保持同一瞬间
⑤ 具有地点时区语义的未来日期时间 保留地点时区标识及解析策略,不用固定偏移替代未来时区规则
⑥ 历时 —

是否含秒/亚秒、是否允许空、是否跨午夜、端点包含规则由产品定义。隐藏秒不等于把已有的秒静默清零。

INP-T03 时区及 DST

分开显示「用户输入的墙上时间」和「解析后的时刻」。

  • 不存在区间:本地时间落入不存在区间时,保留原文,说明该时区当日的跳变,提供修改时间/时区的入口;不得自动前移并声称用户已同意。
  • 重复区间:提示两个带偏移的候选,要求明确选择;未消歧不得提交唯一时刻。
  • 时区变更:必须明确是「保持瞬间」还是「保持墙上时间重新解释」;不能用同一个隐含动作同时实现二者。
  • 规则更新:未来任务遇到时区规则数据库更新时,需要重算与复核策略;组件不承诺永久固定。

本段是 YUDS 的数据语义建议,不是从 SAP 页面推导出的 DST 能力。

INP-T04 编辑与弹层事务

打开时定位已有值;空值时可浏览当前日期/时间,但浏览位置不是默认选中。月份、小时页签和焦点移动都不接受值。日期与时间共同确认时,草稿须齐全、合法且已消歧才接受。

输入法或最上层的子控件先处理其拥有的 Escape/返回;同一事件被子层消费后,不得再取消外层。没有子层消费的取消/Escape 才恢复打开前的已接受值,保留打开前已有的原始输入,焦点返回触发器(若触发器已移除,则返回合理的邻近入口)。点击外部关闭的策略须登记,不默认为接受。

手输与选择器走同一条解析和校验链,组字阶段不改写候选;超出步进的值是允许的精确输入还是错误,须声明,不静默舍入。

INP-T05 键盘、触控与 AT

手输保留文本编辑键;打开按钮可用键盘激活。采用模态日历时,焦点限定于弹层,日历使用单一 Tab 入口和网格导航;年月变化可温和播报,返回入口时可获知已选值。时间段的增减只在相应的步进控件上生效,不抢普通文本的光标。钟面同时提供可点的数值或可输入的字段,不能只能拖动。读出完整的日期、时间、AM/PM、时区及必要的偏移;错误关联到相关分段和组。APG 日历示例只支持日历部分,不能当作完整时间选择器的证明。参见 APG 日期对话框示例。

INP-T06 独立轴、组合与恢复

额外的值轴:解析不完整/无效/可解析;DST 未消歧/已消歧;候选日期/候选时间。双端点时间须标识起止及同日/次日,不因 23:00→01:00 就擅自推断跨天。时区选择器与字段构成同一个值事务。加载规则失败与时间不存在要分开表达;可手输时保留手输入口,但没有可靠的时区规则时不能假造解析结果。提交被拒时,保留用户候选和服务器确认值,并明确两者的差异;撤权后只读展示可披露的内容。

INP-T07 本地化与增长

12/24 小时、月份名、周起始日和数字系统由 locale 处理;含糊的字符串应要求格式明确,不猜月日。AM/PM 不可截掉;长时区名可换行,并保留偏移以便消歧。RTL 下的钟面、时间字段和分隔符按平台验证;窄屏弹层可分步,但确认前要有完整摘要。原生选择器若不能表达指定的秒精度或 DST 选择,需要额外的明确入口,而不是悄悄降低精度。

本族正常、失败、撤权、长文本与键盘的精确初态、事件和预期见输入选择夹具;来源及读取限制见登记。

12. INP-M01–INP-M04 掩码输入

INP-M01 用途

掩码输入用于业务本身稳定的格式:槽位固定,或槽位明确可选,例如中性记录编号。掩码不是密码遮蔽,也不是验证器。国际电话、随地区变化的地址、任意姓名/邮件,不应被一个固定长度的模板拒绝。

解剖:持续标签、编辑区、必需/可选槽位及不可编辑的分隔符、格式说明、完整性/错误区,以及可选的清除入口。

SAP 的固定格式、字面分隔符、带格式/不带格式粘贴及标签要求有其页面正文为依据;YUDS 不照搬其实现语法。来源:SAP Mask Input,v1-139。

INP-M02 值与事件

分开四种值:原始的粘贴/键入内容、槽位内容、格式化显示、业务规范值。未填槽位的占位符不能进入已提交的业务值。

完整的掩码只证明形状满足,不证明记录存在、日期有效、校验码正确或用户有权使用。须明确哪些字面符会被剥离、哪些前缀属于值;不可擅自删除前导零或转为数值。只有成功解析且业务校验允许时,才产生接受候选;输入和组字事件不触发业务提交。

INP-M03 编辑

全选、局部选区、复制、粘贴、撤销/重做及输入法必须保留。格式化时维护语义上的光标位置;Backspace/Delete 作用于可编辑槽位,且策略稳定,不把其余内容无声地移到另一个业务分组。

允许按明确规则粘贴带分隔符的值和未格式化的值;超长或包含不允许的字符时,保留可恢复的原文并说明,不能只吞掉尾部再报成功。复制默认得到可见的格式化文本;若提供「复制规范值」,入口须明确命名。输入法组字期间,不把中间字符判为失败或跳槽。

INP-M04 状态、适配及恢复

额外的状态轴有三条:空/部分槽位/完整;掩码版本;业务校验版本。

  • 只读时保留可复制的文本;禁用须解释原因;撤权后停止修改,且不得泄露被撤回的字段内容。
  • 旧模板下已存的值不能被强行套用新模板而丢失数据,应展示旧值并要求显式迁移。
  • 字段可横向编辑和查看,说明文字可换行,不能以截断遮住关键的尾部。
  • RTL 下标签可镜像,但编号的逻辑字符顺序不变;支持哪些数字系统需声明。
  • 移动端键盘只是输入便利,不是字符验证;触控 AT 若难以理解逐槽移动,提供「普通输入+格式校验」的等效模式。

本族正常、失败、撤权、长文本与键盘的精确初态、事件和预期见输入选择夹具;来源及读取限制见登记。

13. CMP-12 / INP-UPLOAD 文件上传

13.1 用途、结构与非用途

上传把用户明确选择的文件传到已声明的目标,不自动意味着导入、发布、分享、解析成功或文件安全。文件选择器不是文件管理器;上传组件不决定存储保留、访问权限、版本恢复或永久删除。目录、拍摄、粘贴、批量、分片/续传等入口,只在确实实现时才提供;「多文件选择」不能被描述为文件夹同步。

结构:目标对象与用途;允许的类型/大小/数量及实际限制的来源;选择文件按钮;可选的拖放区;逐项队列;当前阶段/进度;每项可用的动作;组结果;错误/支持路径;关闭后的任务边界。

文件名按不可信文本呈现,不能插入 HTML,也不能作为服务端路径。显示名、队列 ID、上传会话 ID、服务器资源 ID 及关联 ID 必须分开。原文件名可保留作说明,最终资源由服务端身份标识。

变体:

  • 选择后显式上传/选择后即时上传(即时上传须事先清楚说明);
  • 单文件/批量;
  • 新资源/替换;
  • 内联队列/独立上传任务。

变体不改变授权与终态要求。替换时先保留旧资源,只有新资源校验通过、且替换事务确认后,才切换引用;不能先删除旧件,替换失败时旧件仍在。每个独立任务只突出一个主要提交,逐行的重试/取消是辅助操作。

13.2 状态轴、输入和事件

独立的状态轴:

  • 本地选择与可读性;
  • 客户端检查;
  • 排队/传输/等待服务器处理;
  • 服务器安全与格式检查(未开始/进行/拒绝/确认/未知);
  • 资源可用性;
  • 目标关联结果;
  • 取消请求/确认;
  • 本地选项移除;
  • 权限;
  • 焦点。

文件传完、检查通过、资源建立与关联完成可能不同步,不能压成一个 success 布尔值。

输入:稳定的目标与授权代次、明确选择的文件句柄/快照、本地的名称/大小/类型、允许规则及其版本、启动策略、队列项 ID、请求/会话身份、服务端回执、真实能力清单。

能力清单至少声明:

  • 取消作用于哪个阶段;
  • 是否可查询状态;
  • 重试是否幂等;
  • 是否支持分片与续传,以及其期限;
  • 是否支持后台继续与跨刷新恢复;
  • 删除/替换的作用范围,以及实际的保留策略。

未知的能力,不能在界面上画一个按钮就算存在。

输出:选择/取消选择;请求开始/取消/查询/重试;移除本地待传项;请求解除关联/删除资源/替换。输出是意图,完成只能以对应的回执确认。重选同一文件时是追加还是替换队列项,须事先声明;操作按稳定的项 ID 进行,重排不能使取消落到同一索引上的另一个文件。

13.3 校验与信任边界

浏览器的文件类型过滤只是提示,服务端收到的内容不能被信任。WHATWG File Upload state 明确了 accept 的提示性质,以及客户端数据仍需谨慎处理。OWASP File Upload Cheat Sheet 支持重新检查类型、文件名、大小、授权与存储/内容风险;扩展名、浏览器 MIME、单一签名、哈希或客户端「验证通过」,都不是安全证明。

YUDS 建议把检查拆为「本地预检查已通过」「传输完成」「服务器检查中」「可用/被拒/状态未知」。安全检查服务缺失或超时时,不伪称扫描通过,也不能把服务器未检查的文件当作可信预览直接执行。具体的允许格式、压缩展开限额、扫描/净化与存储隔离由服务实现声明;组件负责如实呈现,不批准方案。错误说明可操作,但不透露内部检测规则、令牌或敏感路径;不得未经授权把文件或哈希发送给第三方公共扫描服务。

选中后文件被移动、删除、变更,或云文件供应商尚未下载,都可能导致读取失败;此时说明本地读取失败并请求重新选择,不能报告为上传服务器已拒绝。运行时实际选中的文件与待上传快照不一致时,停止旧项并重新确认,不能在同一会话中偷偷换内容。W3C File API 讨论了用户选择、文件变更和本地读取安全;本节的会话绑定策略是 YUDS 建议。

13.4 重复、分片、取消、未知与恢复

同名不等于同一文件,大小/修改时间的组合也不是可靠的唯一身份。客户端的重复提示只说明「可能重复」,由产品选择阻止、保留两项或明确替换;不能无提示覆盖。真正的内容去重由服务器在授权范围内判断,不泄露另一用户是否已有该文件。文件哈希只在允许的本地/服务端范围内使用,不宣称哈希等于授权或安全。

分片/续传只在服务协议证实支持时启用:同一会话绑定目标、文件身份/内容快照、规则/权限代次、分片范围和服务器确认集合;乱序的分片回执按身份处理,重复确认不重复累加。进度要么用不重复的已确认字节及可靠总量,要么明确标为仅是客户端已发送的字节,二者绝不混用;总量未知时显示不确定状态。分片全部到齐后仍在等待组装、校验和关联,不宣告可用。分片大小、并发数、重试次数/退避均为实现配置,规范不臆定。

网络中断时,先区分已知未发送、明确失败和回执未知。有状态查询能力时,按原会话核查;有幂等恢复协议时,只重传服务器明确缺失的部分。没有续传能力时,须说明重试可能从头发送;没有幂等/查询能力时,不能承诺不会重复,停止自动重发,并说明真实的处置方式。恢复须重新验证目标及授权;跨账号/工作区不得复用原上传会话;文件内容变化后,不能接到旧分片后面。

取消立即阻止尚未启动的本地发送与后续的自动重试;已发出的请求按真实的取消协议处理。传输 abort、关闭面板、移除队列行,都不证明服务端已清理。取消竞态中收到完成回执时,如实显示已完成或当前的真实状态,不用本地的「取消成功」覆盖;若已无权披露,只保留获准的通用核查路径。检查/组装阶段无法取消时要说明,保留任务状态,不提供假取消。

组结果逐项统计可用、拒绝、已取消和待确认;未知计入待确认,不塞进失败并自动重试。关闭视图与停止任务是两回事;可后台继续、恢复入口与保留期都需要真实服务的证据,没有时说明仅限当前会话,以及离开后的核查限制。不得单凭上传编号承诺持久可查。

13.5 移除、删除、授权与焦点

三种动作的作用范围不同:

  • 「移除待上传项」:只移出本地队列,释放应用持有的文件/预览引用。
  • 「从记录移除附件」:只解除指定的关联。
  • 「删除文件」:才是服务端资源的生命周期动作,须明确影响哪些引用、是否可恢复、权限与确认。

不能把解除一处关联说成销毁所有副本,不能默认删除共享资源。撤销 blob URL 或清理缩略图不等于删除远端资源;服务器删除失败时保留真实状态及可行的重试,不提前显示为已消失、视同成功。

撤权时立即停止新的受限读取/发送/重试,清理可控的文件名、预览、待发通告和缓存引用;已在途的写请求只做获准的状态核查,不承诺追回已经传输的字节。权限恢复后不能自动重发原文件,需要有效的当前意图并重新核查。打开系统文件选择器后取消,不会清空既有的合法队列;从选择器返回时,优先保持在选择入口,异步的逐项结果不抢焦点。

选择按钮与逐项动作可用键盘正常到达;拖放、粘贴和拍摄都不是唯一入口。文件列表采用 CT-LIST 中已收录的真实列表/控件语义,不把整行变成按钮再在其中嵌入取消。移除当前焦点项后,焦点落到同位置的下一项;没有则落到上一项;再没有则落到队列标题/选择入口。焦点在别处时不拉回。状态按 FB-LIVE 合并通告,进度不逐字节播报;一个文件失败不夺取其他文件的编辑焦点。长文件名可完整查看并安全复制;扩展名、阶段、失败原因及动作不能被截断,也不能只在 hover 时才可见。RTL 下对机器名做方向隔离,但不篡改文件名。

13.6 原生适配与夹具(全部运行未执行)

Web 验证原生 file input、拖放、系统选择取消,以及本地对象引用的生命周期;iOS/iPadOS/Android 的文档或照片选择器、供应商下载和临时访问、应用后台限制,均按实际 OS 映射;HarmonyOS/桌面原生同样记录文件授权、选择结果、后台传输与恢复能力。这里不批准持久文件权限,不预设系统选择器返回永久路径,不声称原生后台上传或目录选择必然可用。触控 AT、系统返回/撤销选择、进入后台时的取消竞态,需在各平台执行。

夹具 初态 事件 预期
INP-UPLOAD-N R-001 以显式上传方式排队 A.txt/B.txt,服务具备逐项校验及关联回执 两项传输完成,但 B 的检查结果未返回 A 仅在关联确认后可用;B 显示「服务器检查中」;整组并非全部成功。B 确认后,组结果为 2 项可用
INP-UPLOAD-F A 传输 100%,服务器明确检查拒绝 拒绝回执 A 不可用,并给出安全、可披露的原因;旧资源 A0 保持替换前状态,仍然存在;不写「上传成功」;「重新选择」与「重试」的含义分开
INP-UPLOAD-R 授权 a1 下的队列含受限文件名和预览,分片 1 已发出 a2 撤权,且旧分片的完成回执到达 新分片和自动重试均为 0 次;受限名称/预览被移除;旧回执不恢复内容;不声称分片 1 已从服务端撤回
INP-UPLOAD-L 文件名为 120 字中文+阿拉伯文+.txt,另有一个同名前缀的文件 320 CSS 像素+200% 文字+触控 可安全查看完整文件名,能区分稳定的项目,能读到扩展名和阶段;取消与重试的点击区域不重叠;不把名称当作 HTML
INP-UPLOAD-D 本地选择了 A.txt,以及同名但内容不同的另一个 A.txt 添加 不静默覆盖/合并;按声明的规则给出两个独立的队列 ID,或给出明确的重复决策;取消第二项不影响第一项
INP-UPLOAD-U 写入的最终确认回执丢失,服务没有幂等与状态查询能力 用户点击重试 先说明结果未知、可能重复,不自动新建第二次上传;给出真实支持的核查/重新选择路径,不捏造状态查询服务
INP-UPLOAD-C 服务支持取消请求;取消 T1 发出后,最终完成回执先到 取消回执随后报告「已完成,不能取消」 最终显示真实的完成事实;取消没有撤销已建立的资源;不用取消动画覆盖;如需删除,是独立的动作
INP-UPLOAD-S 服务已确认分片 1/3 与 2/3,2/3 的重复回执到达两次后断网;服务支持会话恢复 查询确认缺少分片 3/3 后恢复 只补缺失的分片,已确认字节不重复累加;传输完成后仍等待组装/检查/关联
INP-UPLOAD-E R-001 与 R-002 引用同一资源 F1,用户只请求从 R-001 移除关联 关联删除确认 R-001 的关联被移除;R-002 和 F1 不被删除;文案不能说文件已被永久删除
INP-UPLOAD-K 焦点在队列第二项的取消按钮上,第一项正在处理 取消第二项并确认移除 焦点落到下一个合法项,或前一项/队列入口;第一项继续处理;键盘选择文件的路径可用,拖放不是必需的
INP-UPLOAD-P 文件已选中,但在读取前被本地供应商移除 读取失败 说明无法读取本地文件,服务端写入 0 次,重新选择入口可达;未获得新的选择时,不能擅自上传同名的其他文件

来源与边界见本组来源。

例:上传三份合同附件,2 份可用、1 份安全检查失败;显示逐项结果,可重新选择失败的文件,不能把整组显示为「上传成功」。

验收:包括断网恢复、重复文件、同名不同文件、过期权限、取消竞态、大文件名称、选择文件后未上传即离开。

CMP-12 基线正常夹具

A、B 上传并检查通过 → 两项可用。

CMP-12 基线失败夹具

A 传输完成但检查失败 → A 不可用;替换 A0 时,原件 A0 仍可用。

14. B3-SCAN 条码扫描与手工输入

本节继承基础组件与交互契约的 CMP-STATE/INP-G01–G05/SEL-COMMON/GEN-SNAPSHOT、本页的 TXT-SINGLE 与 INP-UPLOAD 边界、选择组件:值、范围与层级的 SEL-HELP/SEL-MULTI、浮层组件:对话框、抽屉与提示的 LP-G02–G05 及 CMP-LAYER,以及异步执行、结果核查与恢复与权限变化、并发修改与保存冲突的真实能力与授权边界。保持七个 role × step 与 label/prose/heading 各九档,一个独立任务最多一个主操作;状态图标不代表取得授权、验证通过或已保存。文中事件是可观察的意图/事实,不定义公共 API 或服务协议。

代理依据用户授权决定的首期范围

扫描首期为:明确启动、单次文字载荷候选、明确接受,并保留同一任务内的手工输入;真实的码制/相机/解码支持目录仍须逐端证明。

14.1 B3-SCAN-SCOPE 用途、非用途与能力前门槛

为一个明确的目标字段获取一个文字载荷候选,并经同一任务内的核验和用户明确接受。扫码不是搜索、打开链接、支付、登录、Wi-Fi 连接、执行命令或提交业务;识别到字符串不意味着它可信、准确、属于当前对象或已获授权。任何后续的高后果行为都是新的明确任务,不由扫描组件推断。

首期为单次扫描、单候选审阅,默认未启动;只有相机与本地解码能力都真实存在、且目标码制已明确支持时,才能提供扫描。须声明支持的码制集合、载荷的字符/长度/格式与校验规则、处理位置、设备能力和必要权限;集合为空或未知时,不得用「扫码」按钮冒充支持全部码制。本页不替产品选择识别算法、准确率或四端支持版本。

首期不录音、不录像、不保存帧、不发往远端识别服务、不在后台连续采集、不批量累计。若只能依赖远端处理或特殊设备,留待独立的能力/数据披露与授权契约;没有该能力就用手工输入。相册/文件识别、手电筒、自动变焦、多个相机切换,仅在另有真实能力和明确入口时扩展,不因已有相机授权而自动出现。

手输与扫描共享目标值规则、版本/权限和明确接受;手输来源标为「手工」,不得伪造检测到的物理码制。若任务必须证明实体码制/防伪真实性,手输不能提供该证明,此类鉴真任务不在首期通用取值范围内。

14.2 B3-SCAN-STRUCT 结构、独立状态与操作

结构:目标字段/用途、支持码制与隐私说明、明确的「开始扫描」、相机使用/等待状态、可用的停止/取消、可访问的对准提示、结果审阅与修正、手工输入、唯一的主要操作「使用此值」。初始不能自动请求相机;打开弹层、渲染页面、重新聚焦/返回前台都不是开始意图。

以下状态分别记录:

  • 输入来源(手工/扫描);
  • 原始载荷/可解析值/已接受草稿/确认值;
  • 会话实例/采集代次;
  • 设备许可(未知/待回应/允许/拒绝/受策略限制);
  • 设备(可用/占用/缺失/中断);
  • 解码能力与支持码制;
  • 未启动/采集中/暂未找到/多码歧义/已得候选/已停止;
  • 载荷校验与异步资格;
  • 父字段修订/授权。

许可允许不等于已取到相机,取到视频不等于有解码器,解码成功不等于业务校验通过。

Web 上普通按钮/文本输入按自然 Tab 顺序可达;相机画面不制造无意义的焦点或焦点陷阱。开始/停止/改用手输/重扫/使用值都有可点击入口,不只靠对准、晃动、长按或系统硬件按钮。Enter 在输入法中先完成组字;在手工字段中按所属表单的规则处理,不借扫码器的结束回车直接使用值或提交外层表单。Escape/系统返回按「输入法 → 有效子控件 → 扫描层」的顺序处理,当前事件只处理一层。

14.3 B3-SCAN-SESSION 开始、取消、失活与迟到资源

一次明确开始绑定:目标对象/字段、子实例、采集代次、授权、当前手稿修订,以及支持码制/解码约束的修订。许可请求与采集启动分别记录。等待系统许可时说明仍待回应,可取消本应用的意图或改用手输;不能把用户未回应的超时定为拒绝,也不能假称应用能关闭系统权限对话框。

系统授权对话框引起的、已识别的预期输入拥有权转移,不等于用户主动离开:此时仅在等待,尚未采集;返回后仍须核对意图、当前任务及真实的前台状态。真正退到后台、切换任务或关闭则取消;无法可靠区分时保守停止,并要求明确重新开始,不能假装许可期间已在扫描。

同一个未结算的许可请求不并发重复发起;取消后若系统请求仍在途,说明正在等待其结束,手输仍可继续。迟到的「允许」只说明系统结果:当前意图/实例/范围/前台有效性已变化时,不得开始解码或复活扫描层;若同时取得本会话的流/句柄,立即停止/释放本会话拥有的资源,不挂到新会话上。迟到的拒绝也不能覆盖当前手稿或新会话的状态。

用户停止/取消、关闭层、改用手输、切换目标/账户、应用失活/页面隐藏或权限变化时,先使当前采集与解码代次失效、停止接受新帧/结果,再释放本会话拥有的采集资源与临时帧。返回可见/前台或重新获准都不自动开始;用户再次明确启动时创建新代次。不得仅隐藏预览而继续采集。

W3C Media Capture and Streams 已读的局部说明了三点:许可可能在等待用户回应;已获许可后设备仍可能不可读;轨道/源之间的停止关系。本页不承诺停止本会话就能让整台设备的相机指示灯熄灭:其他合法使用者可能仍占用同一来源。实现释放自己持有的资源,不停止别的任务/应用的流,也不声称撤销了系统的持久权限。

设备缺失、被占用、被策略限制、读取中断、解码器不可用和暂未识别是不同的状态;给出可理解、且不泄漏设备细节的原因。仅在确有能力时提供重试/切换设备;不得自动扫描其它设备、反复弹出权限请求、偷偷改用远端解码。关闭/取消始终有可达的安全路径,不因等待许可而永久锁住用户。

14.4 B3-SCAN-DECODE 候选、重复与不可信载荷

首个当前有效、码制受支持且可无损表示的单一文字载荷产生一个临时候选;随即停止本轮的继续识别、释放采集资源,进入审阅。候选带采集代次、码制事实、原始载荷及其修订,不以帧索引作身份。停止采集使后续帧失去资格,但不自动否定已隔离且允许保留的候选;该候选此后受子稿修订、规则、对象与授权核验,不能要求保持相机开启才能接受。停止后的相同或不同帧结果都不改变当前候选;多帧重复识别不多次通告、不接受、不重复提交。

一个帧结果含多个不同载荷时,首期不任取第一个:停止本轮,说明无法确定目标,保留父稿,提供重新对准单个码或手输。暂未找到码时可继续当前有效扫描,不逐帧播报失败;不支持的码制、非文字/无法无损解释的载荷、格式错误,分别给出可披露的原因,不替换成乱码或猜测内容。不得把算法置信度画成已证实的准确率。

原始载荷保留前导零、大小写、空格与字符顺序;不先转成数字或偷偷规范化。手工修正后来源记为已修正/手工,不再称原扫描值已核实。控制字符/双向控制字符与超长数据,按已声明的安全呈现规则说明,并可编辑或拒绝,不能在隐形字符影响下误认目标。任何自动修正都必须先明确展示并取得本次接受;首期默认不做隐式修正。

载荷是不可信数据:只做安全文本显示,不拼入 HTML/脚本、命令、文件路径,也不自动导航;看似 URL、二维码登录令牌、电话号码/联系人/Wi-Fi 的内容,都不自动打开、访问、复制、分享或执行。结果通告默认只说明「已取得候选,请核对」,不把可能敏感的完整载荷自动读出。需要查看/复制时,由当前披露规则和明确的用户动作决定;日志、分析事件、通知、错误及截图默认不收集完整帧或载荷。不能为验证一个 URL 先发网络请求。

14.5 B3-SCAN-ACCEPT 原始稿、核验与接受

打开扫描任务时,先保存父字段允许保留的原始稿/修订,包括非法或未解析的值;相机成功、没有扫到、改用手输和取消,都不直接改变父字段。用户已有本层手稿时,开始/重扫前明确说明将替换本层候选,只有用户明确选择替换后才进入新的采集;取消替换则保留手稿且不启动。外部父字段在此期间的变化,不被子任务的取消回滚。

只有「使用此值」才发起对当前候选的资格核验/接受,绑定:子实例、采集或手工来源、原始载荷/解析值及子稿修订、码制与校验约束、目标字段/对象/父稿修订、授权代次。C1 检查中改为 C2 时,C1 成功不得应用 C2、覆写 C1 或关闭层;保留 C2 并重新核验。来源是手工时按同一值规则检查,不要求不存在的检测码制事实,但也不伪造它。

匹配的合法接受最多写入父字段草稿一次;连击/键盘合成点击/重复识别不得重复接受。随后的关闭与焦点按 LP-G05;外层业务保存另行显式发起。核验失败时保留当前获准的子稿;检查服务失败视为尚未验证,不把有效性判为失败或成功。引用查询/业务写入能力不存在时,不虚构验证或持久恢复。

撤销相机许可只终止采集,不自动清空仍获准的手工字段或此前可披露的候选;撤销目标内容的读取权,则按安全政策清理载荷、帧、预览、缓存、撤销记录与可访问副本,并阻断新的接受/输出。仅失去编辑权而仍可读时,保留值但禁止接受。旧的许可、帧或核验回包不能恢复能力。已经合法复制的系统副本不承诺追回;组件从此停止新的受限输出。

14.6 B3-SCAN-PLATFORM 四端差异与等价路径

  • Web:需要真实受支持的安全上下文、相机许可/采集及解码适配;浏览器支持某个捕获接口,不证明支持目标码制。按当前实例释放本会话的媒体资源,不能只依赖页面最终卸载。
  • iOS:系统许可、相机视图、应用活跃状态和解码框架须逐个目标版本证明;系统返回/关闭先取消当前意图,迟到的授权与捕获回调仍须核对代次。外接键盘和语音输入有手工等价路径。
  • Android:设备忙、权限/系统限制、进入后台、进程重建与解码能力分别映射;页面重新出现不自动取用相机,恢复只限实际持有的获准稿。
  • HarmonyOS:记录实际的目标 SDK/设备类型、相机权限/生命周期与识别能力;没有证据时显示扫描不可用、保留手输,不套用 Web 或 Android 的回调承诺。

四端 API、可识别码制清单和实际的权限/资源释放证据留在适配交付中,不在此预先批准。相机画面的旋转/裁切应服务于对准,不修改载荷;长码值/RTL、文字增长、软键盘与窄窗口下,必须保留目标、来源、错误、手输及使用/取消入口。值为数字外观时也保留前导零,RTL 不反转内容;机器 ID 必要时做方向隔离,并给出完整的读取/编辑路径。以上全部待真实的键盘、触控、输入法、读屏与设备运行验证。

14.7 B3-SCAN-FIX 精确夹具

多平台增长夹具执行前,逐端冻结真实的平台/系统或浏览器版本、视口尺寸及单位、实际文字尺寸/放大设置、方向与输入方式;窄屏与文字放大分别记录,不用整页缩放冒充文字放大,无法建立前置则记为未执行。

执行前逐端冻结实际能力、系统/浏览器、视口、方向、输入方式,以及每个独立分支的唯一前置与预期;夹具中的占位身份/码制须绑定真实适配,不是服务 API 或支持声明。全部真实运行未执行。

B3-SCAN-F01 显式开始与能力前置

  • 前置:父原稿 R-00;目标支持声明为码制 K1,且有真实的本地相机/解码能力;页面初次打开。
  • 动作:只打开扫描层/重绘/聚焦;随后明确开始一次。
  • 预期:前三类事件的相机请求为 0;明确开始后最多一个本会话的许可/采集意图;父不变;不申请麦克风。
  • 禁止事件:加载就拍摄;空码制集合当作全支持;一次激活发出两个许可请求;录音请求。
  • 规则:B3-SCAN-SCOPE;B3-SCAN-STRUCT
  • 实际运行:未执行。

B3-SCAN-F02 解码候选与明确接受

  • 前置:采集会话 s1 当前有效,支持 K1;父 d1 = R-00;本地单一载荷 000123 合法。
  • 动作:解码 K1/000123;停止并释放本轮资源;用户「使用此值」,且对应核验通过。
  • 预期:只生成子候选 000123;识别时父不变、接受 0;使用后父草稿接受一次 000123,保留前导零;业务保存 0。
  • 禁止事件:解码直接提交;转换成 123;保持相机连续采集;把成功色当作业务已保存。
  • 规则:B3-SCAN-DECODE;B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F03 许可拒绝与手输

  • 前置:s1 已明确启动,系统许可待回应;父值 R-00。
  • 动作:许可返回拒绝;改为手工输入 000123 并明确接受。
  • 预期:显示拒绝及真实可用的下一步;不反复弹出权限请求;手输按相同值规则可接受一次,来源为手工,无伪造的检测码制。
  • 禁止事件:把拒绝当成没有相机;自动再次请求;手输被禁用;未经允许改用远端识别。
  • 规则:B3-SCAN-SESSION;B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F04 等待许可取消与迟到流

  • 前置:s1 的许可 q1 未回应;没有帧或流;父为原始未解析稿 R-。
  • 动作:取消本应用的扫描意图,并改为手工稿 R-02;q1 后来允许,并交付 s1 的流 t1。
  • 预期:等待期间不判为拒绝;取消不假称关闭了系统对话框;t1 立即按所有权停止/释放,不挂到新预览或解码;当前手稿 R-02 保留;父 R- 不变。
  • 禁止事件:迟到的允许复活扫描层;t1 开始解码;清空手稿;对同一未结算许可并发重发。
  • 规则:B3-SCAN-SESSION
  • 实际运行:未执行。

B3-SCAN-F05 预期许可对话框与真实失活

  • 前置:s1 正在等待其系统许可对话框;平台能区分这种预期的输入转移与真实退到后台。
  • 动作:先只发生预期的权限对话框焦点转移,许可允许后返回前台;另一次,s2 待许可时用户真正切到后台,之后许可允许。
  • 预期:s1 只等待、未预先采集,返回后核对当前有效意图即可启动;s2 停止并清除意图,迟到资源被释放;无法区分两者的适配保守停止,并说明需要重新开始。
  • 禁止事件:把权限提示期间称为正在识别;真实进入后台时自动启动;未核对当前任务就使用许可结果。
  • 规则:B3-SCAN-SESSION
  • 实际运行:未执行。

B3-SCAN-F06 设备 busy 与解码器缺失

  • 前置:许可允许,但设备被其它合法任务占用;另一端相机可用,但本地 K1 解码器不存在。
  • 动作:开始;分别收到设备不可读/能力缺失。
  • 预期:分别呈现设备不可用与码制/解码不可用,手输可达;不自动停止其它任务、不切换到别的设备、不把帧发往远端;父稿保留。
  • 禁止事件:许可允许就标为已扫描;抢占设备;没有解码器时循环拍帧;能力目录空白算作支持。
  • 规则:B3-SCAN-SCOPE;B3-SCAN-SESSION
  • 实际运行:未执行。

B3-SCAN-F07 后台取消与旧帧

  • 前置:s1 正在扫描,解码 r1 在途;父 R-00。
  • 动作:页面隐藏/应用真实失活;回到前台;交付 r1 = 000123。
  • 预期:失活即令当前代次失效,并释放本会话的采集资源/临时帧;回前台不自动开相机;r1 不改变候选、父值或通告;需要明确的新开始。
  • 禁止事件:隐藏预览后继续拍摄;后台旧帧进入草稿;回前台自动续扫。
  • 规则:B3-SCAN-SESSION;B3-SCAN-DECODE
  • 实际运行:未执行。

B3-SCAN-F08 重复识别与不同晚帧

  • 前置:s1 当前有效,首帧 r1 = K1/000123;r2 同值、r3 = K1/999999 已在异步队列中。
  • 动作:先交付 r1 形成候选并停止;再交付 r2/r3;用户连点「使用此值」。
  • 预期:候选仍为 000123,成功状态只出现一次;后续两帧无作用;同一资格版本最多接受一次;业务写入 0。
  • 禁止事件:重复帧多次接受;r3 覆盖候选;重复播报完整码;连击造成重复的父变更。
  • 规则:B3-SCAN-DECODE;B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F09 无码不支持与多码歧义

  • 前置:目标仅支持 K1 文字载荷;s1 采集中;父 R-00。
  • 动作(各为独立分支):若干帧无结果;解码到不支持的 K2;一个帧同时有 K1/000123 与 K1/000456;非文字、不可无损表示的载荷。
  • 预期:无码时保持当前扫描,不逐帧报失败;其它分支给出具体的可披露说明,且不接受;多码时停止本轮,要求重新对准单个码或手输;父 R-00 保留。
  • 禁止事件:取第一个码;猜测 K2 合法;用乱码替换;把没有识别当作值为空或业务无结果。
  • 规则:B3-SCAN-DECODE
  • 实际运行:未执行。

B3-SCAN-F10 URL 与敏感输出无自动动作

  • 前置:s1 有效,解码出文字 https://example.invalid/path?token=secret-demo,仅为合成测试载荷;规则允许它作为待审原文,但不授权访问。
  • 动作:取得候选;查看状态通告/日志/网络/剪贴板;再取消。
  • 预期:载荷以安全文本显示,自动通告只说取得候选;网络导航/预取/复制/分享/执行均为 0;日志/通知不收集完整载荷;取消时按允许保留策略清除本次数据。
  • 禁止事件:自动打开 URL;富链接预取;token 进入日志,或被 AT 自动读出全文;把二维码当作外部指令。
  • 规则:B3-SCAN-DECODE
  • 实际运行:未执行。

B3-SCAN-F11 手输原稿 IME 与迟到解码

  • 前置:父 R-;子任务切到手输,原稿 00012;旧 s1 的解码 r1 在途且 s1 已停止;当前输入处于 IME 组字中。
  • 动作:按 Enter 确认组字;把原稿编辑为 000123;交付 r1 = 999999;再显式使用当前稿。
  • 预期:Enter 只完成组字、不接受;r1 不覆盖手稿;当前 000123 按手工来源核验与接受,不伪造 K1 检测;外层表单提交 0。
  • 禁止事件:扫码器的结束 Enter 直接应用值;迟到的识别结果顶替手稿;丢失前导零。
  • 规则:B3-SCAN-STRUCT;B3-SCAN-SESSION;B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F12 C1 核验不能授权 C2

  • 前置:子 C1 = 000123,资格 q1 绑定子 v1/约束 k1/父 d1/授权 a1;q1 在途。
  • 动作:手工改为 C2 = 000456;q1 通过;以 C2 发起新的 q2 核验并通过。
  • 预期:q1 接受 0,不覆写 C1,不关闭层;C2 保持为当前稿且需重新核验;q2 匹配后才接受一次;约束/父/授权变化另行测试,同样拒绝旧资格。
  • 禁止事件:旧的绿色核验套用到新码;旧结果关闭层;新稿被回滚。
  • 规则:B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F13 取消非法父稿与并发父更新

  • 前置:远端确认值 R-00,父字段为允许保留的未解析原稿 R-;子任务有扫描候选 000123;另一合法入口随后把父 d2 改为 R-99。
  • 动作:取消扫描子任务;交付旧的核验成功;独立对照:无父更新时取消。
  • 预期:有更新时父仍为 R-99;无更新的对照中,父仍为原始 R-,而不是 R-00;旧核验不被应用、不重新打开;子任务拥有的资源被释放。
  • 禁止事件:取消时用旧快照覆盖 R-99;把原稿净化回 R-00;晚到的核验修改父值。
  • 规则:B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F14 相机撤权与内容撤权分离

  • 前置:独立分支 A:父字段允许保留原稿 000123,子采集 s1 活动中且尚无已解码候选。独立分支 B:采集已停止、帧已释放,子候选 000456 及允许保留的撤销原文 000123 仍在,资格 q1 在途。
  • 动作:A 仅撤销相机许可,之后交付旧 s1 帧;B 撤销目标内容读取权,之后交付旧 q1 资格。
  • 预期:A 停止采集并丢弃旧帧,父字段获准的 000123 及手输路径保留,不生成子候选;B 清除受限载荷、文字预览、撤销记录/缓存,帧保持已释放,接受与新的受限输出均为 0;两个分支的旧结果都不恢复;系统中已合法存在的旧副本不承诺追回。
  • 禁止事件:相机撤权时删除所有父稿;撤销内容权时只做遮罩;旧许可复活采集;通过撤销记录显示秘密。
  • 规则:B3-SCAN-SESSION;B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F15 重扫新代次与资源所有权

  • 前置:子稿已手工修正为 000123;s1 已结束;同一设备上另一个合法任务持有独立的流 T;用户请求重扫。
  • 动作:先取消替换当前子稿;再明确放弃子稿并开始 s2;交付旧 s1 的资源/结果与 s2 的合法结果 000456。
  • 预期:取消替换时不启动相机,保留 000123;确认后 s2 是独立代次;s1 的迟到资源只释放其自身资源,不碰 T/s2;s2 只建立 000456 候选;不承诺设备指示灯全灭。
  • 禁止事件:未经确认丢弃修正稿;旧会话释放当前 s2 或 T;s1 覆盖 s2;后台自动重扫。
  • 规则:B3-SCAN-SESSION;B3-SCAN-ACCEPT
  • 实际运行:未执行。

B3-SCAN-F16 四端增长触控与安全文本

  • 前置:长字段名/错误、RTL 混排值 000123-A;窄屏、大字号、软键盘;某端扫描不可用、手工能力有效。
  • 动作:用键盘/触控完成手输、核验、使用与取消路径;另一适配收到解码器故障并返回前台。
  • 预期:完整的目标/来源/原文/错误/动作均可达,值的顺序不反转;没有扫描仍可完成同一普通取值任务;故障或回前台不自动拍摄;真实的码制/设备/AT 状态仍待执行。
  • 禁止事件:缩小文字以隐藏错误;只有对准一种入口;猜测原生 API 并称已支持;回前台偷偷重试。
  • 规则:B3-SCAN-PLATFORM;B3-SCAN-STRUCT
  • 实际运行:未执行。

来源与冻结夹具见本组来源及完整夹具数据。Media Capture 仅实际读过权限获取、待回应/失败及轨道 stop/源共享的局部;未执行相机或识别算法。本节没有新的 SAP/OUDS/Geist/Sail 逐族正文证据,Apps 不等于 Sail;身份、会话与接受策略是 YUDS 的有界合同,不能以首期夹具宣称全族完成。设计、代码和运行分别登记,真实运行全部未执行。

15. C1-TRANSLATE:用户输入翻译建议

本节为经独立反审的首期通用组合候选;不批准服务、平台实现或真实业务能力。全部运行未执行。

共同边界见 AI 辅助与用户控制的「C1-COMMON 四类组合共同边界」;本节仅引用输入/异步/权限主档,不要求启用 AI 能力。

15.1 C1-TRANSLATE-01 原文与译文的职责

首期为一段纯文本原文到一种目标语言的建议译文,用户审阅后明确接受到目标字段;不是界面本地化、自动发布、富文档翻译或供应商接入。原文持续可对照,服务输出不自动替换原文。以下各项分别记录:原文修订、源语言(指定/检测建议/未知)、目标语言、请求实例、服务能力/策略版本、译文修订、用户改译稿和父字段修订。

结构为:原文、语言选择及支持说明、发送范围/服务说明、翻译入口、状态、译文/限制、可编辑的改译区、接受/取消。语言由稳定标识绑定,显示名不作身份。用户指定的源语言优先于自动检测;不支持/混合/无法确定时要说明,不能猜完后悄悄改语言。首期不承诺任意语言或准确率。

15.2 C1-TRANSLATE-02 传输、依赖与失败

只由明确的翻译意图发送本次指定的文本;接收服务/数据范围/策略须已获相应授权。不在后台逐键发送全文或附件,不擅自更换供应商。原文可读但不可外发时阻止调用,允许保留获准的原文和手工翻译输入。服务不可用不把原文判为非法。

请求绑定原文、语言、目标字段/父修订、策略及授权。任一变化都使旧响应不能更新当前译稿或启用接受;旧失败不能覆盖新成功。完整、部分、失败、结果未知及内容需复核要分开。部分输出只能明确标为部分,首期不作为完整译文接受;需要续取时,仅在真实服务能力存在时提供。停止显示不承诺撤回已传文本或终止远端处理。

15.3 C1-TRANSLATE-03 修改、接受与取消

收到完整译文只形成候选。用户开始改译后,晚到的重试结果/另一候选不能覆盖手工修订;以明确的并列版本取舍处理。接受时核验当前候选、原文/语言版本、父字段及授权,只接受到目标本地稿一次;不自动发布、提交或重新翻译。父字段有外部变更后须重新审阅,不能沿用旧的通过结果覆盖。

取消时丢弃本层未接受的改译稿;父原始稿可含无效文本:父无变化时保持进入前的稿,有外部新稿则保留新稿,不恢复远端旧确认值。已接受后关闭不逆转接受;撤销受父编辑事务与版本约束。原文、译文、改译稿可按权限分别复制;撤权时清除受限的并行副本与待播报内容,不承诺收回系统已复制的内容。

15.4 C1-TRANSLATE-04 复核、保留项与可访问对照

实例可声明需精确保留的 ID/占位符列表及匹配规则;没有规则时不自动猜测识别。已声明的保留项出现丢失/新增/改变时阻止接受,并指出可披露的差异,用户可修正后重新核验;这并不保证其余译文正确。数值、单位、否定与语气等需人工复核的风险应明确说明,不能用模型概率充当质量百分比。

原文与译文使用正确语言/方向的设计语义,逻辑顺序不反转 ID 和数字;具体平台的读音和方向机制另测。并排不可读时,可按命名区域堆叠或切换,保留原文/改译稿/选区,不暗中把正在浏览的版本当作接受值。生成完成时给轻量提示,不抢正在修改的焦点,也不强制朗读整段。翻译不可用时,手动编辑和普通任务仍可完成。

15.5 精确夹具(全部未执行)

C1-TRANSLATE-F01 完整候选改译后接受

  • 前置:原文 S1 = 甲,源语言由用户指定为 zh,目标 en;获准的合成服务返回完整候选 T1 = Alpha;父目标 D1 = 原稿;该返回仅为测试值,不代表质量评估。
  • 动作:用户改译为 T2 = Alpha revised;核验当前 S1/语言/父 D1/A1 通过;显式接受一次。
  • 预期:父目标 D2 = Alpha revised;原文「甲」仍可对照;接受 1、正式提交 0;不称机器译文已自动发布。
  • 禁止事件:覆盖源文;保留旧 T1 作为已接受值;生成后直接提交。
  • 规则:C1-TRANSLATE-01、C1-TRANSLATE-03
  • 实际运行:未执行。

C1-TRANSLATE-F02 原文和目标语言换代

  • 前置:Q1 绑定 S1 = 甲、zh→en;随后用户改为 S2 = 乙、目标 fr,发出 Q2。
  • 动作:Q2 完整返回合成候选 Beta;从此状态独立重置两轮,分别交付 Q1 的旧成功 Alpha、Q1 的旧失败。
  • 预期:当前只有 Q2/Beta 待审,原文乙/fr 不变;Q1 回包不覆盖译稿/错误/语言;父接受 0。
  • 禁止事件:最新到达即当前;自动检测改掉用户的目标;旧失败抢焦点。
  • 规则:C1-TRANSLATE-02
  • 实际运行:未执行。

C1-TRANSLATE-F03 手工改译抵抗晚结果

  • 前置:Q1 完整候选 T1 = Alpha;用户手工改为 T2 = My Alpha;另一次重试 Q2 尚在途。
  • 动作:Q2 返回 T3 = Other Alpha。
  • 预期:T2 保持为当前手工稿;T3 单独待取舍;不自动替换;父稿未接受。
  • 禁止事件:重试覆盖用户修订;自动采用看似更好的译文。
  • 规则:C1-TRANSLATE-03
  • 实际运行:未执行。

C1-TRANSLATE-F04 取消保父非法稿及外部更新

  • 前置:父目标 D1 = 1.(无效且允许保留)时打开翻译层;另一合法入口将父改为 D2 = 2.;本层译稿 Alpha。
  • 动作:取消翻译层。
  • 预期:父仍为 D2 原文 2. 及错误状态;译稿仅在本层丢弃;不回到 D1 或服务器值;写入 0。
  • 禁止事件:取消等于清空父;外部稿被回滚。
  • 规则:C1-TRANSLATE-03
  • 实际运行:未执行。

C1-TRANSLATE-F05 接受核验旧修订

  • 前置:候选 T1 = Alpha 发出接受核验 V1(原文 S1、父 D1);用户将译稿改为 T2 = Alpha2。
  • 动作:V1 通过;随后父经另一入口改为 D2;尝试沿用旧资格接受 T2。
  • 预期:父 D2 保留;T2 待重新核验,层保持;旧通过既不接受 T2,也不恢复 T1。
  • 禁止事件:用旧核验接受新稿;旧回包关闭子层。
  • 规则:C1-TRANSLATE-03
  • 实际运行:未执行。

C1-TRANSLATE-F06 传输与返回撤权两轮

  • 前置:独立 A:原文可本地读取,但禁止传给指定服务。独立 B:本次发送 Q1 获准后,读取权被撤销(A2)。不提供备用供应商。
  • 动作:A 请求翻译;B 交付旧 A1 下的响应及译文。
  • 预期:A 外部请求 0,原文/手工路径可用;B 清除受限的原文/译文/错误/缓存/播报,旧返回不恢复;不自动更换服务。
  • 禁止事件:可读就传;只清原文而留下译文泄漏;声称收回已传数据。
  • 规则:C1-TRANSLATE-02、C1-TRANSLATE-03
  • 实际运行:未执行。

C1-TRANSLATE-F07 部分输出与服务失败

  • 前置:独立 A:服务 Q1 只返回部分候选 Al,并标为未完成。独立 B:Q2 的可信服务不可用。原文「甲」与父目标原稿均保留。
  • 动作:A 尝试接受部分输出;B 再次查看原文。
  • 预期:A 接受 0 并标为部分,不虚构续取能力;B 显示无法翻译,而非原文非法;两轮都保留父原稿及可披露原文。
  • 禁止事件:部分当作完整;服务失败清除原文;无能力时自动切换供应商。
  • 规则:C1-TRANSLATE-02
  • 实际运行:未执行。

C1-TRANSLATE-F08 声明保留 ID 的确定检查

  • 前置:原文“项目 ID-001”;实例声明的精确保留项列表仅有 ID-001,且出现次数须为 1;候选“Item ID-002”;无其他保护规则。
  • 动作:尝试接受;用户将候选改为“Item ID-001”,再核验并接受。
  • 预期:首次阻止,并指出 ID-001 缺失/变更;第二次该保留项核验通过,可按完整快照接受;不据此认证其余译文准确。
  • 禁止事件:自动改 ID;未声明就猜哪些词不可译;通过 ID 检查就称全部翻译正确。
  • 规则:C1-TRANSLATE-04、C1-TRANSLATE-03
  • 实际运行:未执行。

C1-TRANSLATE-F09 源语言检测不夺用户选择

  • 前置:服务仅明确支持 zh→en;用户指定源语言 zh;检测建议为 ja;目标 en。
  • 动作:检测建议到达;另一独立轮中,用户明确选择目标 xx(服务不支持)并请求。
  • 预期:第一轮不改动用户的 zh,可说明检测差异;第二轮请求 0,并说明不支持 xx,保留原稿;不称任意语言可用。
  • 禁止事件:静默修改源语言;不支持时自动转为英文;编造质量百分比。
  • 规则:C1-TRANSLATE-01、C1-TRANSLATE-02
  • 实际运行:未执行。

C1-TRANSLATE-F10 固定双语长文与方向

  • 前置:原文为“原文”重复 120 次 +“ ID-001”;合成候选为“العربية ”重复 60 次 +“ID-001”;用户正在改译;独立的 Web 轮次:A 为 320×800 CSS px/100%,B 为 1280×800 CSS px/浏览器 100% 且实际文字 200%。
  • 动作:各轮由并排切换为堆叠查看原文;再回到改译区输入 X;完整结果的提示到达。
  • 预期:原文和改译稿独立保留;新增的 X 不丢;ID-001 不反转;当前选区/焦点不因完成提示而迁移;接受 0;未执行的语音/原生效果不称通过。
  • 禁止事件:布局自动采纳正在浏览的版本;整段强制播报;用整页 zoom 代替文字增长。
  • 规则:C1-TRANSLATE-03、C1-TRANSLATE-04
  • 实际运行:未执行。

证据附件:完整夹具 · 来源与边界 · 独立源稿反审 · 冻结原稿。冻结原稿仅作存证,不是第二份现行规范;全部运行未执行。

16. 验证与主档索引

本节只提供追踪导航;完整契约及基线正常/失败夹具已归入同名组件主节。CMP 编号只用于规范追踪,不是组件 API;用途、结构和变体见同名组件主节。输入/输出指可观察的信息与意图,不把意图当作业务完成。正常与失败列均为「前置条件 → 动作 → 预期」,实际平台执行全部未执行。键位为已注明的 Web 模型,原生端按本章平台映射另行验证;触控必须有显式可点入口,不依赖悬停或拖拽。

以下主节都在本页:

追踪项 内容 主节
CMP-06 文本输入 第 2 节「CMP-06 / TXT-SINGLE 单行输入」
CMP-07 多行文本 第 3 节「CMP-07 / TXT-MULTI 多行文本」
B3-EDIT 共同原稿/IME/取消/快照 第 4 节「B3-EDIT:结构化编辑共同契约」
B3-EXPR 公式/条件树 第 5 节「B3-EXPR:公式与规则构建」;20 个夹具全部未执行
B3-RICH 富文本/HTML 边界 第 6 节「B3-RICH:富文本与 HTML 边界」;22 个夹具全部未执行
CMP-08 搜索输入 第 7 节「CMP-08 / QRY-SEARCH 查询输入」
CMP-09 数值输入 第 8 节「CMP-09 数值输入与 PRM-SPIN」
CMP-10 日期输入 第 10 节「CMP-10 / CMP-11 / INP-DATE 日期、区间与日历」
CMP-11 日期区间 第 10 节「CMP-10 / CMP-11 / INP-DATE 日期、区间与日历」
CMP-12 文件上传 第 13 节「CMP-12 / INP-UPLOAD 文件上传」
B3-SCAN 条码扫描与手工输入 第 14 节「B3-SCAN 条码扫描与手工输入」

17. SUP-HANDWRITING:手写采集与本地稿确认

代理依据用户授权,于 2026-10-20 采用本节为有界文档候选,该文档契约已经独立反审;本单元设计未创建、实现未验证、运行未执行。

本节共同继承 CMP-STATE、原始稿/接受值/写回执的区分、NAV 离开保护、CMP-LAYER 焦点、撤权清理及真实服务能力;异步事件绑定会话、对象、版本、账户与权限代次。标题、目的、状态、可用动作、原因和退出都须可获取。秘密不得进入示例或普通日志。

  • 前提与输入:真实的绘制能力、允许的输入方式、画布/坐标与格式、显示比例、数据保留和父任务版本。若任务不允许普通手写稿,必须走正式服务,不伪装成等价。替代方式是否可接受由产品的任务要求决定,不默认键入姓名等于签名。
  • 状态:空稿、采集中、有未接受笔迹、已接受到本地父稿、清除/取消、渲染或存储失败、父稿变化、受限。服务保存/业务签署状态另行独立记录;本控件不能产出「法律签署完成」。
  • 契约:说明采集目的,并说明这只是输入稿;清除只清当前采集会话的笔迹,取消则恢复当前会话开始时仍允许保留、且未被新父稿替代的原稿。旋转/尺寸变化保持笔迹含义与比例,不裁切或拉伸后静默接受。确认前可审阅;接受绑定父对象/版本,不立即提交业务,也不自动复用历史笔迹。必需的非手写替代方式未提供时,明确能力不满足并安全退出,不让键盘用户陷在无法操作的画布中。受限内容的图像、导出与可访问描述服从同一权限政策。
  • 最小文档测试:原稿 a → 画 b → 取消,恢复 a;父稿已合法变为 c 时,取消不覆盖 c;旋转后笔迹不丢失、含义不变;空稿接受被阻止且原因可理解;保存失败不标为签署成功;无可接受替代时,明确未支持该任务,而非假称所有输入方式都可访问。
  • 设计路由:D05 条件输入候选,依赖文本/按钮/层;正式法律签署服务保持明确未纳入,不据草图宣称满足签署要求。