Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/development/platform-parity-matrix.csv
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ terminal-sessions,工作台,终端,多会话与标签,已实现,待验证,已实
terminal-interaction,工作台,终端,复制粘贴、搜索与调整大小,已实现,待验证,已实现,待验证,Terminal,验证复制粘贴、终端搜索、调整面板大小和高频输入不丢失。,,macos/Sources/Lithe/Views/Terminal,windows/tauri/src/features/terminal
terminal-long-command-input,工作台,终端,Windows Shell 超长命令输入,平台专属,不适用,已实现,待验证,Terminal,在 Windows cmd.exe 和 PowerShell 中执行超过 Shell 单行限制的 IDE 多行命令,确认脚本执行、原始命令内容和终端关闭后的临时文件清理。,仅在 IDE 后端为 cmd.exe/PowerShell 的超长多行文本创建一次性脚本;不修改系统 Shell 配置。,macos/Sources/Lithe/Views/Terminal,windows/tauri/crates/terminal/src/connection.rs; windows/tauri/src-tauri/src/terminal.rs
markdown-rendering,编辑器,Markdown,Markdown 预览与富文本渲染,已实现,待验证,已实现,待验证,Editor,使用代码高亮、表格、Mermaid、链接和相对路径 fixture 对比渲染结果。,,macos/Sources/Lithe/Views/Editor/MarkdownPreviewView.swift; macos/Sources/Lithe/Core/Ports/MarkdownRendering.swift,windows/tauri/src/features/editor/markdown
markdown-preview-outline,编辑器,Markdown,Markdown 预览目录默认展开、全高滚动与标题跳转,已实现,已验证,未实现,不适用,Editor,在 macOS 原生 Lithe 打开含 60 节标题的 Markdown,验证默认展开、全高目录独立滚动、末尾标题跳转后保持展开、按钮与 Escape 收起;分栏中编辑保存及外部刷新保留折叠选择,删除全部标题隐藏目录,恢复标题保留展开偏好;检查短文档与无标题文档、宽预览正文避让和窄预览可收起。Windows 目录入口待实现。,,macos/Sources/Lithe/Resources/MarkdownPreview/preview.js; macos/Sources/Lithe/Resources/MarkdownPreview/preview.css,windows/tauri/src/features/editor/markdown/markdown-preview.tsx
markdown-images-links,编辑器,Markdown,图片导入与链接定位,已实现,待验证,已实现,待验证,Editor,验证本地图片、远程图片、相对链接和打开源文件行为。,,macos/Sources/Lithe/Services/Markdown; macos/Sources/Lithe/Platform/MacOS/MarkdownPreviewWebView.swift,windows/tauri/src/features/editor/markdown; windows/tauri/src/features/viewer
history-snapshots,工作台,本地历史,快照列表与 Diff,已实现,待验证,已实现,待验证,Local History,编辑同一文件多次,比较快照时间、内容 Diff 和文件范围。,,macos/Sources/Lithe/Views/History; macos/Sources/Lithe/Services,windows/tauri/src/features/local-history
history-restore,工作台,本地历史,恢复、删除与持久化,已实现,待验证,已实现,待验证,Local History,验证恢复、删除、应用重启后持久化和失败回滚。,,macos/Sources/Lithe/Views/History,windows/tauri/src/features/local-history
Expand Down
9 changes: 5 additions & 4 deletions docs/development/platform-parity-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

- 最后复核:2026-09-29
- 盘点状态:initial-static-inventory(根据 macOS Views/Application/Services、Windows features/extensions 和共享契约的代码入口进行初版盘点;未替代真实运行验收。)
- 功能项:120
- macOS:实现:✅ 105 已实现,🟡 3 部分实现,❌ 7 未实现,🧩 5 平台专属;验证:✔️ 0 已验证,🔍 108 待验证,— 12 不适用
- Windows:实现:✅ 102 已实现,🟡 11 部分实现,❌ 5 未实现,🧩 2 平台专属;验证:✔️ 0 已验证,🔍 113 待验证,— 7 不适用
- 功能项:121
- macOS:实现:✅ 106 已实现,🟡 3 部分实现,❌ 7 未实现,🧩 5 平台专属;验证:✔️ 1 已验证,🔍 108 待验证,— 12 不适用
- Windows:实现:✅ 102 已实现,🟡 11 部分实现,❌ 6 未实现,🧩 2 平台专属;验证:✔️ 0 已验证,🔍 113 待验证,— 8 不适用

## 实现状态定义

Expand Down Expand Up @@ -72,7 +72,7 @@
</details>

<details>
<summary><strong>编辑器</strong> · 19 个能力点</summary>
<summary><strong>编辑器</strong> · 20 个能力点</summary>

| 功能组 | 能力点 | macOS | Windows | 负责人 | 验证方式 | 备注 |
| --- | --- | --- | --- | --- | --- | --- |
Expand All @@ -84,6 +84,7 @@
| 文本编辑 | **LSP 语义高亮**<br><sub>editor-semantic-highlighting</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`macos/Sources/Lithe/Models/AppModel/AppModel+LanguageEditing.swift`、`macos/Sources/LitheLanguageIntelligenceModule/Runtime/LanguageServerSession.swift`、`frontend/editor/src/semantic-tokens.ts`</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`windows/tauri/src/platform/lsp-core-adapter.ts`、`windows/tauri/src/features/editor/lsp/lsp-client.ts`、`windows/tauri/src/features/editor/engines/monaco/semantic-token-provider.ts`、`windows/tauri/src/features/editor/engines/monaco/semantic-token-provider.test.ts`、`windows/tauri/src/platform/lsp-core-adapter.test.ts`</sub> | Editor / Language Tooling | 打开普通 Java 文件并等待 JDTLS 就绪,开启语义高亮,确认字段、方法等按协商图例上色;编辑、切换、关闭文档和重连服务器后不应用旧结果;服务器 refresh 后重新请求;关闭设置或大文件降级时保留基础语法高亮。 | Windows 复用 Core semanticTokens 和共享 fixture,修复 #675;Linux 上的适配器与模型测试不替代 Windows WebView2/JDTLS 实机验收。 |
| 文本编辑 | **多行标签与标签导航**<br><sub>editor-multiline-tabs</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`macos/Sources/Lithe/Views/Editor`</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`windows/tauri/src/features/tabs`</sub> | Editor | 打开足够多文件触发多行标签,确认滚动、切换、关闭和活动文件保持。 | |
| Markdown | **Markdown 预览与富文本渲染**<br><sub>markdown-rendering</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`macos/Sources/Lithe/Views/Editor/MarkdownPreviewView.swift`、`macos/Sources/Lithe/Core/Ports/MarkdownRendering.swift`</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`windows/tauri/src/features/editor/markdown`</sub> | Editor | 使用代码高亮、表格、Mermaid、链接和相对路径 fixture 对比渲染结果。 | |
| Markdown | **Markdown 预览目录默认展开、全高滚动与标题跳转**<br><sub>markdown-preview-outline</sub> | ✅ 已实现<br><sub>✔️ 已验证</sub><br><sub>`macos/Sources/Lithe/Resources/MarkdownPreview/preview.js`、`macos/Sources/Lithe/Resources/MarkdownPreview/preview.css`</sub> | ❌ 未实现<br><sub>— 不适用</sub><br><sub>`windows/tauri/src/features/editor/markdown/markdown-preview.tsx`</sub> | Editor | 在 macOS 原生 Lithe 打开含 60 节标题的 Markdown,验证默认展开、全高目录独立滚动、末尾标题跳转后保持展开、按钮与 Escape 收起;分栏中编辑保存及外部刷新保留折叠选择,删除全部标题隐藏目录,恢复标题保留展开偏好;检查短文档与无标题文档、宽预览正文避让和窄预览可收起。Windows 目录入口待实现。 | |
| Markdown | **图片导入与链接定位**<br><sub>markdown-images-links</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`macos/Sources/Lithe/Services/Markdown`、`macos/Sources/Lithe/Platform/MacOS/MarkdownPreviewWebView.swift`</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`windows/tauri/src/features/editor/markdown`、`windows/tauri/src/features/viewer`</sub> | Editor | 验证本地图片、远程图片、相对链接和打开源文件行为。 | |
| 代码结构 | **当前文件 Outline 与符号树**<br><sub>outline-symbols</sub> | 🟡 部分实现<br><sub>🔍 待验证</sub><br><sub>`macos/Sources/Lithe/Views/Language`、`macos/Sources/Lithe/Views/Search`</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`windows/tauri/src/features/outline`</sub> | Language Tooling | 使用 Java 文件验证符号树、展开折叠、排序和跳转;确认 macOS 是否提供同等独立 Outline 入口。 | |
| 代码结构 | **引用结果面板与引用跳转**<br><sub>references-pane</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`macos/Sources/Lithe/Views/Language/JavaReferencesView.swift`</sub> | ✅ 已实现<br><sub>🔍 待验证</sub><br><sub>`windows/tauri/src/features/references`</sub> | Language Tooling | 从符号发起引用查询,验证结果分组、文件定位、关闭和重新查询。 | |
Expand Down
8 changes: 6 additions & 2 deletions macos/Sources/Lithe/Resources/MarkdownPreview/preview.css
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ audio { width: min(100%, 520px); }
top: 52px;
right: 16px;
width: min(280px, calc(100vw - 32px));
max-height: min(66vh, 560px);
bottom: 16px;
overflow: auto;
padding: 12px 10px;
border: 1px solid var(--border);
Expand All @@ -309,6 +309,10 @@ audio { width: min(100%, 520px); }
.toc a[data-level="2"] { padding-left: 18px; }
.toc a[data-level="3"] { padding-left: 29px; color: var(--muted); }

@media (min-width: 681px) {
body.toc-open { padding-right: 312px; }
}

.image-viewer {
position: fixed;
z-index: 100;
Expand All @@ -333,5 +337,5 @@ audio { width: min(100%, 520px); }
@media (max-width: 440px) {
.markdown-body { padding: 22px 18px 54px; }
.toc-toggle { top: 10px; right: 10px; }
.toc { top: 46px; right: 10px; }
.toc { top: 46px; right: 10px; bottom: 10px; }
}
28 changes: 18 additions & 10 deletions macos/Sources/Lithe/Resources/MarkdownPreview/preview.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
let scrollCommandVersion = 0;
let suppressScrollReportsUntil = 0;
let scrollReportFrame = 0;
let tocExpanded = true;
let tocDocumentURL;

function setTheme(theme) {
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
Expand Down Expand Up @@ -172,24 +174,29 @@
link.addEventListener('click', event => {
event.preventDefault();
heading.scrollIntoView({ behavior: 'smooth', block: 'start' });
closeTOC();
});
tocList.append(link);
});

tocToggle.hidden = headings.length === 0;
if (headings.length === 0) closeTOC();
updateTOCVisibility();
}

function updateTOCVisibility() {
const visible = !tocToggle.hidden && tocExpanded;
toc.hidden = !visible;
tocToggle.setAttribute('aria-expanded', String(visible));
document.body.classList.toggle('toc-open', visible);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

closeTOC() now persists tocExpanded = false, but the Escape handler calls it even when the document currently has no headings and the TOC toggle is hidden. This means an unrelated Escape (for example, closing the image viewer) can overwrite the preserved expanded preference: open TOC → remove all headings → press Escape → restore headings now leaves the TOC collapsed. Could we only mutate the TOC preference here when !tocToggle.hidden (or otherwise distinguish “TOC unavailable” from an explicit user collapse)?

function closeTOC() {
toc.hidden = true;
tocToggle.setAttribute('aria-expanded', 'false');
tocExpanded = false;
updateTOCVisibility();
}

function toggleTOC() {
const opening = toc.hidden;
toc.hidden = !opening;
tocToggle.setAttribute('aria-expanded', String(opening));
tocExpanded = !tocExpanded;
updateTOCVisibility();
}

function closeImage() {
Expand Down Expand Up @@ -243,6 +250,10 @@
const version = ++renderVersion;
const initialScrollCommandVersion = scrollCommandVersion;
const scrollRatio = currentScrollRatio();
if (tocDocumentURL !== payload?.documentURL) {
tocDocumentURL = payload?.documentURL;
tocExpanded = true;
}
setTheme(payload?.appearance);
content.innerHTML = payload?.html || '';
rewriteLocalAssets();
Expand All @@ -263,9 +274,6 @@
event.stopPropagation();
toggleTOC();
});
document.addEventListener('click', event => {
if (!toc.hidden && !toc.contains(event.target) && event.target !== tocToggle) closeTOC();
});
viewer.addEventListener('click', event => {
if (event.target === viewer || event.target === imageClose) closeImage();
});
Expand Down
23 changes: 23 additions & 0 deletions shared/platform-feature-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -1822,6 +1822,29 @@
"owner": "Editor",
"verification": "使用代码高亮、表格、Mermaid、链接和相对路径 fixture 对比渲染结果。"
},
{
"id": "markdown-preview-outline",
"area": "编辑器",
"group": "Markdown",
"capability": "Markdown 预览目录默认展开、全高滚动与标题跳转",
"macos": {
"evidence": [
"macos/Sources/Lithe/Resources/MarkdownPreview/preview.js",
"macos/Sources/Lithe/Resources/MarkdownPreview/preview.css"
],
"implementationStatus": "implemented",
"verificationStatus": "verified"
},
"windows": {
"evidence": [
"windows/tauri/src/features/editor/markdown/markdown-preview.tsx"
],
"implementationStatus": "missing",
"verificationStatus": "not-applicable"
},
"owner": "Editor",
"verification": "在 macOS 原生 Lithe 打开含 60 节标题的 Markdown,验证默认展开、全高目录独立滚动、末尾标题跳转后保持展开、按钮与 Escape 收起;分栏中编辑保存及外部刷新保留折叠选择,删除全部标题隐藏目录,恢复标题保留展开偏好;检查短文档与无标题文档、宽预览正文避让和窄预览可收起。Windows 目录入口待实现。"
},
{
"id": "markdown-images-links",
"area": "编辑器",
Expand Down
Loading