feat(skill): implement VS Code-style preview/pinned tab management

- Single-click file in tree opens in preview mode (temporary, replaceable)
- Double-click file opens in pinned mode (permanent)
- Preview tabs display with italic filename
- Editing content auto-converts preview tab to pinned
- Double-clicking preview tab header converts to pinned
- Only one preview tab can exist at a time
This commit is contained in:
yyh
2026-01-16 10:51:32 +08:00
parent 3dea5adf5c
commit a30fb5909b
6 changed files with 85 additions and 23 deletions

View File

@ -36,13 +36,19 @@ const TreeNode = ({ node, style, dragHandle }: NodeRendererProps<TreeNodeData>)
const handleClick = (e: React.MouseEvent) => {
e.stopPropagation()
node.handleClick(e)
node.select()
if (isFolder)
node.toggle()
else
storeApi.getState().openTab(node.data.id, { pinned: false })
}
const handleDoubleClick = (e: React.MouseEvent) => {
e.stopPropagation()
if (!isFolder)
node.activate()
if (isFolder)
node.toggle()
else
storeApi.getState().openTab(node.data.id, { pinned: true })
}
const handleToggle = (e: React.MouseEvent) => {
@ -72,9 +78,9 @@ const TreeNode = ({ node, style, dragHandle }: NodeRendererProps<TreeNodeData>)
if (isFolder)
node.toggle()
else
node.activate()
storeApi.getState().openTab(node.data.id, { pinned: true })
}
}, [isFolder, node])
}, [isFolder, node, storeApi])
return (
<div