7.0 KiB
LineEdit Token 设计
本文档定义 TextBoxToken、LineEditToken 与 TextAreaToken 在 LineEdit 输入家族中的专属语义、分类、使用范围和兼容边界。控件 Token 的通用分层、命名、计算、Theme Variables 边界和预设色规则见 AtomUI 控件 Token 设计规范。LineEdit 整体架构见 LineEdit 桌面版架构设计,内部实现原理见 LineEdit 桌面版实现原理,设计和契约变化记录见 LineEdit Changelog。
1. 定位
LineEdit 输入家族使用三个控件级 Token scope:
| Token | Scope | 职责 |
|---|---|---|
TextBoxToken |
TextBox |
TextBox 专属内容 padding。 |
LineEditToken |
LineEdit |
单行输入框字号。 |
TextAreaToken |
TextArea |
多行输入框字号、右侧附加 padding 和 resize handle 视觉。 |
TextBox / LineEdit / TextArea Token 不承载文本值、placeholder、清除状态、密码 reveal、Form 状态、SearchEdit 运行状态、focus/hover/pressed 状态或 CompactSpace 运行时状态。输入表面边框、背景、圆角、shadow、error/warning、disabled 和 motion 由 InputControlFrameTheme 与 SharedToken 处理;运行时状态由 AbstractTextInput、Form 和 frame 状态模型处理。
2. Token 分类
2.1 TextBox 专属文本布局 Token
TextBox.ContentPaddingLGTextBox.ContentPaddingTextBox.ContentPaddingSM
这些 Token 只服务 TextBoxTheme.axaml 中 TextBox 自身内容 padding。TextPresenter 的基础 margin 属于模板布局常量;输入表面边框、背景、圆角、hover/focus shadow、error/warning 和 disabled 视觉不属于 TextBoxToken。
2.2 LineEdit 字号 Token
LineEdit.InputFontSizeLineEdit.InputFontSizeLGLineEdit.InputFontSizeSM
这些 Token 保持 LineEdit 单行输入框字号契约。当前默认计算语义与 TextBox 字号一致,供 LineEdit 及复用 LineEdit 输入壳体的组合控件独立覆盖。
2.3 TextArea 字号 Token
TextArea.FontSizeTextArea.FontSizeLGTextArea.FontSizeSM
这些 Token 服务 TextAreaTheme.axaml 中多行输入不同尺寸下的默认字体大小。TextArea 的行高使用 SharedToken 的 FontHeight、FontHeightLG、FontHeightSM。
2.4 TextArea 右侧附加 padding Token
TextArea.RightAddOnPaddingTextArea.RightAddOnPaddingLGTextArea.RightAddOnPaddingSM
这些 Token 用于 TextArea 内部右侧内容与边框之间的空隙。它们根据 SharedToken 的水平 padding 和线宽计算,避免右侧 clear / feedback / resize 相关内容与文本区域重叠。
2.5 TextArea resize Token
TextArea.ResizeIndicatorLineColorTextArea.ResizeHandleSize
这些 Token 控制 TextArea 右下角 resize handle 的线条颜色和尺寸。它们只服务 IsResizable=true 的拖拽入口,不影响 TextArea 的自动高度算法或固定行数测量。
3. 控件专项模型中的 Token 使用
LineEdit 家族 Token 使用路径:
SharedToken
↓
InputControlFrameTheme
↓
TextBoxTheme / LineEditTheme / SearchEditDecoratedBoxTheme / TextAreaDecoratedBoxTheme
TextBoxToken / LineEditToken / TextAreaToken
↓
各自文本尺寸、padding 和 resize 专属布局
输入表面的边框、圆角、背景、hover/focus shadow、error/warning 和 disabled 状态由 InputControlFrameTheme 读取 SharedToken。TextBox 的内容 padding 由 TextBoxTokenResource 进入 TextBoxTheme.axaml;LineEdit 的单行字号由 LineEditTokenResource 消费;TextArea 的字号、右侧 padding 和 resize 视觉由 TextAreaTokenResource 及相关布局主题消费。
TextArea 的多行字号由 TextAreaTokenResource 进入 TextAreaTheme.axaml。TextArea 右侧 padding 和 resize 视觉由 TextAreaDecoratedBoxTheme.axaml、ResizeHandleTheme.axaml 消费。
SearchEdit 不定义独立 Token。它复用 AbstractTextInput 的状态与 LineEdit 的文本尺寸,输入表面由 InputControlFrame 统一表达,搜索按钮使用 Button 体系和 SearchButton 主题表达。
4. 控件家族影响
TextBoxToken 影响以下控件或主题:
TextBoxTheme.axaml- 使用 AtomUI
TextBox作为内部输入框的组合控件
LineEditToken 影响以下控件或主题:
LineEditTheme.axamlSearchEditTheme.axaml- LineEdit / SearchEdit token.md 语义说明和 Gallery 示例
TextAreaToken 影响以下控件或主题:
TextAreaTheme.axamlTextAreaDecoratedBoxTheme.axamlResizeHandleTheme.axaml- TextArea token.md 语义说明和 Gallery 示例
如果调整 TextBoxToken 的内容 padding,必须评估基础 TextBox 以及依赖 AtomUI TextBox 的组合控件。输入表面边框、圆角、hover/focus shadow 和状态视觉的变更应评估 InputControlFrameTheme 及全部 decorated box 派生控件。DatePicker / TimePicker 等内部 picker 输入框在自定义尺寸路径中可能显式绑定字体并设置 IsCustomFontSize=true,不应依赖隐藏宽度补偿适配字号变化。
如果调整 LineEditToken 字号,必须评估 LineEdit、SearchEdit 以及复用 LineEdit 输入壳体的组合控件。
5. 兼容性要求
TextBoxToken、LineEditToken 与 TextAreaToken 属于输入控件家族的主题契约。即使 Token 类型是 internal,生成的 TokenKind、AXAML resource 使用点和 token.md 语义说明已经形成稳定依赖。
Token 变更要求:
- 不把实例状态、交互状态、Form 状态、搜索运行状态或文本内容状态迁移为 Token。
- 不在 TextBoxToken、LineEditToken 或 TextAreaToken 中复制 InputControlFrame 的边框、背景、圆角、focus shadow、error/warning、disabled 或 motion 状态 Token。
- 不在 TextAreaToken 中表达自动高度、当前行数或 resize 当前拖拽高度。
SizeType=Custom不新增专属字号 Token;它默认复用 Middle 分支,由用户显式属性完成自定义。- 任何 Token scope 调整都必须同步其主题资源、generator 注册、控件文档和相关组合控件文档。
6. 验证策略
| 改动类型 | 验证要求 |
|---|---|
| 修改 TextBox padding Token | 验证 TextBox 的 Large/Middle/Small/Custom padding、clear/reveal 对齐,并评估依赖 AtomUI TextBox 的组合控件。 |
| 修改 LineEdit 字号 Token | 验证 LineEdit、SearchEdit 的 Large/Middle/Small/Custom 字号、line height、placeholder 和 clear/reveal 对齐。 |
| 修改 TextArea 字号 Token | 验证 Lines、MinLines、MaxLines、IsAutoSize 和 IsResizable 下的高度计算。 |
| 修改 TextArea padding Token | 验证 clear button、Form feedback、InnerRightContent、字数统计和文本区域不重叠。 |
| 修改 resize Token | 验证 resize handle 可见性、拖拽命中、线条颜色和尺寸。 |
| 删除或重命名 Token | 默认不允许;如获授权,需同步 AXAML 引用、生成文件、Token 类型、生成数据和 token.md和控件文档。 |
| 文档改动 | 运行 git diff --check,检查文档链接存在。 |