Skip to content

Vektra跨平台、高性能、可组合的纯 GPUI 组件库

直接放入现有 View,不需要 Root、Provider 或初始化流程;统一惰性数据访问、视窗级渲染、有界缓存、键盘与可访问语义内建。

无需 Root、Provider 或 init键盘、焦点与可访问语义内建render 路径无文件 I/O 或 JSON 解析

预发布状态

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 与普通组件展示站的区别

Vektra 是服务于现有 GPUI 应用的纯组件库,不接管应用生命周期、窗口模型或状态容器。

无侵入式使用

组件以普通 GPUI element 交付,可以直接作为子节点放进现有 View。宿主应用继续掌握 Application、Window、View 与 Context<T>。

  • 不需要 Vektra Root
  • 不需要 Provider
  • 不需要 vektra::init(cx)

无障碍内建

Button 与 IconButton 把交互可访问性作为组件契约实现,而不是文档里的额外约定。

  • Role 与可访问名称
  • Enter、Space 和鼠标共享回调
  • focus-visible 和正确焦点行为
  • disabled 同时阻止鼠标与键盘激活

面向高性能的轻量渲染路径

默认主题首次解析后缓存为 Arc<ResolvedTheme>,组件渲染阶段复用结果,并保持 GPUI 原生 SVG 与资源缓存路径。

  • render 阶段不读取文件
  • render 阶段不解析 JSON
  • Icon 使用 GPUI 原生 SVG、资源系统与缓存

仍然保留组件文档该有的证据

次级能力保持收敛,支撑核心定位,但不与三项核心价值争夺层级。

主题 token 与模式

Variant、size、Light/Dark/System 和交互状态都来自 Vektra 主题 token。

保持 Rust/GPUI 原生组合方式

属性、回调、Context<T>、Window 与资源管线沿用现有 Rust/GPUI 形状。

文档运行真实 Rust/GPUI WASM 组件

文档中的按钮由 Rust 和 GPUI 编译为 WASM,不是另做的 HTML 示例。

实时 Button 实验台

用一个紧凑预览展示 Vektra 首个组件面的直接证据。普通 variant 按钮统一使用默认 MD 尺寸;独立尺寸行刻意展示 XS、SM、MD、LG,因此高度差异是有意设计。

Button 展示在独立页面打开
正在加载组件预览...

对应的 Rust API

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);

开始使用 Vektra

先完成本地依赖配置,再从 Button 文档了解组件 API、尺寸、图标与无障碍约定。