diff --git a/js/ui/galleryView.js b/js/ui/galleryView.js
index f677ffc..93215b5 100644
--- a/js/ui/galleryView.js
+++ b/js/ui/galleryView.js
@@ -45,6 +45,14 @@ function updateScrollTopVisibility() {
}
const scrollEl = getScrollContainer(cardStackEl);
if (scrollEl) {
+ const viewportEl = scrollEl.parentElement || galleryContainerEl;
+ if (viewportEl && scrollToTopBtnEl && scrollToTopBtnEl.parentNode !== viewportEl) {
+ if (window.getComputedStyle(viewportEl).position === "static") {
+ viewportEl.style.position = "relative";
+ }
+ viewportEl.appendChild(scrollToTopBtnEl);
+ }
+
if (scrollToTopBtnEl) {
scrollToTopBtnEl.style.display = scrollEl.scrollTop > 200 ? "flex" : "none";
}
@@ -636,19 +644,13 @@ export function setupGalleryView() {
const cardStack = document.createElement("div");
cardStackEl = cardStack;
Object.assign(cardStack.style, {
- flex: "1", overflowY: "visible", display: "flex", flexDirection: "column", paddingBottom: "28px"
+ flex: "1", overflowY: "visible", display: "flex", flexDirection: "column", paddingBottom: "46px"
});
container.appendChild(cardStack);
scrollToTopBtnEl = document.createElement("button");
scrollToTopBtnEl.className = "pi pi-chevron-up comfy-sidebar-scroll-top-btn";
scrollToTopBtnEl.title = t("Scroll to Top");
- Object.assign(scrollToTopBtnEl.style, {
- position: "sticky",
- bottom: "14px",
- marginLeft: "auto",
- zIndex: "30"
- });
scrollToTopBtnEl.onclick = (e) => {
e.stopPropagation();
const scrollEl = getScrollContainer(cardStackEl);
@@ -691,5 +693,8 @@ export function teardownGalleryView() {
stickyHeaderGroupEl = null;
galleryContainerEl = null;
cardStackEl = null;
+ if (scrollToTopBtnEl && scrollToTopBtnEl.parentNode) {
+ scrollToTopBtnEl.parentNode.removeChild(scrollToTopBtnEl);
+ }
scrollToTopBtnEl = null;
}
\ No newline at end of file
diff --git a/js/ui/sidebarView.js b/js/ui/sidebarView.js
index 1698e31..1172b53 100644
--- a/js/ui/sidebarView.js
+++ b/js/ui/sidebarView.js
@@ -336,7 +336,7 @@ export function setupSidebarView() {
overflowY: "visible",
display: "flex",
flexDirection: "column",
- paddingBottom: "28px"
+ paddingBottom: "46px"
});
container.appendChild(cardStack);
@@ -997,4 +997,8 @@ export function teardownSidebarView() {
renderAnimationFrameId = null;
}
cardPool.clear();
+ if (scrollToTopBtnEl && scrollToTopBtnEl.parentNode) {
+ scrollToTopBtnEl.parentNode.removeChild(scrollToTopBtnEl);
+ }
+ scrollToTopBtnEl = null;
}
\ No newline at end of file
diff --git a/js/utils/comparison.js b/js/utils/comparison.js
index b2c9f8d..ab50b92 100644
--- a/js/utils/comparison.js
+++ b/js/utils/comparison.js
@@ -328,6 +328,7 @@ function createAudioViewer(baseSrc, onSwitchMedia = () => {}, onDestroy = () =>
const createMediaElement = (src, muted = false) => {
const isVideo = isVideoFormat(src);
const el = isVideo ? document.createElement("video") : document.createElement("img");
+ el.className = "comfy-sidebar-comparison-media";
if (isVideo) {
el.muted = muted;
el.playsInline = true;
@@ -345,7 +346,10 @@ const createMediaElement = (src, muted = false) => {
pointerEvents: isVideo ? "none" : "auto",
userSelect: "none",
webkitUserSelect: "none",
- display: "block"
+ display: "block",
+ border: "none",
+ outline: "none",
+ boxShadow: "none"
});
el.draggable = false;
el.ondragstart = (e) => e.preventDefault();
@@ -576,21 +580,30 @@ function createComparisonViewer(baseSrc, onDestroy = () => {}) {
}
const slider = document.createElement("div");
+ slider.className = "comfy-sidebar-comparison-slider";
Object.assign(slider.style, {
position: "absolute", top: "0", bottom: "0", left: "50%",
- width: "2px", background: "#fff", cursor: "ew-resize",
+ width: "2px",
+ background: "var(--foreground, #ffffff)",
+ cursor: "ew-resize",
zIndex: "25", display: "none", pointerEvents: "auto",
- boxShadow: "0 0 8px rgba(0,0,0,0.5)"
+ boxShadow: "0 0 6px rgba(0,0,0,0.6)"
});
const sliderButton = document.createElement("div");
+ sliderButton.className = "comfy-sidebar-comparison-handle";
Object.assign(sliderButton.style, {
position: "absolute", top: "50%", left: "50%",
transform: "translate(-50%, -50%)", width: "32px", height: "32px",
- borderRadius: "50%", background: "#fff", color: "#333",
+ borderRadius: "50%",
+ background: "var(--card, var(--secondary, rgba(30, 30, 30, 0.9)))",
+ border: "1px solid var(--border, var(--border-color, rgba(255, 255, 255, 0.15)))",
+ color: "var(--foreground, #eee)",
display: "flex", alignItems: "center", justifyContent: "center",
- boxShadow: "0 2px 6px rgba(0,0,0,0.4)", pointerEvents: "auto"
+ boxShadow: "0 4px 12px rgba(0,0,0,0.5)", pointerEvents: "auto",
+ cursor: "ew-resize",
+ transition: "background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, color 0.15s ease-in-out"
});
- sliderButton.innerHTML = ``;
+ sliderButton.innerHTML = ``;
slider.appendChild(sliderButton);
wrapper.appendChild(slider);
diff --git a/js/utils/styles.js b/js/utils/styles.js
index f3cc90e..3c5937d 100644
--- a/js/utils/styles.js
+++ b/js/utils/styles.js
@@ -614,26 +614,58 @@ export function injectStyles() {
-webkit-backdrop-filter: blur(10px) !important;
}
- /* Round (X) Close Button across all preview overlays (matches button, div, or span) */
- body.comfy-sidebar-overlay-active [style*="50%"],
- .comfy-sidebar-comparison-overlay [style*="50%"],
- .comfy-sidebar-3d-overlay-root [style*="50%"],
- div[class*="sidebar-overlay"] [style*="50%"] {
- background: var(--card, var(--secondary, rgba(28, 28, 35, 0.9))) !important;
- border: 1px solid var(--border, var(--border-color, rgba(255, 255, 255, 0.2))) !important;
- color: var(--muted-foreground, #cbd5e1) !important;
- box-shadow: 0 4px 14px rgba(0, 0, 0, 0.5) !important;
+ /* Comparison Media: Ensures no borders or outlines appear on compared images */
+ .comfy-sidebar-comparison-media {
+ border: none !important;
+ outline: none !important;
+ box-shadow: none !important;
+ }
+
+ /* Comparison Slider Line & Handle */
+ .comfy-sidebar-comparison-slider {
+ background: var(--foreground, #ffffff) !important;
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.6) !important;
+ }
+
+ .comfy-sidebar-comparison-handle {
+ width: 32px !important;
+ height: 32px !important;
+ border-radius: 50% !important;
+ background: var(--card, var(--secondary, rgba(30, 30, 30, 0.9))) !important;
+ border: 1px solid var(--border, var(--border-color, rgba(255, 255, 255, 0.15))) !important;
+ color: var(--foreground, #eee) !important;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5) !important;
+ cursor: ew-resize !important;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, color 0.15s ease-in-out !important;
+ }
+
+ .comfy-sidebar-comparison-handle:hover {
+ background: var(--primary, var(--p-primary-color, #ea580c)) !important;
+ border-color: var(--primary, var(--p-primary-color, #ea580c)) !important;
+ color: #ffffff !important;
+ }
+
+ /* Round (X) Close Button across all preview overlays (matches buttons, ignores images/sliders) */
+ body.comfy-sidebar-overlay-active button[style*="50%"],
+ body.comfy-sidebar-overlay-active [style*="border-radius: 50%"]:not(img):not(video):not(.comfy-sidebar-comparison-handle):not(.comfy-sidebar-comparison-slider):not(.comfy-sidebar-comparison-media),
+ body.comfy-sidebar-overlay-active [style*="border-radius:50%"]:not(img):not(video):not(.comfy-sidebar-comparison-handle):not(.comfy-sidebar-comparison-slider):not(.comfy-sidebar-comparison-media),
+ .comfy-sidebar-comparison-overlay button[style*="50%"],
+ div[class*="sidebar-overlay"] button[style*="50%"] {
+ background: var(--card, var(--secondary, rgba(30, 30, 30, 0.9))) !important;
+ border: 1px solid var(--border, var(--border-color, rgba(255, 255, 255, 0.15))) !important;
+ color: var(--foreground, #eee) !important;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5) !important;
transition: all 0.15s ease-in-out !important;
}
- body.comfy-sidebar-overlay-active [style*="50%"]:hover,
- .comfy-sidebar-comparison-overlay [style*="50%"]:hover,
- .comfy-sidebar-3d-overlay-root [style*="50%"]:hover,
- div[class*="sidebar-overlay"] [style*="50%"]:hover {
+ body.comfy-sidebar-overlay-active button[style*="50%"]:hover,
+ body.comfy-sidebar-overlay-active [style*="border-radius: 50%"]:not(img):not(video):not(.comfy-sidebar-comparison-handle):not(.comfy-sidebar-comparison-slider):not(.comfy-sidebar-comparison-media):hover,
+ body.comfy-sidebar-overlay-active [style*="border-radius:50%"]:not(img):not(video):not(.comfy-sidebar-comparison-handle):not(.comfy-sidebar-comparison-slider):not(.comfy-sidebar-comparison-media):hover,
+ .comfy-sidebar-comparison-overlay button[style*="50%"]:hover,
+ div[class*="sidebar-overlay"] button[style*="50%"]:hover {
color: #ffffff !important;
border-color: var(--primary, var(--p-primary-color, #ea580c)) !important;
- background: color-mix(in srgb, var(--primary, var(--p-primary-color, #ea580c)) 25%, var(--card, var(--secondary, #222)) 75%) !important;
- transform: scale(1.08) !important;
+ background: var(--primary, var(--p-primary-color, #ea580c)) !important;
}
body.comfy-sidebar-overlay-active [style*="50%"] svg,