TTS 图包工作台 — 蓝图纸语言桌面应用
Round-03 设计方案(ui-design/round-03)的 Tauri 2 + React 19 实现。 v0.9.0 窗口 v9-3:一体化安装包(NSIS installerHooks 加 PATH / 首次向导 / 示例图包)完工。
| 依赖 | 版本 | 说明 |
|---|---|---|
| Windows | 10 1809+ / 11 | 仅 Windows(v0.1.0 不做跨平台) |
| WebView2 Runtime | 任意 | Win10 1809+ 自带;缺失时 HubLauncher 引导面板顶部红条提示 + 一键下载 |
| tts-toolkit (CLI) | 内嵌 | v0.1.0 起一体化安装包自带 tts-hub sidecar(v9-2 落地),无需用户手动 npm install -g。外置模式仍需 ≥0.9.0 |
| Tabletop Simulator | 任意 Steam 版 | 联通功能需要;UI 空骨架可独立浏览 |
| Node.js | 24+ | 仅开发期需要 |
| Rust | 1.99+ (stable-msvc) | 仅开发期需要;rustup 安装 |
| VS Build Tools 2022 | C++ 工作负载 | 仅开发期需要;含 MSVC + Windows SDK |
v0.1.0 一体化安装包(推荐,5 分钟上手):
- 下载并运行
tts-desktop_0.1.0_x64-setup.exe - 双击桌面「TTS 图包工作台」图标
- 首次启动会弹出向导:默认推荐「打开示例图包」(16KB s_dial 演示包,立即可玩);也可选「打开现有图包」或「查看 5 分钟教程」,或「跳过,直接进入」
- 装完即可用 —— 安装器已把
bin\追加到用户 PATH(PowerShell 可直接tts --version/tts-hub),并内嵌tts-hubsidecar(无需手动npm install -g)
外置 hub 模式(高级用户 / 降级模式):
npm install -g @smirk1921/tts-toolkit(一次)- 在图包工作区目录起一个终端跑
tts-hub(保持窗口开启) - 运行安装包,应用检测到 39995 端口的外置 hub(≥0.9.0 接收,<0.9.0 提示升级)→ 进入五面工作台
npm install
npm run tauri dev # 首次 cargo build 5-10 min
npm run dev # 浏览器调试(不开 Tauri 壳,HubLauncher 走 HTTP 探测降级)
npm run build # tsc + vite build
npm run tauri build # 出 NSIS 安装包(src-tauri/target/release/bundle/nsis/)
npm run make-icons # 从 assets-src/icon.svg 重生成 src-tauri/icons/ 全套
npm run compare-screenshots # 五面截图 vs round-03 基准 pixelmatch 比对(需先截图入 screenshots/current/)五面全部落地:
- ⓪ 总览:工序章五章横排(拉取→切片→拼版→校样→出厂,四态色)+ 待办清单 + 迷你文件树 + 事件流 + 四面状态磁贴,首进阶梯动效
- ① 代码:pull → 条目级 diff(红绿块)→ CodeMirror 编辑(Lua/XML 高亮)→ 乐观锁保存(409 冲突条)→ 确认门写回游戏
- ② 代理:Lua 直执 + 作业流水(hub 路由调用行)+ SSE 事件流(Error 整行红)
- ③ 卡牌:牌堆列表 + 切片网格(14 真实格 + 虚线占位)+ 卡面预览 + 死链卡牌切片禁用
- ④ 素材:台账表格(>500 行强制虚拟化,3500 行实测 renderedRows=41)+ 行内编辑 + 批量体检死链标红 + 导入预览
顶层机制:
- 五层 Provider:HubContext → ConfirmGate → Sse → DeadLink → Dirty
<ConfirmGate>全站唯一危险确认组件(确认门生长动效 + 勾选"我已知晓")- 跨面联动:④ 体检死链 → ③ 切片禁用;① 脏文件 → LayerNav ①蓝点;死链/差异 → ⓪红点
- hub 版本兼容:0.7.x 降级提示 / 0.8.0 全功能(
capabilitiesFromStatus) - 设计令牌:
src/tokens.css(10 色彩 + 3 字体 + 4 字号 + 6 间距 + 6 动效 + 几何约束),全站引用无写死值
施工不可破:
- 写回游戏等一切危险操作只经
<ConfirmGate>(confirm:true 门的 UI 化) - 状态色纪律:红=危险/错误、琥珀=待人审、蓝=代理/选中、青=成功/存活
- 直角或 ≤2px 微圆角、线框分隔、字符符号(✗⇄M●✂⬆✓),不引图标库、不用大圆角卡片、不滥用投影
- 三层字族职责不混用:仿宋=标注 / 等宽=数据 / 黑体=正文
- 全站引用 tokens.css 变量,不写死颜色 / 字号 / 间距
- 不引 Tailwind / Sass / 组件库
- 主仓:本仓 Smirk1921/tts-desktop
- 姊妹仓:Smirk1921/tts-toolkit(CLI + hub + MCP)
- 姊妹仓:Smirk1921/tts-lua-hub(VSCode 插件 fork)
MIT © Smirk1921
v9-3 起安装器通过 Tauri 2 官方 NSIS installerHooks 机制注入自定义逻辑(src-tauri/nsis/installer-hooks.nsh,tauri.conf.json 的 bundle.windows.nsis.installerHooks 指向)。v9-3 简化(坑 35,见交接文档):不做安装器勾选页,行为默认执行 —— 安装时把 bin\ 幂等追加到用户级 PATH(HKCU,用 NSIS 自带 ${WordAdd} 去重,不需要 EnVar 插件),检测到 VSCode(%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe)时把打包内 .vsix 拷到 $INSTDIR\vscode-ext\;卸载时幂等清 PATH + kill tts-hub 残留进程。
-
构建命令(在
tts-desktop/下):npm run copy-product && npx tauri buildnpm run copy-product:把 tts-toolkit 产物(sidecar .exe + resources)同步进src-tauri/,并顺带执行 examples/vsix 两步收集(详见scripts/copy-product.mjs头注释)npx tauri build:Rust release 编译 + NSIS 打包(beforeBuildCommand 里已含前端vite build)
可选资源收集脚本(copy-product 末尾会自动调;产物缺失时 vsix 自动跳过不阻塞构建):
node scripts/collect-vsix.mjs # ../vscode-ext/ 最新 .vsix → src-tauri/resources/vscode-ext/(无 .vsix 时 warn 跳过) node scripts/copy-example.mjs # s_dial.ttsmod 夹具 → src-tauri/resources/examples/sample.ttsmod
-
产物:
src-tauri/target/release/bundle/nsis/tts-desktop_0.1.0_x64-setup.exe安装器行为(v9-3 无勾选页,默认执行):安装完成时
bin\幂等追加到用户 PATH(${WordAdd}去重 + WM_SETTINGCHANGE 广播);检测到 VSCode 时把打包内 .vsix 拷到$INSTDIR\vscode-ext\(终端手动code --install-extension <路径>安装);卸载时幂等清 PATH + kill tts-hub 残留进程。