diff options
| author | Adam <[email protected]> | 2025-09-26 11:41:15 -0500 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-10-02 08:34:01 -0500 |
| commit | cc955098cd8714bcf1cc91e6a4a6625e38710b05 (patch) | |
| tree | 49adeef653a6705c37b2e06cde1b5066765eeed3 /packages/app/src/components/file-tree.tsx | |
| parent | 8699e896e604762d45df7d4e1b3433e69575e9ab (diff) | |
| download | opencode-cc955098cd8714bcf1cc91e6a4a6625e38710b05.tar.gz opencode-cc955098cd8714bcf1cc91e6a4a6625e38710b05.zip | |
wip: desktop work
Diffstat (limited to 'packages/app/src/components/file-tree.tsx')
| -rw-r--r-- | packages/app/src/components/file-tree.tsx | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index 12d357dd8..d31255ced 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -23,6 +23,30 @@ export default function FileTree(props: { [props.nodeClass ?? ""]: !!props.nodeClass, }} style={`padding-left: ${level * 10}px`} + draggable={true} + onDragStart={(e: any) => { + const evt = e as globalThis.DragEvent + evt.dataTransfer!.effectAllowed = "copy" + evt.dataTransfer!.setData("text/plain", `file:${p.node.path}`) + + // Create custom drag image without margins + const dragImage = document.createElement("div") + dragImage.className = + "flex items-center gap-x-2 px-2 py-1 bg-background-element rounded-md border border-border-1" + dragImage.style.position = "absolute" + dragImage.style.top = "-1000px" + + // Copy only the icon and text content without padding + const icon = e.currentTarget.querySelector("svg") + const text = e.currentTarget.querySelector("span") + if (icon && text) { + dragImage.innerHTML = icon.outerHTML + text.outerHTML + } + + document.body.appendChild(dragImage) + evt.dataTransfer!.setDragImage(dragImage, 0, 12) + setTimeout(() => document.body.removeChild(dragImage), 0) + }} {...p} > {p.children} @@ -51,6 +75,7 @@ export default function FileTree(props: { <Switch> <Match when={node.type === "directory"}> <Collapsible + class="w-full" forceMount={false} open={local.file.node(node.path)?.expanded} onOpenChange={(open) => (open ? local.file.expand(node.path) : local.file.collapse(node.path))} |
