diff --git a/PanTS-Demo/src/routes/UploadPage.tsx b/PanTS-Demo/src/routes/UploadPage.tsx
index 95e210b9..a4d41063 100644
--- a/PanTS-Demo/src/routes/UploadPage.tsx
+++ b/PanTS-Demo/src/routes/UploadPage.tsx
@@ -2850,7 +2850,10 @@ const UploadPage: React.FC = () => {
border: `1px solid ${color}`, borderRadius: "4px", padding: "2px 5px", flexShrink: 0,
}}>{text}
);
- const modelCards = MODEL_OPTIONS.map((m) => {
+ // "None" (view-only, no inference) is a real dropdown option but isn't
+ // a model to compare against the other three, so it's left out of the
+ // comparison grid.
+ const modelCards = MODEL_OPTIONS.filter((m) => m.id !== "None").map((m) => {
const isCurrent = currentModelId === m.id;
const locked = modelLocked(m.id);
return (
@@ -2869,7 +2872,7 @@ const UploadPage: React.FC = () => {
border: isCurrent ? "1.5px solid #002d72" : "1px solid rgba(0,0,0,0.08)",
boxShadow: isCurrent ? "0 6px 24px rgba(0,45,114,0.12)" : "0 1px 2px rgba(0,0,0,0.04)",
borderRadius: "16px", padding: "24px 20px", display: "flex", flexDirection: "column",
- cursor: "pointer", textAlign: "center", minWidth: 0,
+ cursor: "pointer", textAlign: "center", minWidth: 0, height: "100%",
transition: "border-color 0.15s, box-shadow 0.15s",
}}
>
@@ -2957,7 +2960,7 @@ const UploadPage: React.FC = () => {
{modelCards}
diff --git a/PanTS-Demo/src/test/modelComparisonCards.test.tsx b/PanTS-Demo/src/test/modelComparisonCards.test.tsx
index 89ab120d..3302874a 100644
--- a/PanTS-Demo/src/test/modelComparisonCards.test.tsx
+++ b/PanTS-Demo/src/test/modelComparisonCards.test.tsx
@@ -43,15 +43,16 @@ describe("model comparison cards", () => {
);
};
- it("shows an info card for every model before a choice is made", async () => {
+ it("shows an info card for every real model (not None) before a choice is made", async () => {
await renderPage();
await screen.findByText("Choose a model");
// The dropdown is closed, so each model's description text appears exactly
- // once - in its own comparison card.
+ // once - in its own comparison card. "None" (view-only) isn't a model to
+ // compare, so it has no card here even though it's still a dropdown option.
expect(screen.getByText(/Full abdominal organ segmentation/)).toBeInTheDocument();
expect(screen.getByText(/anatomically consistent/)).toBeInTheDocument();
expect(screen.getByText(/fast pancreatic lesion detection/)).toBeInTheDocument();
- expect(screen.getByText(/View only — files never leave your browser/)).toBeInTheDocument();
+ expect(screen.queryByText(/View only — files never leave your browser/)).not.toBeInTheDocument();
});
it("stays put after a pick and moves the Selected badge to the clicked card", async () => {