Files
ttui/docs/public-api.md
chuan 54a71c1645 chore: add package and ci foundation
- add README and public API boundary documentation

- configure package metadata and CI validation
2026-06-04 02:40:53 +08:00

52 lines
2.2 KiB
Markdown

# 公开 API 和内部边界
本文档用于说明 TinyTUI 当前可被应用代码依赖的公开边界,以及后续重构时应尽量保持稳定的区域。
## 应用侧稳定入口
应用代码优先依赖以下命名空间:
- `TinyTUI.Components`:组件接口和内置组件
- `TinyTUI.Runtime`:运行时入口和 overlay 操作
- `TinyTUI.Terminal`:真实终端会话
- `TinyTUI.Rendering`:渲染器和渲染选项
- `TinyTUI.Text`:ANSI 感知宽度、截断、切片和换行
- `TinyTUI.Input`:输入事件、按键名称和 keybinding
- `TinyTUI.Autocomplete`:自动补全 provider 契约
- `TinyTUI.Terminal.Images`:终端图像服务和能力检测
## 推荐组合
真实终端应用建议使用:
```csharp
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 拆分
如果应用需要提前依赖这些能力,建议通过接口注入或封装适配层隔离变更。