Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion PanTS-Demo/src/liveRooms/liveRooms.css
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,6 @@
.lr-note-popover footer { display: flex; justify-content: space-between; gap: 12px; padding-top: 9px; border-top: 1px solid var(--lr-border); color: var(--lr-muted); font-family: var(--lr-mono); font-size: 9px; }
.lr-note-popover footer span:first-child { text-transform: capitalize; }

.vp-live-room-button { display: inline-flex; align-items: center; gap: 7px; color: var(--lr-primary); border-color: rgba(110, 168, 254, .35) !important; }
.vp-tool:disabled,
.vp-flyout__item:disabled { cursor: not-allowed; opacity: .42; }
.lr-room-ended { position: fixed; inset: 0; z-index: 30000; display: grid; place-items: center; padding: 24px; background: rgba(3, 8, 12, .88); backdrop-filter: blur(10px); }
Expand Down
51 changes: 22 additions & 29 deletions PanTS-Demo/src/routes/VisualizationPage.css
Original file line number Diff line number Diff line change
Expand Up @@ -475,38 +475,16 @@
opacity: 0.5;
}

/* Floating "Show toolbar" pill, shown only when the toolbar is hidden.
Labeled, not a bare icon square - an unlabeled gear floating alone in a
corner reads as an unexplained mystery button with only a tooltip to go
on. Anchored to the top-RIGHT corner of the screen, clear of every pane's
content and every pane's own top-left label (a fixed left-offset used to
land it in the middle of the axial pane's own CT image instead). */
/* Floating gear shown only when the toolbar is hidden, back in its original
top-left spot. Previously it overlapped the axial pane's own "AXIAL" label
(both wanted the same top-left corner) - instead of moving the gear, the
axial label is pushed down clear of it (see .vp-pane--axial::after below),
so the gear can stay exactly where it always was. */
.vp-floating-gear {
position: fixed;
top: 10px;
right: 14px;
top: 12px;
left: 14px;
z-index: 55;
display: flex;
align-items: center;
gap: 7px;
height: 34px;
padding: 0 14px 0 12px;
border-radius: 17px;
background: rgba(14, 15, 18, 0.82);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--vp-border);
color: var(--vp-text);
font-family: var(--vp-font);
font-size: 12px;
font-weight: 600;
letter-spacing: 0.01em;
cursor: pointer;
transition: background 0.15s, border-color 0.15s;
}
.vp-floating-gear:hover {
background: var(--vp-panel-strong);
border-color: var(--vp-border-strong);
}

/* Shaded volume-rendering target: Cornerstone owns the canvas inside. */
Expand Down Expand Up @@ -1059,6 +1037,21 @@
--pane-accent: #f43f5e;
}

/* The axial pane is always the top-left quadrant, the same corner the
floating gear (.vp-floating-gear) occupies while the toolbar is hidden -
rather than move the gear off its long-standing spot, push this one pane's
label + accent tick down below it instead, but only while the gear is
actually there (.toolbar-hidden on the root); with the toolbar visible
(the default) the axial label sits in its normal spot like every other
pane's. 58px clears the gear's 38px button (starting at top:12px) plus a
small gap. */
.toolbar-hidden .vp-pane--axial::after {
top: 58px;
}
.toolbar-hidden .vp-pane--axial::before {
top: 61px;
}

.vp-pane--sagittal {
--pane-accent: #eab308;
}
Expand Down
36 changes: 16 additions & 20 deletions PanTS-Demo/src/routes/VisualizationPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3629,7 +3629,7 @@ const aiAvailableOrgans = useMemo(() => {
return (
<div
ref={vpRootRef}
className={`VisualizationPage${showAISidebar ? " ai-panel-open" : ""}${showAnnotationToolbar ? " annotation-open" : ""}${liveRoom ? " is-live-room" : ""}${soloChallenge ? " is-solo-challenge" : ""}${quizPractice ? " is-quiz-practice" : ""}`}
className={`VisualizationPage${showAISidebar ? " ai-panel-open" : ""}${showAnnotationToolbar ? " annotation-open" : ""}${liveRoom ? " is-live-room" : ""}${soloChallenge ? " is-solo-challenge" : ""}${quizPractice ? " is-quiz-practice" : ""}${!showToolbar ? " toolbar-hidden" : ""}`}
onPointerDownCapture={(event) => {
if (!liveRoom?.followingId) return;
const target = event.target as HTMLElement;
Expand Down Expand Up @@ -3719,17 +3719,6 @@ const aiAvailableOrgans = useMemo(() => {
</span>
)}
</div>
{!liveRoom && params.caseId && (
<button
className="vp-tb-mini vp-live-room-button"
onClick={() => setShowLiveRoomCreate(true)}
aria-label="Start Live Room"
>
<IconUsersGroup size={17} />
<span>Live Room</span>
</button>
)}

<span className="vp-tb-divider" />

{/* Layout ▾ — view mode (MPR/Axial/Sag/Cor/3D) and, while in MPR, the
Expand Down Expand Up @@ -4441,23 +4430,30 @@ const aiAvailableOrgans = useMemo(() => {
</span>
</button>
)}
{!liveRoom && params.caseId && (
<button
type="button"
className="vp-tool"
onClick={() => setShowLiveRoomCreate(true)}
aria-label="Start Live Room"
>
<IconUsersGroup size={17} />
<span className="vp-tool__tip">Live Room</span>
</button>
)}
</div>
</div>
)}

{/* When the toolbar is hidden, a labeled pill reveals it - a bare icon
with no text floating alone in a corner reads as an unexplained
mystery button, so this pairs the gear with its own label instead
of relying on the tooltip alone. */}
{/* When the toolbar is hidden, a single floating gear reveals it. */}
{!showToolbar && (
<button
className="vp-floating-gear"
className="vp-floating-gear vp-iconbtn"
title="Show toolbar"
aria-label="Show toolbar"
aria-label="Toggle toolbar"
onClick={() => setShowToolbar(true)}
>
<IconSettings size={16} color="white" />
<span>Show toolbar</span>
<IconSettings size={20} color="white" />
</button>
)}

Expand Down
Loading