Files
breakpilot-core/pitch-deck/components/SlideOverview.tsx
T
Sharang Parnerkar be126a7a39
Build pitch-deck / build-push-deploy (push) Successful in 1m22s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 31s
CI / test-python-voice (push) Successful in 30s
CI / test-bqas (push) Successful in 31s
fix(pitch): showcase sidebar shows only filtered slides + AI presenter via FAB
NavigationFAB and SlideOverview now accept slideNames prop and render only the
active slide list (filtered for showcase mode). Adds AI presenter start button
to the FAB footer so it's accessible even when intro-presenter slide is hidden.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 22:50:33 +02:00

59 lines
1.9 KiB
TypeScript

'use client'
import { motion } from 'framer-motion'
import { Language } from '@/lib/types'
import { t } from '@/lib/i18n'
interface SlideOverviewProps {
currentIndex: number
onGoToSlide: (index: number) => void
onClose: () => void
lang: Language
slideNames?: string[]
}
export default function SlideOverview({ currentIndex, onGoToSlide, onClose, lang, slideNames: slideNamesProp }: SlideOverviewProps) {
const i = t(lang)
const activeSlideNames = slideNamesProp ?? i.slideNames
return (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
className="fixed inset-0 z-50 bg-black/90 backdrop-blur-sm flex items-center justify-center p-8"
onClick={onClose}
>
<motion.div
initial={{ scale: 0.9, opacity: 0 }}
animate={{ scale: 1, opacity: 1 }}
className="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3 max-w-5xl w-full"
onClick={(e) => e.stopPropagation()}
>
{activeSlideNames.map((name, idx) => (
<motion.button
key={idx}
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: idx * 0.03 }}
onClick={() => onGoToSlide(idx)}
className={`
aspect-video rounded-xl p-4 text-left
border transition-all
${idx === currentIndex
? 'bg-indigo-500/20 border-indigo-500 shadow-lg shadow-indigo-500/20'
: 'bg-white/[0.05] border-white/10 hover:bg-white/[0.1] hover:border-white/20'
}
`}
>
<span className="text-xs font-mono text-white/40 block mb-1">{idx + 1}</span>
<span className={`text-sm font-medium ${idx === currentIndex ? 'text-white' : 'text-white/70'}`}>
{name}
</span>
</motion.button>
))}
</motion.div>
</motion.div>
)
}