diff --git a/artifacts/tx-os/src/components/notes/folders-rail.tsx b/artifacts/tx-os/src/components/notes/folders-rail.tsx
index 97d41c5d..596d806b 100644
--- a/artifacts/tx-os/src/components/notes/folders-rail.tsx
+++ b/artifacts/tx-os/src/components/notes/folders-rail.tsx
@@ -6,6 +6,7 @@ import {
FolderPlus,
Inbox as InboxIcon,
Layers,
+ MoreVertical,
Pencil,
Trash2,
Check,
@@ -13,6 +14,12 @@ import {
} from "lucide-react";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu";
import {
type NoteFolder,
useCreateFolder,
@@ -334,51 +341,62 @@ export function FoldersRail({
{f.noteCount}
-
-
-
+
+
+
+
+
+
+ {
+ setEditingId(f.id);
+ setEditingName(f.name);
+ }}
+ data-testid={`folder-rename-${f.id}`}
+ >
+
+ {t("notes.folders.rename", "Rename folder")}
+
+ {
+ if (
+ confirm(
+ t(
+ "notes.folders.deleteConfirm",
+ "Delete this folder? Notes inside will move to Unfiled.",
+ ),
+ )
+ ) {
+ del.mutate(f.id, {
+ onSuccess: () => {
+ if (
+ selected.kind === "folder" &&
+ selected.id === f.id
+ ) {
+ onSelect({ kind: "all" });
+ }
+ },
+ });
+ }
+ }}
+ className="text-red-600 focus:text-red-600"
+ data-testid={`folder-delete-${f.id}`}
+ >
+
+ {t("notes.folders.delete", "Delete folder")}
+
+
+
),
diff --git a/artifacts/tx-os/tests/notes-folders.spec.mjs b/artifacts/tx-os/tests/notes-folders.spec.mjs
index 77e7e304..b8af2c56 100644
--- a/artifacts/tx-os/tests/notes-folders.spec.mjs
+++ b/artifacts/tx-os/tests/notes-folders.spec.mjs
@@ -253,7 +253,7 @@ test("create folder, drag note in, filter, move between folders, rename, delete"
).toHaveText(/^0$/);
// ---- Rename Projects -> "Work" ----
- await page.getByTestId(`folder-select-${projects.id}`).hover();
+ await page.getByTestId(`folder-menu-${projects.id}`).click();
await page.getByTestId(`folder-rename-${projects.id}`).click();
const renameInput = page.getByTestId(`folder-rename-input-${projects.id}`);
await renameInput.fill("Work");
@@ -293,7 +293,7 @@ test("create folder, drag note in, filter, move between folders, rename, delete"
r.status() >= 200 &&
r.status() < 300,
);
- await page.getByTestId(`folder-select-${personal.id}`).hover();
+ await page.getByTestId(`folder-menu-${personal.id}`).click();
await page.getByTestId(`folder-delete-${personal.id}`).click();
await deletePromise;
await expect(page.getByTestId(`folder-select-${personal.id}`)).toHaveCount(0);