dioxus-mind-elixir 0.1.0

A Rust-native Dioxus mind map component with CSS-variable styling
Documentation

dioxus-mind-elixir

Rust + Dioxus 脑图组件,基于 Mind Elixir Core 的数据与交互设计,以 Rust 惯用方式重写。

0.1.0 首版发布候选,Rust 1.85+ / Dioxus 0.7.10。包含纯文本脑图、插件、共享大纲、XMind 和 Web 图片/静态 HTML 导出。当前正在完成 crates.io 发布准备,尚未上传。

平台边界: Web 已通过 Chromium 自动化;macOS Desktop 已做运行检查。Desktop 实时图片/HTML 捕获返回明确的平台错误;真实 OS 输入法候选确认、Safari 与 Windows/Linux Desktop 运行仍待验证。此版本不承诺 Mind Elixir 全功能兼容。

当前可运行:四方向布局、严格 JSON、节点增删改/复制/批量移动、折叠、快照撤销/重做、共享状态、纯文本多行编辑、视口平移/缩放/居中、主题与可继承 CSS 变量。另含大纲、节点拖放、多选/框选、菜单、结构快捷键与导出。

运行核心试验台

需要 Rust 1.85+、Dioxus CLI 0.7.10;macOS Desktop 需要 Xcode Command Line Tools。首次 Web 构建会由 dx 安装所需构建工具。

rustup target add wasm32-unknown-unknown
cargo install dioxus-cli --version 0.7.10 --locked
cd test-apps/core
# Web
dx serve --platform web
# 或 Desktop;分别运行,不要同时启用两个 renderer
dx serve --platform desktop

也可从仓库根目录执行 cargo run -p mind-elixir-core-tests --features desktop。Desktop 推荐使用 dx,以生成完整应用包。示例样式通过 include_str! 随 Rust 编译,无需 npm 或复制 assets。

第一阶段只读示例继续保留在 examples/basic。核心自动化独立运行:

cargo test -p mind-elixir-core-tests --locked
scripts/test-core-e2e # 需先启动匹配 Chrome 的 chromedriver

详见 核心测试说明 和 Rust 浏览器回归。

最小接入

正式上传 crates.io 后可通过以下配置接入;发布前可用本地 path 验证。renderer 由宿主选择:

[dependencies]
dioxus-mind-elixir = { version = "0.1.0", features = ["web"] }
dioxus = { version = "0.7.10", default-features = false, features = ["web", "launch"] }
use dioxus::prelude::*;
use dioxus_mind_elixir::{EditableMindMap, MindMapData, Node, use_mind_map};

fn app() -> Element {
    let handle = use_mind_map(MindMapData::new(
        Node::new("root", "想法").with_children(vec![Node::new("rust", "Rust")])
    ));
    match handle {
        Ok(handle) => rsx! { EditableMindMap { handle, class: "my-map" } },
        Err(error) => rsx! { p { role: "alert", "{error}" } },
    }
}

库不默认启用 renderer、日志或开发工具。Web 宿主在关闭 Dioxus 默认特性时,可以启用本库 web feature,补齐 Dioxus 0.7.10 history 对 web-sys/Location 的要求,并启用实际 CSS 捕获:

dioxus-mind-elixir = { version = "0.1.0", features = ["web"] }

只使用核心 Web 视图时,也可像本仓库 basic 示例一样单独启用 web-sys/Location。Desktop 宿主启用 Dioxus 的 desktop feature,不启用本库 web feature。

能力 Web(web feature) Desktop
四方向脑图、共享大纲、操作/历史、插件 Chromium 已验证 macOS 已做运行检查
JSON、文本、XMind、宿主保存接口 支持 支持
实际 CSS/字体的 SVG、PNG、JPEG、WebP、静态 HTML 捕获 支持;受字体/CORS、资源、浏览器编码器限制 暂不支持,返回平台错误
导出 HTML 继续编辑 静态查看,不含编辑器 静态查看,不含编辑器

完整行为差异、字段兼容和未验证项见 第三阶段记录。

样式定制

变量可放在组件、父容器或外部样式表上,库不在根节点重置变量:

.my-map {
  --dme-root-background: #67518c;
  --dme-node-radius: 6px;
  --dme-font-size: 18px;
  --dme-gap-x: 64px;
  --dme-link-color: #b5a0d0;
}

完整清单见 CSS 变量。Dioxus resize 事件触发重新测量;组件的 measurement_revision 提供显式重测入口。组件原生支持视口缩放;仅做外部位置/transform 动画时需显式重测。

检查

cargo fmt --all -- --check
cargo clippy -p dioxus-mind-elixir --all-targets --locked -- -D warnings
cargo test -p dioxus-mind-elixir --locked
cargo test -p mind-elixir-core-tests --locked
cargo doc -p dioxus-mind-elixir --no-deps --locked
cargo check -p mind-elixir-basic --features web --target wasm32-unknown-unknown --locked
cargo check -p mind-elixir-basic --features desktop --locked

core 和 plugins 均有独立可运行的测试应用和浏览器回归包。组件测试代码和浏览器客户端用 Rust 编写,启动脚本仅负责进程编排。

设计与许可

项目不维护手写 TS/JS 功能代码;Dioxus/WebView/WASM 工具链仍有自己的运行支持和生成绑定。

运行插件试验台

cargo test -p mind-elixir-plugin-tests --locked
cd test-apps/plugins
dx serve --platform web --port 8089
# Desktop 单独运行:dx serve --platform desktop

use_plugins(handle, Plugin::builtins()) 安装能力并保留返回的 guard;Toolbar、EditableMindMap、Outline 使用同一个 handle。导出为 plugins::export::ExportFile,宿主可使用 save_with 替换保存接口。Web 实时捕获需依赖启用 web feature,Desktop 不启用此 feature。