54a71c1645
- add README and public API boundary documentation - configure package metadata and CI validation
2.2 KiB
2.2 KiB
公开 API 和内部边界
本文档用于说明 TinyTUI 当前可被应用代码依赖的公开边界,以及后续重构时应尽量保持稳定的区域。
应用侧稳定入口
应用代码优先依赖以下命名空间:
TinyTUI.Components:组件接口和内置组件TinyTUI.Runtime:运行时入口和 overlay 操作TinyTUI.Terminal:真实终端会话TinyTUI.Rendering:渲染器和渲染选项TinyTUI.Text:ANSI 感知宽度、截断、切片和换行TinyTUI.Input:输入事件、按键名称和 keybindingTinyTUI.Autocomplete:自动补全 provider 契约TinyTUI.Terminal.Images:终端图像服务和能力检测
推荐组合
真实终端应用建议使用:
using var terminal = new ConsoleTerminalSession();
var parser = new DefaultInputParser();
var textMeasurer = new TerminalTextMeasurer();
var renderer = new DifferentialRenderer(terminal, textMeasurer);
using var runtime = new TuiRuntime(terminal, parser, renderer);
测试或嵌入场景可以替换 ITerminalSession、ITerminalOutput、IInputParser、IRenderer 或 ITextMeasurer,但仍保持 runtime 和组件不直接写终端。
组件约束
组件只负责 Render(int width) 返回行数组,输入组件通过 HandleInput(TuiInputEvent input) 接收规范化输入事件。
组件不应该直接调用 Console.Write 或依赖真实终端尺寸。需要终端宽度时使用 render 传入的 width,需要截断或换行时使用 ITextMeasurer。
可缓存组件应该在 Invalidate() 中清理缓存。runtime 会在焦点切换、resize 和显式失效时调用该入口。
仍在演进的区域
以下能力已具备基础形态,但公开契约后续仍可能细化:
- Kitty keyboard protocol 的完整协商和 release 事件
- Runtime 级全局 input listener 和 keybinding 配置
- Overlay 多层焦点恢复和复杂样式 segment 保持
- Unicode RGI emoji 精确宽度和 CJK 标点断行
- 终端图像 cell size 查询、resize 重新布局和 Kitty image 生命周期同步
- 正式 benchmark 和多场景 Example 拆分
如果应用需要提前依赖这些能力,建议通过接口注入或封装适配层隔离变更。