diff --git a/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx
index 0882e1f..5b6e7a9 100644
--- a/app/components/workbench/FileTree.tsx
+++ b/app/components/workbench/FileTree.tsx
@@ -2,6 +2,7 @@ import { memo, useEffect, useMemo, useState, type ReactNode } from 'react';
import type { FileMap } from '~/lib/stores/files';
import { classNames } from '~/utils/classNames';
import { createScopedLogger, renderLogger } from '~/utils/logger';
+import * as ContextMenu from '@radix-ui/react-context-menu';
const logger = createScopedLogger('FileTree');
@@ -159,23 +160,65 @@ interface FolderProps {
onClick: () => void;
}
-function Folder({ folder: { depth, name }, collapsed, selected = false, onClick }: FolderProps) {
+interface FolderContextMenuProps {
+ children: ReactNode;
+}
+
+function ContextMenuItem({ children }: { children: ReactNode }) {
return (
-
- {name}
-
+
+
+ {children}
+
+ );
+}
+
+function FolderContextMenu({ children }: FolderContextMenuProps) {
+ return (
+
+ {children}
+
+
+
+ New file...
+ New folder...
+
+
+ Copy path
+ Copy relative path
+
+
+ Rename...
+ Delete
+
+
+
+
+ );
+}
+
+function Folder({ folder, collapsed, selected = false, onClick }: FolderProps) {
+ return (
+
+
+ {folder.name}
+
+
);
}
diff --git a/package.json b/package.json
index 15f4d99..6463c96 100644
--- a/package.json
+++ b/package.json
@@ -57,6 +57,7 @@
"@octokit/rest": "^21.0.2",
"@octokit/types": "^13.6.2",
"@openrouter/ai-sdk-provider": "^0.0.5",
+ "@radix-ui/react-context-menu": "^2.2.2",
"@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-dropdown-menu": "^2.1.2",
"@radix-ui/react-separator": "^1.1.0",