aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-06 03:40:16 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-06 03:40:16 +0200
commit37473b29c02f2dc70eb9ba46d596f503a01c5845 (patch)
tree3b2e95382c204fb9db8ebdfd74ac4fb49ebb8a24 /packages/meshbay-hub/src
parente2885fec8dcb3cd452899e2628d6e9ad5c70b01e (diff)
downloadmeshbay-37473b29c02f2dc70eb9ba46d596f503a01c5845.tar.gz
fix(node): inline @owner next to group name, fix buffering layout shift
Put the @owner handle on the same line as the group name (flex baseline) to save a row on mobile. Move the video buffering indicator inside the video-container as an absolute overlay so it no longer pushes the video down when it appears briefly during seeks. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/style.css14
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/video-player.js15
2 files changed, 16 insertions, 13 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/style.css b/packages/meshbay-hub/src/meshbay_hub/static/style.css
index bc4e093..c183d7e 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/style.css
+++ b/packages/meshbay-hub/src/meshbay_hub/static/style.css
@@ -1490,12 +1490,17 @@ button:disabled { opacity: 0.5; cursor: not-allowed; }
}
.video-loading {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
text-align: center;
color: #94a3b8;
+ pointer-events: none;
+ z-index: 1;
}
.video-loading-label {
- margin-bottom: 16px;
font-size: 0.95em;
}
@@ -2287,23 +2292,22 @@ a.transfer-name {
min-width: 0;
}
-/* Group name + its @owner handle, stacked. Names are unique only per owner
+/* Group name + its @owner handle, on one line. Names are unique only per owner
account, so the handle is what tells two "photos" groups apart. */
-.gn { display: block; min-width: 0; }
+.gn { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.gn-name {
- display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.gn-owner {
- display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.8em;
font-weight: 400;
color: var(--text-dim);
+ flex-shrink: 0;
}
h2 .gn-owner, h3 .gn-owner { font-size: 0.55em; }
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/video-player.js b/packages/meshbay-hub/src/meshbay_hub/static/video-player.js
index 0c0c6c7..4f8a4e4 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/video-player.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/video-player.js
@@ -1054,17 +1054,16 @@ function VideoPlayer({ entry, transportRef, gekRef, onClose, onDownload }) {
<${Icon} name="close" /></button>
</div>
- ${phase === 'loading' && html`
- <div class="video-loading">
- <div class="video-loading-label">
- <span class="spinner"></span>${' '}${t('video.buffering')}
- </div>
- </div>
- `}
-
${(phase === 'streaming' || phase === 'loading') && html`
<div class="video-container">
<video ref=${videoRef} controls autoplay />
+ ${phase === 'loading' && html`
+ <div class="video-loading">
+ <div class="video-loading-label">
+ <span class="spinner"></span>${' '}${t('video.buffering')}
+ </div>
+ </div>
+ `}
${resumedFrom > 0 && html`
<div class="video-resumed">
${t('video.resumed_at', { time: formatClock(resumedFrom) })}