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) ? (
+
+ ) : (<>
{slides.map((s, i) => (
collab.setDrag(elId, frame, slide.id)}
peers={collab.peers}
/>
+ ) : deck ? (
+ This deck has no slides.
) : (
- deck ? (
- This deck has no slides.
- ) : noDeck && !noDeck.working ? (
-
-
{noDeck.text}
- {noDeck.detail &&
{noDeck.detail} }
-
- Ask the copilot again on the right — the conversation is still here.
-
+ // The only case left here: a turn finished without writing a deck. Its own last
+ // words are the only honest explanation we have.
+
+
{noDeck?.text}
+ {noDeck?.detail &&
{noDeck.detail} }
+
+ Ask the copilot again on the right — the conversation is still here.
- ) : (
- // Still coming: show the shape of a deck rather than a sentence in an empty pane.
-
- )
+
)}
+ >)}
@@ -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 ? (
-
+
) : 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() {
) : (
- Name Last viewed Access
+ Name Last viewed
{deckMatches.map((d) => (
{ if (editingId !== d.id) openDeck(d.id); }} onKeyDown={(e) => { if (e.key === 'Enter' && editingId !== d.id) openDeck(d.id); }}>
{editingId === d.id ? renameField(d) : {d.name} }
{relativeTime(viewed[d.id]) || '—'}
-
{rowActions(d)}
))}