无侵入式使用
组件以普通 GPUI element 交付,可以直接作为子节点放进现有 View。宿主应用继续掌握 Application、Window、View 与 Context<T>。
- 不需要 Vektra Root
- 不需要 Provider
- 不需要 vektra::init(cx)
直接放入现有 View,不需要 Root、Provider 或初始化流程;统一惰性数据访问、视窗级渲染、有界缓存、键盘与可访问语义内建。
Vektra 当前处于早期开发阶段。GPUI 虽已发布 pre-1.0 版本,但 API 仍在快速演进,可能发生破坏性变更。Vektra 当前锁定特定 GPUI revision,尚未承诺稳定兼容 crates.io GPUI,因此暂不发布可供生产使用的正式 crate。请通过 Git workspace 或 path dependency 使用,并预期 Vektra 公共 API 也可能发生破坏性变更。
crates.io 上的 vektra 0.0.1 只用于保留项目名称,不包含当前组件库实现,不能作为正式依赖。
Vektra 是服务于现有 GPUI 应用的纯组件库,不接管应用生命周期、窗口模型或状态容器。
组件以普通 GPUI element 交付,可以直接作为子节点放进现有 View。宿主应用继续掌握 Application、Window、View 与 Context<T>。
Button 与 IconButton 把交互可访问性作为组件契约实现,而不是文档里的额外约定。
默认主题首次解析后缓存为 Arc<ResolvedTheme>,组件渲染阶段复用结果,并保持 GPUI 原生 SVG 与资源缓存路径。
次级能力保持收敛,支撑核心定位,但不与三项核心价值争夺层级。
Variant、size、Light/Dark/System 和交互状态都来自 Vektra 主题 token。
属性、回调、Context<T>、Window 与资源管线沿用现有 Rust/GPUI 形状。
文档中的按钮由 Rust 和 GPUI 编译为 WASM,不是另做的 HTML 示例。
用一个紧凑预览展示 Vektra 首个组件面的直接证据。普通 variant 按钮统一使用默认 MD 尺寸;独立尺寸行刻意展示 XS、SM、MD、LG,因此高度差异是有意设计。
Button::new("save")
.label("保存")
.start_icon(IconName::Settings)
.on_click_in(cx, |this, _, _, cx| {
this.save_count += 1;
cx.notify();
});
Button::new("delete")
.label("删除")
.variant(ButtonVariant::Destructive)
.disabled(is_locked);先完成本地依赖配置,再从 Button 文档了解组件 API、尺寸、图标与无障碍约定。