mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-01 19:42:03 +00:00
* feat(docs): add template gallery page with visual previews * fix(docs): remove invalid MDX heading anchors * chore: retrigger CI * feat(docs): merge gallery into templates page with hover-to-play video previews - Consolidated gallery.mdx and templates.mdx into single templates.mdx - Moved templates page to Getting Started section - Added MP4 video previews rendered by hyperframes (hover to play) - Custom JS for hover-to-play behavior (Mintlify strips JSX event handlers) - 2-column grid for landscape, 3-column for portrait - Remotion-style cards with gradient overlay labels * fix(docs): update broken links after templates page move * ci(regression): remove scripts/ from regression trigger paths scripts/ contains dev utilities (lint, versioning, preview generation) that don't affect the rendering engine.
60 lines
1.6 KiB
React
60 lines
1.6 KiB
React
export function TemplateCard({ id, title, description, href, portrait }) {
|
|
const [hovering, setHovering] = React.useState(false);
|
|
|
|
const imgSrc = `/images/templates/${id}.png`;
|
|
const videoSrc = `/images/templates/${id}.mp4`;
|
|
|
|
return (
|
|
<a
|
|
href={href}
|
|
className="not-prose group block rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden transition-shadow hover:shadow-lg no-underline"
|
|
onMouseEnter={() => setHovering(true)}
|
|
onMouseLeave={() => setHovering(false)}
|
|
>
|
|
<div
|
|
className="relative overflow-hidden bg-gray-100 dark:bg-gray-800"
|
|
style={{ aspectRatio: portrait ? "9/16" : "16/9" }}
|
|
>
|
|
<img
|
|
src={imgSrc}
|
|
alt={`${title} template`}
|
|
className="absolute inset-0 w-full h-full object-cover"
|
|
style={{
|
|
opacity: hovering ? 0 : 1,
|
|
transition: "opacity 0.2s ease",
|
|
}}
|
|
/>
|
|
{hovering && (
|
|
<video
|
|
src={videoSrc}
|
|
autoPlay
|
|
muted
|
|
loop
|
|
playsInline
|
|
className="absolute inset-0 w-full h-full object-cover"
|
|
/>
|
|
)}
|
|
</div>
|
|
<div className="p-4">
|
|
<h3 className="text-base font-semibold text-gray-900 dark:text-white m-0">
|
|
{title}
|
|
</h3>
|
|
<p className="text-sm text-gray-500 dark:text-gray-400 mt-1 mb-0">
|
|
{description}
|
|
</p>
|
|
</div>
|
|
</a>
|
|
);
|
|
}
|
|
|
|
export function TemplateGrid({ children }) {
|
|
return (
|
|
<div
|
|
className="not-prose grid gap-4"
|
|
style={{ gridTemplateColumns: "repeat(2, 1fr)" }}
|
|
>
|
|
{children}
|
|
</div>
|
|
);
|
|
}
|