CharDesk Docs

Cell-native UI Design

Product principles for Cell UI.

HEAD a63778e

Cell-native UI 哲学

返回事实白板 · Macintosh 标准 · Widget 规范

UI as Text 是目标:不依赖颜色或源码,文本应能说明界面结构、重要状态与可用动作。以下三条分别约束字符媒介、动作语义和提交后的投影;UI as Text 不是并列的第四条原则。

  1. Everything is Cell:layout、paint、hit、scroll、selection 和 copy 使用整数 Cell;px 只存在于 browser/Canvas 边界。
    • 前景数据是 Unicode Cell.text,不要求全部通过字体渲染;已登记 Cell graphics 按 Cell 几何确定性绘制,其他 grapheme 走字体。复制、保存与字符快照保留原 Unicode;背景、clip、owner 与 hit 是 Cell metadata。登记范围与绘制规则由共享渲染契约拥有。
    • 最终可见 Cell 属于 Widget 或 chrome;renderer 不创建 DOM-per-cell。
  2. Every Input becomes a Command:keyboard、pointer、wheel、textarea 与 AT action 汇入 Engine command。
    • 键盘操作完整,指针直接作用于可见 Cell;Widget command 不依赖 hover/drag。共享 KeyInput 保留 phase、逻辑 key、物理 code、location、modifiers、repeat 与 composition;pointer down 定位,完整 tap 才执行。Host 拥有快捷键 scope、chord 与用户 keymap,Cell UI 只解释 Widget 行为。
  3. One State, Many Projections:业务值由应用持有;影响可见交互的 focused、pressActive、activationFlash、manipulating、selected、expanded、disabled 和 editing 投影到 Cell Scene。Canvas、Semantic DOM、clipboard 与 tests 消费同一次 Widget commit;画面截断不丢失完整语义标签。

CellSurface 的 presentation="rich" | "text" 是同一可交互 Widget Tree 的两种呈现,默认 rich。text 以 Unicode 字符表达结构和关键状态,同时保留颜色、hover、focus、press、blink 与 Cell Cursor;它不是静态导出。两种呈现共享命令与语义,组件不局部覆盖。组件字符规则由Widget 规范拥有。

Cell Range 复制当前呈现中选区的可见 Unicode,不承诺包含颜色或瞬时交互反馈;它不是另一套角色/状态注释格式。

视觉与交互判断以 Classic Macintosh → Cell UI 为标准;OpenTUI 只提供终端构图与工程参考。

状态与底座权威

Widget 规范拥有高亮、选择、按压、确认、编辑与连续操控规则;Cell Primitives 底座拥有共享控制器、组件行为、反馈与外观的依赖边界。页面只组合内容、行为与 Cell 布局,不重新实现这些机制。

全局 CSS token 拥有颜色,反馈配置拥有确认次数;组件声明反馈区域与能力,统一视觉解析器解释状态,页面不私有化公共反馈。

组件门户实现见 apps/cell-ui。

Gallery props panel 只放有用的配置项,不重复添加 value、pressed 等运行状态控件;可交互状态直接在 Preview 操作。没有配置项时只展示 Preview,不保留空面板。