SuperAPI AI 工具集

nemo-component-patterns

编程与开发

查看项目

更新于 10-15 21:51

技能介绍

本技能用于在编写、修改或调试 Nemo UI 组件时提供约定、模式与常见陷阱的参考。

用途:向 Nemo 源码树贡献新的内置 Rust 组件。核心是 4 文件模式,每个组件需改动固定 4 个文件:crates/nemo/src/components/<name>.rs(结构体与 RenderOnce 实现)、crates/nemo/src/components/mod.rs(mod 与 pub use)、crates/nemo-registry/src/builtins.rs(schema 注册)、crates/nemo/src/app.rs(渲染分发 match 分支)。

主要能力与约定:组件结构体使用 #[derive(IntoElement, NemoComponent)],通过 #[property] 提取属性,可选属性用 Option<T>,必填用 #[property(default = ...)];有子组件时加 #[children];带事件处理器时加 runtime、entity_id 字段;#[source] 必须位于最后一个字段。所有 Nemo 组件实现 RenderOnce(无状态、渲染时消耗),而非 GPUI 视图所使用的 Render。属性支持 String、i64、f64、bool 及其 Option 形式。带事件处理器的组件需手写 builder 方法(宏不生成)。事件处理在 render 中取出 handler 并调用 runtime.call_handler 后 cx.notify。颜色用 resolve_color(),支持主题色(如 theme.border、theme.accent、theme.danger)与十六进制色。阴影与圆角有预设:apply_shadow 支持 sm/md/lg/xl/2xl,apply_rounded 支持 sm/md/lg/xl/full。有状态组件需在 components/state.rs 的 ComponentState 枚举加变体、在 app.rs 加 get_or_create_*_state() 方法,并用 Entity<T> 存储状态。注册 schema 用 reg(registry, "my_component", ComponentCategory::Display, "My Component", "Description", ConfigSchema::new(...).property(...).require(...))。渲染分发的几种写法也在此说明。

限制与注意:列表类组件(Table、Tree)基于 uniform_list,若父容器无确定高度会塌缩为 0px,需包裹 div().w_full().h(px(height)),默认 300px。schema 名称用 snake_case,XML 中用 kebab-case。资料未提供安装命令与平台、收费等信息。