From 18ab8e92f1aa2f049427c67ef918453f85f75f7b Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 20:55:28 +0000 Subject: [PATCH] Animated bars, inline ProdCom timestamps, fullscreen auto-fit, dual resize corners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Title bars (tiles and the main menubar, which gains the same notch tab) now collapse and reopen with a height animation instead of popping. The menubar's hidden state persists per browser. ProdCom timestamps move inline to the right of the channel name, keeping their text style; the clock button toggles just their visibility. New fullscreen button (left of +): entering fullscreen auto-hides the menubar and auto-fits the layout — occupied columns stretch proportionally across the width, tiles whose bottom edge lands within two rows of the viewport bottom stretch to end exactly at it, small tiles (h ≤ 2) alone in their columns are exempt, and scrolling is disabled when nothing extends below the fold (deeper layouts keep natural rows and scrolling). All fullscreen fitting is visual-only and reverts on exit; editing affordances are parked while in it. Corner resize indicators now appear only on tile hover, and a second resize handle on the bottom-left corner resizes from that edge. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01RNYUv9EyrGSFmCnmH7WYKH --- modules/prodcom-transcript/client.js | 10 +- modules/prodcom-transcript/style.css | 17 ++- public/index.html | 9 ++ public/shell.js | 179 +++++++++++++++++++++++++-- public/style.css | 91 ++++++++++++-- 5 files changed, 278 insertions(+), 28 deletions(-) diff --git a/modules/prodcom-transcript/client.js b/modules/prodcom-transcript/client.js index f81590d..255f97f 100644 --- a/modules/prodcom-transcript/client.js +++ b/modules/prodcom-transcript/client.js @@ -296,11 +296,17 @@ export default function create({ root, moduleApi }) { const text = document.createElement('span'); text.className = 'text'; + // channel name with its timestamp to the right; the clock button + // only toggles the timestamp's visibility + const chLine = document.createElement('span'); + chLine.className = 'channel-line'; + chLine.append(ch, time); + const body = document.createElement('div'); body.className = 'body'; - body.append(ch, text); + body.append(chLine, text); - el.append(time, avatar, body); + el.append(avatar, body); entryEls.set(id, el); applyFilter(el); entriesEl.appendChild(el); diff --git a/modules/prodcom-transcript/style.css b/modules/prodcom-transcript/style.css index 4b84fad..58e2358 100644 --- a/modules/prodcom-transcript/style.css +++ b/modules/prodcom-transcript/style.css @@ -82,15 +82,24 @@ to { opacity: 1; transform: none; } } +[data-module="prodcom-transcript"] .channel-line { + display: flex; + align-items: baseline; + gap: 8px; + margin-bottom: 4px; + min-width: 0; +} + +/* timestamp sits to the right of the channel name; the clock button only + toggles its visibility */ [data-module="prodcom-transcript"] .pt-entry .time { display: none; color: var(--muted); font-size: 0.72em; font-variant-numeric: tabular-nums; flex: none; - padding-top: 3px; } -[data-module="prodcom-transcript"] .show-times .pt-entry .time { display: block; } +[data-module="prodcom-transcript"] .show-times .pt-entry .time { display: inline; } [data-module="prodcom-transcript"] .pt-entry .avatar { flex: none; @@ -114,7 +123,9 @@ letter-spacing: 0.01em; line-height: 1; white-space: nowrap; - margin-bottom: 4px; + overflow: hidden; + text-overflow: ellipsis; + min-width: 0; } [data-module="prodcom-transcript"] .pt-entry .text { diff --git a/public/index.html b/public/index.html index 71abe71..eab549b 100644 --- a/public/index.html +++ b/public/index.html @@ -19,6 +19,13 @@ + +