'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} ))}
)}
); }