"use client"; import { useMemo, useRef, useState } from "react"; import { useCopyToClipboard } from "react-use"; import { CopyIcon } from "lucide-react"; import { toast } from "sonner"; import classNames from "classnames"; import { editor } from "monaco-editor"; import Editor from "@monaco-editor/react"; import { useEditor } from "@/hooks/useEditor"; import { Header } from "@/components/editor/header"; import { useAi } from "@/hooks/useAi"; import { ListPages } from "./pages"; import { AskAi } from "./ask-ai"; import { Preview } from "./preview"; import Loading from "../loading"; export const AppEditor = ({ namespace, repoId, isNew = false, }: { namespace?: string; repoId?: string; isNew?: boolean; }) => { const { project, setPages, files, currentPageData, currentTab, currentCommit, } = useEditor(namespace, repoId); const { isAiWorking } = useAi(); const [, copyToClipboard] = useCopyToClipboard(); const monacoRef = useRef(null); const editor = useRef(null); const editorRef = useRef(null); return (
{ copyToClipboard(currentPageData.html); toast.success("HTML copied to clipboard!"); }} /> } className="h-full absolute left-0 top-0 lg:min-w-[600px]" options={{ colorDecorators: true, fontLigatures: true, theme: "vs-dark", minimap: { enabled: false }, scrollbar: { horizontal: "hidden", }, wordWrap: "on", readOnly: !!isAiWorking || !!currentCommit, readOnlyMessage: { value: currentCommit ? "You can't edit the code, as this is an old version of the project." : "Wait for DeepSite to finish working...", isTrusted: true, }, }} value={currentPageData.html} onChange={(value) => { const newValue = value ?? ""; setPages((prev) => prev.map((page) => page.path === currentPageData.path ? { ...page, html: newValue } : page ) ); }} onMount={(editor, monaco) => { editorRef.current = editor; monacoRef.current = monaco; }} /> { editorRef.current?.revealLine( editorRef.current?.getModel()?.getLineCount() ?? 0 ); }} />
); };