import React, { useMemo, useState } from 'react'; import { useTheme } from '@renderer/hooks/useTheme'; import { cn } from '@renderer/lib/utils'; import { ChevronRight, Settings2 } from 'lucide-react'; interface OptionalSettingsSectionProps { title: string; description: string; summary?: string[]; defaultOpen?: boolean; className?: string; children: React.ReactNode; } export const OptionalSettingsSection = ({ title, description, summary = [], defaultOpen = false, className, children, }: OptionalSettingsSectionProps): React.JSX.Element => { const [isOpen, setIsOpen] = useState(defaultOpen); const { isLight } = useTheme(); const visibleSummary = useMemo( () => summary .map((item) => item.trim()) .filter(Boolean) .slice(0, 4), [summary] ); const containerBackground = isLight ? 'color-mix(in srgb, var(--color-surface-overlay) 30%, white 70%)' : 'var(--color-surface-overlay)'; const contentBackground = isLight ? 'color-mix(in srgb, var(--color-surface-overlay) 52%, white 48%)' : 'color-mix(in srgb, var(--color-surface-raised) 88%, black 12%)'; const headerTitleColor = isLight ? 'var(--color-text)' : 'color-mix(in srgb, var(--color-text) 82%, white 18%)'; const headerMutedColor = isLight ? 'color-mix(in srgb, var(--color-text-muted) 58%, var(--color-text) 42%)' : 'color-mix(in srgb, var(--color-text-muted) 52%, white 48%)'; const headerIconColor = isLight ? 'color-mix(in srgb, var(--color-text-muted) 64%, var(--color-text) 36%)' : 'color-mix(in srgb, var(--color-text-muted) 54%, white 46%)'; return (
{isOpen ? (
{children}
) : null}
); };