用途
Plate UI 是 udecode/plate 仓库中用于编写 Plate 编辑器注册表 UI 与组件的技能,是 shadcn 技能的仓库专属配套。通用 shadcn 的 CLI、上游文档和规则应使用 shadcn 技能;本技能专门处理 Plate 特有的组件编写问题,包括开放代码保留、包抽取边界、base/live kit 拆分、跨平台分层以及注册表接线。
主要能力
该技能覆盖仓库中的多个界面区域:apps/www/src/registry/ui 中的实时组件与节点渲染器;apps/www/src/registry/components/editor/plugins 中的 base/live kit 接线;apps/www/src/registry/registry-.ts 中的注册表元数据与依赖;packages/ 中的持久转换、查询、控制器和公共钩子。
其核心原则包括:保留开放代码,使 shadcn 派生组件仍像用户可拥有、阅读、对比和调整的源码;只在持久边界处抽取,包代码应拥有语义而非仅为避免 JSX;在 JSX 之下设计,跨平台复用应放在命令/状态契约、控制器、查询和转换中;UI 组合保持本地,除非有多个界面需要同一契约;注册表接线是组件编写的一部分;React 版本下限为 19.2+,不为 React 18 时代限制添加向后兼容代码。
使用方式
工作流建议先使用 shadcn 技能并运行常规 shadcn 文档/搜索流程,然后在 apps/www/src/registry/ui、apps/www/src/registry/components/editor/plugins 和相关 packages/* 中搜索 Plate 中最接近的类似实现。在编写代码前,先用抽取测试决定归属,并确定语义核心、平台适配器、本地开放代码 UI 三层。编写状态/副作用前应用 React 检查:能否在渲染期间派生、是否应留在事件处理器中、是否订阅了超出 UI 实际渲染所需的编辑器状态。先以开放代码构建组件,只抽取通过测试的边界,接线 base/live kit 与注册表依赖,并应用注册表变更日志决策。若包导出发生变化,运行 pnpm brl。最后验证最小诚实表面:UI 变更用组件规格,包代码变更用包构建/类型检查,交互界面用浏览器验证。
适用场景
适用于在 Plate 仓库中编写或重构注册表 UI/组件、决定哪些内容应放入注册表、处理 base/live kit 拆分、跨平台分层和注册表接线等任务。
限制
该技能要求 React 19.2+,不保留 React 18 兼容模式。抽取到包中需满足至少一个条件:代码拥有文档语义、序列化、转换或导航契约;多个 UI 界面或平台需要相同行为契约;代码是稳定控制器/钩子且输出不绑定于某个 shadcn 组件标记;否则相同逻辑会在包或适配器间重复;未来原生消费者可能使用相同概念契约。若代码仅服务一个组件、返回形状主要是标签/JSX 接线/类决策或弹出菜单状态、抽取主要因为文件过长或类型麻烦、抽取会向用户隐藏开放代码结构、抽象仅在 React/web 中有意义且无原生对应,则应保持本地。