"use client"; import { ScrollReveal } from "@/components/ScrollReveal"; import { useInView } from "@/hooks/useInView"; import { useMockupProgress } from "@/hooks/useMockupProgress"; function LayersIcon({ className }: { className?: string }) { return ( ); } function SlidersIcon({ className }: { className?: string }) { return ( ); } function CloudUploadIcon({ className }: { className?: string }) { return ( ); } function ImageIcon({ className }: { className?: string }) { return ( ); } function AudioIcon({ className }: { className?: string }) { return ( ); } const STEPS = [ { number: 1, title: "Single/Batch creation", desc: "One image, many audios, each becomes a separate video.", Icon: LayersIcon, }, { number: 2, title: "Per-video settings", desc: "Title, tags, privacy, and category for every upload.", Icon: SlidersIcon, }, { number: 3, title: "Direct upload", desc: "Connect YouTube once and publish automatically.", Icon: CloudUploadIcon, }, ] as const; function CheckIcon({ className }: { className?: string }) { return ( ); } function AppMockup() { const phaseOneMs = 3000; const phaseTwoMs = 2000; const initialWidth = "20%"; const midWidth = "45%"; const { ref, inView } = useInView(); const { phase, processed, transitionMs } = useMockupProgress(inView, phaseOneMs, phaseTwoMs); const width = phase === 0 ? initialWidth : phase === 1 ? midWidth : "100%"; return (
IMAGE
AUDIO

{processed ? ( "Processed" ) : ( <> Processing . . . )}

= 1 ? `width ${transitionMs}ms ease-out` : "none", }} > {!processed && ( )}
); } function StepCard({ number, title, desc, Icon, }: { number: number; title: string; desc: string; Icon: typeof LayersIcon; }) { return (

{title}

{desc}

); } export function StepsSection() { return (

Upload your content in 3 simple steps:

From a single track to a full batch, Songs2YT walks you through creating and publishing videos to YouTube without touching a video editor.

{STEPS.map((step, index) => ( ))}
); }