diff options
| -rw-r--r-- | src/features/tabs/ui/TabBar.svelte | 2 | ||||
| -rw-r--r-- | src/features/workspaces/ui/WorkspaceCard.svelte | 10 | ||||
| -rw-r--r-- | src/features/workspaces/ui/WorkspaceCard.test.ts | 12 |
3 files changed, 10 insertions, 14 deletions
diff --git a/src/features/tabs/ui/TabBar.svelte b/src/features/tabs/ui/TabBar.svelte index f783412..7ec2101 100644 --- a/src/features/tabs/ui/TabBar.svelte +++ b/src/features/tabs/ui/TabBar.svelte @@ -135,7 +135,7 @@ class="min-w-0 flex-1 cursor-pointer truncate text-left" role="button" tabindex="-1" - title="Double-click to rename" + title={tab.title} ondblclick={(e) => { e.stopPropagation(); startRename(tab); diff --git a/src/features/workspaces/ui/WorkspaceCard.svelte b/src/features/workspaces/ui/WorkspaceCard.svelte index 4f846bf..ff8a8ea 100644 --- a/src/features/workspaces/ui/WorkspaceCard.svelte +++ b/src/features/workspaces/ui/WorkspaceCard.svelte @@ -98,10 +98,6 @@ await store.remove(ws.id); deleting = false; } - - function open(): void { - onNavigate(workspacePath(ws.id)); - } </script> <li class="flex flex-col gap-2 rounded-box border border-primary bg-primary/10 p-3"> @@ -195,10 +191,8 @@ <a class="btn" href={workspacePath(ws.id)} - onclick={(e) => { - e.preventDefault(); - open(); - }} + target="_blank" + rel="noopener noreferrer" > Open </a> diff --git a/src/features/workspaces/ui/WorkspaceCard.test.ts b/src/features/workspaces/ui/WorkspaceCard.test.ts index 48b12b3..f6ea432 100644 --- a/src/features/workspaces/ui/WorkspaceCard.test.ts +++ b/src/features/workspaces/ui/WorkspaceCard.test.ts @@ -52,7 +52,6 @@ function fakeStore() { describe("WorkspaceCard", () => { it("renders the title, slug, and an Open link", () => { const store = fakeStore() as unknown as WorkspaceStore; - const onNavigate = vi.fn(); render(WorkspaceCard, { props: { ws: fakeEntry(), store, onNavigate, computers: [] }, }); @@ -120,13 +119,16 @@ describe("WorkspaceCard", () => { expect(store.setDefaultCwd).toHaveBeenCalledWith("my-ws", null); }); - it("the Open link calls onNavigate with the workspace path (no full-card nav)", async () => { - const user = userEvent.setup(); + it("the Open link opens the workspace in a new browser tab (no same-tab navigation)", () => { const store = fakeStore() as unknown as WorkspaceStore; const onNavigate = vi.fn(); render(WorkspaceCard, { props: { ws: fakeEntry(), store, onNavigate, computers: [] } }); - await user.click(screen.getByRole("link", { name: "Open" })); - expect(onNavigate).toHaveBeenCalledWith("/my-ws"); + const open = screen.getByRole("link", { name: "Open" }); + // Native new-tab link: href points at the workspace, and target="_blank" + // opens it in a new browser tab rather than client-side navigating. + expect(open).toHaveAttribute("href", "/my-ws"); + expect(open).toHaveAttribute("target", "_blank"); + expect(open.getAttribute("rel") ?? "").toMatch(/noopener/); }); }); |
