Muse
|
5f4a80fa01
|
feat(editor): 图片可选中换行、可调大小、右键链接针对图片(docs/31)
用户反馈三件:图片选不中没法在后面打字、右键不能改大小、图片的
超链接是空的。无头 Chrome 真实点击复现根因:点击能形成节点选区
但无任何视觉提示;图片选中时按 Enter 走 splitBlock,新段落插到
图片前面且选区仍停在图片上,接着打字会把图片替换掉。
- Enter 修复:捕获阶段 keydown 只接管图片选区,在图片所在文本块后
插空段落并移入光标(createParagraphNear 对行内节点无效,自己写);
选中图片加主题色描边。
- 大小:图片节点加 width 属性,带尺寸时序列化为 <img … width>、
否则标准语法;remark 插件把孤立 <img> 解析回图片节点(实体解码、
块级包段落),往返逐字一致;右键「调整图片大小…」弹窗 px/% 可调。
- 链接:右键图片的「超链接…」改为图片模式,预填包裹链接、提交对
图片节点挂/摘 link 标记([](href) 可往返)。
验证:vitest 148+2(新增 image-size/image-enter 共 12 例)、构建通过、
无头 Chrome 实测点击/Enter/打字全流程。
|
2026-11-15 09:41:24 +08:00 |
|
Muse
|
fb51276bc5
|
feat(s3): base64 内嵌图片纳入未上传检测与上传(用户指正)
初版把 data: 一律排除在「未上传」外——未落盘文档粘贴的图、导入
文档自带的图都是 data:image/...;base64 形态,批量/右键/状态栏全
检测不到。现 isUploadableImageSrc = 本地文件引用 ∪ base64 内嵌图:
base64 图走新命令 s3_upload_base64(总数 31 对账),前端剥前缀传
纯 base64、Rust 解码后与文件图共用同一条 PUT 通路;对象名按内容
哈希(FNV-1a)生成,同图同名幂等。未落盘文档粘贴图也挂上自动上传。
进度/报错展示名对 base64 图用其哈希名,不再漏出 base64 串。
验证:独立 crate 对模拟 S3 实测 base64 解码 PUT;vitest 136+2、构建通过。
|
2026-11-15 09:16:18 +08:00 |
|
Muse
|
b3c22fd597
|
fix(s3): 自定义访问域名回填地址补上存储桶一段(域名/桶/前缀/文件名)
MinIO 等自建服务 API 地址与访问地址分离,访问域名指向服务根,
原实现按 域名/前缀/文件名 拼、漏了桶名,文档里的地址会 404。
改为 域名/bucket/key;设置弹窗说明同步写清拼接规则,docs/30 补记。
同份 s3.rs 在独立 crate 对模拟 S3 复测通过(期望值已更新)。
|
2026-11-15 09:03:25 +08:00 |
|
Muse
|
967aada3ca
|
feat(s3): 图片上传到 S3——设置/自动上传/右键单张/批量上传(docs/30)
Rust 新增 s3.rs:SigV4 签名 + PUT Object(reqwest blocking+rustls,
签名对照 AWS 官方示例向量逐字一致;同份代码对本地模拟 S3 端到端
实测通过)。命令 s3_upload_image / s3_test_connection(总数 30 对账)。
配置存 UiState.s3(本机偏好),设置弹窗含测试连接与自动上传开关。
未上传判定 = src 非 http/data/blob 的本地引用;上传成功后同 src 的
图片节点一次事务回换为 S3 地址,本地 .assets 文件保留。
入口:粘贴/插入后自动上传回换(扑空重试一次、失败必提示);右键
命中本地图片多一项「上传到 S3」;文件菜单 + 状态栏批量上传带进度
弹窗。验证:vitest 133+2、tsc、构建通过,设置弹窗截图核对。
|
2026-11-15 08:38:47 +08:00 |
|
|
|
03c6c15439
|
chore(bundle): MSI 安装器切换为简体中文(zh-CN)
v0.1.0
|
2026-11-15 08:20:45 +08:00 |
|
|
|
8194345667
|
chore(bundle): NSIS 安装器切换为简体中文界面
|
2026-11-14 21:22:12 +08:00 |
|
|
|
499cec2273
|
chore(git): 忽略 IDE 配置与 vite 时间戳临时文件
|
2026-11-14 20:36:28 +08:00 |
|
Muse
|
cd64110bf8
|
chore(git-sync): 仓库地址输入框提示改为 github 示例地址
|
2026-11-14 20:29:02 +08:00 |
|
Muse
|
eb27e4ca2d
|
fix(dropdown): 展开层改 Portal + fixed 定位,逃出弹窗 overflow 裁剪
弹窗(.modal 带 overflow-y:auto)里的下拉展开层是 absolute 定位,
会被弹窗滚动盒裁掉下半截(Git 同步设置里实测被遮挡)。展开层改经
Portal 挂到 body、按触发钮 rect 用 fixed 定位:下方空间不足时
向上翻,maxHeight 按可用空间夹取;窗口 resize 时关闭。
useDismiss 泛化为可传多个 ref(触发器与 Portal 菜单两棵子树都算内)。
CSS 相应去掉 .dropdown-menu 的 absolute 定位(几何改由内联给出)。
验证:vitest 124+2(新增翻转几何断言:贴底触发钮翻上展开、
Portal 落点不在组件容器内);无头 Chromium 实测弹窗内下拉菜单
完整落在视口内、8 项全显、已逃出弹窗 DOM。
|
2026-11-14 20:17:51 +08:00 |
|
Muse
|
4fca4b7143
|
fix(rust): spawn_blocking 改走 tauri::async_runtime(工程无 tokio 依赖,Windows 构建 E0433)
6 处 tokio::task::spawn_blocking(Git 同步 4 处 + docs/29 资源
命令 2 处)全部换成工程既有写法 tauri::async_runtime::spawn_blocking;
全量核对源码外部 crate 前缀与 Cargo.toml 依赖一致。docs/29 补勘误。
|
2026-11-14 18:09:30 +08:00 |
|
Muse
|
c602573d8e
|
feat(save): 非 UTF-8 文档保存前转码提示(docs/29 D1,用户拍板)
GBK/UTF-16 文档保存会落盘为 UTF-8,原先无任何提示。saveTab 在
落盘前拦截:首次保存弹 EncodingConvertModal 说明将转 UTF-8,
按路径记已确认、本次运行只提示一次;自动保存不弹窗也不静默
转码,跳过等手动保存时提示;确认后以冻结快照 finishSave 收尾,
标签 encoding 如实更新为 UTF-8。弹窗渲染移到弹窗栈最后,避免
被关窗确认框盖住。vitest 123+2、构建通过。
|
2026-11-14 18:06:02 +08:00 |
|
Muse
|
fb2315a2f3
|
audit(docs/29): 全项目审计——修分片载入卸载截断高危、Sidebar memo 击穿与 Rust 资源/搜索/恢复上限等 20 余处
三线并行审计(编辑器核心/Rust 后端/服务与组件)+ App 编排层自审。
高危:分片载入未收尾时窗格卸载回写部分序列化,干净标签会被静默
截断——cleanup 补 muted 守卫,create 完成回调补取消守卫。
性能:gitSync/outline/收起回调稳定化保住 Sidebar memo;光标行列
rAF 合并;图片显示解析加缓存;导出图片并发解析;chunkLoader
偏移前缀表;围栏切点只认顶格(列表内嵌围栏等价回归实测)。
Rust:资源命令 async 化 + 32MB 上限;搜索 junction 越界校验;
recovery/workspace 条数与单条上限;启动坏库改名重建 + WAL;
validate 补 ext:: 黑名单与 ref 形态;init 先种 .gitignore
(含 .*.tmp-* 防崩溃残留被提交);游离 HEAD 不再猜分支。
验证:vitest 122+2、tsc、构建通过;Rust 过 rustfmt 解析、
validate 纯函数抽出实跑断言、命令对账 28=28。
|
2026-11-14 18:00:31 +08:00 |
|
Muse
|
527ca5ecc5
|
audit(docs/28): Git 同步审计二轮——修复选项注入校验/默认 .gitignore/设置弹窗陈旧守卫,4 低项记录待办
|
2026-11-14 17:40:09 +08:00 |
|
Muse
|
fadee6aacf
|
feat(git): 工作区 Git 同步——侧栏同步条、远程设置、定时同步(提交→变基拉取→推送,冲突停下不覆盖)(docs/27)
|
2026-11-14 17:35:41 +08:00 |
|
Muse
|
13271f11b6
|
fix(files): 未命名保存后刷新文件树;关闭 Tauri 拖放拦截放行侧栏 HTML5 拖拽(docs/25 回修)
|
2026-11-14 17:08:01 +08:00 |
|
Muse
|
c2958ebf8c
|
fix(tooltip): 气泡改用 :focus-visible 触发,鼠标点过按钮后挪开不再常驻
|
2026-11-14 17:03:11 +08:00 |
|
Muse
|
fc942a2b88
|
feat(icons): 应用图标定稿 B 版(米纸底大 M),Tauri 工具生成全套 ico/icns/png,含安装包图标
|
2026-11-14 16:54:46 +08:00 |
|
Muse
|
a64a8e84bd
|
fix(rust): reveal 命令插入时重复了 rename_path 的 tauri::command 属性(Windows 构建 E0428)
|
2026-11-14 16:47:08 +08:00 |
|
Muse
|
bfacdd5fbb
|
feat(menus): 编辑区自绘右键菜单 + 全局屏蔽 WebView 自带菜单(docs/26,含 docs/21 勘误)
|
2026-11-14 16:46:39 +08:00 |
|
Muse
|
bd6fcf3d45
|
style(search): 区分大小写改行内 [Aa] 开关(搜索按钮前),悬浮提示改自绘主题气泡(Tooltip 组件),撤掉行下胶囊
|
2026-11-14 16:40:51 +08:00 |
|
Muse
|
c2f69f9303
|
feat(files): 文件管理四项——侧栏拖拽移动、草稿跨窗口认领、未命名默认存根目录、打开所在位置(docs/25)
|
2026-11-14 16:36:36 +08:00 |
|
Muse
|
71825201a2
|
style(sidebar): 工作区搜索布局——实心搜索按钮改描边图标钮(搜索中转圈),原生复选框改胶囊开关
|
2026-11-14 16:19:52 +08:00 |
|
Muse
|
02090f7bf4
|
fix(app): 模式切换文本闪烁——epoch 重挂统一弃旧窗格回写,源码模式禁富文本窗格回写(docs/24)
|
2026-11-14 16:13:55 +08:00 |
|
Muse
|
c0f03e48dc
|
fix(editor): 新建文档自动聚焦 + 空文档占位 + 编辑面填满(docs/23)
新建/打开/恢复的标签就绪后自动把光标送进编辑器(弹窗/查找栏打开时
不抢);切回标签恢复锚点时一并聚焦。空文档首段显示「开始输入…」
占位。编辑面改为撑满窗格高度,下方空白处可点击落光标;host 显式
width:100% 防 flex 收缩窄缝。
|
2026-11-14 16:06:27 +08:00 |
|
Muse
|
d637f0a849
|
feat(theme): 主题整套联动——界面配色跟随文档主题(docs/22)
六套文档主题各加一组同气质的界面变量(data-doc-theme 驱动),选什么
主题,标题栏/菜单/侧边栏/状态栏就穿什么配色;界面跟随当前生效主题
(含单文档临时主题)。视图「深色主题」开关撤下,明暗并入主题;
data-theme 退化为 paperTone 派生信号供 Mermaid/源码编辑器读取。
|
2026-11-14 15:57:23 +08:00 |
|
Muse
|
e94034c9a8
|
fix(ui): 下拉菜单定位失效——CSS 插入锚点误中 .ws-search-box .input
插入 Dropdown 样式时以 '.input {' 为锚,实际命中的是
'.ws-search-box .input' 中的子串:插入的规则被拼成
'.ws-search-box .dropdown…' 后代选择器而整体失效,菜单虽生成却定位到
窗口底部之外(点击「没反应」);同时 .ws-search-box 前缀被吞已一并恢复。
教训:CSS 补丁锚点必须带足上下文,验证要量几何位置而非只查 DOM 存在。
|
2026-11-14 15:49:25 +08:00 |
|
Muse
|
9503350cf1
|
feat(ui): 自绘 Dropdown 替代原生 select(外观设置·临时主题)
全应用唯一的原生 select 换为自绘下拉组件:按钮对齐 .input 样式,
展开层沿用应用菜单语言(选中 --accent-weak、悬停 --hover),复用
useDismiss 点别处/Esc 关闭,支持上下键选行。tests/dropdown 1 例。
|
2026-11-14 15:39:44 +08:00 |
|
Muse
|
839b399a0d
|
style: 收起按钮与选中态统一(侧栏页签改 6px 圆角矩形、顶部菜单选中底色与侧栏一致)
收起按钮此前被 .sidebar-tabs button 的 flex:1 与胶囊圆角压过长成宽胶囊,
改为 26px 方形图标钮;侧栏页签选中效果对齐顶部菜单(6px 圆角),选中
背景色保持 --accent-weak;顶部菜单 .open 背景由 --hover 改为 --accent-weak,
与侧栏选中同色(悬停仍为 --hover)。
|
2026-11-14 15:25:27 +08:00 |
|
Muse
|
2d0843dd97
|
feat(editor): 大文档异步分片载入(docs/20)
>6 万字符文档按顶层结构安全切分:第一片立即建编辑器,其余片逐片解析
追加、片间让出主线程,窗格左下角显示载入进度;载入期间可切标签、编辑
其他文档。追加期静音回写、状态保持磁盘完整原文,载完一次性对齐。
分片与整篇解析的序列化等价有测试锁定(tests/chunk-load.test.ts)。
此前试做的已关闭重开缓存已按用户要求整笔撤回。
|
2026-11-14 15:16:23 +08:00 |
|
Muse
|
2d1cd3045a
|
feat(menus): 右键菜单与切换五项(docs/21)
屏蔽 WebView 自带右键菜单(输入框除外);新增 useDismiss 统一修复菜单
点别处不消失(标签菜单实测中招、文件树菜单一并加固);侧栏页签行加收起
按钮、收起后编辑区左上角有展开按钮;编辑区右下角加源码/即时渲染切换按钮;
标签与文件树右键补保存/另存为/新窗口打开/导出/打印(针对目标文件,
未打开先打开再执行)。vitest 97 通过 + 2 跳过。
|
2026-11-14 15:05:19 +08:00 |
|
Muse
|
41e0331dc9
|
docs: 布局调整说明(docs/19,侧边栏置顶与标签栏右移)
|
2026-11-14 14:46:59 +08:00 |
|
Muse
|
5bf89defd6
|
fix(layout): 侧边栏置顶,文档标签栏移到侧边栏右侧
TabBar 从菜单栏下方的整行移入主区右侧内容列(新增 .content-col 纵向容器),
侧边栏自此从菜单栏下方贯通到状态栏;隐藏侧边栏时标签栏占满整行。
打印规则同步覆盖新容器。无头浏览器实测:标签栏左边缘与侧边栏右边缘对齐
(250px)。vitest 87 通过 + 2 跳过,tsc 与构建通过。
|
2026-11-14 14:45:33 +08:00 |
|
Muse
|
4a527da655
|
feat(editor): 标签编辑器保活,切换立即呈现(docs/18)
最近用过的 6 个标签保持挂载、隐藏而非销毁,切回零解析零序列化、各窗格
保留滚动位置;超限窗格卸载走最终回写。引用改为按标签注册表 + 活动变化
effect 统一指向;外部重载 epoch 按标签粒度、抑制闸门对所有标签生效。
EditorPane 新增就绪状态:首次打开大文件显示「正在打开文档…」加载态。
打印守卫:只出活动窗格。vitest 87 通过 + 2 跳过(新增 pane-loading 1 例)。
|
2026-11-14 13:06:39 +08:00 |
|
Muse
|
f378c60363
|
fix(style): 文档区三处可读性/对齐修复
选区:文档区改用文档主题链接色 30% 混色,深色 UI 的深灰弱强调色不再压浅纸面;
代码块:pre 与 Mermaid 标题条改走 --doc-code-bg(此前只有行内代码被覆盖,
深色 UI 下 GitHub/Notion/经典纸张三主题代码块全是黑块);
侧边栏空状态(尚未打开文件夹+打开文件夹按钮)改为居中。
|
2026-11-14 13:06:39 +08:00 |
|
|
|
9113bea007
|
fix(export): Shiki 语言包改字面量动态导入,修复打包警告与加载风险
|
2026-11-14 12:34:47 +08:00 |
|
Muse
|
dc78bb0e2a
|
fix(sidebar): 侧边栏四项反馈(docs/17)
空状态按钮对齐页签缩进;启动自动恢复上次工作区(prefs 存 lastWorkspace、
启动校验存在性);空文件夹展开显示「(空)」、文件夹行加粗(展开逻辑经
组件测试证实本就可用);新建泛化到任意文件夹:树头+文档/+文件夹、
文件夹右键在此新建文档/文件夹。vitest 86 通过 + 2 跳过。
|
2026-11-14 12:27:27 +08:00 |
|
Muse
|
b6acbf6f30
|
fix(image): 编辑区相对路径图片显示解析(docs/16)
粘贴/插入的图片落盘与相对引用本身没问题,但编辑区从未解析相对路径:
页面在应用源下按相对路径取图必 404、只剩裂图。新增 image NodeView,
仅显示层把本地图片按文档目录归一化后经 read_file_base64 读成 data URL;
文档内容不变,Web 模式不启用。vitest 83 通过 + 2 跳过。
|
2026-11-14 12:17:37 +08:00 |
|
Muse
|
2ddd12082e
|
fix(export): 相对导出三道保险(E3 三轮)
未保存文档禁用相对模式并说明原因;保存对话框默认打开到文档所在
文件夹;导出后按 statFile 核查正文图片在文档旁是否存在,缺失弹窗报数,
不再静默裂图。
|
2026-11-14 11:55:31 +08:00 |
|
Muse
|
a38409662c
|
fix(ui): 恢复弹窗丢弃按钮样式 + 标题栏窗口图标统一
丢弃按钮是裸按钮(.recovery-actions 只写了布局),补标准次按钮样式;
标题栏最小化/最大化/关闭原用文字字形(—/□/×)天然大小不一,
换成统一 10×10 画布、1px 线宽的内联 SVG,按钮加居中对齐。
|
2026-11-14 11:48:15 +08:00 |
|
Muse
|
e8701d4eeb
|
test(export): Mermaid 导出管线桩渲染回归(替换与 PNG 兜底)
jsdom 跑不了 mermaid.render(缺 SVG 布局 API),用 vi.mock 桩验证剪贴板版
Mermaid 被替换为渲染结果而非代码块;全量 80 通过 + 2 跳过。
|
2026-11-14 11:23:38 +08:00 |
|
Muse
|
b2d36b7397
|
fix(acceptance-r2): 二轮验收 4 项回修(docs/15)
C5 粘贴:handleDOMEvents.paste 前置拦截无 HTML/无文件的多行纯文本按段落
插入(真机菜单粘贴走 execCommand 兜底、与 Ctrl+V 同中 clipboard 插件的
Markdown 解析);插入改开放 Slice,消除段中空段。
E3 相对导出:先选保存位置,再按导出目录重写图片相对路径。
E4 复制为 HTML:剪贴板变体公式只留 MathML、Mermaid 栅格化 PNG。
E6 HTML 导入:DOM 预处理剥 head/脚本/SVG、自家 KaTeX 还原 $ 源码、
GFM 插件加载失败降级。vitest 79 通过 + 2 跳过。
|
2026-11-14 11:17:12 +08:00 |
|
Muse
|
9bd3f3de97
|
fix(acceptance): 首轮 Windows 验收 7 项缺陷回修(docs/14)
P0 快捷键让行判定补 recoveryDismissed,点过「稍后再说」不再全失效;
P1 冲突重载加 force 绕过防竞态守卫;路径分隔符 joinPath 原生化 +
samePath 归一化比较;.source-cm 补文档字色;
P2 turndown 启用 GFM 插件(HTML 导入不再丢表格);任务复选框去掉
click preventDefault(浏览器激活撤销覆盖视觉同步);
P3 新增 syncEditorContent:干净标签的挂载/卸载序列化回写同步基线,
切标签不再误标未保存。vitest 74 通过 + 2 跳过。
|
2026-11-14 11:08:46 +08:00 |
|
|
|
947154892c
|
fix(tauri): 补窗口销毁权限,修复标题栏关闭按钮无效
|
2026-11-14 10:52:56 +08:00 |
|
Muse
|
43cd4b95dd
|
docs: 阶段 7 Windows 真机验收清单(docs/13)
|
2026-11-13 23:38:41 +08:00 |
|
Muse
|
db81e60d71
|
fix(audit): 审计问题全量修复(docs/12)
高危逻辑 A1-A10:saved 写盘快照、重载卸载回写闸门与期望值校验、
?file 无条件打开、偏好读后才写+防抖、depth=0 守卫、查找命中随编辑
作废、自动保存避让冲突标签、搜索防链接环、重 IO 命令异步化+上限。
样式:--panel 更正为 --bg-panel、新增 .input 基础样式、文档主题
纸面/字色成对、打印隐藏清单补全、paperTone 驱动源码明暗。
性能:状态栏/大纲按正文 memo、大纲延后提取、Sidebar memo、专注
装饰映射复用、查找防抖、图片 base64 过 IPC。
中危一批:关窗落盘后放行、回收站去向明示、GBK 搜索、create_new
落盘、Mermaid 渲染代次守卫、多行粘贴分段等。
回归:新增 tabkey/audit-fix 集成测试(E1 Tab 抢先定性排除),
vitest 71 通过 + 2 跳过。
|
2026-11-13 23:34:19 +08:00 |
|
Muse
|
78fbf6a91b
|
docs: 阶段 6 后全量代码审计报告(逻辑/样式/性能,docs/11)
|
2026-11-13 23:34:19 +08:00 |
|
Muse
|
c251903fa2
|
feat(stage6): 专注/打字机模式、查找替换、全文搜索 UI、快捷键中心、多窗口
|
2026-11-13 23:09:32 +08:00 |
|
Muse
|
db158fa4da
|
feat(stage6): Rust 工作区全文搜索模块与多窗口能力配置
|
2026-11-13 23:09:32 +08:00 |
|
Muse
|
83cedbc5f3
|
feat(stage5): 文档主题系统/自定义 CSS/导出 HTML/打印/导入 HTML 与 Word
|
2026-11-13 22:58:35 +08:00 |
|
Muse
|
c8fc67104b
|
feat(stage5): Rust read_file_base64 导出辅助命令
|
2026-11-13 22:58:35 +08:00 |
|