'use client' import { useState } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { ChevronDown, ChevronRight } from 'lucide-react' import { FMAssumption, Language } from '@/lib/types' interface FinancialSlidersProps { assumptions: FMAssumption[] onAssumptionChange: (key: string, value: number) => void lang: Language } function Slider({ assumption, onChange, lang, }: { assumption: FMAssumption onChange: (value: number) => void lang: Language }) { const value = typeof assumption.value === 'number' ? assumption.value : Number(assumption.value) const label = lang === 'de' ? assumption.label_de : assumption.label_en if (assumption.value_type === 'step') { // Display step values as read-only list const steps = Array.isArray(assumption.value) ? assumption.value : [] return (

{label}

{steps.map((s: number, i: number) => (

Y{i + 1}

{s}

))}
) } return (
{label} {value}{assumption.unit === 'EUR' ? ' EUR' : assumption.unit === '%' ? '%' : ` ${assumption.unit || ''}`}
onChange(parseFloat(e.target.value))} className="w-full h-1.5 bg-white/10 rounded-full appearance-none cursor-pointer [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-3.5 [&::-webkit-slider-thumb]:h-3.5 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-indigo-500 [&::-webkit-slider-thumb]:shadow-lg [&::-webkit-slider-thumb]:shadow-indigo-500/30 [&::-webkit-slider-thumb]:cursor-pointer " />
) } interface CategoryGroup { key: string label: string items: FMAssumption[] } export default function FinancialSliders({ assumptions, onAssumptionChange, lang }: FinancialSlidersProps) { const [openCategories, setOpenCategories] = useState>(new Set(['revenue'])) // Group assumptions by category const categories: CategoryGroup[] = [ { key: 'revenue', label: lang === 'de' ? 'Revenue' : 'Revenue', items: [] }, { key: 'costs', label: lang === 'de' ? 'Kosten' : 'Costs', items: [] }, { key: 'team', label: 'Team', items: [] }, { key: 'funding', label: 'Funding', items: [] }, ] for (const a of assumptions) { const cat = categories.find(c => c.key === a.category) || categories[0] cat.items.push(a) } const toggleCategory = (key: string) => { setOpenCategories(prev => { const next = new Set(prev) if (next.has(key)) next.delete(key) else next.add(key) return next }) } return (
{categories.filter(c => c.items.length > 0).map((cat) => { const isOpen = openCategories.has(cat.key) return (
{isOpen && (
{cat.items.map((a) => ( onAssumptionChange(a.key, val)} lang={lang} /> ))}
)}
) })}
) }