"use client"; import React, { useMemo } from "react"; import { Player } from "@remotion/player"; import { Sequence, AbsoluteFill, useCurrentFrame, useVideoConfig, interpolate } from "remotion"; import { Audio } from "@remotion/media"; import { FPS } from "@/lib/remotion/constants"; export interface CompiledSlide { component: React.ComponentType; title: string; code: string; durationInFrames: number; audioUrl?: string; } const WATERMARK_STYLES = { container: { position: "absolute" as const, bottom: 28, right: 36, display: "flex", alignItems: "center", gap: 8, padding: "6px 14px 6px 10px", borderRadius: 9999, background: "rgba(0, 0, 0, 0.35)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid rgba(255, 255, 255, 0.12)", boxShadow: "0 2px 8px rgba(0, 0, 0, 0.15)", pointerEvents: "none" as const, zIndex: 9999, }, logo: { width: 22, height: 22, filter: "brightness(0) invert(1)", }, text: { fontFamily: "Inter, system-ui, -apple-system, sans-serif", fontSize: 15, fontWeight: 600, color: "rgba(255, 255, 255, 0.95)", letterSpacing: "0.01em", lineHeight: 1, }, }; function Watermark() { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const opacity = interpolate(frame, [0, fps * 0.5], [0, 1], { extrapolateRight: "clamp", }); return (
{/* eslint-disable-next-line @next/next/no-img-element */} SurfSense
); } export function buildSlideWithWatermark( SlideComponent: React.ComponentType, ): React.FC { const Wrapped: React.FC = () => ( ); return Wrapped; } function CombinedComposition({ scenes }: { scenes: CompiledSlide[] }) { let offset = 0; return ( {scenes.map((scene, i) => { const from = offset; offset += scene.durationInFrames; return ( {scene.audioUrl && ); })} ); } export function buildCompositionComponent(slides: CompiledSlide[]): React.FC { const scenesSnapshot = [...slides]; const Comp: React.FC = () => ; return Comp; } interface CombinedPlayerProps { slides: CompiledSlide[]; } export function CombinedPlayer({ slides }: CombinedPlayerProps) { const CompositionWithScenes = useMemo(() => { const scenesSnapshot = [...slides]; const Comp: React.FC = () => ; return Comp; }, [slides]); const totalFrames = useMemo( () => slides.reduce((sum, s) => sum + s.durationInFrames, 0), [slides], ); return (
); }