diff --git a/components/AIMode/AIModeOverlay.tsx b/components/AIMode/AIModeOverlay.tsx index c72baac15..b49391ec0 100644 --- a/components/AIMode/AIModeOverlay.tsx +++ b/components/AIMode/AIModeOverlay.tsx @@ -12,9 +12,8 @@ import { useAIMode } from './AIModeContext'; import { ChatPane } from './ChatPane'; import { ConversationList } from './ConversationList'; import { DocumentCard } from './DocumentCard'; -import { DocumentPane } from './DocumentPane'; +import { DocumentPane, type DocumentPaneView } from './DocumentPane'; import { useAIModeChat } from './useAIModeChat'; -import type { NotebookTab } from '@/components/Notebook/NotebookTabs'; import type { PublishingDefaultArticleType } from '@/contexts/PublishingHostContext'; import { useAIModeDocument } from './useAIModeDocument'; import { AI_MODE_NAME } from './copy'; @@ -92,8 +91,8 @@ export function AIModeOverlay() { anchor: 'left', }); // Document or details in the right pane; details wants a wider floor. - const [documentTab, setDocumentTab] = useState('document'); - const documentMinWidth = documentTab === 'details' ? DETAILS_MIN_WIDTH : DOCUMENT_MIN_WIDTH; + const [documentView, setDocumentView] = useState('document'); + const documentMinWidth = documentView === 'details' ? DETAILS_MIN_WIDTH : DOCUMENT_MIN_WIDTH; // The document may grow until the chat is down to its minimum column. const documentMaxWidth = Math.max( documentMinWidth, @@ -117,7 +116,7 @@ export function AIModeOverlay() { const [documentOpen, setDocumentOpen] = useState(false); useEffect(() => { setDocumentOpen(noteId != null && !isBelowTabletRef.current); - setDocumentTab('document'); + setDocumentView('document'); }, [noteId]); // What the conversation set out to write, from its opening message, so the @@ -132,6 +131,11 @@ export function AIModeOverlay() { const openDocument = useCallback(() => setDocumentOpen(true), []); const closeDocument = useCallback(() => setDocumentOpen(false), []); const showDocument = noteId != null && documentOpen; + const documentTitle = doc.content?.title?.trim() || state.note?.title?.trim() || 'Document'; + + // The document column puts its publish controls up in the header, where + // they read as the workspace's, not the pane's. It renders into this slot. + const [publishControlsSlot, setPublishControlsSlot] = useState(null); // The turn that created the document, for seating its card in the transcript. const documentCardExecutionId = useMemo(() => { @@ -151,7 +155,7 @@ export function AIModeOverlay() { const documentCard = noteId != null ? (