"use client" import { useEffect, useRef, useState } from "react" import { DrawIoEmbed } from "react-drawio" import type { ImperativePanelHandle } from "react-resizable-panels" import ChatPanel from "@/components/chat-panel" import { STORAGE_CLOSE_PROTECTION_KEY } from "@/components/settings-dialog" import { ResizableHandle, ResizablePanel, ResizablePanelGroup, } from "@/components/ui/resizable" import { useDiagram } from "@/contexts/diagram-context" export default function Home() { const { drawioRef, handleDiagramExport } = useDiagram() const [isMobile, setIsMobile] = useState(false) const [isChatVisible, setIsChatVisible] = useState(true) const [drawioUi, setDrawioUi] = useState<"min" | "sketch">(() => { if (typeof window !== "undefined") { const saved = localStorage.getItem("drawio-theme") if (saved === "min" || saved === "sketch") return saved } return "min" }) const [closeProtection, setCloseProtection] = useState(() => { if (typeof window !== "undefined") { const saved = localStorage.getItem(STORAGE_CLOSE_PROTECTION_KEY) return saved !== "false" // Default to true } return true }) const chatPanelRef = useRef(null) useEffect(() => { const checkMobile = () => { setIsMobile(window.innerWidth < 768) } checkMobile() window.addEventListener("resize", checkMobile) return () => window.removeEventListener("resize", checkMobile) }, []) const toggleChatPanel = () => { const panel = chatPanelRef.current if (panel) { if (panel.isCollapsed()) { panel.expand() setIsChatVisible(true) } else { panel.collapse() setIsChatVisible(false) } } } useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if ((event.ctrlKey || event.metaKey) && event.key === "b") { event.preventDefault() toggleChatPanel() } } window.addEventListener("keydown", handleKeyDown) return () => window.removeEventListener("keydown", handleKeyDown) }, []) // Show confirmation dialog when user tries to leave the page // This helps prevent accidental navigation from browser back gestures useEffect(() => { if (!closeProtection) return const handleBeforeUnload = (event: BeforeUnloadEvent) => { event.preventDefault() return "" } window.addEventListener("beforeunload", handleBeforeUnload) return () => window.removeEventListener("beforeunload", handleBeforeUnload) }, [closeProtection]) return (
{/* Draw.io Canvas */}
{/* Chat Panel */} setIsChatVisible(false)} onExpand={() => setIsChatVisible(true)} >
{ const newTheme = drawioUi === "min" ? "sketch" : "min" localStorage.setItem("drawio-theme", newTheme) setDrawioUi(newTheme) }} isMobile={isMobile} onCloseProtectionChange={setCloseProtection} />
) }