"use client";
import * as React from "react";
import Component, { type Props, type State } from "@/components/ui/directional-text-button";
const settings = { title: "Explore the project", showContext: true };
export const loopDuration = 6;
const ease = (x: number) => {
const n = Math.max(0, Math.min(1, x));
return n * n * (3 - 2 * n);
};
const pulse = (t: number, a: number, b: number) =>
ease((t - a) / 0.3) * (1 - ease((t - b) / 0.3));
// Pure timeline: export frame n by passing n / 60. No timers or network calls.
export function showcase(time: number): State {
const t = ((time % loopDuration) + loopDuration) % loopDuration;
return {
open: t > 0.8 && t < 3.8,
active: 0,
reveal: pulse(t, 0.8, 3.8),
};
}
export default function Demo(props: any = {}) {
const { showcaseTime, ...incoming } = props;
const merged = { ...settings, ...incoming };
return (
<div className="w-full min-h-[380px] flex items-center justify-center p-4 sm:p-6 bg-background">
<Component
{...merged}
state={showcaseTime === undefined ? incoming.state : showcase(showcaseTime)}
seeking={showcaseTime !== undefined || incoming.seeking}
/>
</div>
);
}