xfy c74e59485d feat(editor): add codemirror-editor subproject + Rust bridge
新建 libs/codemirror-editor(pnpm/Vite IIFE/@catppuccin/codemirror Catppuccin
Latte+Mocha 主题/@codemirror/lang-sql schema 补全/@replit/codemirror-vim),
输出 public/codemirror/。Rust 桥接 codemirror_bridge.rs 镜像 tiptap_bridge.rs
(Reflect::get 取对象字面量 + EditorHandle 持有闭包 + Drop→destroy)。
接入 Makefile/Dioxus.toml/.gitignore。

注意:thememirror 不含 catppuccin 主题,改用官方 @catppuccin/codemirror@1.0.3
(导出 catppuccinLatte/catppuccinMocha)。
2026-06-29 18:24:38 +08:00

32 lines
990 B
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { CodeMirrorInstance, EditorOptions } from './editor';
/**
* 模块入口:暴露对象字面量 { create } 作为默认导出。
* IIFE 产物挂在 window.CodeMirrorEditor 上,由 Rust 侧用 Reflect::get 取
* (对象字面量,不能用 wasm-bindgen 的 extern fn——那会被编成函数调用而失败
*/
const CodeMirrorEditor = {
_instances: new Map<string, CodeMirrorInstance>(),
create(
containerId: string,
options: EditorOptions = new EditorOptions(),
): CodeMirrorInstance | null {
const container = document.getElementById(containerId);
if (!container) return null;
// 销毁同 id 的旧实例
const existing = this._instances.get(containerId);
if (existing) {
existing.destroy();
this._instances.delete(containerId);
}
const instance = new CodeMirrorInstance(container, options);
this._instances.set(containerId, instance);
return instance;
},
};
export default CodeMirrorEditor;