import type React from "react"; import { Img, interpolate, spring, staticFile, useCurrentFrame, useVideoConfig } from "remotion"; import { PhotoPlaceholder } from "@/components/PhotoPlaceholder"; import { COLOR } from "@/lib/colors"; import { FONT } from "@/lib/fonts"; import { SPRING } from "@/lib/motion"; const CATEGORY_COLORS = [ COLOR.category.essentials, COLOR.category.optimization, COLOR.category.adjustments, COLOR.category.ai, COLOR.category.watermark, COLOR.category.utilities, COLOR.category.layout, COLOR.category.format, ]; const TOOLBAR_ICONS = [ { id: "crop", width: 24, bg: "#d1d5db" }, { id: "resize", width: 24, bg: "#d1d5db" }, { id: "adjust", width: 24, bg: "#d1d5db" }, { id: "filter", width: 32, bg: "#d1d5db" }, { id: "export", width: 24, bg: "#d1d5db" }, ]; export const AppMockup: React.FC<{ startFrame: number; }> = ({ startFrame }) => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); /* Sidebar slides in from left */ const sidebarSpring = spring({ frame: frame - startFrame, fps, config: SPRING.snappy, }); const sidebarX = interpolate(sidebarSpring, [0, 1], [-240, 0]); /* Header slides down from top */ const headerSpring = spring({ frame: frame - (startFrame + 4), fps, config: SPRING.snappy, }); const headerY = interpolate(headerSpring, [0, 1], [-56, 0]); /* Center canvas fade in */ const canvasOpacity = interpolate(frame, [startFrame + 8, startFrame + 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp", }); /* Toolbar fade in */ const toolbarOpacity = interpolate(frame, [startFrame + 12, startFrame + 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp", }); return (
{/* Header bar */}
{/* Otter logo + name */} SnapOtter {/* Search bar placeholder */}
{/* Left sidebar */}
{CATEGORY_COLORS.map((color, i) => (
))}
{/* Center canvas area */}
{/* Photo placeholder */}
{/* Toolbar row */}
{TOOLBAR_ICONS.map((icon) => (
))}
); };