import type { DocumentSlotState } from '../documents/useDocumentSlot'; import { DocumentPane } from './DocumentPane'; const DEFAULT_EMPTY_HINT = 'Select a file from the sidebar to open it here.'; type DocumentSlotViewProps = { state: DocumentSlotState; className?: string; placeholder?: string; emptyHint?: string; }; function SlotPlaceholder({ message }: { message: string }) { return (
{message}
); } /** * Renders a document slot's empty, loading, error, or open states. * Workspaces compose this inside their layout chrome. */ export function DocumentSlotView({ state, className, placeholder = 'Start writing…', emptyHint = DEFAULT_EMPTY_HINT, }: DocumentSlotViewProps) { if (state.kind === 'empty') { return ; } if (state.kind === 'loading') { return ; } if (state.kind === 'error') { return ( ); } return ( // Key by document id so switching tabs to a different document remounts a // fresh editor instead of reusing one bound to the previous document. The // shared editor view binds its content on mount only, so without this a // tab switch can leave the previous file's content showing. ); }