import { useCallback, useMemo, useState } from 'react'; import type { MouseEvent as ReactMouseEvent } from 'react'; import { useDeviceSettings } from '../../../hooks/useDeviceSettings'; import { useUiPreferences } from '../../../hooks/useUiPreferences'; import { useTheme } from '../../../contexts/ThemeContext'; import { useQuickSettingsDrag } from '../hooks/useQuickSettingsDrag'; import type { PreferenceToggleKey, QuickSettingsPreferences } from '../types'; import QuickSettingsContent from './QuickSettingsContent'; import QuickSettingsHandle from './QuickSettingsHandle'; import QuickSettingsPanelHeader from './QuickSettingsPanelHeader'; export default function QuickSettingsPanelView() { const [isOpen, setIsOpen] = useState(false); const { isMobile } = useDeviceSettings({ trackPWA: false }); const { isDarkMode } = useTheme(); const { preferences, setPreference } = useUiPreferences(); const { isDragging, handleStyle, startDrag, consumeSuppressedClick, } = useQuickSettingsDrag({ isMobile }); const quickSettingsPreferences = useMemo(() => ({ autoExpandTools: preferences.autoExpandTools, showRawParameters: preferences.showRawParameters, showThinking: preferences.showThinking, autoScrollToBottom: preferences.autoScrollToBottom, sendByCtrlEnter: preferences.sendByCtrlEnter, }), [ preferences.autoExpandTools, preferences.autoScrollToBottom, preferences.sendByCtrlEnter, preferences.showRawParameters, preferences.showThinking, ]); const handlePreferenceChange = useCallback( (key: PreferenceToggleKey, value: boolean) => { setPreference(key, value); }, [setPreference], ); const handleToggleFromHandle = useCallback( (event: ReactMouseEvent) => { // A drag releases a click event as well; this guard prevents accidental toggles. if (consumeSuppressedClick()) { event.preventDefault(); return; } setIsOpen((previous) => !previous); }, [consumeSuppressedClick], ); return ( <>
{isOpen && (
setIsOpen(false)} /> )} ); }