thzxx
073978d3ca
feat: v0.6.2 — sqlark 0.7.4 升级(KVStore) + 14 项缺陷修复 + 多文件搜索
...
- chore: 升级 @metona-team/metona-sqlark 0.4.4 → 0.7.4,存储后端迁移
KVStore 引擎(内存索引+快照/日志,OPFS 落盘,jsdom 回退 memory),
启动时自动删除旧 IndexedDB 库(aria-MarkLiteV2 / Dexie MarkLite),
不做向下兼容
- fix: 保存竞态 — 快照比对后才清 isModified,防止保存期间的新输入被
误清标记导致永不落盘(自动保存与手动保存均修复)
- fix: 另存为后标签重绑新路径(此前 Ctrl+S/自动保存仍写回旧文件),
并同步最近文件与快照持久化
- fix: tabSwitched 只依赖活动文件路径(此前每次击键都触发 IPC 并
重启主进程文件 watcher)
- fix: 主进程关闭兜底超时 5s→12s(长于 confirm 10s,防强杀丢编辑)
- fix: 外部修改检测覆盖非活动标签,banner 显示文件名,
标签有未保存修改时显式提示不再静默
- fix: 导入备份后 flush + closeDatabase 再 reload(防 OPFS 未落盘丢数据),
导入整体事务原子化(防半导入状态)
- fix: 文档大纲跳过代码块内标题;切换标签恢复光标位置
- fix: 首次启动主题跟随系统偏好(settings 无记录时 load 返回 null)
- fix: watcher error 恢复时重置 isSelfWriting,防外部修改通知被永久吞掉
- fix: 打开失败路径(最近文件/文件树/打开对话框)显式提示
- fix: 保存时保留原文件编码(UTF-16 LE/BE BOM 同编码写回)
- feat: 多文件搜索 — dir:search IPC + SearchPanel 弹层 + Ctrl+Shift+F,
文件夹内递归搜索(大小写/正则,结果定位到行)
- feat: 标签恢复时与磁盘 mtime 比对,自动同步磁盘最新内容
- test: 新增 outlineUtils(6) / searchInDir(7) / updateTabFilePath(2) 测试
- docs: README/DESIGN 同步 kv 后端与版本号 v0.6.2
2026-08-15 21:18:05 +08:00
thzxx
bbaea2df3e
docs: 更新关于弹框与 README(移除状态栏、依赖版本 0.4.1/0.4.4)
2026-08-09 22:07:15 +08:00
thzxx
ee5f35177e
release: v0.6.0 — 内置解析器迁移 / Toast 全面接入 / Sqlark 深度集成
...
- 渲染管线迁移至 MetonaEditor 内置解析器,移除 unified/rehype 全家桶(9 个依赖)
- 修复相对路径图片修复的目录前缀碰撞与路径解析 bug
- ConfirmDialog/useConfirm/LoadingSpinner/useDocStats 移除,改用 MeToast.confirm/loading/promise
- 新增状态栏(字数/行数/阅读时间/光标位置)、Zen 模式、数据备份导出导入
- Sqlark: 版本化迁移(addMigration/migrateTo)、subscribe 表变更、备份 exportAll/importTable
- 数据库损坏自愈:异常退出残留残缺 SSTable 导致打开失败时自动重建
- 大纲导航改用 scrollToLine 官方 API
- 修复 rollup 平台包互删(postinstall 自动补齐)+ 集成测试(fake-indexeddb)
2026-08-09 16:50:06 +08:00
thzxx
20eb39efc5
release: v0.5.0 — 升级 MetonaEditor 0.4.0 / MetonaToast 0.5.0,数据库迁移 MetonaSqlark 0.4.1
...
- 编辑器升级 0.4.0:TypeScript 全模块重构、启用浮动格式工具栏
- 通知升级 0.5.0:钩子系统、新增动画
- 移除 Dexie.js,迁移至 MetonaSqlark 0.4.1(AriaEngine:LSM-Tree + WAL + MVCC)
- 数据库更换为 MarkLiteV2,旧 Dexie 数据放弃
- 修复 Editor 组件无条件重渲染(getActiveTab 返回新引用)
- 更新关于弹框、README、DESIGN 文档
2026-08-09 15:45:36 +08:00
thzxx
8bbbb7ff70
chore: 锁定 MetonaEditor 版本为 0.1.14
...
- package.json: ^0.1.10 → 0.1.14 精确锁定
- DESIGN.md: 三处 v0.1.3 → v0.1.14 同步更新
- README.md: 技术栈表格版本号同步
2026-07-24 20:59:27 +08:00
thzxx
1dd22be0a8
release: v0.4.3 — 版本号更新与预览区文本选择修复
...
- 版本号从 0.4.2 升级至 0.4.3
- 修复预览区内容无法鼠标拖拽选择/复制的问题
- 根因:html/body 上的 user-select: none 级联到预览面板
- 修复:为 .me-preview 及其子元素恢复 user-select: text
2026-07-24 20:50:59 +08:00
thzxx
20b6d03617
release: v0.4.2 — MetonaToast 0.1.2 降级与版本号更新
...
- chore: @metona-team/metona-toast 2.0.1 -> 0.1.2
- chore: 应用版本号 0.4.1 -> 0.4.2
2026-07-24 15:06:21 +08:00
thzxx
7bd625b9ce
release: v0.4.1 — MetonaEditor 0.1.10 升级与三主题系统
...
- chore: 升级 @metona-team/metona-editor 0.1.3 → 0.1.10
- feat: 三主题系统(亮色/暗色/暖色),循环切换
- feat: 应用颜色自动同步编辑器主题(MeEditor.themes.exportCSSVars)
- feat: 启用编辑器新功能(lineNumbers/autoBrackets/readOnly/autofocus/exportTool)
- refactor: 主题从 boolean darkMode 重构为 ThemeMode 枚举
- refactor: 插件注册改用字符串数组(与 demo 一致)
- refactor: 主题同步从手动 CSS 覆写改为 editor.setTheme() 实例 API
- refactor: Ctrl+S 双通道(编辑器 onSave + 全局兜底)+ 防重入锁
- style: 移除 variables.css 中硬编码 .dark 色值,改为 JS 动态驱动
- test: 更新 editorStore 测试覆盖新的 themeMode/cycleTheme
2026-07-24 13:58:37 +08:00
thzxx
05e5667e48
release: v0.4.0 — MetonaEditor 集成与架构重构
...
feat(editor): 将 Milkdown/ProseMirror 替换为 @metona-team/metona-editor v0.1.3
- 三模式视图 (edit/split/preview) 由编辑器内置工具栏切换
- searchReplace + imagePaste 预设插件
- unified/rehype 渲染管线通过 render 钩子集成
- 主题双向同步 (应用暗色模式 ↔ 编辑器主题)
feat(toast): metona-toast 迁移为 @metona-team/metona-toast v2.0.1
refactor: 删除冗余组件与代码
- 移除 SourceEditor、Preview、SearchReplace、EditorToolbar、useMilkdown
- 移除 StatusBar 组件及状态栏扩展架构(编辑器内置底栏替代)
- 移除 useSettings、useStatusBarItem、useStatusBarItems、statusBarStore
- 移除 EditMode/PreviewMode/SourceMode 图标
refactor(ui): 简化布局
- 工具栏移除模式切换按钮,新增自动保存开关
- useKeyboard 移除 Ctrl+1/2/3/B/I 快捷键
- Editor 三模式统一由 MetonaEditor 容器渲染
chore: 版本号 v0.3.13 → v0.4.0
docs: 全面更新 README/DESIGN/CONTRIBUTING/DEVSETUP
2026-07-23 22:55:45 +08:00
thzxx
43b0778849
release: v0.3.13 — MeToast 集成与全面质量修复
...
- 集成 MetonaToast v2.0.0 替换自研 Toast 组件(右上角、进度条、自动关闭、主题联动)
- 修复 sidebar resize 未持久化到 IndexedDB
- 修复 Ctrl+Tab MRU 切换逻辑与文档不一致
- 完善 WYSIWYG 模式标签切换选区恢复
- 清理死代码(useActiveHeading observerRef、旧 Toast 样式、重复滚动条样式、SearchReplace 重复检查)
- 同步 DESIGN.md / docs 文档(CodeMirror→Milkdown、stores 计数、editorStore 字段)
- 新增 .npmrc.example 模板
- 更新关于对话框与文档远程地址为 Gitea
- 版本号 0.3.12 → 0.3.13
2026-07-22 15:55:45 +08:00
thzxx
0940c2f5c6
fix: resolve all TS errors, ESLint warnings, and npm warnings bump to v0.3.12
...
- Pin all @milkdown/* packages to exact 7.21.1, add phantom-dep plugins as direct deps
- Fix TextSelection.create type error in useMilkdown.ts
- Fix Backspace auto-pair dead-code bug (unreachable due to PAIRS check order)
- Extract parseHeadings/Heading to outlineUtils.ts (react-refresh fix)
- Extract StatusBar item components to StatusBarItems.tsx (react-refresh fix)
- Configure npm allowScripts for electron and esbuild postinstall
- Update QUALITY_REVIEW_REPORT.json with all fixes applied
- Bump version to 0.3.12
2026-07-06 10:51:39 +08:00
thzxx
f707b5c7ee
chore: bump version to 0.3.11 — 状态栏扩展点架构
2026-06-23 11:36:46 +08:00
thzxx
b65e34e288
v0.3.10: 全面优化增强 — 17项Bug修复/稳定性/功能改进
...
P0 致命Bug修复:
- A1: openFolderDialog 类型/运行时崩溃(文件夹打开功能完全失效)
- A2: SourceEditor 受控textarea手动改DOM反模式
- A3: tabStore.updateTabContent 内容相同时误标isModified
死代码清理:
- B1: 删除menu:*/save/as/viewMode 三个永不触发的IPC通道
健壮性修复:
- E1: rehypeFixImages 路径规范化+防越界加固
- E2: getFileName 尾斜杠返回正确文件名
- E3: EditorToolbar 行内代码按钮改用toggleInlineCodeCommand
- E4: ErrorBoundary 内联样式抽为CSS类
功能增强:
- D1: 标签页拖拽排序(tabStore.moveTab + TabBar DnD + CSS)
- D2: Milkdown自动配对括号/引号(ProseMirror插件)
- D3: 状态栏自动保存开关可点击
- D4: 文档大纲活跃标题高亮(useActiveHeading hook)
- D5: 关闭窗口前flush防抖数据(flushSaveToDB)
- D6: 搜索替换支持正则表达式
类型/架构:
- C2: preload类型集中定义(ElectronAPI契约)
- __pycache__ typo修复
文档/版本:
- README/DESIGN同步为Milkdown + v0.3.10
- 项目结构树/技术栈/快捷键表更新
验证: typecheck(仅7预存), lint✅ , test 96/96, vite build✅
2026-06-23 10:47:45 +08:00
thzxx
c34a843d5c
v0.3.6: 修复文档大纲导航Bug + 新增自动保存功能
...
Bug修复:
- 文档大纲点击标题未定位到编辑器内容 (P0)
- 根因: raw markdown字符偏移 ≠ ProseMirror文档位置
- 改为通过 view.state.doc.descendants() 遍历节点树,
按 heading类型名 + level + textContent 三重匹配定位
新增功能:
- 自动保存 (2秒防抖), 仅对文件标签页生效
- 状态栏显示 自动/保存中... 指示器
版本同步: package.json / AboutDialog / README 均更新至 v0.3.6
2026-06-04 14:23:27 +08:00
thzxx
899d2b7914
v0.3.4: Bug修复+性能优化+文档大纲功能
...
🔴 Bug修复 (6):
- Sidebar反斜杠正则修复 (Windows路径规范化)
- FileWatcher文件删除后自动恢复监听
- SearchReplace replaceAll防过期匹配位置
- openFolderDialog null结果守卫
- 保存异常时空路径保护
- Markdown绝对路径图片拼接修复
🟡 性能优化:
- Editor切换标签时内容比较,相同跳过replaceAll
🔵 代码质量:
- 创建共享常量模块 src/shared/constants.ts,消除双副本
🎯 新增功能:
- 文档大纲 (Table of Contents) — 侧边栏标题导航
🔧 换行符统一: CRLF → LF
2026-06-04 13:24:23 +08:00
thzxx
efa7f61809
v0.3.3: 代码安全审查与Bug修复
...
CRITICAL 修复:
- 路径遍历防护绕过:validatePath在normalize()之后检查..,可被绕过读取任意文件
- 编辑器异步创建竞态条件:editor.create()完成后组件已卸载导致内存泄漏
- editor.create() Promise缺少.catch() → 未捕获的Promise拒绝
- handleOpenRecent空文件被跳过:result.content truthy检查阻塞空文件打开
MAJOR 修复:
- DIR_WATCH/TAB_SWITCHED IPC缺少路径校验,可被用于监视任意文件
- AboutDialog内联箭头函数使React.memo完全失效
- ConfirmDialog关闭时焦点恢复逻辑反转
- markdown.ts一刀切屏蔽..导致合法相对路径图片不显示
安全加固:
- 移除未被使用的path.normalize导入
- 所有文件操作IPC使用validatePath统一校验
- 编辑器初始化添加cancelled标志防止卸载后设置实例
验证: TypeScript零错误, ESLint零错误零警告, 78/78测试通过
2026-06-04 13:02:19 +08:00
thzxx
7a4e2b0a67
v0.2.0: 全面代码质量优化
...
- ESLint flat config + Prettier + EditorConfig
- Markdown处理器LRU缓存
- Zustand选择器优化减少重渲染
- CodeMirror Compartment主题热切换
- Preview防抖(150ms) + IndexedDB去抖(500ms)
- 组件拆分: App.tsx 310→104行, Sidebar.tsx 244→90行
- 统一错误处理 errorHandler.ts
- ConfirmDialog替代原生confirm
- LoadingSpinner加载状态
- Toast多条堆叠+类型区分
- 可访问性增强(ARIA属性、键盘导航)
- Vitest测试框架(78个测试用例)
- Git hooks(husky + lint-staged)
- 项目文档(README.md, CONTRIBUTING.md)
2026-06-03 22:13:32 +08:00
thzxx
3cecb0f9eb
v0.1.1: 多Agent代码质量审查+优化
...
- fix: useCodeMirror onChange闭包过期导致编辑器内容丢失同步(P0)
- feat: 全部组件添加displayName(React DevTools调试支持)
- feat: 全部组件添加ARIA属性(WCAG无障碍支持)
- fix: App异步操作添加try-catch错误边界
- fix: tabStore空catch块添加错误日志
- fix: sidebarStore Set→string[](Zustand可序列化)
- fix: useDragDrop readFile错误处理+空文件修复
- fix: useSettings/useTheme load()添加错误处理
- fix: useTheme toggleDarkMode引用优化
- chore: 版本号升级至0.1.1
2026-06-03 21:02:56 +08:00
thzxx
4a1c06320f
docs: 更新 README.md 和 DESIGN.md,删除 REFACTOR-PLAN.md
...
- README.md: 更新版本号 v0.1.0,添加 CodeMirror 6 说明,添加关于/Gitee按钮说明
- DESIGN.md: 重写为当前架构,移除重构计划相关内容,精简为实际代码结构
- 删除 REFACTOR-PLAN.md(重构已完成)
2026-05-28 15:53:14 +08:00
thzxx
9c92dcfa9d
refactor: 删除分屏功能 + 代码审计修复 + 安全加固
...
## 删除分屏功能
- 删除 ViewMode 'split' 类型,仅保留 editor/preview
- 删除 splitRatio 状态和 Resizer 组件
- 删除滚动同步模块 (scrollSync.ts, rehypeSourceLine.ts)
- 更新快捷键: Ctrl+1 编辑, Ctrl+2 预览
## Bug 修复
- 修复 Toast setTimeout 内存泄漏 (App.tsx)
- 修复 ModifiedBanner reload 更新错误标签 (改用 modifiedFilePath 匹配)
- 修复 FileWatcher error 未重置 isSelfWriting (file-watcher.ts)
- 修复另存为时未 stop watcher (ipc-handlers.ts)
## 死代码清理 (10 项)
- 删除 main/ipc-channels.ts (与 shared/ 重复)
- 删除 main/file-system.ts 未使用的 formatBytes
- 删除 constants.ts 6 个未使用常量
- 删除 fileUtils.ts 未使用的 formatBytes
- 删除 Icons.tsx 5 个未使用图标 (SplitView/ChevronUp/ChevronDown/X/ArrowUp/ArrowDown)
- 删除 useCodeMirror 未使用的 getContent/scrollTo
- 删除 TabBar 未使用的 menuRef
- 删除 Tab.scrollLeft/previewScrollTop 字段
- 删除 tabStore 未使用的 getTabIndex
- 删除 Toast/ModifiedBanner 多余 React import
## 安全加固
- ipc-handlers: 添加路径遍历防护 (validatePath 函数)
- preload: openExternal 仅允许 http/https 协议
- window-manager: 启用 sandbox: true
- preload: removeAllListeners 改为精确取消订阅 (返回 Unsubscribe 函数)
## 状态持久化
- activeTabId 持久化到 IndexedDB (刷新后恢复正确标签)
- sidebar 状态持久化到 IndexedDB (isVisible/sidebarWidth)
## 代码优化
- preload 使用 IPC_CHANNELS 常量替代硬编码字符串
- ipc-handlers _event 类型改为 IpcMainInvokeEvent
- settingsRepository 删除 splitRatio 字段
2026-05-28 13:42:11 +08:00
thzxx
5e1c89d280
refactor: v2.0 全量重构 — TypeScript + React + Zustand + IndexedDB
...
技术栈升级:
- JavaScript → TypeScript 5.6(全量类型安全)
- 原生 DOM → React 18(函数组件 + Hooks)
- 全局变量 → Zustand 5(轻量状态管理)
- localStorage → IndexedDB / Dexie.js 4(大容量、异步、索引)
- marked.js → unified / remark / rehype(插件化渲染管线)
- 无打包 → electron-vite 3(HMR 热更新)
- 纯 CSS → CSS Variables + CSS Modules
新增功能:
- 标签页状态 IndexedDB 持久化(关闭后可恢复)
- 最近打开文件列表
- 大文件虚拟化行号(>2000 行)
- 搜索高亮二分查找优化 O(log N)
- rehype-sanitize HTML 安全过滤
文件结构:
- 7 个源文件 → 51 个模块化文件
- src/main/ 主进程(6 文件)
- src/preload/ 预加载(1 文件)
- src/renderer/ 渲染进程(42 文件:组件/hooks/stores/lib/db/types/styles)
- src/shared/ 共享类型(2 文件)
构建验证:
- TypeScript 检查零错误
- electron-vite build 成功
- 产物:main 15kB + preload 2kB + renderer 1.5MB
2026-05-27 20:29:23 +08:00
thzxx
f6b247d364
Revert "release: v1.3.0 版本发布,更新文档与更新日志"
...
This reverts commit 2716a7d320 .
2026-05-21 06:17:16 +00:00
thzxx
2716a7d320
release: v1.3.0 版本发布,更新文档与更新日志
2026-05-21 13:44:32 +08:00
thzxx
2010f9dff5
docs: 同步 v1.2.0 文档(搜索替换 + 文件树)
2026-05-21 11:39:07 +08:00
thzxx
543af93802
feat: v1.2.0 搜索替换 + 文件树侧边栏
2026-05-21 11:37:02 +08:00
thzxx
fe478edfde
更新 README.md 和 DESIGN.md:多标签页、暗色主题、文件监听等 v1.1.0 功能
2026-05-18 13:35:23 +08:00
thzxx
76e03c721c
移除 README 副标题中的 emoji
2026-05-18 12:52:26 +08:00
thzxx
bfae531f07
Revert: 移除 README 标题中的 emoji
2026-05-18 12:50:14 +08:00
thzxx
14619fcf7d
README 标题添加 🪶 emoji
2026-05-18 12:49:11 +08:00
thzxx
95eec61054
docs: redesign README with detailed Chinese docs and icon
2026-05-18 10:54:46 +08:00
thzxx
fda3e5987d
Initial commit: MarkLite Markdown Reader
2026-05-18 10:40:11 +08:00