From 56c31dcd1d76621c644c0fcb065163a6442487b6 Mon Sep 17 00:00:00 2001 From: richard-epsilla Date: Thu, 13 Aug 2026 01:42:31 -0700 Subject: [PATCH] fix(slides): the skeleton sat beside an empty rail, and My slides had a dead column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The skeleton rendered INSIDE the canvas, so the real rail stayed mounted next to it holding nothing — a wide white gutter, then a second rail of placeholder thumbs. With no deck there is nothing for the real rail to hold, so the skeleton now stands in for the whole body. Dropped the Access column from My slides. It rendered an em dash on every row because this build has no sharing and no collaborators: a column asking a question the product does not answer. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_013DCjqvx3L4VKAPnFaPe7YJ --- kits/slides/app/src/components/ChatPanel.jsx | 4 +-- kits/slides/app/src/pages/DeckPage.jsx | 34 +++++++++++--------- kits/slides/app/src/pages/Landing.jsx | 11 ++----- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/kits/slides/app/src/components/ChatPanel.jsx b/kits/slides/app/src/components/ChatPanel.jsx index b3e8a86..8facac8 100644 --- a/kits/slides/app/src/components/ChatPanel.jsx +++ b/kits/slides/app/src/components/ChatPanel.jsx @@ -52,8 +52,8 @@ function turnsToMessages(turns) { return m; } -export function ChatColumn({ deckId, seed, title, copilotBuilding, collapsed, onToggle, onDeckMaybeChanged, - onSessionStarted, width }) { +export function ChatColumn({ deckId, seed, template, title, copilotBuilding, collapsed, onToggle, + onDeckMaybeChanged, onSessionStarted, width }) { const [messages, setMessages] = useState([]); const [draft, setDraft] = useState(''); const [attaching, setAttaching] = useState(false); diff --git a/kits/slides/app/src/pages/DeckPage.jsx b/kits/slides/app/src/pages/DeckPage.jsx index f16d545..8ca1b8b 100644 --- a/kits/slides/app/src/pages/DeckPage.jsx +++ b/kits/slides/app/src/pages/DeckPage.jsx @@ -274,6 +274,13 @@ export function DeckPage({ id: routeId, seed, template }) { exporting={exporting} peers={collab.peers} live={collab.live} saveState={saveState} copilotBusy={copilotBusy} />
+ {/* No deck yet: the skeleton IS the body. Rendering it inside the canvas left + the real rail sitting empty beside it — two rails and a white gutter. */} + {!deck && (!noDeck || noDeck.working) ? ( + + ) : (<>
@@ -322,6 +325,7 @@ export function DeckPage({ id: routeId, seed, template }) { >> 0; return AV_COLORS[h % AV_COLORS.length]; } function initialOf(n) { return String(n || '?').trim().charAt(0).toUpperCase() || '?'; } -function AccessStack({ me }) { - if (!me?.id) return —; - const name = me.display_name || me.name || me.email || 'You'; - return {initialOf(name)}; -} - const VIEW_KEY = 'slides.decks.view'; export function LandingPage() { @@ -298,7 +292,7 @@ export function LandingPage() { )} {decks === null ? ( -
NameLast viewedAccess
+
NameLast viewed
) : decks.length === 0 ? (
No slides yet. Create a deck from the prompt above or pick a template.
) : deckMatches.length === 0 ? ( @@ -318,13 +312,12 @@ export function LandingPage() { ) : (
- + {deckMatches.map((d) => ( { if (editingId !== d.id) openDeck(d.id); }} onKeyDown={(e) => { if (e.key === 'Enter' && editingId !== d.id) openDeck(d.id); }}> - ))}
NameLast viewedAccess
NameLast viewed
{editingId === d.id ? renameField(d) : {d.name}} {relativeTime(viewed[d.id]) || '—'} {rowActions(d)}