diff --git a/AppImage/app/terminal/page.tsx b/AppImage/app/terminal/page.tsx
index 910bdb9..5830403 100644
--- a/AppImage/app/terminal/page.tsx
+++ b/AppImage/app/terminal/page.tsx
@@ -1,9 +1,16 @@
-"use client"
-
-import { TerminalPanel } from "@/components/terminal-panel"
+import dynamic from "next/dynamic"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { TerminalIcon } from "lucide-react"
+const TerminalPanel = dynamic(() => import("@/components/terminal-panel").then((mod) => mod.TerminalPanel), {
+ ssr: false,
+ loading: () => (
+
+ ),
+})
+
export default function TerminalPage() {
return (
diff --git a/AppImage/components/terminal-panel.tsx b/AppImage/components/terminal-panel.tsx
index 6168dc2..cae3bfb 100644
--- a/AppImage/components/terminal-panel.tsx
+++ b/AppImage/components/terminal-panel.tsx
@@ -2,9 +2,15 @@
import type React from "react"
import { useEffect, useRef } from "react"
-import { Terminal } from "xterm"
-import { FitAddon } from "xterm-addon-fit"
-import "xterm/css/xterm.css"
+
+let Terminal: any
+let FitAddon: any
+
+if (typeof window !== "undefined") {
+ Terminal = require("xterm").Terminal
+ FitAddon = require("xterm-addon-fit").FitAddon
+ require("xterm/css/xterm.css")
+}
type TerminalPanelProps = {
websocketUrl?: string // Custom WebSocket URL if needed
@@ -12,15 +18,15 @@ type TerminalPanelProps = {
export const TerminalPanel: React.FC
= ({ websocketUrl = "ws://localhost:8008/ws/terminal" }) => {
const containerRef = useRef(null)
- const termRef = useRef(null)
- const fitAddonRef = useRef(null)
+ const termRef = useRef(null)
+ const fitAddonRef = useRef(null)
const wsRef = useRef(null)
// For touch gestures
const touchStartRef = useRef<{ x: number; y: number; time: number } | null>(null)
useEffect(() => {
- if (!containerRef.current) return
+ if (!containerRef.current || !Terminal || !FitAddon) return
const term = new Terminal({
fontFamily: "monospace",