-
-
- )}
-
- );
- }
-);
+ dangerouslySetInnerHTML={{
+ __html: processTerminalContent(terminalContent),
+ }}
+ />
+
+
+
+ {isUserScrolling && !shouldAutoScroll && (
+
+
+
+ )}
+
+ );
+});
TerminalTab.displayName = 'TerminalTab';
diff --git a/src/components/screens/Interface/index.tsx b/src/components/screens/Interface/index.tsx
index 792948c..b640585 100644
--- a/src/components/screens/Interface/index.tsx
+++ b/src/components/screens/Interface/index.tsx
@@ -1,54 +1,22 @@
-import { useState, useCallback, useRef, useEffect, useMemo } from 'react';
+import { useRef, useEffect } from 'react';
import { ServerTab } from '@/components/screens/Interface/ServerTab';
import {
TerminalTab,
type TerminalTabRef,
} from '@/components/screens/Interface/TerminalTab';
-import { useLaunchConfigStore } from '@/stores/launchConfig';
-import { usePreferencesStore } from '@/stores/preferences';
-import { getDefaultInterfaceTab } from '@/utils/interface';
import type { InterfaceTab } from '@/types';
interface InterfaceScreenProps {
activeTab?: InterfaceTab | null;
- onTabChange?: (tab: InterfaceTab) => void;
+ isServerReady: boolean;
}
export const InterfaceScreen = ({
activeTab,
- onTabChange,
+ isServerReady,
}: InterfaceScreenProps) => {
- const [isServerReady, setIsServerReady] = useState(false);
const terminalTabRef = useRef
(null);
- const { isTextMode, isImageGenerationMode } = useLaunchConfigStore();
- const { frontendPreference, imageGenerationFrontendPreference } =
- usePreferencesStore();
-
- const defaultInterfaceTab = useMemo(
- () =>
- getDefaultInterfaceTab({
- frontendPreference,
- imageGenerationFrontendPreference,
- isTextMode,
- isImageGenerationMode,
- }),
- [
- frontendPreference,
- imageGenerationFrontendPreference,
- isTextMode,
- isImageGenerationMode,
- ]
- );
-
- const handleServerReady = useCallback(() => {
- setIsServerReady(true);
-
- if (onTabChange) {
- onTabChange(defaultInterfaceTab);
- }
- }, [onTabChange, defaultInterfaceTab]);
-
useEffect(() => {
if (activeTab === 'terminal' && terminalTabRef.current) {
terminalTabRef.current.scrollToBottom();
@@ -84,7 +52,7 @@ export const InterfaceScreen = ({
display: activeTab === 'terminal' ? 'block' : 'none',
}}
>
-
+
);
diff --git a/src/components/screens/Launch/AdvancedTab.tsx b/src/components/screens/Launch/AdvancedTab.tsx
index 9105d68..895eacd 100644
--- a/src/components/screens/Launch/AdvancedTab.tsx
+++ b/src/components/screens/Launch/AdvancedTab.tsx
@@ -13,7 +13,7 @@ import { Plus, Trash2 } from 'lucide-react';
import { InfoTooltip } from '@/components/InfoTooltip';
import { CheckboxWithTooltip } from '@/components/CheckboxWithTooltip';
import { CommandLineArgumentsModal } from '@/components/screens/Launch/CommandLineArgumentsModal';
-import { useLaunchConfig } from '@/hooks/useLaunchConfig';
+import { useLaunchConfigStore } from '@/stores/launchConfig';
export const AdvancedTab = () => {
const {
@@ -30,19 +30,19 @@ export const AdvancedTab = () => {
backend,
moecpu,
moeexperts,
- handleAdditionalArgumentsChange,
- handlePreLaunchCommandsChange,
- handleNoshiftChange,
- handleFlashattentionChange,
- handleNoavx2Change,
- handleFailsafeChange,
- handleLowvramChange,
- handleQuantmatmulChange,
- handleUsemmapChange,
- handleDebugmodeChange,
- handleMoecpuChange,
- handleMoeexpertsChange,
- } = useLaunchConfig();
+ setAdditionalArguments,
+ setPreLaunchCommands,
+ setNoshift,
+ setFlashattention,
+ setNoavx2,
+ setFailsafe,
+ setLowvram,
+ setQuantmatmul,
+ setUsemmap,
+ setDebugmode,
+ setMoecpu,
+ setMoeexperts,
+ } = useLaunchConfigStore();
const [commandLineModalOpen, setCommandLineModalOpen] = useState(false);
const [backendSupport, setBackendSupport] = useState<{
noavx2: boolean;
@@ -55,7 +55,7 @@ export const AdvancedTab = () => {
const updatedArgs = currentArgs
? `${currentArgs} ${newArgument}`
: newArgument;
- handleAdditionalArgumentsChange(updatedArgs);
+ setAdditionalArguments(updatedArgs);
};
const isGpuBackend = backend === 'cuda' || backend === 'rocm';
@@ -86,21 +86,21 @@ export const AdvancedTab = () => {