SurfSense/surfsense_web/components/connectors-marketing/reveal.tsx
DESKTOP-RTLN3BA\$punk fb5b0da816 feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
  how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
  demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
  /<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
  (canonical route is [workspace_id])

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00

38 lines
865 B
TypeScript

"use client";
import { motion, useReducedMotion } from "motion/react";
import type { ReactNode } from "react";
const EASE_OUT: [number, number, number, number] = [0.16, 1, 0.3, 1];
/**
* One quiet scroll reveal per section: fade + small rise, triggered once when
* the block enters the viewport. Renders statically under prefers-reduced-motion.
*/
export function Reveal({
children,
className,
delay = 0,
}: {
children: ReactNode;
className?: string;
delay?: number;
}) {
const reduce = useReducedMotion() ?? false;
if (reduce) {
return <div className={className}>{children}</div>;
}
return (
<motion.div
className={className}
initial={{ opacity: 0, y: 12 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.2 }}
transition={{ duration: 0.28, ease: EASE_OUT, delay }}
>
{children}
</motion.div>
);
}