'use client';
/**
* DisplaySettings - Settings for search display and latency
* Following Liquid Glass design system
*/
import { useState } from 'react';
import { type SearchDisplayMode, type LocaleOption } from '@/lib/store/settings-store';
import { Switch } from '@/components/ui/Switch';
interface DisplaySettingsProps {
realtimeLatency: boolean;
searchDisplayMode: SearchDisplayMode;
rememberScrollPosition: boolean;
locale: LocaleOption;
blockedCategories: string[];
onRealtimeLatencyChange: (enabled: boolean) => void;
onSearchDisplayModeChange: (mode: SearchDisplayMode) => void;
onRememberScrollPositionChange: (enabled: boolean) => void;
onLocaleChange: (locale: LocaleOption) => void;
onBlockedCategoriesChange: (categories: string[]) => void;
}
export function DisplaySettings({
realtimeLatency,
searchDisplayMode,
rememberScrollPosition,
locale,
blockedCategories,
onRealtimeLatencyChange,
onSearchDisplayModeChange,
onRememberScrollPositionChange,
onLocaleChange,
onBlockedCategoriesChange,
}: DisplaySettingsProps) {
const [newCategory, setNewCategory] = useState('');
const addCategory = () => {
const trimmed = newCategory.trim();
if (!trimmed) return;
if (blockedCategories.includes(trimmed)) {
setNewCategory('');
return;
}
onBlockedCategoriesChange([...blockedCategories, trimmed]);
setNewCategory('');
};
const removeCategory = (cat: string) => {
onBlockedCategoriesChange(blockedCategories.filter(c => c !== cat));
};
return (
显示设置
{/* Remember Scroll Position Toggle */}
记住滚动位置
退出或刷新页面后,自动恢复到之前的滚动位置
{/* Real-time Latency Toggle */}
实时延迟显示
开启后,搜索结果中的延迟数值会每 5 秒更新一次
{/* Search Display Mode */}
搜索结果显示方式
选择搜索结果的展示模式
{/* Locale / Language Toggle */}
界面语言
切换界面显示的中文字体(简体/繁体)
{/* Blocked Categories */}
内容类目过滤
添加要从搜索结果中隐藏的类目关键词(如"伦理"),匹配的视频将不会显示
setNewCategory(e.target.value)}
onKeyDown={(e) => e.key === 'Enter' && addCategory()}
placeholder="输入类目关键词..."
className="flex-1 px-3 py-2 rounded-[var(--radius-2xl)] bg-[var(--glass-bg)] border border-[var(--glass-border)] text-sm text-[var(--text-color)] placeholder:text-[var(--text-color-secondary)] focus:outline-none focus:border-[var(--accent-color)]"
/>
{blockedCategories.length > 0 && (
{blockedCategories.map(cat => (
{cat}
))}
)}
);
}