summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/features/tabs/ui/TabBar.svelte2
-rw-r--r--src/features/workspaces/ui/WorkspaceCard.svelte10
-rw-r--r--src/features/workspaces/ui/WorkspaceCard.test.ts12
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/);
});
});