summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/file-tree.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-09-26 11:41:15 -0500
committerAdam <[email protected]>2025-10-02 08:34:01 -0500
commitcc955098cd8714bcf1cc91e6a4a6625e38710b05 (patch)
tree49adeef653a6705c37b2e06cde1b5066765eeed3 /packages/app/src/components/file-tree.tsx
parent8699e896e604762d45df7d4e1b3433e69575e9ab (diff)
downloadopencode-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.tsx25
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))}