"use client"; import React from 'react'; import dynamic from 'next/dynamic'; import { useEditorStore } from '@/store/editor-store'; import { FileTabs } from './FileTabs'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { useAppStore } from '@/store/app-store'; import { CrossPlatformPreview } from './CrossPlatformPreview'; import { NexusSyncMonitor } from './NexusSyncMonitor'; const MonacoEditor = dynamic(() => import('@monaco-editor/react'), { ssr: false }); export function CodeEditor() { const { openFiles, activeFileId, updateFileContent, saveFile } = useEditorStore(); const { editorTab, setEditorTab } = useAppStore(); const activeFile = openFiles.find((f: any) => f.id === activeFileId); React.useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key === 's') { e.preventDefault(); if (activeFileId) { saveFile(activeFileId); } } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [activeFileId, saveFile]); if (!activeFile && editorTab === 'editor') { return (
📂

No file open

Select a file from the explorer to start editing

); } return (
setEditorTab(v as any)} className="flex-1 flex flex-col">
Editor Cross-Platform Preview Nexus Sync Monitor
{activeFile && (
updateFileContent(activeFile.id, value || '')} theme="vs-dark" options={{ minimap: { enabled: true }, fontSize: 14, lineNumbers: 'on', rulers: [80, 120], wordWrap: 'on', automaticLayout: true, tabSize: 2, insertSpaces: true, }} />
)}
); }